Fix ESP32S2BETA WiFi initialization crash issue

ESP32S2BETA does not need to enable WiFi common clock in WiFi library, for
WiFi common clock is not disabled when WiFi is in sleep state.
This commit is contained in:
Xia Xiaotian 2019-12-30 16:51:12 +08:00
parent 03f6179211
commit b7e3886bf2
3 changed files with 14 additions and 2 deletions

View File

@ -79,8 +79,10 @@ typedef struct {
void (* _dport_access_stall_other_cpu_end_wrap)(void);
int32_t (* _phy_rf_deinit)(uint32_t module);
void (* _phy_load_cal_and_init)(uint32_t module);
#if CONFIG_IDF_TARGET_ESP32
void (* _phy_common_clock_enable)(void);
void (* _phy_common_clock_disable)(void);
#endif
int32_t (* _read_mac)(uint8_t* mac, uint32_t type);
void (* _timer_arm)(void *timer, uint32_t tmout, bool repeat);
void (* _timer_disarm)(void *timer);

@ -1 +1 @@
Subproject commit 53a0e9fc2617060d302438f41d5b42430e6364a3
Subproject commit 5c6c4dc74151a462fd3ef17c7e89dd11377237fc

View File

@ -57,11 +57,13 @@ static uint32_t s_module_phy_rf_init = 0;
/* Whether modem sleep is turned on */
static volatile bool s_is_phy_rf_en = false;
#if CONFIG_IDF_TARGET_ESP32
/* Whether WiFi/BT common clock enabled reference */
static volatile int32_t s_common_clock_enable_ref = 0;
/* PHY spinlock mux */
static portMUX_TYPE s_phy_spin_lock = portMUX_INITIALIZER_UNLOCKED;
#endif
/* Bit mask of modules needing to enter modem sleep mode */
static uint32_t s_modem_sleep_module_enter = 0;
@ -128,7 +130,6 @@ static inline void phy_update_wifi_mac_time(bool en_clock_stopped, int64_t now)
}
}
}
#endif
IRAM_ATTR static inline void phy_spin_lock(void)
{
@ -147,9 +148,11 @@ IRAM_ATTR static inline void phy_spin_unlock(void)
portEXIT_CRITICAL(&s_phy_spin_lock);
}
}
#endif
IRAM_ATTR void esp_phy_common_clock_enable(void)
{
#if CONFIG_IDF_TARGET_ESP32
phy_spin_lock();
if (s_common_clock_enable_ref == 0) {
@ -159,10 +162,14 @@ IRAM_ATTR void esp_phy_common_clock_enable(void)
s_common_clock_enable_ref++;
phy_spin_unlock();
#else
periph_module_enable(PERIPH_WIFI_BT_COMMON_MODULE);
#endif
}
IRAM_ATTR void esp_phy_common_clock_disable(void)
{
#if CONFIG_IDF_TARGET_ESP32
phy_spin_lock();
if (s_common_clock_enable_ref > 0) {
@ -177,6 +184,9 @@ IRAM_ATTR void esp_phy_common_clock_disable(void)
}
phy_spin_unlock();
#else
periph_module_disable(PERIPH_WIFI_BT_COMMON_MODULE);
#endif
}
esp_err_t esp_phy_rf_init(const esp_phy_init_data_t* init_data, esp_phy_calibration_mode_t mode,