Thanks for clean up Markus,

On 12/10/2025 7:38 PM, Markus Schneider-Pargmann (TI.com) wrote:
In IO+DDR the DDR is kept in self-refresh while the SoC cores are
powered off completely. During boot the normal initialization routine of
DDR is slightly different to exit self-refresh and keep the DDR contents.

Signed-off-by: Markus Schneider-Pargmann (TI.com) <[email protected]>
---
  drivers/ram/k3-ddrss/Makefile       |   1 +
  drivers/ram/k3-ddrss/k3-ddrss-lpm.c | 175 ++++++++++++++++++++++++++++++++++++
  drivers/ram/k3-ddrss/k3-ddrss-lpm.h |   9 ++
  drivers/ram/k3-ddrss/k3-ddrss.c     |  16 ++++
  4 files changed, 201 insertions(+)

diff --git a/drivers/ram/k3-ddrss/Makefile b/drivers/ram/k3-ddrss/Makefile
index 
823d1887178174021778296e6626cadfd11170de..8a2ece1c27eeae51593467259337483a852f5f85
 100644
--- a/drivers/ram/k3-ddrss/Makefile
+++ b/drivers/ram/k3-ddrss/Makefile
@@ -4,6 +4,7 @@
  #
obj-$(CONFIG_K3_DDRSS) += k3-ddrss.o
+obj-$(CONFIG_K3_DDRSS) += k3-ddrss-lpm.o
  obj-$(CONFIG_K3_DDRSS) += lpddr4_obj_if.o
  obj-$(CONFIG_K3_DDRSS) += lpddr4.o
  ccflags-$(CONFIG_K3_DDRSS) += -Idrivers/ram/k3-ddrss/
diff --git a/drivers/ram/k3-ddrss/k3-ddrss-lpm.c 
b/drivers/ram/k3-ddrss/k3-ddrss-lpm.c
new file mode 100644
index 
0000000000000000000000000000000000000000..2556632df8806623118c72cca55cfbf370211ae0
--- /dev/null
+++ b/drivers/ram/k3-ddrss/k3-ddrss-lpm.c
@@ -0,0 +1,175 @@
+// SPDX-License-Identifier: GPL-2.0+
+


Copyright (C) 2025 Texas Instruments Incorporated - https://www.ti.com/

+#include <asm/io.h>
+#include <linux/compiler_types.h>
+#include <linux/types.h>
+#include <time.h>
+#include <vsprintf.h>
+#include <wait_bit.h>
+
[..]
+       is_lpm_resume = k3_ddrss_wkup_conf_boot_is_resume();

Sorry, but repeating same thing k3_ddrss_wkup_conf_boot_is_resume could have different implementation for different SOCs

+
+       if (is_lpm_resume)
+               dev_info(dev, "Detected IO+DDR resume\n");
+
        ddrss->dev = dev;
        ret = k3_ddrss_power_on(ddrss);
        if (ret)
@@ -895,12 +902,21 @@ static int k3_ddrss_probe(struct udevice *dev)
        k3_lpddr4_init(ddrss);
        k3_lpddr4_hardware_reg_init(ddrss);
+ if (is_lpm_resume)
+               k3_ddrss_self_refresh_exit(ddrss->ddrss_ctl_cfg);
+
        ret = k3_ddrss_init_freq(ddrss);
        if (ret)
                return ret;
+ if (is_lpm_resume)
+               k3_ddrss_deassert_retention();
+
        k3_lpddr4_start(ddrss);
+ if (is_lpm_resume)
+               k3_ddrss_lpm_resume(ddrss->ddrss_ctl_cfg);
+
        if (IS_ENABLED(CONFIG_K3_INLINE_ECC)) {
                if (!ddrss->ddrss_ss_cfg) {
                        printf("%s: ss_cfg is required if ecc is enabled but not 
provided.",

Reply via email to