[U-Boot] [RFC PATCH 5/7] arm: atmel: add plla and mck initialize function

Andreas Bießmann andreas.devel at googlemail.com
Wed Oct 30 12:21:57 CET 2013


Hi Bo,

On 10/30/2013 10:15 AM, Bo Shen wrote:
> Add plla and mck initialize function.
> 
> Signed-off-by: Bo Shen <voice.shen at atmel.com>
> ---
>  arch/arm/cpu/armv7/at91/clock.c              |   27 ++++++++++++++++++++++++++
>  arch/arm/include/asm/arch-at91/at91_common.h |    2 ++
>  2 files changed, 29 insertions(+)
> 
> diff --git a/arch/arm/cpu/armv7/at91/clock.c b/arch/arm/cpu/armv7/at91/clock.c
> index 1588e0c..ec92950 100644
> --- a/arch/arm/cpu/armv7/at91/clock.c
> +++ b/arch/arm/cpu/armv7/at91/clock.c
> @@ -120,3 +120,30 @@ void at91_periph_clk_enable(int id)
>  	else
>  		writel(1 << id, &pmc->pcer);
>  }
> +
> +void at91_plla_init(u32 pllar, int timeout)
> +{
> +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
> +
> +	writel(pllar, &pmc->pllar);
> +	while (!(readl(&pmc->sr) & (AT91_PMC_LOCKA | AT91_PMC_MCKRDY)))
> +		timeout--;

I do not understand use of this timeout here ... You do not check it nor
return something ... It would make sense to add an check into the wile()
and return upon the state of timeout true/false.
This however is not needed here cause we either succeed to setup the PLL
or not. If not we could not proceed anyways, so why check it here?

In connection with a watchdog it could make sense to kick it while
waiting for PLL initialisation.

> +}
> +
> +void at91_mck_init(u32 mckr, int timeout)

I wonder if it would make sense to abstract the functionality of mckr to
the function parameters. Something like 'I want to set 400MHz, do it for
me'. Maybe this doesn't make any sense, lets discuss.

> +{
> +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
> +	u32 tmp;
> +
> +	tmp = readl(&pmc->mckr);
> +	tmp &= ~(AT91_PMC_MCKR_PRES_MASK |
> +		 AT91_PMC_MCKR_MDIV_MASK |
> +		 AT91_PMC_MCKR_PLLADIV_2);
> +	tmp |= mckr & (AT91_PMC_MCKR_PRES_MASK |
> +		       AT91_PMC_MCKR_MDIV_MASK |
> +		       AT91_PMC_MCKR_PLLADIV_2);
> +	writel(tmp, &pmc->mckr);
> +
> +	while (!(readl(&pmc->sr) & AT91_PMC_MCKRDY))
> +		timeout--;
> +}
> diff --git a/arch/arm/include/asm/arch-at91/at91_common.h b/arch/arm/include/asm/arch-at91/at91_common.h
> index abcb97d..a692275 100644
> --- a/arch/arm/include/asm/arch-at91/at91_common.h
> +++ b/arch/arm/include/asm/arch-at91/at91_common.h
> @@ -22,5 +22,7 @@ void at91_spi1_hw_init(unsigned long cs_mask);
>  void at91_udp_hw_init(void);
>  void at91_uhp_hw_init(void);
>  void at91_lcd_hw_init(void);
> +void at91_plla_init(u32 pllar, int timeout);
> +void at91_mck_init(u32 mckr, int timeout);
>  
>  #endif /* AT91_COMMON_H */
> 



More information about the U-Boot mailing list