[U-Boot] [PATCH] arm: exynos: fix clock calculation
Rajeshwari Birje
rajeshwari.birje at gmail.com
Mon Jul 8 07:35:40 CEST 2013
Hi Minkyu Kang,
On Fri, Jul 5, 2013 at 3:43 PM, Minkyu Kang <mk7.kang at samsung.com> wrote:
> There are differnce with clock calcuation by cpu variations.
> This patch will fix it according to user manual.
>
> Signed-off-by: Minkyu Kang <mk7.kang at samsung.com>
> Signed-off-by: Rajeshwari Shinde <rajeshwari.s at samsung.com>
> ---
> arch/arm/cpu/armv7/exynos/clock.c | 37 +++++++++++++++++++++++++++++++++----
> 1 file changed, 33 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/cpu/armv7/exynos/clock.c b/arch/arm/cpu/armv7/exynos/clock.c
> index e1c4246..da43373 100644
> --- a/arch/arm/cpu/armv7/exynos/clock.c
> +++ b/arch/arm/cpu/armv7/exynos/clock.c
> @@ -85,6 +85,7 @@ static struct set_epll_con_val exynos5_epll_div[] = {
> static int exynos_get_pll_clk(int pllreg, unsigned int r, unsigned int k)
> {
> unsigned long m, p, s = 0, mask, fout;
> + unsigned int div;
> unsigned int freq;
> /*
> * APLL_CON: MIDV [25:16]
> @@ -113,11 +114,39 @@ static int exynos_get_pll_clk(int pllreg, unsigned int r, unsigned int k)
> fout = (m + k / 65536) * (freq / (p * (1 << s)));
> } else if (pllreg == VPLL) {
> k = k & 0xfff;
> - /* FOUT = (MDIV + K / 1024) * FIN / (PDIV * 2^SDIV) */
> - fout = (m + k / 1024) * (freq / (p * (1 << s)));
> +
> + /*
> + * Exynos4210
> + * FOUT = (MDIV + K / 1024) * FIN / (PDIV * 2^SDIV)
> + *
> + * Exynos4412
> + * FOUT = (MDIV + K / 65535) * FIN / (PDIV * 2^SDIV)
> + *
> + * Exynos5250
> + * FOUT = (MDIV + K / 65536) * FIN / (PDIV * 2^SDIV)
> + */
> + if (proid_is_exynos4210())
> + div = 1024;
Cannot we remove these hard codings for div?
> + else if (proid_is_exynos4412())
> + div = 65535;
> + else if (proid_is_exynos5250())
> + div = 65536;
> + else
> + return 0;
> +
> + fout = (m + k / div) * (freq / (p * (1 << s)));
> } else {
> - /* FOUT = MDIV * FIN / (PDIV * 2^SDIV) */
> - fout = m * (freq / (p * (1 << s)));
> + /*
> + * Exynos4210
> + * FOUT = MDIV * FIN / (PDIV * 2^SDIV)
> + *
> + * Exynos4412 / Exynos5250
> + * FOUT = MDIV * FIN / (PDIV * 2^(SDIV-1))
> + */
> + if (proid_is_exynos4210())
> + fout = m * (freq / (p * (1 << s)));
> + else
> + fout = m * (freq / (p * (1 << (s - 1))));
> }
>
> return fout;
> --
> 1.7.9.5
>
> --
> Thanks,
> Minkyu Kang.
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
--
Regards,
Rajeshwari Shinde
More information about the U-Boot
mailing list