nuttx/arch/arm/include
Marco Casaroli a6ddfcd360 arch/arm/rp23xx: Add suspend to RAM in the POWMAN P1.0 state.
P1.0 powers the switched core off and keeps the XIP cache and SRAM.
Every peripheral loses its registers, so the chip comes back through
the bootrom and the ordinary boot, not from the WFI.  The idle governor
never selects it: an application asks for it with the new
BOARDIOC_RP23XX_SUSPEND boardctl() command (arch/chip/pm.h, handled by
the common rp23xx board_ioctl()).

rp23xx_pm_suspend():

- saves the NVIC, writes a marker to POWMAN SCRATCH0, and arms the
  wake: the RP23XX_PM_WAKEUP_GPIO pin in a POWMAN power-up detector,
  and the always-on timer alarm for a timed wake.  An armed RTC alarm
  that comes first powers the chip up itself, so an application can
  set the wake with RTC_SET_ALARM.  Otherwise the RTC alarm is saved
  with the new rp23xx_rtc_savealarm() and given back after the wake
  with rp23xx_rtc_restorealarm().
- cleans the XIP cache, with the RP2350-E11 workaround, because the
  resume discards it and PSRAM can hold task stacks.
- requests P1.0 and waits in WFI.

On the next boot, __start asks rp23xx_pm_resume_pending() (the marker
and CHIP_RESET.HAD_SWCORE_PD) before .bss and .data are touched.  For a
resume it moves to its own stack, because the idle thread still runs on
the idle stack, sets up the hardware with the cold boot code (now
rp23xx_hwinit()), and longjmps back to the suspended thread.  The UARTs
are set up from the driver state in RAM, the PSRAM format is applied
again without detection (the part is still in quad mode), the dormant-
wake GPIOs are armed again (the IO bank lost them, and the next dormant
period could then never end), and the time of day is taken from the
always-on timer.

