rom_reset_usb_boot does not function when Watchdog is enabled
On SDK 2.2.0 if you enable the watchdog then calling rom_reset_usb_boot just halts the calling core but does not trigger bootsel mode. This doesn't seem to be mentioned in the documentation and seems an unusual side effect.
It looks like on RP2350 rom_reset_usb_boot eventually calls rom_reboot which is documented as "Reboot using the watchdog. Resets the chip and uses the watchdog facility to restart.", so maybe that's the "smoking gun" as to why this isn't working? (But I've no idea if this is a deliberate side-effect or an unintentional side-effect.)
Good spot. Would explain it as I have the other RP2350 core resetting the watchdog timer. With this information I could write a workaround so the core resetting the watchdog is the one to trigger bootsel.
In terms of issue, either the side effect needs to be documented or a fix put in place.
I think the full explanation here is that the core calling rom_reboot sets the watchdog up for a BOOTSEL reboot, then loads 10ms into the watchdog and goes __wfi() to wait for the reboot. If the other core prevents that watchdog reboot (by eg reloading the watchdog) then the calling core just remains in __wfi(). Fix is to not use the watchdog for 2 things at the same time, as there's only 1 watchdog.
Thanks @will-v-pi . I agree with @jondurrant that there ought to be a warning about this in the docs, especially as https://www.raspberrypi.com/documentation/pico-sdk/runtime.html#group_pico_bootrom_1ga1bbe1c1df02daaa7b68a0c95fb9dc545 doesn't mention the watchdog at all.