mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
Merge branch 'refactor/move_etm_retention_to_driver_layer' into 'master'
refactor(etm): move ETM retention info from HAL to driver layer See merge request espressif/esp-idf!50669
This commit is contained in:
@@ -112,6 +112,9 @@ if(NOT non_os_build)
|
|||||||
|
|
||||||
if(CONFIG_SOC_ETM_SUPPORTED)
|
if(CONFIG_SOC_ETM_SUPPORTED)
|
||||||
list(APPEND srcs "etm/esp_etm.c")
|
list(APPEND srcs "etm/esp_etm.c")
|
||||||
|
if(CONFIG_SOC_PAU_SUPPORTED)
|
||||||
|
list(APPEND srcs "port/${target}/etm_retention.c")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CONFIG_SOC_PAU_SUPPORTED)
|
if(CONFIG_SOC_PAU_SUPPORTED)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "hal/etm_periph.h"
|
#include "etm_retention.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "esp_check.h"
|
#include "esp_check.h"
|
||||||
#include "esp_heap_caps.h"
|
#include "esp_heap_caps.h"
|
||||||
|
|||||||
+1
-3
@@ -9,11 +9,9 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "soc/soc_caps.h"
|
#include "soc/soc_caps.h"
|
||||||
#include "soc/regdma.h"
|
#include "soc/regdma.h"
|
||||||
|
|
||||||
#if SOC_HAS(ETM)
|
#if SOC_HAS(ETM)
|
||||||
#include "hal/etm_ll.h"
|
#include "hal/etm_ll.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if SOC_HAS(PAU)
|
#if SOC_HAS(PAU)
|
||||||
#include "soc/retention_periph_defs.h"
|
#include "soc/retention_periph_defs.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -22,7 +20,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if SOC_HAS(PAU) && SOC_ETM_SUPPORT_SLEEP_RETENTION
|
#if SOC_HAS(PAU)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
periph_retention_module_t module; // ID of the ETM as a retention module
|
periph_retention_module_t module; // ID of the ETM as a retention module
|
||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hal/etm_periph.h"
|
#include "etm_retention.h"
|
||||||
#include "soc/soc_etm_reg.h"
|
#include "soc/soc_etm_reg.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hal/etm_periph.h"
|
#include "etm_retention.h"
|
||||||
#include "soc/soc_etm_reg.h"
|
#include "soc/soc_etm_reg.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hal/etm_periph.h"
|
#include "etm_retention.h"
|
||||||
#include "soc/soc_etm_reg.h"
|
#include "soc/soc_etm_reg.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hal/etm_periph.h"
|
#include "etm_retention.h"
|
||||||
#include "soc/soc_etm_reg.h"
|
#include "soc/soc_etm_reg.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
+4
-4
@@ -4,7 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hal/etm_periph.h"
|
#include "etm_retention.h"
|
||||||
#include "soc/soc_etm_reg.h"
|
#include "soc/soc_etm_reg.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -19,19 +19,19 @@ static const regdma_entries_config_t etm_regdma_entries[] = {
|
|||||||
[0] = {
|
[0] = {
|
||||||
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00),
|
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00),
|
||||||
SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0),
|
SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0),
|
||||||
.owner = ENTRY(0) | ENTRY(2),
|
.owner = ENTRY(0),
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01),
|
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01),
|
||||||
SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0),
|
SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0),
|
||||||
.owner = ENTRY(0) | ENTRY(2),
|
.owner = ENTRY(0),
|
||||||
},
|
},
|
||||||
// backup stage: save configuration registers
|
// backup stage: save configuration registers
|
||||||
// restore stage: restore the configuration registers
|
// restore stage: restore the configuration registers
|
||||||
[2] = {
|
[2] = {
|
||||||
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02),
|
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02),
|
||||||
SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0),
|
SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0),
|
||||||
.owner = ENTRY(0) | ENTRY(2),
|
.owner = ENTRY(0),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "etm_retention.h"
|
||||||
|
#include "soc/soc_etm_reg.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ETM Registers to be saved during sleep retention
|
||||||
|
* - Channel configuration registers, e.g.: SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_TASK_ID_REG
|
||||||
|
*/
|
||||||
|
#define ETM_RETENTION_REGS_CNT ((SOC_ETM_CH49_TASK_ID_REG - SOC_ETM_CH0_EVT_ID_REG) / 4 + 1)
|
||||||
|
|
||||||
|
static const regdma_entries_config_t etm_regdma_entries[] = {
|
||||||
|
// backup stage: save the status of enabled channels
|
||||||
|
// restore stage: store the enabled channels
|
||||||
|
[0] = {
|
||||||
|
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00),
|
||||||
|
SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0),
|
||||||
|
.owner = ENTRY(0) | ENTRY(2),
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01),
|
||||||
|
SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0),
|
||||||
|
.owner = ENTRY(0) | ENTRY(2),
|
||||||
|
},
|
||||||
|
// backup stage: save configuration registers
|
||||||
|
// restore stage: restore the configuration registers
|
||||||
|
[2] = {
|
||||||
|
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02),
|
||||||
|
SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0),
|
||||||
|
.owner = ENTRY(0) | ENTRY(2),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const soc_etm_retention_desc_t soc_etm_retention_info[1] = {
|
||||||
|
[0] = {
|
||||||
|
.module = SLEEP_RETENTION_MODULE_ETM0,
|
||||||
|
.regdma_entry_array = etm_regdma_entries,
|
||||||
|
.array_size = ARRAY_SIZE(etm_regdma_entries)
|
||||||
|
},
|
||||||
|
};
|
||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hal/etm_periph.h"
|
#include "etm_retention.h"
|
||||||
#include "soc/soc_etm_reg.h"
|
#include "soc/soc_etm_reg.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "etm_retention.h"
|
||||||
|
#include "soc/soc_etm_reg.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ETM Registers to be saved during sleep retention
|
||||||
|
* - Channel configuration registers, e.g.: SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_TASK_ID_REG
|
||||||
|
*/
|
||||||
|
#define ETM_RETENTION_REGS_CNT ((SOC_ETM_CH49_TASK_ID_REG - SOC_ETM_CH0_EVT_ID_REG) / 4 + 1)
|
||||||
|
|
||||||
|
static const regdma_entries_config_t etm_regdma_entries[] = {
|
||||||
|
// backup stage: save the status of enabled channels
|
||||||
|
// restore stage: store the enabled channels
|
||||||
|
[0] = {
|
||||||
|
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00),
|
||||||
|
SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0),
|
||||||
|
.owner = ENTRY(0) | ENTRY(2),
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01),
|
||||||
|
SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0),
|
||||||
|
.owner = ENTRY(0) | ENTRY(2),
|
||||||
|
},
|
||||||
|
// backup stage: save configuration registers
|
||||||
|
// restore stage: restore the configuration registers
|
||||||
|
[2] = {
|
||||||
|
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02),
|
||||||
|
SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0),
|
||||||
|
.owner = ENTRY(0) | ENTRY(2),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const soc_etm_retention_desc_t soc_etm_retention_info[1] = {
|
||||||
|
[0] = {
|
||||||
|
.module = SLEEP_RETENTION_MODULE_ETM0,
|
||||||
|
.regdma_entry_array = etm_regdma_entries,
|
||||||
|
.array_size = ARRAY_SIZE(etm_regdma_entries)
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "unity.h"
|
#include "unity.h"
|
||||||
#include "esp_etm.h"
|
#include "esp_etm.h"
|
||||||
#include "hal/etm_periph.h"
|
#include "hal/etm_ll.h"
|
||||||
|
|
||||||
TEST_CASE("etm_channel_install_uninstall", "[etm]")
|
TEST_CASE("etm_channel_install_uninstall", "[etm]")
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ if(NOT esp_tee_build AND NOT BOOTLOADER_BUILD)
|
|||||||
list(APPEND srcs "color_hal.c")
|
list(APPEND srcs "color_hal.c")
|
||||||
|
|
||||||
if(CONFIG_SOC_ETM_SUPPORTED)
|
if(CONFIG_SOC_ETM_SUPPORTED)
|
||||||
list(APPEND srcs "etm_hal.c" "${target}/etm_periph.c")
|
list(APPEND srcs "etm_hal.c")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CONFIG_SOC_MODEM_CLOCK_IS_INDEPENDENT AND CONFIG_SOC_MODEM_CLOCK_SUPPORTED)
|
if(CONFIG_SOC_MODEM_CLOCK_IS_INDEPENDENT AND CONFIG_SOC_MODEM_CLOCK_SUPPORTED)
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "hal/etm_periph.h"
|
|
||||||
#include "soc/soc_etm_reg.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ETM Registers to be saved during sleep retention
|
|
||||||
* - Channel configuration registers, e.g.: SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_TASK_ID_REG
|
|
||||||
*/
|
|
||||||
#define ETM_RETENTION_REGS_CNT ((SOC_ETM_CH49_TASK_ID_REG - SOC_ETM_CH0_EVT_ID_REG) / 4 + 1)
|
|
||||||
|
|
||||||
static const regdma_entries_config_t etm_regdma_entries[] = {
|
|
||||||
// backup stage: save the status of enabled channels
|
|
||||||
// restore stage: store the enabled channels
|
|
||||||
[0] = {
|
|
||||||
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00),
|
|
||||||
SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0),
|
|
||||||
.owner = ENTRY(0) | ENTRY(2),
|
|
||||||
},
|
|
||||||
[1] = {
|
|
||||||
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01),
|
|
||||||
SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0),
|
|
||||||
.owner = ENTRY(0) | ENTRY(2),
|
|
||||||
},
|
|
||||||
// backup stage: save configuration registers
|
|
||||||
// restore stage: restore the configuration registers
|
|
||||||
[2] = {
|
|
||||||
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02),
|
|
||||||
SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0),
|
|
||||||
.owner = ENTRY(0) | ENTRY(2),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const soc_etm_retention_desc_t soc_etm_retention_info[1] = {
|
|
||||||
[0] = {
|
|
||||||
.module = SLEEP_RETENTION_MODULE_ETM0,
|
|
||||||
.regdma_entry_array = etm_regdma_entries,
|
|
||||||
.array_size = ARRAY_SIZE(etm_regdma_entries)
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "hal/etm_periph.h"
|
|
||||||
#include "soc/soc_etm_reg.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ETM Registers to be saved during sleep retention
|
|
||||||
* - Channel configuration registers, e.g.: SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_TASK_ID_REG
|
|
||||||
*/
|
|
||||||
#define ETM_RETENTION_REGS_CNT ((SOC_ETM_CH49_TASK_ID_REG - SOC_ETM_CH0_EVT_ID_REG) / 4 + 1)
|
|
||||||
|
|
||||||
static const regdma_entries_config_t etm_regdma_entries[] = {
|
|
||||||
// backup stage: save the status of enabled channels
|
|
||||||
// restore stage: store the enabled channels
|
|
||||||
[0] = {
|
|
||||||
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00),
|
|
||||||
SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0),
|
|
||||||
.owner = ENTRY(0) | ENTRY(2),
|
|
||||||
},
|
|
||||||
[1] = {
|
|
||||||
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01),
|
|
||||||
SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0),
|
|
||||||
.owner = ENTRY(0) | ENTRY(2),
|
|
||||||
},
|
|
||||||
// backup stage: save configuration registers
|
|
||||||
// restore stage: restore the configuration registers
|
|
||||||
[2] = {
|
|
||||||
.config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02),
|
|
||||||
SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0),
|
|
||||||
.owner = ENTRY(0) | ENTRY(2),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const soc_etm_retention_desc_t soc_etm_retention_info[1] = {
|
|
||||||
[0] = {
|
|
||||||
.module = SLEEP_RETENTION_MODULE_ETM0,
|
|
||||||
.regdma_entry_array = etm_regdma_entries,
|
|
||||||
.array_size = ARRAY_SIZE(etm_regdma_entries)
|
|
||||||
},
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user