[PATCH v7 04/13] ram: k3-ddrss: Add support for DDR in self-refresh
Kumar, Udit
u-kumar1 at ti.com
Sat Dec 13 07:38:52 CET 2025
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) <msp at baylibre.com>
> ---
> 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.",
>
More information about the U-Boot
mailing list