summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-05-08 21:27:53 +0700
committerhathach <[email protected]>2026-05-08 21:27:53 +0700
commit6af4ee2c50da68a9bca276b69fccbacf96e2b3ce (patch)
tree23b6aeec8fd278d472b0ca3f690b8aca81db1817 /tools
parentd21fdd98f34241f52a01832e3c4133cd03a94d0a (diff)
nrf5x: request HFCLK in USB_EVT_READY to fix post-SoftDevice deadlock
USB_EVT_DETECTED runs hfclk_enable() which, when SoftDevice is not yet enabled, starts HFXO via direct CLOCK register access. After sd_softdevice_enable() takes over CLOCK, HFXO is physically off again and SD's HFCLK reference count is 0. If USB_EVT_READY is fired post-SD (e.g. on nRF52 via Bluefruit's usb_softdevice_post_enable() when the pre-SD nrfx_power READY callback didn't get to run before nrfx_power was uninited), the wait loop 'while (!hfclk_running()) {}' calls sd_clock_hfclk_is_running() which returns false forever -> deadlock that blocks both USB enumeration and any further app code on the calling thread. Call hfclk_enable() right before the wait so HFCLK is requested in whichever context (SD or direct) is current. hfclk_enable() is idempotent. Reproduces reliably with bleuart on Feather nRF52840 Express flashed via JLink: chip wedges in sd_clock_hfclk_is_running SVC, no USB enumeration, no BLE advertising. With the fix, USB enumerates and BLE advertises as expected.
Diffstat (limited to 'tools')
0 files changed, 0 insertions, 0 deletions