Patchwork [U-Boot] i.MX6: Add ANATOP regulator init

login
register
mail settings
Submitter Dirk Behme
Date April 13, 2012, 8 a.m.
Message ID <1334304028-25575-1-git-send-email-dirk.behme@de.bosch.com>
Download mbox | patch
Permalink /patch/152259/
State Changes Requested
Headers show

Comments

Dirk Behme - April 13, 2012, 8 a.m.
Init the core regulator voltage to 1.2V. This is required for the correct
functioning of the GPU and when the ARM LDO is set to 1.225V. This is a
workaround to fix some memory clock jitter.

Note: This should be but can't be done in the DCD. The bootloader
      prevents access to the ANATOP registers.

Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
CC: Jason Chen <b02280@freescale.com>
CC: Jason Liu <r64343@freescale.com>
CC: Ranjani Vaidyanathan <ra5478@freescale.com>
CC: Stefano Babic <sbabic@denx.de>
CC: Fabio Estevam <festevam@gmail.com>
---
 arch/arm/cpu/armv7/mx6/soc.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)
Dirk Behme - April 18, 2012, 10:41 a.m.
On 13.04.2012 10:00, Dirk Behme wrote:
> Init the core regulator voltage to 1.2V. This is required for the correct
> functioning of the GPU and when the ARM LDO is set to 1.225V. This is a
> workaround to fix some memory clock jitter.
> 
> Note: This should be but can't be done in the DCD. The bootloader
>       prevents access to the ANATOP registers.
> 
> Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
> CC: Jason Chen <b02280@freescale.com>
> CC: Jason Liu <r64343@freescale.com>
> CC: Ranjani Vaidyanathan <ra5478@freescale.com>
> CC: Stefano Babic <sbabic@denx.de>
> CC: Fabio Estevam <festevam@gmail.com>
> ---
>  arch/arm/cpu/armv7/mx6/soc.c |   16 ++++++++++++++++
>  1 files changed, 16 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
> index 543b2cc..957ea34 100644
> --- a/arch/arm/cpu/armv7/mx6/soc.c
> +++ b/arch/arm/cpu/armv7/mx6/soc.c
> @@ -77,10 +77,26 @@ void init_aips(void)
>  	writel(0x00000000, &aips2->opacr4);
>  }
>  
> +static void init_anatop_reg(void)
> +{
> +	struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
> +	int reg = readl(&anatop->reg_core);
> +
> +	/*
> +	 * Increase the VDDSOC to 1.2V
> +	 * Mask out the REG_CORE[22:18] bits (REG2_TRIG)
> +	 * and set them to 1.2V (0.7V + 0x14 * 0.025V)
> +	 */
> +	reg = (reg & ~(0x1F << 18)) | (0x14 << 18);
> +	writel(reg, &anatop->reg_core);
> +}
> +
>  int arch_cpu_init(void)
>  {
>  	init_aips();
>  
> +	init_anatop_reg();
> +
>  	return 0;
>  }
>  #endif

Any comments on this?

Many thanks

Dirk
Jason Liu - April 18, 2012, 11:05 a.m.
2012/4/13 Dirk Behme <dirk.behme@de.bosch.com>:
> Init the core regulator voltage to 1.2V. This is required for the correct
> functioning of the GPU and when the ARM LDO is set to 1.225V. This is a
> workaround to fix some memory clock jitter.
>
> Note: This should be but can't be done in the DCD. The bootloader
>      prevents access to the ANATOP registers.
>
> Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
> CC: Jason Chen <b02280@freescale.com>
> CC: Jason Liu <r64343@freescale.com>
> CC: Ranjani Vaidyanathan <ra5478@freescale.com>
> CC: Stefano Babic <sbabic@denx.de>
> CC: Fabio Estevam <festevam@gmail.com>
> ---
>  arch/arm/cpu/armv7/mx6/soc.c |   16 ++++++++++++++++
>  1 files changed, 16 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
> index 543b2cc..957ea34 100644
> --- a/arch/arm/cpu/armv7/mx6/soc.c
> +++ b/arch/arm/cpu/armv7/mx6/soc.c
> @@ -77,10 +77,26 @@ void init_aips(void)
>        writel(0x00000000, &aips2->opacr4);
>  }
>
> +static void init_anatop_reg(void)
> +{
> +       struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
> +       int reg = readl(&anatop->reg_core);
> +
> +       /*
> +        * Increase the VDDSOC to 1.2V
> +        * Mask out the REG_CORE[22:18] bits (REG2_TRIG)
> +        * and set them to 1.2V (0.7V + 0x14 * 0.025V)
> +        */
> +       reg = (reg & ~(0x1F << 18)) | (0x14 << 18);
> +       writel(reg, &anatop->reg_core);
> +}
> +
>  int arch_cpu_init(void)
>  {
>        init_aips();
>
> +       init_anatop_reg();
> +
>        return 0;
>  }
>  #endif

Acked-by:Jason Liu <r64343@freescale.com>

