Explorar o código

fix(wifi/phy): fix the issue of vTaskStepTick assert failed caused by wifi baseband retention linked list

Li Shuai %!s(int64=2) %!d(string=hai) anos
pai
achega
6ba55e1b78
Modificáronse 1 ficheiros con 12 adicións e 1 borrados
  1. 12 1
      components/esp_phy/src/phy_init.c

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

@@ -388,6 +388,8 @@ static uint32_t* s_mac_bb_pd_mem = NULL;
 static uint8_t s_macbb_backup_mem_ref = 0;
 /* Reference of powering down MAC and BB */
 static bool s_mac_bb_pu = true;
+#elif SOC_PM_MODEM_RETENTION_BY_REGDMA
+static void *s_mac_bb_tx_base = NULL;
 #endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
 
 void esp_mac_bb_pd_mem_init(void)
@@ -407,7 +409,13 @@ void esp_mac_bb_pd_mem_init(void)
         [3] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b03, 0x600a7c00, 0x600a7c00, 53,  0, 0), .owner = BIT(0) | BIT(1) }, /* BB */
         [4] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b05, 0x600a0000, 0x600a0000, 58,  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_err_t err = ESP_OK;
+    _lock_acquire(&s_phy_access_lock);
+    s_mac_bb_tx_base = sleep_retention_find_link_by_id(0x0b01);
+    if (s_mac_bb_tx_base == NULL) {
+        err = sleep_retention_entries_create(bb_regs_retention, ARRAY_SIZE(bb_regs_retention), 3, SLEEP_RETENTION_MODULE_WIFI_BB);
+    }
+    _lock_release(&s_phy_access_lock);
     if (err != ESP_OK) {
         ESP_LOGW(TAG, "failed to allocate memory for WiFi baseband retention");
     }
@@ -425,7 +433,10 @@ void esp_mac_bb_pd_mem_deinit(void)
     }
     _lock_release(&s_phy_access_lock);
 #elif SOC_PM_MODEM_RETENTION_BY_REGDMA
+    _lock_acquire(&s_phy_access_lock);
     sleep_retention_entries_destroy(SLEEP_RETENTION_MODULE_WIFI_BB);
+    s_mac_bb_tx_base = NULL;
+    _lock_release(&s_phy_access_lock);
 #endif
 }