[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