All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ram: stm32mp1: Conditionally enable ASR
@ 2022-04-13  2:49 Marek Vasut
  2022-04-14 16:37 ` Patrick DELAUNAY
  2022-04-22  7:57 ` Patrice CHOTARD
  0 siblings, 2 replies; 7+ messages in thread
From: Marek Vasut @ 2022-04-13  2:49 UTC (permalink / raw)
  To: u-boot; +Cc: Marek Vasut, Patrick Delaunay, Patrice Chotard

Enable DRAM ASR, auto self-refresh, conditionally, based on DT property
"st,mem-enable-asr" . While ASR does save considerable amount of power
at runtime automatically, it also causes LTDC underruns on large panels.
Let user select whether or not ASR is required or not, generally ASR
should be enabled on portable and battery operated devices.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
Cc: Patrice Chotard <patrice.chotard@foss.st.com>
---
 drivers/ram/stm32mp1/stm32mp1_ddr.c | 3 ++-
 drivers/ram/stm32mp1/stm32mp1_ddr.h | 1 +
 drivers/ram/stm32mp1/stm32mp1_ram.c | 1 +
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.c b/drivers/ram/stm32mp1/stm32mp1_ddr.c
index 528a171b454..fd11e02aff4 100644
--- a/drivers/ram/stm32mp1/stm32mp1_ddr.c
+++ b/drivers/ram/stm32mp1/stm32mp1_ddr.c
@@ -845,7 +845,8 @@ start:
 				 config->c_reg.pwrctl);
 
 /* Enable auto-self-refresh, which saves a bit of power at runtime. */
-	stm32mp1_asr_enable(priv);
+	if (config->info.enable_asr)
+		stm32mp1_asr_enable(priv);
 
 	/* enable uMCTL2 AXI port 0 and 1 */
 	setbits_le32(&priv->ctl->pctrl_0, DDRCTRL_PCTRL_N_PORT_EN);
diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.h b/drivers/ram/stm32mp1/stm32mp1_ddr.h
index 861efff92be..c74a9cea2cc 100644
--- a/drivers/ram/stm32mp1/stm32mp1_ddr.h
+++ b/drivers/ram/stm32mp1/stm32mp1_ddr.h
@@ -144,6 +144,7 @@ struct stm32mp1_ddr_info {
 	const char *name;
 	u32 speed; /* in kHZ */
 	u32 size;  /* memory size in byte = col * row * width */
+	bool enable_asr;
 };
 
 struct stm32mp1_ddr_config {
diff --git a/drivers/ram/stm32mp1/stm32mp1_ram.c b/drivers/ram/stm32mp1/stm32mp1_ram.c
index 49b1262461b..f39cfad4764 100644
--- a/drivers/ram/stm32mp1/stm32mp1_ram.c
+++ b/drivers/ram/stm32mp1/stm32mp1_ram.c
@@ -122,6 +122,7 @@ static int stm32mp1_ddr_setup(struct udevice *dev)
 	config.info.speed = ofnode_read_u32_default(node, "st,mem-speed", 0);
 	config.info.size = ofnode_read_u32_default(node, "st,mem-size", 0);
 	config.info.name = ofnode_read_string(node, "st,mem-name");
+	config.info.enable_asr = ofnode_read_bool(node, "st,mem-enable-asr");
 	if (!config.info.name) {
 		dev_dbg(dev, "no st,mem-name\n");
 		return -EINVAL;
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] ram: stm32mp1: Conditionally enable ASR
  2022-04-13  2:49 [PATCH] ram: stm32mp1: Conditionally enable ASR Marek Vasut
@ 2022-04-14 16:37 ` Patrick DELAUNAY
  2022-04-14 16:48   ` Marek Vasut
  2022-04-22  7:57 ` Patrice CHOTARD
  1 sibling, 1 reply; 7+ messages in thread
From: Patrick DELAUNAY @ 2022-04-14 16:37 UTC (permalink / raw)
  To: Marek Vasut, u-boot; +Cc: Patrice Chotard

Hi Marek,

on ST platform the ASR/SSR/HSR request are already provided by the DDR 
settings with pwrctl register value

it is managed in TF-A by

arm-trusted-firmware/drivers/st/ddr/stm32mp1_ddr_helpers.c

enumstm32mp1_ddr_sr_mode ddr_read_sr_mode(void)
{
uint32_tpwrctl = mmio_read_32(stm32mp_ddrctrl_base() + DDRCTRL_PWRCTL);
switch(pwrctl & (DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE |
DDRCTRL_PWRCTL_SELFREF_EN)) {
case0U:
returnDDR_SSR_MODE;
caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE:
returnDDR_HSR_MODE;
caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE | DDRCTRL_PWRCTL_SELFREF_EN:
returnDDR_ASR_MODE;
default:
returnDDR_SR_MODE_INVALID;
}
}

no need to add an other property

I think


On 4/13/22 04:49, Marek Vasut wrote:
> Enable DRAM ASR, auto self-refresh, conditionally, based on DT property
> "st,mem-enable-asr" . While ASR does save considerable amount of power
> at runtime automatically, it also causes LTDC underruns on large panels.
> Let user select whether or not ASR is required or not, generally ASR
> should be enabled on portable and battery operated devices.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
> Cc: Patrice Chotard <patrice.chotard@foss.st.com>
> ---
>   drivers/ram/stm32mp1/stm32mp1_ddr.c | 3 ++-
>   drivers/ram/stm32mp1/stm32mp1_ddr.h | 1 +
>   drivers/ram/stm32mp1/stm32mp1_ram.c | 1 +
>   3 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.c b/drivers/ram/stm32mp1/stm32mp1_ddr.c
> index 528a171b454..fd11e02aff4 100644
> --- a/drivers/ram/stm32mp1/stm32mp1_ddr.c
> +++ b/drivers/ram/stm32mp1/stm32mp1_ddr.c
> @@ -845,7 +845,8 @@ start:
>   				 config->c_reg.pwrctl);
>   
>   /* Enable auto-self-refresh, which saves a bit of power at runtime. */
> -	stm32mp1_asr_enable(priv);


+ if (config->c_reg.pwrctl & (DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE |

DDRCTRL_PWRCTL_SELFREF_SW) ==

(DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE |DDRCTRL_PWRCTL_SELFREF_SW))

+	stm32mp1_asr_enable(priv);


in DDR setting

#define DDR_PWRCTL 0x00000000

     => SSR

#define DDR_PWRCTL 0x00000028

     => ASR


> +	if (config->info.enable_asr)
> +		stm32mp1_asr_enable(priv);
>   
>   	/* enable uMCTL2 AXI port 0 and 1 */
>   	setbits_le32(&priv->ctl->pctrl_0, DDRCTRL_PCTRL_N_PORT_EN);
> diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.h b/drivers/ram/stm32mp1/stm32mp1_ddr.h
> index 861efff92be..c74a9cea2cc 100644
> --- a/drivers/ram/stm32mp1/stm32mp1_ddr.h
> +++ b/drivers/ram/stm32mp1/stm32mp1_ddr.h
> @@ -144,6 +144,7 @@ struct stm32mp1_ddr_info {
>   	const char *name;
>   	u32 speed; /* in kHZ */
>   	u32 size;  /* memory size in byte = col * row * width */
> +	bool enable_asr;
>   };
>   
>   struct stm32mp1_ddr_config {
> diff --git a/drivers/ram/stm32mp1/stm32mp1_ram.c b/drivers/ram/stm32mp1/stm32mp1_ram.c
> index 49b1262461b..f39cfad4764 100644
> --- a/drivers/ram/stm32mp1/stm32mp1_ram.c
> +++ b/drivers/ram/stm32mp1/stm32mp1_ram.c
> @@ -122,6 +122,7 @@ static int stm32mp1_ddr_setup(struct udevice *dev)
>   	config.info.speed = ofnode_read_u32_default(node, "st,mem-speed", 0);
>   	config.info.size = ofnode_read_u32_default(node, "st,mem-size", 0);
>   	config.info.name = ofnode_read_string(node, "st,mem-name");
> +	config.info.enable_asr = ofnode_read_bool(node, "st,mem-enable-asr");
>   	if (!config.info.name) {
>   		dev_dbg(dev, "no st,mem-name\n");
>   		return -EINVAL;


Regards


Patrick


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ram: stm32mp1: Conditionally enable ASR
  2022-04-14 16:37 ` Patrick DELAUNAY
@ 2022-04-14 16:48   ` Marek Vasut
  2022-04-14 17:34     ` Marek Vasut
  0 siblings, 1 reply; 7+ messages in thread
From: Marek Vasut @ 2022-04-14 16:48 UTC (permalink / raw)
  To: Patrick DELAUNAY, u-boot; +Cc: Patrice Chotard

On 4/14/22 18:37, Patrick DELAUNAY wrote:
> Hi Marek,

Hi,

> on ST platform the ASR/SSR/HSR request are already provided by the DDR 
> settings with pwrctl register value
> 
> it is managed in TF-A by
> 
> arm-trusted-firmware/drivers/st/ddr/stm32mp1_ddr_helpers.c

Sure, I don't use ATF and I have no intention of ever using ATF on this 
platform.

> enumstm32mp1_ddr_sr_mode ddr_read_sr_mode(void)
> {
> uint32_tpwrctl = mmio_read_32(stm32mp_ddrctrl_base() + DDRCTRL_PWRCTL);
> switch(pwrctl & (DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE |
> DDRCTRL_PWRCTL_SELFREF_EN)) {
> case0U:
> returnDDR_SSR_MODE;
> caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE:
> returnDDR_HSR_MODE;
> caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE | DDRCTRL_PWRCTL_SELFREF_EN:
> returnDDR_ASR_MODE;
> default:
> returnDDR_SR_MODE_INVALID;
> }
> }
> 
> no need to add an other property

This is for U-Boot, plain, stock, without any other software partaking 
in it.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ram: stm32mp1: Conditionally enable ASR
  2022-04-14 16:48   ` Marek Vasut
@ 2022-04-14 17:34     ` Marek Vasut
  2022-04-26 10:49       ` Patrick DELAUNAY
  0 siblings, 1 reply; 7+ messages in thread
From: Marek Vasut @ 2022-04-14 17:34 UTC (permalink / raw)
  To: Patrick DELAUNAY, u-boot; +Cc: Patrice Chotard

On 4/14/22 18:48, Marek Vasut wrote:
> On 4/14/22 18:37, Patrick DELAUNAY wrote:
>> Hi Marek,
> 
> Hi,
> 
>> on ST platform the ASR/SSR/HSR request are already provided by the DDR 
>> settings with pwrctl register value
>>
>> it is managed in TF-A by
>>
>> arm-trusted-firmware/drivers/st/ddr/stm32mp1_ddr_helpers.c
> 
> Sure, I don't use ATF and I have no intention of ever using ATF on this 
> platform.
> 
>> enumstm32mp1_ddr_sr_mode ddr_read_sr_mode(void)
>> {
>> uint32_tpwrctl = mmio_read_32(stm32mp_ddrctrl_base() + DDRCTRL_PWRCTL);
>> switch(pwrctl & (DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE |
>> DDRCTRL_PWRCTL_SELFREF_EN)) {
>> case0U:
>> returnDDR_SSR_MODE;
>> caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE:
>> returnDDR_HSR_MODE;
>> caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE | DDRCTRL_PWRCTL_SELFREF_EN:
>> returnDDR_ASR_MODE;
>> default:
>> returnDDR_SR_MODE_INVALID;
>> }
>> }
>>
>> no need to add an other property
> 
> This is for U-Boot, plain, stock, without any other software partaking 
> in it.

Note that this patch just reinstates the old behavior before v2022.04 
release, except it adds a DT property to enable the new behavior with 
ASR and makes it non-default.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ram: stm32mp1: Conditionally enable ASR
  2022-04-13  2:49 [PATCH] ram: stm32mp1: Conditionally enable ASR Marek Vasut
  2022-04-14 16:37 ` Patrick DELAUNAY
@ 2022-04-22  7:57 ` Patrice CHOTARD
  1 sibling, 0 replies; 7+ messages in thread
From: Patrice CHOTARD @ 2022-04-22  7:57 UTC (permalink / raw)
  To: Marek Vasut, u-boot; +Cc: Patrick Delaunay

Hi Marek

On 4/13/22 04:49, Marek Vasut wrote:
> Enable DRAM ASR, auto self-refresh, conditionally, based on DT property
> "st,mem-enable-asr" . While ASR does save considerable amount of power
> at runtime automatically, it also causes LTDC underruns on large panels.
> Let user select whether or not ASR is required or not, generally ASR
> should be enabled on portable and battery operated devices.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
> Cc: Patrice Chotard <patrice.chotard@foss.st.com>
> ---
>  drivers/ram/stm32mp1/stm32mp1_ddr.c | 3 ++-
>  drivers/ram/stm32mp1/stm32mp1_ddr.h | 1 +
>  drivers/ram/stm32mp1/stm32mp1_ram.c | 1 +
>  3 files changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.c b/drivers/ram/stm32mp1/stm32mp1_ddr.c
> index 528a171b454..fd11e02aff4 100644
> --- a/drivers/ram/stm32mp1/stm32mp1_ddr.c
> +++ b/drivers/ram/stm32mp1/stm32mp1_ddr.c
> @@ -845,7 +845,8 @@ start:
>  				 config->c_reg.pwrctl);
>  
>  /* Enable auto-self-refresh, which saves a bit of power at runtime. */
> -	stm32mp1_asr_enable(priv);
> +	if (config->info.enable_asr)
> +		stm32mp1_asr_enable(priv);
>  
>  	/* enable uMCTL2 AXI port 0 and 1 */
>  	setbits_le32(&priv->ctl->pctrl_0, DDRCTRL_PCTRL_N_PORT_EN);
> diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.h b/drivers/ram/stm32mp1/stm32mp1_ddr.h
> index 861efff92be..c74a9cea2cc 100644
> --- a/drivers/ram/stm32mp1/stm32mp1_ddr.h
> +++ b/drivers/ram/stm32mp1/stm32mp1_ddr.h
> @@ -144,6 +144,7 @@ struct stm32mp1_ddr_info {
>  	const char *name;
>  	u32 speed; /* in kHZ */
>  	u32 size;  /* memory size in byte = col * row * width */
> +	bool enable_asr;
>  };
>  
>  struct stm32mp1_ddr_config {
> diff --git a/drivers/ram/stm32mp1/stm32mp1_ram.c b/drivers/ram/stm32mp1/stm32mp1_ram.c
> index 49b1262461b..f39cfad4764 100644
> --- a/drivers/ram/stm32mp1/stm32mp1_ram.c
> +++ b/drivers/ram/stm32mp1/stm32mp1_ram.c
> @@ -122,6 +122,7 @@ static int stm32mp1_ddr_setup(struct udevice *dev)
>  	config.info.speed = ofnode_read_u32_default(node, "st,mem-speed", 0);
>  	config.info.size = ofnode_read_u32_default(node, "st,mem-size", 0);
>  	config.info.name = ofnode_read_string(node, "st,mem-name");
> +	config.info.enable_asr = ofnode_read_bool(node, "st,mem-enable-asr");
>  	if (!config.info.name) {
>  		dev_dbg(dev, "no st,mem-name\n");
>  		return -EINVAL;

Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>

Thanks
Patrice

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ram: stm32mp1: Conditionally enable ASR
  2022-04-14 17:34     ` Marek Vasut
@ 2022-04-26 10:49       ` Patrick DELAUNAY
  2022-04-26 11:27         ` Patrick DELAUNAY
  0 siblings, 1 reply; 7+ messages in thread
From: Patrick DELAUNAY @ 2022-04-26 10:49 UTC (permalink / raw)
  To: Marek Vasut, u-boot; +Cc: Patrice Chotard, nicolas.le.bayon

Hi Marek,

On 4/14/22 19:34, Marek Vasut wrote:
> On 4/14/22 18:48, Marek Vasut wrote:
>> On 4/14/22 18:37, Patrick DELAUNAY wrote:
>>> Hi Marek,
>>
>> Hi,
>>
>>> on ST platform the ASR/SSR/HSR request are already provided by the 
>>> DDR settings with pwrctl register value
>>>
>>> it is managed in TF-A by
>>>
>>> arm-trusted-firmware/drivers/st/ddr/stm32mp1_ddr_helpers.c
>>
>> Sure, I don't use ATF and I have no intention of ever using ATF on 
>> this platform.


Yes i know.


>>
>>> enumstm32mp1_ddr_sr_mode ddr_read_sr_mode(void)
>>> {
>>> uint32_tpwrctl = mmio_read_32(stm32mp_ddrctrl_base() + DDRCTRL_PWRCTL);
>>> switch(pwrctl & (DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE |
>>> DDRCTRL_PWRCTL_SELFREF_EN)) {
>>> case0U:
>>> returnDDR_SSR_MODE;
>>> caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE:
>>> returnDDR_HSR_MODE;
>>> caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE | DDRCTRL_PWRCTL_SELFREF_EN:
>>> returnDDR_ASR_MODE;
>>> default:
>>> returnDDR_SR_MODE_INVALID;
>>> }
>>> }
>>>
>>> no need to add an other property
>>
>> This is for U-Boot, plain, stock, without any other software 
>> partaking in it.
>
> Note that this patch just reinstates the old behavior before v2022.04 
> release, except it adds a DT property to enable the new behavior with 
> ASR and makes it non-default.


I agree that ASR can't be activated by default to avoid issue, so the 
previous shortcut

(always activate ASR in SPL) must be changed.


Today my concerns is only the binding.

The same binding for DDR sub system (control and PHY) must be shared by 
all the bootloader; It is my request.

in stm32mp1_ddr_setup() = ddr_set_sr_mode(ddr_read_sr_mode());

The ASR activation is already managed by existing binding with the 
pwrctl register value => DDR_PWRCTL in ./arch/arm/dts/stm32mp15-ddr.dtsi

as it is explained in ST Microelectronics documentation (AN5168: DDR 
configuration on STM32MP1 Series MPUs) and managed by the tool CubeMX 
and TF-A driver.


I propose to do the same, by using the same/existing binding, so the 
same DDR configuration file

generated by CubeMX tools can be used of TF-A and SPL

=> ASR deactivated by default when the

in stm32mp1_ddr_setup() = ddr_set_sr_mode(ddr_read_sr_mode());

requested pwrctl value is 0x0 (default today)

=> ASR is activated when it is request with pwrctl value

So in futur the HSR mode could be also added, as it is done today in TF-A stm32mp1_ddr_setup() =
	ddr_set_sr_mode(ddr_read_sr_mode());


> diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.c b/drivers/ram/stm32mp1/stm32mp1_ddr.c
> index 528a171b454..fd11e02aff4 100644
> --- a/drivers/ram/stm32mp1/stm32mp1_ddr.c
> +++ b/drivers/ram/stm32mp1/stm32mp1_ddr.c
> @@ -845,7 +845,8 @@ start:
>  				 config->c_reg.pwrctl);
>  
>  /* Enable auto-self-refresh, which saves a bit of power at runtime. */
> -	stm32mp1_asr_enable(priv);
> +	if (config->info.enable_asr)
> +		stm32mp1_asr_enable(priv);

