On 11/3/2026 3:25 PM, Markus Schneider-Pargmann (TI) wrote:
> 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]>

Tested-by: Akashdeep Kaur <[email protected]>


Regards,

Akashdeep Kaur

Reply via email to