exynos5_get_periph_rate function reads incorrect div for
SDMMC2 & 3. It also reads prediv and does division only for
SDMMC0 & 2 when actually various other peripherals need that.
Adding changes to fix these mistakes in periph rate calculation.

Signed-off-by: Akshay Saraswat <aksha...@samsung.com>
---
Changes since v1:
        - New patch.

 arch/arm/cpu/armv7/exynos/clock.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/arm/cpu/armv7/exynos/clock.c 
b/arch/arm/cpu/armv7/exynos/clock.c
index 1ef4f49..a43e5af 100644
--- a/arch/arm/cpu/armv7/exynos/clock.c
+++ b/arch/arm/cpu/armv7/exynos/clock.c
@@ -406,10 +406,13 @@ static unsigned long exynos5_get_periph_rate(int 
peripheral)
                break;
        case PERIPH_ID_SDMMC0:
        case PERIPH_ID_SDMMC1:
+               src = readl(&clk->src_fsys);
+               div = readl(&clk->div_fsys1);
+               break;
        case PERIPH_ID_SDMMC2:
        case PERIPH_ID_SDMMC3:
                src = readl(&clk->src_fsys);
-               div = readl(&clk->div_fsys1);
+               div = readl(&clk->div_fsys2);
                break;
        case PERIPH_ID_I2C0:
        case PERIPH_ID_I2C1:
@@ -450,8 +453,7 @@ static unsigned long exynos5_get_periph_rate(int peripheral)
        sub_div = (div >> bit_info->div_bit) & 0xf;
        sub_clk = sclk / (sub_div + 1);
 
-       /* Pre-ratio clock division for SDMMC0 and 2 */
-       if (peripheral == PERIPH_ID_SDMMC0 || peripheral == PERIPH_ID_SDMMC2) {
+       if (bit_info->prediv_bit >= 0) {
                div = (div >> bit_info->prediv_bit) & 0xff;
                return sub_clk / (div + 1);
        }
-- 
1.9.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to