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]>

Reply via email to