ARM: atmel: arm926ejs: fix clock configuration
Config MCKR according to the datasheet sequence, or else it will cause the MCKR configuration failed. Remove timeout checking for clock configuration, if configure the clock failed, let the system hang while not run in wrong clock configuration. Signed-off-by: Bo Shen <voice.shen@atmel.com> Tested-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
23ac62d4c7
commit
72cb3b6b54
@ -195,50 +195,52 @@ int at91_clock_init(unsigned long main_clock)
|
||||
void at91_plla_init(u32 pllar)
|
||||
{
|
||||
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
||||
int timeout = AT91_PLL_LOCK_TIMEOUT;
|
||||
|
||||
writel(pllar, &pmc->pllar);
|
||||
while (!(readl(&pmc->sr) & (AT91_PMC_LOCKA | AT91_PMC_MCKRDY))) {
|
||||
timeout--;
|
||||
if (timeout == 0)
|
||||
break;
|
||||
}
|
||||
while (!(readl(&pmc->sr) & AT91_PMC_LOCKA))
|
||||
;
|
||||
}
|
||||
void at91_pllb_init(u32 pllbr)
|
||||
{
|
||||
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
||||
int timeout = AT91_PLL_LOCK_TIMEOUT;
|
||||
|
||||
writel(pllbr, &pmc->pllbr);
|
||||
while (!(readl(&pmc->sr) & (AT91_PMC_LOCKB | AT91_PMC_MCKRDY))) {
|
||||
timeout--;
|
||||
if (timeout == 0)
|
||||
break;
|
||||
}
|
||||
while (!(readl(&pmc->sr) & AT91_PMC_LOCKB))
|
||||
;
|
||||
}
|
||||
|
||||
void at91_mck_init(u32 mckr)
|
||||
{
|
||||
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
||||
int timeout = AT91_PLL_LOCK_TIMEOUT;
|
||||
u32 tmp;
|
||||
|
||||
tmp = readl(&pmc->mckr);
|
||||
tmp &= ~(AT91_PMC_MCKR_PRES_MASK |
|
||||
AT91_PMC_MCKR_MDIV_MASK |
|
||||
AT91_PMC_MCKR_PLLADIV_MASK |
|
||||
AT91_PMC_MCKR_CSS_MASK);
|
||||
tmp |= mckr & (AT91_PMC_MCKR_PRES_MASK |
|
||||
AT91_PMC_MCKR_MDIV_MASK |
|
||||
AT91_PMC_MCKR_PLLADIV_MASK |
|
||||
AT91_PMC_MCKR_CSS_MASK);
|
||||
tmp &= ~AT91_PMC_MCKR_PRES_MASK;
|
||||
tmp |= mckr & AT91_PMC_MCKR_PRES_MASK;
|
||||
writel(tmp, &pmc->mckr);
|
||||
while (!(readl(&pmc->sr) & AT91_PMC_MCKRDY))
|
||||
;
|
||||
|
||||
while (!(readl(&pmc->sr) & AT91_PMC_MCKRDY)) {
|
||||
timeout--;
|
||||
if (timeout == 0)
|
||||
break;
|
||||
}
|
||||
tmp = readl(&pmc->mckr);
|
||||
tmp &= ~AT91_PMC_MCKR_MDIV_MASK;
|
||||
tmp |= mckr & AT91_PMC_MCKR_MDIV_MASK;
|
||||
writel(tmp, &pmc->mckr);
|
||||
while (!(readl(&pmc->sr) & AT91_PMC_MCKRDY))
|
||||
;
|
||||
|
||||
tmp = readl(&pmc->mckr);
|
||||
tmp &= ~AT91_PMC_MCKR_PLLADIV_MASK;
|
||||
tmp |= mckr & AT91_PMC_MCKR_PLLADIV_MASK;
|
||||
writel(tmp, &pmc->mckr);
|
||||
while (!(readl(&pmc->sr) & AT91_PMC_MCKRDY))
|
||||
;
|
||||
|
||||
tmp = readl(&pmc->mckr);
|
||||
tmp &= ~AT91_PMC_MCKR_CSS_MASK;
|
||||
tmp |= mckr & AT91_PMC_MCKR_CSS_MASK;
|
||||
writel(tmp, &pmc->mckr);
|
||||
while (!(readl(&pmc->sr) & AT91_PMC_MCKRDY))
|
||||
;
|
||||
}
|
||||
|
||||
void at91_periph_clk_enable(int id)
|
||||
|
Loading…
Reference in New Issue
Block a user