Re: [U-Boot] [PATCH] arm: exynos: fix clock calculation

2013-07-07 Thread Rajeshwari Birje
Hi Minkyu Kang,

On Fri, Jul 5, 2013 at 3:43 PM, Minkyu Kang mk7.k...@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.k...@samsung.com
 Signed-off-by: Rajeshwari Shinde rajeshwar...@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@lists.denx.de
 http://lists.denx.de/mailman/listinfo/u-boot



-- 
Regards,
Rajeshwari Shinde
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH] arm: exynos: fix clock calculation

2013-07-05 Thread Minkyu Kang
There are differnce with clock calcuation by cpu variations.
This patch will fix it according to user manual.

Signed-off-by: Minkyu Kang mk7.k...@samsung.com
Signed-off-by: Rajeshwari Shinde rajeshwar...@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;
+   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@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot