mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	refactor(esp_phy): refactor phy sleep data initialize, split it to support multiple targets
This commit is contained in:
		@@ -5,7 +5,10 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "sdkconfig.h"
 | 
					#include "sdkconfig.h"
 | 
				
			||||||
 | 
					#include "soc/soc_caps.h"
 | 
				
			||||||
#include "phy_init_data.h"
 | 
					#include "phy_init_data.h"
 | 
				
			||||||
 | 
					#include "esp_private/phy.h"
 | 
				
			||||||
 | 
					#include "esp_check.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char __attribute__((section(".rodata"))) phy_init_magic_pre[] = PHY_INIT_MAGIC;
 | 
					const char __attribute__((section(".rodata"))) phy_init_magic_pre[] = PHY_INIT_MAGIC;
 | 
				
			||||||
@@ -273,3 +276,69 @@ const esp_phy_init_data_t phy_init_data= { {
 | 
				
			|||||||
} };
 | 
					} };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC;
 | 
					const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "esp_private/sleep_retention.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char* TAG = "phy_sleep";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static esp_err_t sleep_retention_wifi_bb_init(void *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_AGC()       (126)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_TX()        (20)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_NRX()       (141)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_BB()        (63)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_BRX()       (39)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_FE_COEX()   (19)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_FE_DATA()   (31)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_FE_CTRL()   (55)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const static sleep_retention_entries_config_t bb_regs_retention[] = {
 | 
				
			||||||
 | 
					        [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b00, 0x600a7000, 0x600a7000, N_REGS_WIFI_AGC(),     0, 0), .owner = BIT(0) | BIT(1) }, /* AGC */
 | 
				
			||||||
 | 
					        [1] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b01, 0x600a7400, 0x600a7400, N_REGS_WIFI_TX(),      0, 0), .owner = BIT(0) | BIT(1) }, /* TX */
 | 
				
			||||||
 | 
					        [2] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b02, 0x600a7800, 0x600a7800, N_REGS_WIFI_NRX(),     0, 0), .owner = BIT(0) | BIT(1) }, /* NRX */
 | 
				
			||||||
 | 
					        [3] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b03, 0x600a7c00, 0x600a7c00, N_REGS_WIFI_BB(),      0, 0), .owner = BIT(0) | BIT(1) }, /* BB */
 | 
				
			||||||
 | 
					        [4] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b05, 0x600a0000, 0x600a0000, N_REGS_WIFI_FE_COEX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE COEX */
 | 
				
			||||||
 | 
					        [5] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b06, 0x600a8000, 0x600a8000, N_REGS_WIFI_BRX(),     0, 0), .owner = BIT(0) | BIT(1) }, /* BRX */
 | 
				
			||||||
 | 
					        [6] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b07, 0x600a0400, 0x600a0400, N_REGS_WIFI_FE_DATA(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE DATA */
 | 
				
			||||||
 | 
					        [7] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b08, 0x600a0800, 0x600a0800, N_REGS_WIFI_FE_CTRL(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE CTRL */
 | 
				
			||||||
 | 
					        [8] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b09, 0x600a0c00, 0x600a0c00, 20,                0, 0), .owner = BIT(0) | BIT(1) }  /* FE WIFI DATA */
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    esp_err_t err = sleep_retention_entries_create(bb_regs_retention, ARRAY_SIZE(bb_regs_retention), 3, SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for modem (%s) retention", "WiFi BB");
 | 
				
			||||||
 | 
					    ESP_LOGD(TAG, "WiFi BB sleep retention initialization");
 | 
				
			||||||
 | 
					    return ESP_OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void esp_phy_sleep_data_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    sleep_retention_module_init_param_t init_param = {
 | 
				
			||||||
 | 
					        .cbs     = { .create = { .handle = sleep_retention_wifi_bb_init, .arg = NULL } },
 | 
				
			||||||
 | 
					        .depends = RETENTION_MODULE_BITMAP_INIT(CLOCK_MODEM)
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_WIFI_BB, &init_param);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "WiFi BB sleep retention init failed");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "failed to allocate sleep retention linked list for wifi bb retention");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void esp_phy_sleep_data_deinit(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    esp_err_t err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "failed to free sleep retention linked list for wifi bb retention");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,10 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "sdkconfig.h"
 | 
					#include "sdkconfig.h"
 | 
				
			||||||
 | 
					#include "soc/soc_caps.h"
 | 
				
			||||||
