mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-30 19:19:21 +00:00
feat(parlio): support sleep retention
This commit is contained in:
@@ -1287,6 +1287,10 @@ config SOC_PARLIO_TX_SIZE_BY_DMA
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PARLIO_SUPPORT_SLEEP_RETENTION
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_MPI_MEM_BLOCKS_NUM
|
||||
int
|
||||
default 4
|
||||
|
@@ -25,22 +25,21 @@ typedef enum periph_retention_module {
|
||||
SLEEP_RETENTION_MODULE_TG1_WDT = 4,
|
||||
SLEEP_RETENTION_MODULE_TG0_TIMER = 5,
|
||||
SLEEP_RETENTION_MODULE_TG1_TIMER = 6,
|
||||
/* MISC Peripherals */
|
||||
SLEEP_RETENTION_MODULE_UART0 = 7,
|
||||
SLEEP_RETENTION_MODULE_UART1 = 8,
|
||||
SLEEP_RETENTION_MODULE_UART2 = 9,
|
||||
SLEEP_RETENTION_MODULE_UART3 = 10,
|
||||
SLEEP_RETENTION_MODULE_UART4 = 11,
|
||||
SLEEP_RETENTION_MODULE_RMT0 = 12,
|
||||
/* AHB_DMA by channel */
|
||||
SLEEP_RETENTION_MODULE_AHB_DMA_CH0 = 13,
|
||||
SLEEP_RETENTION_MODULE_AHB_DMA_CH1 = 14,
|
||||
SLEEP_RETENTION_MODULE_AHB_DMA_CH2 = 15,
|
||||
SLEEP_RETENTION_MODULE_AHB_DMA_CH0 = 7,
|
||||
SLEEP_RETENTION_MODULE_AHB_DMA_CH1 = 8,
|
||||
SLEEP_RETENTION_MODULE_AHB_DMA_CH2 = 9,
|
||||
/* AXI_DMA by channel */
|
||||
SLEEP_RETENTION_MODULE_AXI_DMA_CH0 = 16,
|
||||
SLEEP_RETENTION_MODULE_AXI_DMA_CH1 = 17,
|
||||
SLEEP_RETENTION_MODULE_AXI_DMA_CH2 = 18,
|
||||
|
||||
SLEEP_RETENTION_MODULE_AXI_DMA_CH0 = 10,
|
||||
SLEEP_RETENTION_MODULE_AXI_DMA_CH1 = 11,
|
||||
SLEEP_RETENTION_MODULE_AXI_DMA_CH2 = 12,
|
||||
/* MISC Peripherals */
|
||||
SLEEP_RETENTION_MODULE_UART0 = 13,
|
||||
SLEEP_RETENTION_MODULE_UART1 = 14,
|
||||
SLEEP_RETENTION_MODULE_UART2 = 15,
|
||||
SLEEP_RETENTION_MODULE_UART3 = 16,
|
||||
SLEEP_RETENTION_MODULE_UART4 = 17,
|
||||
SLEEP_RETENTION_MODULE_RMT0 = 18,
|
||||
SLEEP_RETENTION_MODULE_I2S0 = 19,
|
||||
SLEEP_RETENTION_MODULE_I2S1 = 20,
|
||||
SLEEP_RETENTION_MODULE_I2S2 = 21,
|
||||
@@ -50,6 +49,7 @@ typedef enum periph_retention_module {
|
||||
SLEEP_RETENTION_MODULE_TWAI0 = 25,
|
||||
SLEEP_RETENTION_MODULE_TWAI1 = 26,
|
||||
SLEEP_RETENTION_MODULE_TWAI2 = 27,
|
||||
SLEEP_RETENTION_MODULE_PARLIO0 = 28,
|
||||
|
||||
SLEEP_RETENTION_MODULE_MAX = 31
|
||||
} periph_retention_module_t;
|
||||
@@ -89,6 +89,7 @@ typedef enum periph_retention_module_bitmap {
|
||||
SLEEP_RETENTION_MODULE_BM_TWAI0 = BIT(SLEEP_RETENTION_MODULE_TWAI0),
|
||||
SLEEP_RETENTION_MODULE_BM_TWAI1 = BIT(SLEEP_RETENTION_MODULE_TWAI1),
|
||||
SLEEP_RETENTION_MODULE_BM_TWAI2 = BIT(SLEEP_RETENTION_MODULE_TWAI2),
|
||||
SLEEP_RETENTION_MODULE_BM_PARLIO0 = BIT(SLEEP_RETENTION_MODULE_PARLIO0),
|
||||
|
||||
SLEEP_RETENTION_MODULE_BM_ALL = (uint32_t)-1
|
||||
} periph_retention_module_bitmap_t;
|
||||
@@ -114,11 +115,12 @@ typedef enum periph_retention_module_bitmap {
|
||||
| SLEEP_RETENTION_MODULE_BM_I2S1 \
|
||||
| SLEEP_RETENTION_MODULE_BM_I2S2 \
|
||||
| SLEEP_RETENTION_MODULE_BM_ETM0 \
|
||||
| SLEEP_RETENTION_MODULE_BM_I2C0 \
|
||||
| SLEEP_RETENTION_MODULE_BM_I2C1 \
|
||||
| SLEEP_RETENTION_MODULE_BM_TWAI0 \
|
||||
| SLEEP_RETENTION_MODULE_BM_TWAI1 \
|
||||
| SLEEP_RETENTION_MODULE_BM_TWAI2 \
|
||||
| SLEEP_RETENTION_MODULE_BM_I2C0 \
|
||||
| SLEEP_RETENTION_MODULE_BM_I2C1 \
|
||||
| SLEEP_RETENTION_MODULE_BM_TWAI0 \
|
||||
| SLEEP_RETENTION_MODULE_BM_TWAI1 \
|
||||
| SLEEP_RETENTION_MODULE_BM_TWAI2 \
|
||||
| SLEEP_RETENTION_MODULE_BM_PARLIO0 \
|
||||
)
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@@ -465,6 +465,7 @@
|
||||
#define SOC_PARLIO_RX_CLK_SUPPORT_OUTPUT 1 /*!< Support output RX clock to a GPIO */
|
||||
#define SOC_PARLIO_TRANS_BIT_ALIGN 1 /*!< Support bit alignment in transaction */
|
||||
#define SOC_PARLIO_TX_SIZE_BY_DMA 1 /*!< Transaction length is controlled by DMA instead of indicated by register */
|
||||
#define SOC_PARLIO_SUPPORT_SLEEP_RETENTION 1 /*!< Support back up registers before sleep */
|
||||
|
||||
/*--------------------------- MPI CAPS ---------------------------------------*/
|
||||
#define SOC_MPI_MEM_BLOCKS_NUM (4)
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -64,3 +64,31 @@ const parlio_signal_conn_t parlio_periph_signals = {
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* PARLIO Registers to be saved during sleep retention
|
||||
* - Tx Configuration registers, e.g.: PARL_IO_TX_DATA_CFG_REG, PARL_IO_TX_GENRL_CFG_REG
|
||||
* - Rx Configuration registers, e.g.: PARL_IO_RX_MODE_CFG_REG, PARL_IO_RX_DATA_CFG_REG, PARL_IO_RX_GENRL_CFG_REG
|
||||
* - CLK Configuration registers, e.g.: PARL_IO_RX_CLK_CFG_REG, PARL_IO_TX_CLK_CFG_REG
|
||||
* - Interrupt enable registers, e.g.: PARL_IO_INT_ENA_REG
|
||||
*/
|
||||
#define PARLIO_RETENTION_REGS_CNT 8
|
||||
#define PARLIO_RETENTION_REGS_BASE (DR_REG_PARL_IO_BASE + 0x0)
|
||||
static const uint32_t parlio_regs_map[4] = {0x60457, 0x0, 0x0, 0x0};
|
||||
static const regdma_entries_config_t parlio_regs_retention[] = {
|
||||
// backup stage: save configuration registers
|
||||
// restore stage: restore the configuration registers
|
||||
[0] = { .config = REGDMA_LINK_ADDR_MAP_INIT(REGDMA_PARLIO_LINK(0x00),
|
||||
PARLIO_RETENTION_REGS_BASE, PARLIO_RETENTION_REGS_BASE,
|
||||
PARLIO_RETENTION_REGS_CNT, 0, 0,
|
||||
parlio_regs_map[0], parlio_regs_map[1],
|
||||
parlio_regs_map[2], parlio_regs_map[3]),
|
||||
.owner = ENTRY(0)},
|
||||
};
|
||||
const parlio_reg_retention_info_t parlio_reg_retention_info[SOC_PARLIO_GROUPS] = {
|
||||
[0] = {
|
||||
.regdma_entry_array = parlio_regs_retention,
|
||||
.array_size = ARRAY_SIZE(parlio_regs_retention),
|
||||
.retention_module = SLEEP_RETENTION_MODULE_PARLIO0
|
||||
},
|
||||
};
|
||||
|
Reference in New Issue
Block a user