Assisted-by: Claude Code:claude-opus-5-5
Signed-off-by: Marco Casaroli <marco.casaroli@gmail.com>
2026-10-09 06:17:57 -03:00
..
a1x
am67 arch/arm/am67: Add I2C0/WKUP_I2C0 master driver. 2026-09-17 13:49:35 +08:00
am335x
arm !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
armv6-m !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
armv7-a arch/arm: Build fork() children from the caller's syscall frame on armv7-a. 2026-08-10 08:57:30 -03:00
armv7-m !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
armv7-r !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
armv8-m !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
armv8-r !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
at32
c5471
csk6
cxd32xx
cxd56xx !boards: Remove NSH_ARCHINIT and board_app_initialize 2026-05-02 18:36:46 +08:00
dm320 style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
efm32
eoss3
fvp-v8r-aarch32
gd32f4 style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
goldfish
ht32f491x3 ht32f491x3/esk32: add docs and flash helpers 2026-03-30 09:48:16 +08:00
imx1
imx6 arm/imx6: Fix IMX_IRQ definitions 2026-04-10 10:28:39 +08:00
imx9 imx9: imx95 fix uSDHC IRQ naming to match NuttX USDHC convention 2026-03-24 15:39:07 +08:00
imxrt arch/arm/imxrt: ROM api support 2026-10-07 08:20:12 -03:00
kinetis style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
kl
lc823450
lpc17xx_40xx
lpc31xx
lpc43xx
lpc54xx
lpc214x arch/lpc214x: Fix LPC214x to work again 2026-07-01 03:00:43 +08:00
lpc2378 arch/arm: Fix LPC2378 to work again 2026-06-30 03:28:12 +08:00
max326xx
mcx-nxxx
moxart
mps
mx8mp style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
n32h7 arch/arm/n32h7: Add N32H762IIL7 BSP 2026-09-17 09:39:41 -03:00
nrf52
nrf53
nrf54l arm/nrf54l: add initial nrf54l support 2026-09-24 11:10:46 +08:00
nrf91
nuc1xx
phy62xx !arch/stm32f0l0g0: move stm32c0 and finalize the directory split 2026-06-24 14:54:44 -03:00
qemu
ra4
ra8m1 arch/arm/ra8m1: Add GPT timer support 2026-10-01 23:12:10 +08:00
rp23xx arch/arm/rp23xx: Add suspend to RAM in the POWMAN P1.0 state. 2026-10-09 06:17:57 -03:00
rp2040
rtl8720f arch/arm: add Realtek RTL8721Dx and RTL8720F (Ameba WHC) support 2026-07-01 09:18:06 -03:00
rtl8721dx arch/arm: add Realtek RTL8721Dx and RTL8720F (Ameba WHC) support 2026-07-01 09:18:06 -03:00
rtl8721f arch/arm/rtl8721f: bring up minimal NSH (P1) 2026-07-30 17:04:14 +08:00
rtl8730e arch/arm/rtl8730e: add UART character driver support 2026-09-24 21:24:35 +08:00
s32k1xx
s32k3xx style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
sam34
sama5
samd2l2
samd5e5
samv7 arch/arm/samv7: enable USART peripherals for SAMx7xJ series 2025-09-18 11:05:56 +02:00
stm32c0 !arch/stm32f0l0g0: move stm32c0 and finalize the directory split 2026-06-24 14:54:44 -03:00
stm32c5 arch/arm/stm32c5: Add STM32C562 architecture support 2026-08-27 01:07:10 +08:00
stm32f0 !arch/stm32f0l0g0: move stm32f0 to its own directory 2026-06-24 14:54:44 -03:00
stm32f1 !arch/stm32: move stm32f1 to its own directory 2026-06-24 14:54:44 -03:00
stm32f2 !arch/stm32: move stm32f2 to its own directory 2026-06-24 14:54:44 -03:00
stm32f3 !arch/stm32: move stm32f3 to its own directory 2026-06-24 14:54:44 -03:00
stm32f4 arch/arm/stm32f4: add STM32F412CG chip selection 2026-09-01 17:40:30 +08:00
stm32f7 arch/arm/stm32f7: use common Kconfig symbols 2026-08-18 09:34:58 +08:00
stm32g0 arm/stm32g0: Add USB device controller support 2026-08-22 11:09:08 +08:00
stm32g4 !arch/stm32: move stm32g4 to its own directory 2026-06-24 14:54:44 -03:00
stm32h5 arch/arm/stm32h5: Use common Cortex-M33 USART support 2026-10-08 15:53:21 -03:00
stm32h7 arm/stm32h7: add STM32H735 support 2026-10-07 04:06:37 +02:00
stm32l0 !arch/stm32f0l0g0: move stm32l0 to its own directory 2026-06-24 14:54:44 -03:00
stm32l1 !arch/stm32: move stm32l1 and finalize the directory split 2026-06-24 14:54:44 -03:00
stm32l4 !arch/stm32l4: use common STM32 Kconfig symbols 2026-06-14 11:35:31 -03:00
stm32l5 arch/arm/stm32l5: Use common Cortex-M33 core support 2026-09-22 09:21:35 -03:00
stm32n6 !arch/stm32n6: unify non-standard hardware definition prefixes 2026-06-11 22:51:35 -03:00
stm32u0 arch/arm: add stm32u0 support 2026-08-18 15:00:15 +02:00
stm32u3 arch/arm/stm32u3: Add STM32U3C5 architecture support 2026-08-23 11:03:03 +08:00
stm32u5 arch/arm/stm32: Generalize Cortex-M33 heap support 2026-08-27 01:07:10 +08:00
stm32wb !arch/stm32wb: use common STM32 Kconfig symbols 2026-06-14 11:35:31 -03:00
stm32wl5 !arch/stm32wl5: use common STM32 Kconfig symbols 2026-06-14 11:35:31 -03:00
str71x
tiva
tlsr82 !arch/arm: Use r9 as the PIC base register. 2026-08-06 01:38:23 +08:00
tms570
xmc4
.gitignore
arch.h binfmt, arch/arm: Add the CONFIG_FDPIC option and the ABI header. 2026-09-08 16:31:16 -03:00
barriers.h
elf.h libs/libc/elf: Load the libraries a module names in DT_NEEDED. 2026-10-06 17:48:49 -03:00
inttypes.h
irq.h arch: rename STACK_ALIGNMENT to STACKFRAME_ALIGN across all architectures 2026-01-22 15:37:24 +08:00
limits.h
setjmp.h
stdarg.h
syscall.h
types.h