#include "phy_init_data.h"
 | 
					#include "phy_init_data.h"
 | 
				
			||||||
 | 
					#include "esp_private/phy.h"
 | 
				
			||||||
 | 
					#include "esp_check.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char __attribute__((section(".rodata"))) phy_init_magic_pre[] = PHY_INIT_MAGIC;
 | 
					const char __attribute__((section(".rodata"))) phy_init_magic_pre[] = PHY_INIT_MAGIC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -144,3 +147,63 @@ const esp_phy_init_data_t phy_init_data= { {
 | 
				
			|||||||
} };
 | 
					} };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC;
 | 
					const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "esp_private/sleep_retention.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char* TAG = "phy_sleep";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static esp_err_t sleep_retention_wifi_bb_init(void *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_AGC()       (121)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_TX()        (14)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_NRX()       (136)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_BB()        (53)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_BRX()       (39)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_FE_COEX()   (58)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const static sleep_retention_entries_config_t bb_regs_retention[] = {
 | 
				
			||||||
 | 
					        [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b00, 0x600a7000, 0x600a7000, N_REGS_WIFI_AGC(),     0, 0), .owner = BIT(0) | BIT(1) }, /* AGC */
 | 
				
			||||||
 | 
					        [1] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b01, 0x600a7400, 0x600a7400, N_REGS_WIFI_TX(),      0, 0), .owner = BIT(0) | BIT(1) }, /* TX */
 | 
				
			||||||
 | 
					        [2] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b02, 0x600a7800, 0x600a7800, N_REGS_WIFI_NRX(),     0, 0), .owner = BIT(0) | BIT(1) }, /* NRX */
 | 
				
			||||||
 | 
					        [3] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b03, 0x600a7c00, 0x600a7c00, N_REGS_WIFI_BB(),      0, 0), .owner = BIT(0) | BIT(1) }, /* BB */
 | 
				
			||||||
 | 
					        [4] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b05, 0x600a0000, 0x600a0000, N_REGS_WIFI_FE_COEX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE COEX */
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    esp_err_t err = sleep_retention_entries_create(bb_regs_retention, ARRAY_SIZE(bb_regs_retention), 3, SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for modem (%s) retention", "WiFi BB");
 | 
				
			||||||
 | 
					    ESP_LOGD(TAG, "WiFi BB sleep retention initialization");
 | 
				
			||||||
 | 
					    return ESP_OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void esp_phy_sleep_data_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    sleep_retention_module_init_param_t init_param = {
 | 
				
			||||||
 | 
					        .cbs     = { .create = { .handle = sleep_retention_wifi_bb_init, .arg = NULL } },
 | 
				
			||||||
 | 
					        .depends = RETENTION_MODULE_BITMAP_INIT(CLOCK_MODEM)
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_WIFI_BB, &init_param);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "WiFi BB sleep retention init failed");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "failed to allocate sleep retention linked list for wifi bb retention");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void esp_phy_sleep_data_deinit(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    esp_err_t err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "failed to free sleep retention linked list for wifi bb retention");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,10 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "sdkconfig.h"
 | 
					#include "sdkconfig.h"
 | 
				
			||||||
 | 
					#include "soc/soc_caps.h"
 | 
				
			||||||
#include "phy_init_data.h"
 | 
					#include "phy_init_data.h"
 | 
				
			||||||
 | 
					#include "esp_private/phy.h"
 | 
				
			||||||
 | 
					#include "esp_check.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char __attribute__((section(".rodata"))) phy_init_magic_pre[] = PHY_INIT_MAGIC;
 | 
					const char __attribute__((section(".rodata"))) phy_init_magic_pre[] = PHY_INIT_MAGIC;
 | 
				
			||||||
