MLK-17292 mx7ulp: Set A7 core frequency to 500Mhz for B0 chip
authorYe Li <ye.li@nxp.com>
Fri, 15 Dec 2017 07:28:06 +0000 (01:28 -0600)
committerYe Li <ye.li@nxp.com>
Tue, 26 Dec 2017 02:06:22 +0000 (20:06 -0600)
The normal target frequency for ULP A7 core is 500Mhz, but now ROM
set the core frequency to 413Mhz. So change it to 500Mhz in u-boot.

Signed-off-by: Ye Li <ye.li@nxp.com>
arch/arm/cpu/armv7/mx7ulp/clock.c
arch/arm/cpu/armv7/mx7ulp/scg.c
arch/arm/include/asm/arch-mx7ulp/scg.h

index 4db35e7..98d40d6 100644 (file)
@@ -302,6 +302,8 @@ void clock_init(void)
 
        scg_a7_soscdiv_init();
 
+       scg_a7_init_core_clk();
+
        /* APLL PFD1 = 270Mhz, PFD2=345.6Mhz, PFD3=800Mhz */
        scg_enable_pll_pfd(SCG_APLL_PFD1_CLK, 35);
        scg_enable_pll_pfd(SCG_APLL_PFD2_CLK, 28);
index 6eadd48..ce731eb 100644 (file)
@@ -1095,3 +1095,39 @@ void scg_a7_info(void)
        debug("SCG RCCR Value: 0x%x\n", readl(&scg1_regs->rccr));
        debug("SCG Clock Status: 0x%x\n", readl(&scg1_regs->csr));
 }
+
+void scg_a7_init_core_clk(void)
+{
+       u32 val = 0;
+
+       /* The normal target frequency for ULP B0 is 500Mhz, but ROM set it to 413Mhz, need to change SPLL PFD0 FRAC */
+       if (soc_rev() >= CHIP_REV_2_0) {
+
+               /* Switch RCCR SCG to SOSC, firstly check the SOSC is valid */
+               if ((readl(&scg1_regs->sosccsr) & SCG_SOSC_CSR_SOSCVLD_MASK)) {
+                       val = readl(&scg1_regs->rccr);
+                       val &= (~SCG_CCR_SCS_MASK);
+                       val |= ((SCG_SCS_SYS_OSC) << SCG_CCR_SCS_SHIFT);
+                       writel(val, &scg1_regs->rccr);
+
+                       /* Swith the PLLS to SPLL clk */
+                       val = readl(&scg1_regs->spllcfg);
+                       val &= ~SCG_PLL_CFG_PLLSEL_MASK;
+                       writel(val, &scg1_regs->spllcfg);
+
+                       /* Re-configure PFD0 to 19, A7 SPLL(528MHz) * 18 / 19 = 500MHz */
+                       scg_enable_pll_pfd(SCG_SPLL_PFD0_CLK, 19);
+
+                       /* Swith the PLLS to SPLL PFD0 */
+                       val = readl(&scg1_regs->spllcfg);
+                       val |= SCG_PLL_CFG_PLLSEL_MASK;
+                       writel(val, &scg1_regs->spllcfg);
+
+                       /* Set RCCR SCG to SPLL clk out */
+                       val = readl(&scg1_regs->rccr);
+                       val &= (~SCG_CCR_SCS_MASK);
+                       val |= ((SCG_SCS_SYS_PLL) << SCG_CCR_SCS_SHIFT);
+                       writel(val, &scg1_regs->rccr);
+               }
+       }
+}
index 06a6e9f..f46e52b 100644 (file)
@@ -338,5 +338,6 @@ void scg_a7_nicclk_init(void);
 void scg_a7_sys_clk_sel(enum scg_sys_src clk);
 void scg_a7_info(void);
 void scg_a7_soscdiv_init(void);
+void scg_a7_init_core_clk(void);
 
 #endif