diff options
| author | Angus Gratton <angus@redyak.com.au> | 2025-03-12 16:24:55 +1100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2025-03-27 00:02:13 +1100 |
| commit | 6fa498cba1a622723d3dc13e15331085aea60d3c (patch) | |
| tree | 7a9160aa73e7a1d5a49c6535274c5a9c362ac848 /py/objbool.c | |
| parent | dd7a950bbc27713df8cc461958757ec793189d72 (diff) | |
rp2/mpnetworkport: Fix lost CYW43 WiFi events when using both cores.
There's a very odd but predictable sequence of events that breaks Wi-Fi
when using both cores:
1) CPU1 calls pendsv_suspend() - for example sleep() causes
a softtimer node to be inserted, which calls pendsv_suspend().
2) CYW43 sends wakeup IRQ. CPU0 GPIO IRQ handler schedules PendSV
and disables the GPIO IRQ on CPU0, to re-enable after
cyw43_poll() runs and completes.
3) CPU0 PendSV_Handler runs, sees pendsv is suspended, exits.
4) CPU1 calls pendsv_resume() and pendsv_resume() sees PendSV
is pending and triggers it on CPU1.
5) CPU1 runs PendSV_Handler, runs cyw43_poll(), and at the end
it re-enables the IRQ *but now on CPU1*.
However CPU1 has GPIO IRQs disabled, so the CYW43 interrupt never runs
again...
The fix in this commit is to always enable/disable the interrupt on CPU0.
This isn't supported by the pico-sdk, but it is supported by the hardware.
Fixes issue #16779.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
Diffstat (limited to 'py/objbool.c')
0 files changed, 0 insertions, 0 deletions
