mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-01 18:50:34 +03:00
feat(pau): added etm regdma related api
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -222,6 +222,21 @@ static inline void pau_ll_set_regdma_link_wait_read_interval(int interval)
|
||||
HAL_FORCE_MODIFY_U32_REG_FIELD(LP_AON.backup_dma_cfg0, aon_read_interval_aon, interval);
|
||||
}
|
||||
|
||||
static inline void pau_ll_select_regdma_etm_entry_link0(pau_dev_t *dev, int link)
|
||||
{
|
||||
dev->regdma_etm_ctrl.etm_link_sel_0 &= ~0xF;
|
||||
dev->regdma_etm_ctrl.etm_link_sel_0 |= (link & 0xF);
|
||||
}
|
||||
|
||||
static inline void pau_ll_set_regdma_etm_entry_link0_backup_direction(pau_dev_t *dev, bool to_mem)
|
||||
{
|
||||
if (to_mem) {
|
||||
dev->regdma_etm_ctrl.etm_link_sel_0 |= BIT(4);
|
||||
} else {
|
||||
dev->regdma_etm_ctrl.etm_link_sel_0 &= ~BIT(4);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -90,3 +90,16 @@ void pau_hal_set_regdma_wait_timeout(pau_hal_context_t *hal, int count, int inte
|
||||
pau_ll_set_regdma_link_wait_retry_count(count);
|
||||
pau_ll_set_regdma_link_wait_read_interval(interval);
|
||||
}
|
||||
|
||||
void IRAM_ATTR pau_hal_set_etm_modem_link_config(pau_hal_context_t *hal)
|
||||
{
|
||||
pau_ll_clear_regdma_backup_done_intr_state(hal->dev);
|
||||
pau_ll_select_regdma_etm_entry_link0(hal->dev, SOC_PM_PAU_REGDMA_LINK_IDX_PHY);
|
||||
pau_ll_set_regdma_etm_entry_link0_backup_direction(hal->dev, false);
|
||||
}
|
||||
|
||||
void IRAM_ATTR pau_hal_stop_etm_modem_link(pau_hal_context_t *hal)
|
||||
{
|
||||
pau_ll_select_regdma_etm_entry_link0(hal->dev, 0); /* restore link select to default */
|
||||
pau_ll_clear_regdma_backup_done_intr_state(hal->dev);
|
||||
}
|
||||
|
||||
@@ -124,6 +124,21 @@ static inline void pau_ll_clear_regdma_backup_error_intr_state(pau_dev_t *dev)
|
||||
dev->int_clr.error_int_clr = 1;
|
||||
}
|
||||
|
||||
static inline void pau_ll_select_regdma_etm_entry_link0(pau_dev_t *dev, int link)
|
||||
{
|
||||
dev->regdma_etm_ctrl.etm_link_sel_0 &= ~0x7;
|
||||
dev->regdma_etm_ctrl.etm_link_sel_0 |= (link & 0x7);
|
||||
}
|
||||
|
||||
static inline void pau_ll_set_regdma_etm_entry_link0_backup_direction(pau_dev_t *dev, bool to_mem)
|
||||
{
|
||||
if (to_mem) {
|
||||
dev->regdma_etm_ctrl.etm_link_sel_0 |= BIT(3);
|
||||
} else {
|
||||
dev->regdma_etm_ctrl.etm_link_sel_0 &= ~BIT(3);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -109,3 +109,16 @@ void pau_hal_set_regdma_wait_timeout(pau_hal_context_t *hal, int count, int inte
|
||||
lp_sys_ll_set_pau_link_wait_tout_thres(count);
|
||||
lp_sys_ll_set_pau_reg_read_interval(interval);
|
||||
}
|
||||
|
||||
void IRAM_ATTR pau_hal_set_etm_modem_link_config(pau_hal_context_t *hal)
|
||||
{
|
||||
pau_ll_clear_regdma_backup_done_intr_state(hal->dev);
|
||||
pau_ll_select_regdma_etm_entry_link0(hal->dev, SOC_PM_PAU_REGDMA_LINK_IDX_PHY);
|
||||
pau_ll_set_regdma_etm_entry_link0_backup_direction(hal->dev, false);
|
||||
}
|
||||
|
||||
void IRAM_ATTR pau_hal_stop_etm_modem_link(pau_hal_context_t *hal)
|
||||
{
|
||||
pau_ll_select_regdma_etm_entry_link0(hal->dev, 0); /* restore link select to default */
|
||||
pau_ll_clear_regdma_backup_done_intr_state(hal->dev);
|
||||
}
|
||||
|
||||
@@ -213,6 +213,22 @@ void pau_hal_set_regdma_wait_timeout(pau_hal_context_t *hal, int count, int inte
|
||||
void pau_hal_lp_sys_initialize(void);
|
||||
#endif
|
||||
|
||||
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
|
||||
/**
|
||||
* @brief Set the configuration of the REGDMA etm modem link
|
||||
*
|
||||
* @param hal regdma hal context
|
||||
*/
|
||||
void pau_hal_set_etm_modem_link_config(pau_hal_context_t *hal);
|
||||
|
||||
/**
|
||||
* @brief Stop transmission on REGDMA etm modem link
|
||||
*
|
||||
* @param hal regdma hal context
|
||||
*/
|
||||
void pau_hal_stop_etm_modem_link(pau_hal_context_t *hal);
|
||||
#endif // SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -157,6 +157,23 @@ void pau_regdma_register_modem_link_protect(pau_regdma_modem_link_protect_cb_t c
|
||||
void pau_regdma_unregister_modem_link_protect(void);
|
||||
#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT
|
||||
|
||||
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
|
||||
/**
|
||||
* @brief Wait for REGDMA to complete
|
||||
*/
|
||||
void pau_regdma_wait_done(void);
|
||||
|
||||
/**
|
||||
* @brief Set the configuration of the REGDMA etm modem link
|
||||
*/
|
||||
void pau_regdma_set_etm_modem_link_config(void);
|
||||
|
||||
/**
|
||||
* @brief Stop transmission on REGDMA etm modem link
|
||||
*/
|
||||
void pau_regdma_stop_etm_modem_link(void);
|
||||
#endif // SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -234,3 +234,20 @@ bool IRAM_ATTR pau_regdma_enable_aon_link_entry(bool enable)
|
||||
return origin_bypass_en;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
|
||||
void IRAM_ATTR pau_regdma_set_etm_modem_link_config(void)
|
||||
{
|
||||
pau_hal_set_etm_modem_link_config(PAU_instance()->hal);
|
||||
}
|
||||
|
||||
void IRAM_ATTR pau_regdma_stop_etm_modem_link(void)
|
||||
{
|
||||
pau_hal_stop_etm_modem_link(PAU_instance()->hal);
|
||||
}
|
||||
|
||||
void IRAM_ATTR pau_regdma_wait_done(void)
|
||||
{
|
||||
pau_hal_regdma_wait_done(PAU_instance()->hal);
|
||||
}
|
||||
#endif // SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
|
||||
|
||||
Reference in New Issue
Block a user