> -----Original Message----- > From: Premi, Sanjeev > Sent: Friday, January 29, 2010 6:44 PM > To: u-boot@lists.denx.de > Cc: Premi, Sanjeev; Hiremath, Vaibhav > Subject: [PATCHv2] OMAP3: Avoid re-write to PRM_CLKSRC_CTRL > > The function get_osc_clk_speed() is used to determine the master > clock. If SYS_CLK is being divided by 2, the divider is changed > to 1 - without following any sequence. > > Before reaching this function, some of the clocks have already > been set (by x-loader or equiv) OR power-on defaults are in use. > This change is too sudden, leading to instability beyond certain > tolerance zone. > > The problem was observed with DM3730 (silimar to OMAP3630), on > the OMAP3EVM. > > This patch removes the step to change clock divider. Instead, > uses a multiplication factor (if needed). Mathematically, the > formula is unchanged. > > Tested on OMAP3EVM with OMAP3530 and DM3730. > > Signed-off-by: Sanjeev Premi <pr...@ti.com> > Signed-off-by: Hiremath Vaibhav <hvaib...@ti.com> > --- > cpu/arm_cortexa8/omap3/clock.c | 15 +++++++++++---- > 1 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/cpu/arm_cortexa8/omap3/clock.c > b/cpu/arm_cortexa8/omap3/clock.c > index 174c453..e8189b4 100644 > --- a/cpu/arm_cortexa8/omap3/clock.c > +++ b/cpu/arm_cortexa8/omap3/clock.c > @@ -40,7 +40,7 @@ > > ************************************************************** > ***************/ > u32 get_osc_clk_speed(void) > { > - u32 start, cstart, cend, cdiff, val; > + u32 start, cstart, cend, cdiff, cdiv, val; > struct prcm *prcm_base = (struct prcm *)PRCM_BASE; > struct prm *prm_base = (struct prm *)PRM_BASE; > struct gptimer *gpt1_base = (struct gptimer *)OMAP34XX_GPT1; > @@ -48,9 +48,13 @@ u32 get_osc_clk_speed(void) > > val = readl(&prm_base->clksrc_ctrl); > > - /* If SYS_CLK is being divided by 2, remove for now */ > - val = (val & (~SYSCLKDIV_2)) | SYSCLKDIV_1; > - writel(val, &prm_base->clksrc_ctrl); > + if (val & SYSCLKDIV_2) > + cdiv = 2; > + else if (val & SYSCLKDIV_1) > + cdiv = 1; > + else > + /*Should never reach here! (Assume divider as 1) */ > + cdiv = 1; > > /* enable timer2 */ > val = readl(&prcm_base->clksel_wkup) | CLKSEL_GPT1; > @@ -83,6 +87,9 @@ u32 get_osc_clk_speed(void) > cend = readl(&gpt1_base->tcrr); /* get end > sys_clk count */ > cdiff = cend - cstart; /* get elapsed ticks */ > > + if (cdiv == 2) > + cdiff *= 2; > + > /* based on number of ticks assign speed */ > if (cdiff > 19000) > return S38_4M; > -- > 1.6.2.2 > >
Tom, Sandeep, Just wanted to check the status of this patch. Best regards, Sanjeev _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot