Explorar el Código

Merge branch 'bugfix/fix_failure_of_wifi_channel_configuration' into 'master'

phy: only set phy_init_flag at power domain off, when all modems deinit

Closes WIFI-4983

See merge request espressif/esp-idf!21235
Jiang Jiang Jian hace 3 años
padre
commit
09231b4fa2

+ 2 - 2
components/bt/controller/esp32/bt.c

@@ -1479,7 +1479,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
         goto error;
         goto error;
     }
     }
 
 
-    esp_phy_pd_mem_init();
+    esp_phy_modem_init();
 
 
     esp_bt_power_domain_on();
     esp_bt_power_domain_on();
 
 
@@ -1641,7 +1641,7 @@ esp_err_t esp_bt_controller_deinit(void)
 
 
     esp_bt_power_domain_off();
     esp_bt_power_domain_off();
 
 
-    esp_phy_pd_mem_deinit();
+    esp_phy_modem_deinit();
 
 
     return ESP_OK;
     return ESP_OK;
 }
 }

+ 2 - 2
components/bt/controller/esp32c2/bt.c

@@ -696,7 +696,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
     /* Initialize default event queue */
     /* Initialize default event queue */
     ble_npl_eventq_init(nimble_port_get_dflt_eventq());
     ble_npl_eventq_init(nimble_port_get_dflt_eventq());
 #endif
 #endif
-    esp_phy_pd_mem_init();
+    esp_phy_modem_init();
     periph_module_enable(PERIPH_BT_MODULE);
     periph_module_enable(PERIPH_BT_MODULE);
 
 
     // init phy
     // init phy
@@ -777,7 +777,7 @@ esp_err_t esp_bt_controller_deinit(void)
 
 
     npl_freertos_mempool_deinit();
     npl_freertos_mempool_deinit();
 
 
-    esp_phy_pd_mem_deinit();
+    esp_phy_modem_deinit();
 
 
     ble_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
     ble_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
 
 

+ 2 - 7
components/bt/controller/esp32c3/bt.c

@@ -1094,7 +1094,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
 #if CONFIG_MAC_BB_PD
 #if CONFIG_MAC_BB_PD
     esp_mac_bb_pd_mem_init();
     esp_mac_bb_pd_mem_init();
 #endif
 #endif
-    esp_phy_pd_mem_init();
+    esp_phy_modem_init();
     esp_bt_power_domain_on();
     esp_bt_power_domain_on();
 
 
     btdm_controller_mem_init();
     btdm_controller_mem_init();
@@ -1411,16 +1411,11 @@ esp_err_t esp_bt_controller_deinit(void)
     esp_unregister_mac_bb_pu_callback(btdm_mac_bb_power_up_cb);
     esp_unregister_mac_bb_pu_callback(btdm_mac_bb_power_up_cb);
 #endif
 #endif
 
 
-    /* Fix the issue caused by the power off the bt power domain.
-     * This issue is only on ESP32C3.
-     */
-    phy_init_flag();
-
     esp_bt_power_domain_off();
     esp_bt_power_domain_off();
 #if CONFIG_MAC_BB_PD
 #if CONFIG_MAC_BB_PD
     esp_mac_bb_pd_mem_deinit();
     esp_mac_bb_pd_mem_deinit();
 #endif
 #endif
-    esp_phy_pd_mem_deinit();
+    esp_phy_modem_deinit();
 
 
     free(osi_funcs_p);
     free(osi_funcs_p);
     osi_funcs_p = NULL;
     osi_funcs_p = NULL;

+ 2 - 2
components/bt/controller/esp32s3/bt.c

@@ -1140,7 +1140,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
 #if CONFIG_MAC_BB_PD
 #if CONFIG_MAC_BB_PD
     esp_mac_bb_pd_mem_init();
     esp_mac_bb_pd_mem_init();
 #endif
 #endif
-    esp_phy_pd_mem_init();
+    esp_phy_modem_init();
     esp_bt_power_domain_on();
     esp_bt_power_domain_on();
 
 
     btdm_controller_mem_init();
     btdm_controller_mem_init();
@@ -1462,7 +1462,7 @@ esp_err_t esp_bt_controller_deinit(void)
 #if CONFIG_MAC_BB_PD
 #if CONFIG_MAC_BB_PD
     esp_mac_bb_pd_mem_deinit();
     esp_mac_bb_pd_mem_deinit();
 #endif
 #endif
-    esp_phy_pd_mem_deinit();
+    esp_phy_modem_deinit();
 
 
     free(osi_funcs_p);
     free(osi_funcs_p);
     osi_funcs_p = NULL;
     osi_funcs_p = NULL;

+ 3 - 2
components/esp_phy/include/esp_phy_init.h

@@ -178,12 +178,13 @@ void esp_phy_load_cal_and_init(void);
 /**
 /**
  * @brief Initialize backup memory for Phy power up/down
  * @brief Initialize backup memory for Phy power up/down
  */
  */
-void esp_phy_pd_mem_init(void);
+void esp_phy_modem_init(void);
 
 
 /**
 /**
  * @brief Deinitialize backup memory for Phy power up/down
  * @brief Deinitialize backup memory for Phy power up/down
+ * Set phy_init_flag if all modems deinit on ESP32C3
  */
  */