> --
> 1.7.0.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
Stefano Babic - April 23, 2012, 9:55 a.m.
On 13/04/2012 10:00, Dirk Behme wrote:
> Init the core regulator voltage to 1.2V. This is required for the correct
> functioning of the GPU and when the ARM LDO is set to 1.225V. This is a
> workaround to fix some memory clock jitter.
> 
> Note: This should be but can't be done in the DCD. The bootloader
>       prevents access to the ANATOP registers.
> 
> Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
> CC: Jason Chen <b02280@freescale.com>
> CC: Jason Liu <r64343@freescale.com>
> CC: Ranjani Vaidyanathan <ra5478@freescale.com>
> CC: Stefano Babic <sbabic@denx.de>
> CC: Fabio Estevam <festevam@gmail.com>
> ---

Hi Dirk,

> +static void init_anatop_reg(void)
> +{
> +	struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
> +	int reg = readl(&anatop->reg_core);
> +
> +	/*
> +	 * Increase the VDDSOC to 1.2V
> +	 * Mask out the REG_CORE[22:18] bits (REG2_TRIG)
> +	 * and set them to 1.2V (0.7V + 0x14 * 0.025V)
> +	 */
> +	reg = (reg & ~(0x1F << 18)) | (0x14 << 18);

Everything clear, but what do you mind to add an accessor to set this
voltage ? It is straightforward, and more boards could use it.

Best regards,
Stefano Babic
Dirk Behme - April 23, 2012, 10:16 a.m.
Hi Stefano,

On 23.04.2012 11:55, Stefano Babic wrote:
> On 13/04/2012 10:00, Dirk Behme wrote:
>> Init the core regulator voltage to 1.2V. This is required for the correct
>> functioning of the GPU and when the ARM LDO is set to 1.225V. This is a
>> workaround to fix some memory clock jitter.
>>
>> Note: This should be but can't be done in the DCD. The bootloader
>>       prevents access to the ANATOP registers.
>>
>> Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
>> CC: Jason Chen <b02280@freescale.com>
>> CC: Jason Liu <r64343@freescale.com>
>> CC: Ranjani Vaidyanathan <ra5478@freescale.com>
>> CC: Stefano Babic <sbabic@denx.de>
>> CC: Fabio Estevam <festevam@gmail.com>
>> ---
> 
> Hi Dirk,
> 
>> +static void init_anatop_reg(void)
>> +{
>> +	struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
>> +	int reg = readl(&anatop->reg_core);
>> +
>> +	/*
>> +	 * Increase the VDDSOC to 1.2V
>> +	 * Mask out the REG_CORE[22:18] bits (REG2_TRIG)
>> +	 * and set them to 1.2V (0.7V + 0x14 * 0.025V)
>> +	 */
>> +	reg = (reg & ~(0x1F << 18)) | (0x14 << 18);
> 
> Everything clear, but what do you mind to add an accessor to set this
> voltage ? It is straightforward, and more boards could use it.

Sorry, but what do you mean with "add an accessor"? Could you give an 
example?

Best regards

Dirk
Stefano Babic - April 23, 2012, 10:20 a.m.
On 23/04/2012 11:55, Stefano Babic wrote:

> 
>> +static void init_anatop_reg(void)
>> +{
>> +	struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
>> +	int reg = readl(&anatop->reg_core);
>> +
>> +	/*
>> +	 * Increase the VDDSOC to 1.2V
>> +	 * Mask out the REG_CORE[22:18] bits (REG2_TRIG)
>> +	 * and set them to 1.2V (0.7V + 0x14 * 0.025V)
>> +	 */
>> +	reg = (reg & ~(0x1F << 18)) | (0x14 << 18);
> 
> Everything clear, but what do you mind to add an accessor to set this
> voltage ? It is straightforward, and more boards could use it.

Well, sometimes I am quite obscure, maybe I need more coffeine before
writing my answers ;-)

What I mean is to change the function name to something like
set_vddsoc(mV), and exporting it dropping the static clause.

Stefano

Patch

diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
index 543b2cc..957ea34 100644
--- a/arch/arm/cpu/armv7/mx6/soc.c
+++ b/arch/arm/cpu/armv7/mx6/soc.c
@@ -77,10 +77,26 @@  void init_aips(void)
 	writel(0x00000000, &aips2->opacr4);
 }
 
+static void init_anatop_reg(void)
+{
+	struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
+	int reg = readl(&anatop->reg_core);
+
+	/*
+	 * Increase the VDDSOC to 1.2V
+	 * Mask out the REG_CORE[22:18] bits (REG2_TRIG)
+	 * and set them to 1.2V (0.7V + 0x14 * 0.025V)
+	 */
+	reg = (reg & ~(0x1F << 18)) | (0x14 << 18);
+	writel(reg, &anatop->reg_core);
+}
+
 int arch_cpu_init(void)
 {
 	init_aips();
 
+	init_anatop_reg();
+
 	return 0;
 }
 #endif