[U-Boot] [PATCH 3/4] mx25: Add function to set PER clocks

Stefano Babic
2017-05-31T08:50:40Z

On 03/05/2017 11:59, Benoît Thébaudeau wrote:
> Introduce the imx_set_perclk() function to make it possible to set the
> PER clocks.
>
> Signed-off-by: Benoît Thébaudeau <benoit@wsystem.com>
> ---
> arch/arm/cpu/arm926ejs/mx25/generic.c | 19 +++++++++++++++++++
> arch/arm/include/asm/arch-mx25/clock.h | 1 +
> 2 files changed, 20 insertions(+)
>
> diff --git a/arch/arm/cpu/arm926ejs/mx25/generic.c b/arch/arm/cpu/arm926ejs/mx25/generic.c
> index f02cffb..5d9bc6c 100644
> --- a/arch/arm/cpu/arm926ejs/mx25/generic.c
> +++ b/arch/arm/cpu/arm926ejs/mx25/generic.c
> @@ -113,6 +113,25 @@ static ulong imx_get_perclk(int clk)
> return fref / div;
> }
>
> +int imx_set_perclk(enum mxc_clock clk, bool from_upll, unsigned int freq)
> +{
> + struct ccm_regs *ccm = (struct ccm_regs *)IMX_CCM_BASE;
> + ulong fref = from_upll ? imx_get_upllclk() : imx_get_ahbclk();
> + ulong div = (fref + freq - 1) / freq;
> +
> + if (clk > MXC_UART_CLK || !div || --div > CCM_PERCLK_MASK)
> + return -EINVAL;
> +
> + clrsetbits_le32(&ccm->pcdr[CCM_PERCLK_REG(clk)],
> + CCM_PERCLK_MASK << CCM_PERCLK_SHIFT(clk),
> + div << CCM_PERCLK_SHIFT(clk));
> + if (from_upll)
> + setbits_le32(&ccm->mcr, 1 << clk);
> + else
> + clrbits_le32(&ccm->mcr, 1 << clk);
> + return 0;
> +}
> +
> unsigned int mxc_get_clock(enum mxc_clock clk)
> {
> if (clk >= MXC_CLK_NUM)
> diff --git a/arch/arm/include/asm/arch-mx25/clock.h b/arch/arm/include/asm/arch-mx25/clock.h
> index 9fdaa9d..7753caf 100644
> --- a/arch/arm/include/asm/arch-mx25/clock.h
> +++ b/arch/arm/include/asm/arch-mx25/clock.h
> @@ -51,6 +51,7 @@ enum mxc_clock {
> MXC_CLK_NUM
> };
>
> +int imx_set_perclk(enum mxc_clock clk, bool from_upll, unsigned int freq);
> unsigned int mxc_get_clock(enum mxc_clock clk);
>
> #define imx_get_uartclk() mxc_get_clock(MXC_UART_CLK)
>
Applied to u-boot-imx -master, thanks !

Best regards,
Stefano Babic

--
=====================================================================
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================