-void esp_phy_pd_mem_deinit(void);
+void esp_phy_modem_deinit(void);
 
 
 #if CONFIG_MAC_BB_PD
 #if CONFIG_MAC_BB_PD
 /**
 /**

+ 12 - 6
components/esp_phy/src/phy_init.c

@@ -76,7 +76,7 @@ static DRAM_ATTR portMUX_TYPE s_phy_int_mux = portMUX_INITIALIZER_UNLOCKED;
 
 
 /* Memory to store PHY digital registers */
 /* Memory to store PHY digital registers */
 static uint32_t* s_phy_digital_regs_mem = NULL;
 static uint32_t* s_phy_digital_regs_mem = NULL;
-static uint8_t s_phy_backup_mem_ref = 0;
+static uint8_t s_phy_modem_init_ref = 0;
 
 
 #if CONFIG_MAC_BB_PD
 #if CONFIG_MAC_BB_PD
 uint32_t* s_mac_bb_pd_mem = NULL;
 uint32_t* s_mac_bb_pd_mem = NULL;
@@ -306,11 +306,11 @@ void esp_wifi_bt_power_domain_off(void)
 #endif
 #endif
 }
 }
 
 
-void esp_phy_pd_mem_init(void)
+void esp_phy_modem_init(void)
 {
 {
     _lock_acquire(&s_phy_access_lock);
     _lock_acquire(&s_phy_access_lock);
 
 
-    s_phy_backup_mem_ref++;
+    s_phy_modem_init_ref++;
     if (s_phy_digital_regs_mem == NULL) {
     if (s_phy_digital_regs_mem == NULL) {
         s_phy_digital_regs_mem = (uint32_t *)heap_caps_malloc(SOC_PHY_DIG_REGS_MEM_SIZE, MALLOC_CAP_DMA|MALLOC_CAP_INTERNAL);
         s_phy_digital_regs_mem = (uint32_t *)heap_caps_malloc(SOC_PHY_DIG_REGS_MEM_SIZE, MALLOC_CAP_DMA|MALLOC_CAP_INTERNAL);
     }
     }
@@ -319,15 +319,21 @@ void esp_phy_pd_mem_init(void)
 
 
 }
 }
 
 
-void esp_phy_pd_mem_deinit(void)
+void esp_phy_modem_deinit(void)
 {
 {
     _lock_acquire(&s_phy_access_lock);
     _lock_acquire(&s_phy_access_lock);
 
 
-    s_phy_backup_mem_ref--;
-    if (s_phy_backup_mem_ref == 0) {
+    s_phy_modem_init_ref--;
+    if (s_phy_modem_init_ref == 0) {
         s_is_phy_reg_stored = false;
         s_is_phy_reg_stored = false;
         free(s_phy_digital_regs_mem);
         free(s_phy_digital_regs_mem);
         s_phy_digital_regs_mem = NULL;
         s_phy_digital_regs_mem = NULL;
+        /* Fix the issue caused by the power domain off.
+        * This issue is only on ESP32C3.
+        */
+#if CONFIG_IDF_TARGET_ESP32C3
+        phy_init_flag();
+#endif
     }
     }
 
 
     _lock_release(&s_phy_access_lock);
     _lock_release(&s_phy_access_lock);

+ 2 - 5
components/esp_wifi/src/wifi_init.c

@@ -128,15 +128,12 @@ esp_err_t esp_wifi_deinit(void)
 #if CONFIG_MAC_BB_PD
 #if CONFIG_MAC_BB_PD
     esp_unregister_mac_bb_pd_callback(pm_mac_sleep);
     esp_unregister_mac_bb_pd_callback(pm_mac_sleep);
     esp_unregister_mac_bb_pu_callback(pm_mac_wakeup);
     esp_unregister_mac_bb_pu_callback(pm_mac_wakeup);
-#endif
-#if CONFIG_IDF_TARGET_ESP32C3
-    phy_init_flag();
 #endif
 #endif
     esp_wifi_power_domain_off();
     esp_wifi_power_domain_off();
 #if CONFIG_MAC_BB_PD
 #if CONFIG_MAC_BB_PD
     esp_mac_bb_pd_mem_deinit();
     esp_mac_bb_pd_mem_deinit();
 #endif
 #endif
-    esp_phy_pd_mem_deinit();
+    esp_phy_modem_deinit();
 
 
     return err;
     return err;
 }
 }
@@ -255,7 +252,7 @@ esp_err_t esp_wifi_init(const wifi_init_config_t *config)
         esp_mac_bb_pd_mem_init();
         esp_mac_bb_pd_mem_init();
         esp_wifi_internal_set_mac_sleep(true);
         esp_wifi_internal_set_mac_sleep(true);
 #endif
 #endif
-        esp_phy_pd_mem_init();
+        esp_phy_modem_init();
 #if CONFIG_IDF_TARGET_ESP32
 #if CONFIG_IDF_TARGET_ESP32
         s_wifi_mac_time_update_cb = esp_wifi_internal_update_mac_time;
         s_wifi_mac_time_update_cb = esp_wifi_internal_update_mac_time;
 #endif
 #endif