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.",