Skip to content
Snippets Groups Projects
Commit cac833a9 authored by Dirk Behme's avatar Dirk Behme Committed by Albert ARIBAUD
Browse files

i.MX6: Add ANATOP regulator init


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: default avatarDirk 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>
parent ecb7be29
No related branches found
No related tags found
No related merge requests found
...@@ -77,10 +77,40 @@ void init_aips(void) ...@@ -77,10 +77,40 @@ void init_aips(void)
writel(0x00000000, &aips2->opacr4); writel(0x00000000, &aips2->opacr4);
} }
/*
* Set the VDDSOC
*
* Mask out the REG_CORE[22:18] bits (REG2_TRIG) and set
* them to the specified millivolt level.
* Possible values are from 0.725V to 1.450V in steps of
* 0.025V (25mV).
*/
void set_vddsoc(u32 mv)
{
struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
u32 val, reg = readl(&anatop->reg_core);
if (mv < 725)
val = 0x00; /* Power gated off */
else if (mv > 1450)
val = 0x1F; /* Power FET switched full on. No regulation */
else
val = (mv - 700) / 25;
/*
* Mask out the REG_CORE[22:18] bits (REG2_TRIG)
* and set them to the calculated value (0.7V + val * 0.25V)
*/
reg = (reg & ~(0x1F << 18)) | (val << 18);
writel(reg, &anatop->reg_core);
}
int arch_cpu_init(void) int arch_cpu_init(void)
{ {
init_aips(); init_aips();
set_vddsoc(1200); /* Set VDDSOC to 1.2V */
return 0; return 0;
} }
#endif #endif
......
...@@ -28,6 +28,8 @@ ...@@ -28,6 +28,8 @@
u32 get_cpu_rev(void); u32 get_cpu_rev(void);
void set_vddsoc(u32 mv);
/* /*
* Initializes on-chip ethernet controllers. * Initializes on-chip ethernet controllers.
* to override, implement board_eth_init() * to override, implement board_eth_init()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment