Hi, this series introduces support to resume from IO+DDR. IO+DDR is a low power mode of am62a and am62p in which nearly everything is powered off except DDR which is in self-refresh and a few pins which detect activity and can wakeup the system again.
On resume uboot SPL is loaded and checks if this is a IO+DDR resume. If it is, the DDR initialization sequence in k3-ddrss differs slightly as it has to get the DDR out of the self-refresh. Afterward a specific address determined from DT is used to get the metadata that stores relevant context addresses. The context is restored using the tisci message TI_SCI_MSG_MIN_CONTEXT_RESTORE. At the end all further initializations are skipped and uboot SPL directly jumps into the DM resume address which takes care of the rest. This was tested on am62p. Best, Markus Signed-off-by: Markus Schneider-Pargmann (TI) <[email protected]> --- Changes in v10: - Rebase to v2027.01-rc1 - Drop the two DT patches adding bootph-pre-ram flags. These are now part of upstream DT. Also pick memory region size fixes from the same merged series. - Cherry picked upstream DT patches for splitting the memory regions to be able to reference the relevant section directly - Use "lpm-metadata" memory region name to lookup the correct memory region instead of a hardcoded memory offset and index - Do not read the address in u-boot code, but pass a pointer to the address to the tifs restore - Added all patches from the series: IO+DDR low power mode bugfixes for AM62P and AM62A https://lore.kernel.org/all/[email protected]/ - Link to v9: https://lore.kernel.org/r/20260105-topic-am62-ioddr-v2025-04-rc1-v9-0-7e33f2c77...@baylibre.com Changes in v9: - Swap setup_qos() and spl_enable_cache() in am62p5_init.c and am62a7_init.c. setup_qos() is still required for lpm resume but spl_enable_cache() is not. There should be no dependency between the two. - Link to v8: https://lore.kernel.org/r/20251222-topic-am62-ioddr-v2025-04-rc1-v8-0-e70fed16b...@baylibre.com Changes in v8: - Create and use am62xx-lpm-common for am62xx lpm common functions - Create platform dependent functions in k3-ddrss in k3_ddrss_data - Align am62a and am62p initialization regarding caches and QoS - Link to v7: https://lore.kernel.org/r/20251210-topic-am62-ioddr-v2025-04-rc1-v7-0-f113b156f...@baylibre.com Changes in v7: - Removed parent nodes bootph-pre-ram properties as not necessary anymore. - Added missing new line in arm: mach-k3: common: Helper for LPM meta data address from DT - Split off LPM specific ddr code into its own file k3-ddrss-lpm - Rename lpm_ops->restore_context to lpm_ops->min_context_restore - Pulled patch to add wakeup check helpers before the IO isolation removal to remove later cleanup of wkup_ctrl_remove_can_io_isolation_if_set() - Some reviewed-bys and tested-bys removed due to changes in the patches - Link to v6: https://lore.kernel.org/r/20251120-topic-am62-ioddr-v2025-04-rc1-v6-0-6dd99a727...@baylibre.com Changes in v6: - Add comment for last part of removing can io isolation - Only mention a single kconfig symbol in the commit message - Add defines for timeouts in k3-ddrss - Link to v5: https://lore.kernel.org/r/20251110-topic-am62-ioddr-v2025-04-rc1-v5-0-980ee0036...@baylibre.com Changes in v5: - Fixed compile warnings - Link to v4: https://lore.kernel.org/r/20251030-topic-am62-ioddr-v2025-04-rc1-v4-0-4cef18af0...@baylibre.com Changes in v4: - Copy lpm_meta_data into the stack to be able to debug unstable memory issues - Add missing comments about ctx_lo and ctx_hi - Use absolute addresses for k3-ddrss CANUART_WAKE_STAT1 and CANUART_WAKE_OFF_MODE_STAT to avoid using addresses outside of the range given in the devicetree - Remove the cherry picked devicetree patches as they are already included now - In lpm_resume_from_ddr() print upper and lower 32bit of the meta data values separately. - Link to v3: https://lore.kernel.org/r/20250623-topic-am62-ioddr-v2025-04-rc1-v3-0-a4da322c1...@baylibre.com Changes in v3: - Use wait_for_bit helpers in k3-ddrss where possible and add panic messages for easier debugging - Link to v2: https://lore.kernel.org/r/20250613-topic-am62-ioddr-v2025-04-rc1-v2-0-3d233aaea...@baylibre.com Changes in v2: - Remove 'default n' from K3_IODDR - Pick devicetree patches from upstream instead of mailinglist - Link to v1: https://lore.kernel.org/r/20250311-topic-am62-ioddr-v2025-04-rc1-v1-0-666de9c10...@baylibre.com To: [email protected] Cc: Sumit Garg <[email protected]> Cc: Tom Rini <[email protected]> Cc: "Markus Schneider-Pargmann (TI)" <[email protected]> Cc: Nishanth Menon <[email protected]> Cc: Stefano Radaelli <[email protected]> Cc: Ilias Apalodimas <[email protected]> Cc: Paresh Bhagat <[email protected]> Cc: Akashdeep Kaur <[email protected]> Cc: Vignesh Raghavendra <[email protected]> Cc: Bryan Brattlof <[email protected]> Cc: Bin Liu <[email protected]> Cc: Kendall Willis <[email protected]> Cc: Udit Kumar <[email protected]> Cc: Neha Malcom Francis <[email protected]> --- Akashdeep Kaur (4): ram: k3-ddrss: Add workaround sequence for errata i2487 arm: mach-k3: am62xx-lpm: Add 32kHz LFOSC enable function declaration arm: mach-k3: am62px: Enable 32kHz LFOSC during LPM resume arm: mach-k3: am62ax: Enable 32kHz LFOSC during LPM resume Markus Schneider-Pargmann (TI) (20): arm64: dts: ti: k3-am62a-phycore-som: Fix wkup R5F memory region size arm64: dts: ti: k3-am62d2-evm: Fix wkup R5F memory region size arm64: dts: ti: k3-am62a7-sk: Fix wkup R5F memory region size arm64: dts: ti: k3-am62p-verdin: Fix wkup R5F memory region size arm64: dts: ti: k3-am62p5-sk: Fix wkup R5F memory region size arm64: dts: ti: var-som-am62p: Fix wkup R5F memory region size arm64: dts: ti: k3-am62a: Split r5f memory region arm64: dts: ti: k3-am62p: Split r5f memory region arm64: dts: ti: k3-am62*: Add wkup R5F nodes to pre-ram bootphase arm: mach-k3: Kconfig: Add symbol for IO+DDR Low Power Mode arm: mach-k3: am62xx-lpm-common: Add CANUART wakeup check helpers arm: mach-k3: Remove CANUART IO isolation ram: k3-ddrss: Add support for DDR in self-refresh firmware: ti_sci: Add TI_SCI_MSG_MIN_CONTEXT_RESTORE arm: mach-k3: am62xx-lpm-common: Add lpm_resume_from_ddr arm: mach-k3: am62xx-lpm-common: Helper for LPM meta data address from DT arm: mach-k3: am62a7_init: Resume on LPM exit arm: mach-k3: am62p5_init: Resume on LPM exit configs: am62ax_evm_r5: Enable IODDR resume support configs: am62p_evm_r5_defconfig: Enable IODDR resume support arch/arm/mach-k3/Kconfig | 9 + arch/arm/mach-k3/Makefile | 3 + arch/arm/mach-k3/am62ax/am62a7_init.c | 24 +- arch/arm/mach-k3/am62px/am62p5_init.c | 20 +- arch/arm/mach-k3/am62x/am625_init.c | 5 + arch/arm/mach-k3/am62xx-lpm-common.c | 240 +++++++++++++++++++ arch/arm/mach-k3/am62xx-lpm-common.h | 20 ++ configs/am62ax_evm_r5_defconfig | 1 + configs/am62px_evm_r5_defconfig | 1 + drivers/firmware/ti_sci.c | 38 +++ drivers/firmware/ti_sci.h | 16 ++ drivers/ram/k3-ddrss/Makefile | 1 + drivers/ram/k3-ddrss/k3-ddrss-lpm.c | 261 +++++++++++++++++++++ drivers/ram/k3-ddrss/k3-ddrss-lpm.h | 21 ++ drivers/ram/k3-ddrss/k3-ddrss.c | 31 ++- .../src/arm64/ti/k3-am62a-phycore-som.dtsi | 29 ++- .../src/arm64/ti/k3-am62a-ti-ipc-firmware.dtsi | 11 +- dts/upstream/src/arm64/ti/k3-am62a7-sk.dts | 29 ++- dts/upstream/src/arm64/ti/k3-am62d2-evm.dts | 32 ++- .../src/arm64/ti/k3-am62p-ti-ipc-firmware.dtsi | 11 +- dts/upstream/src/arm64/ti/k3-am62p-verdin.dtsi | 29 ++- dts/upstream/src/arm64/ti/k3-am62p5-sk.dts | 29 ++- dts/upstream/src/arm64/ti/k3-am62p5-var-som.dtsi | 29 ++- include/linux/soc/ti/ti_sci_protocol.h | 9 + 24 files changed, 874 insertions(+), 25 deletions(-) --- base-commit: dfcfc4c9f78d1743f490a497082a4ec8e058aae8 change-id: 20250306-topic-am62-ioddr-v2025-04-rc1-0b3a0ffe92b1 Best regards, -- Markus Schneider-Pargmann (TI) <[email protected]>
