|
@@ -195,50 +195,52 @@ int at91_clock_init(unsigned long main_clock)
|
|
void at91_plla_init(u32 pllar)
|
|
void at91_plla_init(u32 pllar)
|
|
{
|
|
{
|
|
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
|
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
|
- int timeout = AT91_PLL_LOCK_TIMEOUT;
|
|
|
|
|
|
|
|
writel(pllar, &pmc->pllar);
|
|
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)
|
|
void at91_pllb_init(u32 pllbr)
|
|
{
|
|
{
|
|
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
|
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
|
- int timeout = AT91_PLL_LOCK_TIMEOUT;
|
|
|
|
|
|
|
|
writel(pllbr, &pmc->pllbr);
|
|
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)
|
|
void at91_mck_init(u32 mckr)
|
|
{
|
|
{
|
|
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
|
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
|
|
- int timeout = AT91_PLL_LOCK_TIMEOUT;
|
|
|
|
u32 tmp;
|
|
u32 tmp;
|
|
|
|
|
|
tmp = readl(&pmc->mckr);
|
|
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);
|
|
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)
|
|
void at91_periph_clk_enable(int id)
|