@@ -145,3 +148,68 @@ const esp_phy_init_data_t phy_init_data= { {
 | 
				
			|||||||
} };
 | 
					} };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC;
 | 
					const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "esp_private/sleep_retention.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char* TAG = "phy_sleep";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static esp_err_t sleep_retention_wifi_bb_init(void *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_AGC()       (121)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_TX()        (14)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_NRX()       (136)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_BB()        (53)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_BRX()       (39)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_FE_COEX()   (58)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_FE_DATA()   (41)
 | 
				
			||||||
 | 
					    #define N_REGS_WIFI_FE_CTRL()   (87)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const static sleep_retention_entries_config_t bb_regs_retention[] = {
 | 
				
			||||||
 | 
					        [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b00, 0x600a7000, 0x600a7000, N_REGS_WIFI_AGC(),     0, 0), .owner = BIT(0) | BIT(1) }, /* AGC */
 | 
				
			||||||
 | 
					        [1] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b01, 0x600a7400, 0x600a7400, N_REGS_WIFI_TX(),      0, 0), .owner = BIT(0) | BIT(1) }, /* TX */
 | 
				
			||||||
 | 
					        [2] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b02, 0x600a7800, 0x600a7800, N_REGS_WIFI_NRX(),     0, 0), .owner = BIT(0) | BIT(1) }, /* NRX */
 | 
				
			||||||
 | 
					        [3] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b03, 0x600a7c00, 0x600a7c00, N_REGS_WIFI_BB(),      0, 0), .owner = BIT(0) | BIT(1) }, /* BB */
 | 
				
			||||||
 | 
					        [4] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b05, 0x600a0000, 0x600a0000, N_REGS_WIFI_FE_COEX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE COEX */
 | 
				
			||||||
 | 
					        [5] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b06, 0x600a8000, 0x600a8000, N_REGS_WIFI_BRX(),     0, 0), .owner = BIT(0) | BIT(1) }, /* BRX */
 | 
				
			||||||
 | 
					        [6] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b07, 0x600a0400, 0x600a0400, N_REGS_WIFI_FE_DATA(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE DATA */
 | 
				
			||||||
 | 
					        [7] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b08, 0x600a0800, 0x600a0800, N_REGS_WIFI_FE_CTRL(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE CTRL */
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    esp_err_t err = sleep_retention_entries_create(bb_regs_retention, ARRAY_SIZE(bb_regs_retention), 3, SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for modem (%s) retention", "WiFi BB");
 | 
				
			||||||
 | 
					    ESP_LOGD(TAG, "WiFi BB sleep retention initialization");
 | 
				
			||||||
 | 
					    return ESP_OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void esp_phy_sleep_data_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    sleep_retention_module_init_param_t init_param = {
 | 
				
			||||||
 | 
					        .cbs     = { .create = { .handle = sleep_retention_wifi_bb_init, .arg = NULL } },
 | 
				
			||||||
 | 
					        .depends = RETENTION_MODULE_BITMAP_INIT(CLOCK_MODEM)
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_WIFI_BB, &init_param);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "WiFi BB sleep retention init failed");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "failed to allocate sleep retention linked list for wifi bb retention");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void esp_phy_sleep_data_deinit(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    esp_err_t err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "failed to free sleep retention linked list for wifi bb retention");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@
 | 
				
			|||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
#include "sdkconfig.h"
 | 
					#include "sdkconfig.h"
 | 
				
			||||||
#include "esp_phy_init.h"
 | 
					#include "esp_phy_init.h"
 | 
				
			||||||
 | 
					#include "soc/soc_caps.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
extern "C" {
 | 
					extern "C" {
 | 
				
			||||||
@@ -242,6 +243,18 @@ uint32_t phy_ana_i2c_master_burst_rf_onoff(bool on);
 | 
				
			|||||||
void phy_wakeup_from_modem_state_extra_init(void);
 | 
					void phy_wakeup_from_modem_state_extra_init(void);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief PHY module sleep data (includes AGC, TX, NRX, BB, FE, etc..) initialize.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void esp_phy_sleep_data_init(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief PHY module sleep data de-initialize.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void esp_phy_sleep_data_deinit(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,10 +50,6 @@
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
#include "hal/efuse_hal.h"
 | 
					#include "hal/efuse_hal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if SOC_PM_MODEM_RETENTION_BY_REGDMA
 | 
					 | 
				
			||||||
#include "esp_private/sleep_retention.h"
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if CONFIG_IDF_TARGET_ESP32
 | 
					#if CONFIG_IDF_TARGET_ESP32
 | 
				
			||||||
extern wifi_mac_time_update_cb_t s_wifi_mac_time_update_cb;
 | 
					extern wifi_mac_time_update_cb_t s_wifi_mac_time_update_cb;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -484,48 +480,6 @@ static uint32_t* s_mac_bb_pd_mem = NULL;
 | 
				
			|||||||
static uint8_t s_macbb_backup_mem_ref = 0;
 | 
					static uint8_t s_macbb_backup_mem_ref = 0;
 | 
				
			||||||
/* Reference of powering down MAC and BB */
 | 
					/* Reference of powering down MAC and BB */
 | 
				
			||||||
static bool s_mac_bb_pu = true;
 | 
					static bool s_mac_bb_pu = true;
 | 
				
			||||||
#elif SOC_PM_MODEM_RETENTION_BY_REGDMA
 | 
					 | 
				
			||||||
static esp_err_t sleep_retention_wifi_bb_init(void *arg)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_AGC()       (121)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_TX()        (14)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_NRX()       (136)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_BB()        (53)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_BRX()       (39)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_FE_COEX()   (58)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_FE_DATA()   (41)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_FE_CTRL()   (87)
 | 
					 | 
				
			||||||
#elif CONFIG_IDF_TARGET_ESP32C5
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_AGC()       (126)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_TX()        (20)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_NRX()       (141)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_BB()        (63)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_BRX()       (39)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_FE_COEX()   (19)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_FE_DATA()   (31)
 | 
					 | 
				
			||||||
    #define N_REGS_WIFI_FE_CTRL()   (55)
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    const static sleep_retention_entries_config_t bb_regs_retention[] = {
 | 
					 | 
				
			||||||
        [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b00, 0x600a7000, 0x600a7000, N_REGS_WIFI_AGC(),     0, 0), .owner = BIT(0) | BIT(1) }, /* AGC */
 | 
					 | 
				
			||||||
        [1] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b01, 0x600a7400, 0x600a7400, N_REGS_WIFI_TX(),      0, 0), .owner = BIT(0) | BIT(1) }, /* TX */
 | 
					 | 
				
			||||||
        [2] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b02, 0x600a7800, 0x600a7800, N_REGS_WIFI_NRX(),     0, 0), .owner = BIT(0) | BIT(1) }, /* NRX */
 | 
					 | 
				
			||||||
        [3] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b03, 0x600a7c00, 0x600a7c00, N_REGS_WIFI_BB(),      0, 0), .owner = BIT(0) | BIT(1) }, /* BB */
 | 
					 | 
				
			||||||
        [4] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b05, 0x600a0000, 0x600a0000, N_REGS_WIFI_FE_COEX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE COEX */
 | 
					 | 
				
			||||||
#ifndef SOC_PM_RETENTION_HAS_CLOCK_BUG
 | 
					 | 
				
			||||||
        [5] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b06, 0x600a8000, 0x600a8000, N_REGS_WIFI_BRX(),     0, 0), .owner = BIT(0) | BIT(1) }, /* BRX */
 | 
					 | 
				
			||||||
        [6] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b07, 0x600a0400, 0x600a0400, N_REGS_WIFI_FE_DATA(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE DATA */
 | 
					 | 
				
			||||||
        [7] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b08, 0x600a0800, 0x600a0800, N_REGS_WIFI_FE_CTRL(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE CTRL */
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#if CONFIG_IDF_TARGET_ESP32C5
 | 
					 | 
				
			||||||
        [8] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b09, 0x600a0c00, 0x600a0c00, 20,                0, 0), .owner = BIT(0) | BIT(1) }  /* FE WIFI DATA */
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    esp_err_t err = sleep_retention_entries_create(bb_regs_retention, ARRAY_SIZE(bb_regs_retention), 3, SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
					 | 
				
			||||||
    ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for modem (%s) retention", "WiFi BB");
 | 
					 | 
				
			||||||
    ESP_LOGD(TAG, "WiFi BB sleep retention initialization");
 | 
					 | 
				
			||||||
    return ESP_OK;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
 | 
					#endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void esp_mac_bb_pd_mem_init(void)
 | 
					void esp_mac_bb_pd_mem_init(void)
 | 
				
			||||||
@@ -538,19 +492,7 @@ void esp_mac_bb_pd_mem_init(void)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    _lock_release(&s_phy_access_lock);
 | 
					    _lock_release(&s_phy_access_lock);
 | 
				
			||||||
#elif SOC_PM_MODEM_RETENTION_BY_REGDMA
 | 
					#elif SOC_PM_MODEM_RETENTION_BY_REGDMA
 | 
				
			||||||
    sleep_retention_module_init_param_t init_param = {
 | 
					    esp_phy_sleep_data_init();
 | 
				
			||||||
        .cbs     = { .create = { .handle = sleep_retention_wifi_bb_init, .arg = NULL } },
 | 
					 | 
				
			||||||
        .depends = RETENTION_MODULE_BITMAP_INIT(CLOCK_MODEM)
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_WIFI_BB, &init_param);
 | 
					 | 
				
			||||||
    if (err != ESP_OK) {
 | 
					 | 
				
			||||||
        ESP_LOGW(TAG, "WiFi BB sleep retention init failed");
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
					 | 
				
			||||||
    if (err != ESP_OK) {
 | 
					 | 
				
			||||||
        ESP_LOGW(TAG, "failed to allocate sleep retention linked list for wifi bb retention");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -565,15 +507,7 @@ void esp_mac_bb_pd_mem_deinit(void)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    _lock_release(&s_phy_access_lock);
 | 
					    _lock_release(&s_phy_access_lock);
 | 
				
			||||||
#elif SOC_PM_MODEM_RETENTION_BY_REGDMA
 | 
					#elif SOC_PM_MODEM_RETENTION_BY_REGDMA
 | 
				
			||||||
    esp_err_t err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
					    esp_phy_sleep_data_deinit();
 | 
				
			||||||
    if (err != ESP_OK) {
 | 
					 | 
				
			||||||
        ESP_LOGW(TAG, "failed to free sleep retention linked list for wifi bb retention");
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_WIFI_BB);
 | 
					 | 
				
			||||||
    if (err != ESP_OK) {
 | 
					 | 
				
			||||||
        ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user