mirror of
https://github.com/apache/nuttx.git
synced 2026-09-10 19:06:35 +00:00
The in-tree esp32s3-xiao board bringup never wires up Wi-Fi at all -- unlike esp32s3-devkit/esp32s3-eye, it has no `#ifdef CONFIG_ESPRESSIF_WIFI` include of esp32s3_board_wlan.h and no call to board_wlan_init(). Add both, mirroring those boards' pattern and placement exactly. On its own this is not enough for a board that also uses CONFIG_PM: Wi-Fi's PHY/RF calibration inside board_wlan_init() cannot tolerate the clock gating of PM_STANDBY (light sleep). If the idle task enters light sleep while phy_init's calibration is still running -- which the greedy governor is free to do the moment the CPU goes idle during driver init -- the calibration hangs forever waiting on a clock that just stopped. Confirmed on real XIAO ESP32-S3 hardware: with CONFIG_PM + CONFIG_ESPRESSIF_WIFI both enabled and no guard, boot got stuck 100% of the time right after the "net80211 rom version" line, before phy_init ever printed, and never reached NSH -- reproducible across repeated flashes, 50s+ waits, not even responding to a UART wakeup keypress (a genuine hang, not quiet sleep). Fixed by holding a stronger PM lock than PM_STANDBY for the duration of board_wlan_init(): pm_stay(PM_IDLE_DOMAIN, PM_IDLE) blocks PM_STANDBY/PM_SLEEP while still allowing normal CPU idle, and pm_relax() releases it immediately after, restoring whatever floor the board's own PM policy holds otherwise. Confirmed fixed on the same hardware: boots clean to NSH with Wi-Fi + PM enabled together, `ps` shows the wifi/netdev-wlan0 kernel threads running, and `wapi scan`/ `ifup wlan0` work normally. esp32c3-devkit and esp32c6-devkit also combine CONFIG_PM with Wi-Fi, but don't need this guard today: both call board_wlan_init() well before esp_pmconfigure() (which is what actually arms the PM governor) runs near the end of bringup, so PM isn't active yet during their Wi-Fi init. This board's PM handling begins earlier in bringup, so the two can race here. Signed-off-by: Felipe Moura <moura.fmo@gmail.com> Assisted-by: Claude:claude-sonnet-5 |
||
|---|---|---|
| .. | ||
| arm | ||
| arm64 | ||
| avr | ||
| dummy | ||
| hc/m9s12 | ||
| mips | ||
| misoc/lm32/misoc | ||
| or1k/mor1kx/or1k | ||
| renesas | ||
| risc-v | ||
| sim/sim/sim | ||
| sparc | ||
| tricore | ||
| x86/qemu/qemu-i486 | ||
| x86_64/qemu/qemu-intel64 | ||
| xtensa | ||
| z16/z16f/z16f2800100zcog | ||
| z80 | ||
| .gitignore | ||
| Board.mk | ||
| boardctl.c | ||
| CMakeLists.txt | ||
| dummy.c | ||
| Kconfig | ||
| Makefile | ||