I propose (based on TF-A code = ddr_read_sr_mode())


/* Enable auto-self-refresh, which saves a bit of power at runtime. */
-	stm32mp1_asr_enable(priv);

+ if (config->c_reg.pwrctl & (DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE | 
DDRCTRL_PWRCTL_SELFREF_EN) == DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE | 
DDRCTRL_PWRCTL_SELFREF_EN)

+ stm32mp1_asr_enable(priv);


With

#define DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE    BIT(3)

If one board need to activate the ASR mode, the associated field in the 
DDR node need to be change, with:

#define DDR_PWRCTL 0x00000009


Regards,


Patrick


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ram: stm32mp1: Conditionally enable ASR
  2022-04-26 10:49       ` Patrick DELAUNAY
@ 2022-04-26 11:27         ` Patrick DELAUNAY
  0 siblings, 0 replies; 7+ messages in thread
From: Patrick DELAUNAY @ 2022-04-26 11:27 UTC (permalink / raw)
  To: Marek Vasut, u-boot; +Cc: Patrice Chotard, nicolas.le.bayon


On 4/26/22 12:49, Patrick DELAUNAY wrote:
> Hi Marek,
>
> On 4/14/22 19:34, Marek Vasut wrote:
>> On 4/14/22 18:48, Marek Vasut wrote:
>>> On 4/14/22 18:37, Patrick DELAUNAY wrote:
>>>> Hi Marek,
>>>
>>> Hi,
>>>
>>>> on ST platform the ASR/SSR/HSR request are already provided by the 
>>>> DDR settings with pwrctl register value
>>>>
>>>> it is managed in TF-A by
>>>>
>>>> arm-trusted-firmware/drivers/st/ddr/stm32mp1_ddr_helpers.c
>>>
>>> Sure, I don't use ATF and I have no intention of ever using ATF on 
>>> this platform.
>
>
> Yes i know.
>
>
>>>
>>>> enumstm32mp1_ddr_sr_mode ddr_read_sr_mode(void)
>>>> {
>>>> uint32_tpwrctl = mmio_read_32(stm32mp_ddrctrl_base() + 
>>>> DDRCTRL_PWRCTL);
>>>> switch(pwrctl & (DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE |
>>>> DDRCTRL_PWRCTL_SELFREF_EN)) {
>>>> case0U:
>>>> returnDDR_SSR_MODE;
>>>> caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE:
>>>> returnDDR_HSR_MODE;
>>>> caseDDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE | 
>>>> DDRCTRL_PWRCTL_SELFREF_EN:
>>>> returnDDR_ASR_MODE;
>>>> default:
>>>> returnDDR_SR_MODE_INVALID;
>>>> }
>>>> }
>>>>
>>>> no need to add an other property
>>>
>>> This is for U-Boot, plain, stock, without any other software 
>>> partaking in it.
>>
>> Note that this patch just reinstates the old behavior before v2022.04 
>> release, except it adds a DT property to enable the new behavior with 
>> ASR and makes it non-default.
>
>
> I agree that ASR can't be activated by default to avoid issue, so the 
> previous shortcut
>
> (always activate ASR in SPL) must be changed.
>
>
> Today my concerns is only the binding.
>
> The same binding for DDR sub system (control and PHY) must be shared 
> by all the bootloader; It is my request.
>
> in stm32mp1_ddr_setup() = ddr_set_sr_mode(ddr_read_sr_mode());
>
> The ASR activation is already managed by existing binding with the 
> pwrctl register value => DDR_PWRCTL in ./arch/arm/dts/stm32mp15-ddr.dtsi
>
> as it is explained in ST Microelectronics documentation (AN5168: DDR 
> configuration on STM32MP1 Series MPUs) and managed by the tool CubeMX 
> and TF-A driver.
>
>
> I propose to do the same, by using the same/existing binding, so the 
> same DDR configuration file
>
> generated by CubeMX tools can be used of TF-A and SPL
>
> => ASR deactivated by default when the
>
> in stm32mp1_ddr_setup() = ddr_set_sr_mode(ddr_read_sr_mode());
>
> requested pwrctl value is 0x0 (default today)
>
> => ASR is activated when it is request with pwrctl value
>
> So in futur the HSR mode could be also added, as it is done today in 
> TF-A stm32mp1_ddr_setup() =
>     ddr_set_sr_mode(ddr_read_sr_mode());
>
>
>> diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.c 
>> b/drivers/ram/stm32mp1/stm32mp1_ddr.c
>> index 528a171b454..fd11e02aff4 100644
>> --- a/drivers/ram/stm32mp1/stm32mp1_ddr.c
>> +++ b/drivers/ram/stm32mp1/stm32mp1_ddr.c
>> @@ -845,7 +845,8 @@ start:
>>                   config->c_reg.pwrctl);
>>
>>  /* Enable auto-self-refresh, which saves a bit of power at runtime. */
>> -    stm32mp1_asr_enable(priv);
>> +    if (config->info.enable_asr)
>> +        stm32mp1_asr_enable(priv);
>
> I propose (based on TF-A code = ddr_read_sr_mode())
>
>
> /* Enable auto-self-refresh, which saves a bit of power at runtime. */
> -    stm32mp1_asr_enable(priv);
>
> + if (config->c_reg.pwrctl & (DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE | 
> DDRCTRL_PWRCTL_SELFREF_EN) == DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE | 
> DDRCTRL_PWRCTL_SELFREF_EN)
>
> + stm32mp1_asr_enable(priv);
>
>
> With
>
> #define DDRCTRL_PWRCTL_EN_DFI_DRAM_CLK_DISABLE    BIT(3)
>
> If one board need to activate the ASR mode, the associated field in 
> the DDR node need to be change, with:
>
> #define DDR_PWRCTL 0x00000009
>
>
> Regards,
>
>
> Patrick
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-04-26 11:27 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-13  2:49 [PATCH] ram: stm32mp1: Conditionally enable ASR Marek Vasut
2022-04-14 16:37 ` Patrick DELAUNAY
2022-04-14 16:48   ` Marek Vasut
2022-04-14 17:34     ` Marek Vasut
2022-04-26 10:49       ` Patrick DELAUNAY
2022-04-26 11:27         ` Patrick DELAUNAY
2022-04-22  7:57 ` Patrice CHOTARD

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.