OMAP5: clocks: Change clock settings as required for ES1.0 silicon.
authorSRICHARAN R <r.sricharan@ti.com>
Mon, 12 Mar 2012 02:25:34 +0000 (02:25 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Tue, 15 May 2012 06:31:23 +0000 (08:31 +0200)
Aligning all the clock related settings like the dpll frequencies, their
respective clock outputs, etc to the ideal values recommended for
OMAP5430 ES1.0 silicon.

Signed-off-by: R Sricharan <r.sricharan@ti.com>
arch/arm/cpu/armv7/omap-common/clocks-common.c
arch/arm/cpu/armv7/omap5/clocks.c
arch/arm/include/asm/arch-omap5/clocks.h

index c02d73cd8ac139f930ed43d4e69571b8dba496f8..a183c34ea3db2c347a94493cb77538f0a01ec790 100644 (file)
@@ -245,6 +245,11 @@ void configure_mpu_dpll(void)
                        CM_CLKSEL_DCC_EN_MASK);
        }
 
+       setbits_le32(&prcm->cm_mpu_mpu_clkctrl,
+               MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_MASK);
+       setbits_le32(&prcm->cm_mpu_mpu_clkctrl,
+               MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_MASK);
+
        params = get_mpu_dpll_params();
 
        do_setup_dpll(&prcm->cm_clkmode_dpll_mpu, params, DPLL_LOCK, "mpu");
index 07a755658913697f488b2a08bf82deb7690d0ab8..722916e036eed26d875c495f2e727d5fd59070a6 100644 (file)
@@ -88,6 +88,26 @@ static const struct dpll_params mpu_dpll_params_1100mhz[NUM_SYS_CLKS] = {
        {1375, 47, 1, -1, -1, -1, -1, -1, -1, -1}       /* 38.4 MHz */
 };
 
+static const struct dpll_params mpu_dpll_params_800mhz[NUM_SYS_CLKS] = {
+       {200, 2, 1, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {1000, 20, 1, -1, -1, -1, -1, -1, -1, -1},      /* 16.8 MHz */
+       {375, 8, 1, -1, -1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
+       {400, 12, 1, -1, -1, -1, -1, -1, -1, -1},       /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {375, 17, 1, -1, -1, -1, -1, -1, -1, -1}                /* 38.4 MHz */
+};
+
+static const struct dpll_params mpu_dpll_params_400mhz[NUM_SYS_CLKS] = {
+       {200, 2, 2, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {1000, 20, 2, -1, -1, -1, -1, -1, -1, -1},      /* 16.8 MHz */
+       {375, 8, 2, -1, -1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
+       {400, 12, 2, -1, -1, -1, -1, -1, -1, -1},       /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {375, 17, 2, -1, -1, -1, -1, -1, -1, -1}                /* 38.4 MHz */
+};
+
 static const struct dpll_params mpu_dpll_params_550mhz[NUM_SYS_CLKS] = {
        {275, 2, 2, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
        {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
@@ -100,24 +120,24 @@ static const struct dpll_params mpu_dpll_params_550mhz[NUM_SYS_CLKS] = {
 
 static const struct dpll_params
                        core_dpll_params_2128mhz_ddr532[NUM_SYS_CLKS] = {
-       {266, 2, 1, 5, 8, 4, 62, 5, 5, 7},              /* 12 MHz   */
+       {266, 2, 2, 5, 8, 4, 62, 5, 5, 7},              /* 12 MHz   */
        {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
-       {570, 8, 1, 5, 8, 4, 62, 5, 5, 7},              /* 16.8 MHz */
-       {665, 11, 1, 5, 8, 4, 62, 5, 5, 7},             /* 19.2 MHz */
-       {532, 12, 1, 5, 8, 4, 62, 5, 5, 7},             /* 26 MHz   */
+       {570, 8, 2, 5, 8, 4, 62, 5, 5, 7},              /* 16.8 MHz */
+       {665, 11, 2, 5, 8, 4, 62, 5, 5, 7},             /* 19.2 MHz */
+       {532, 12, 2, 5, 8, 4, 62, 5, 5, 7},             /* 26 MHz   */
        {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
-       {665, 23, 1, 5, 8, 4, 62, 5, 5, 7}              /* 38.4 MHz */
+       {665, 23, 2, 5, 8, 4, 62, 5, 5, 7}              /* 38.4 MHz */
 };
 
 static const struct dpll_params
                        core_dpll_params_2128mhz_ddr266[NUM_SYS_CLKS] = {
-       {266, 2, 2, 5, 8, 4, 62, 5, 5, 7},              /* 12 MHz   */
+       {266, 2, 4, 5, 8, 8, 62, 10, 10, 14},           /* 12 MHz   */
        {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
-       {570, 8, 2, 5, 8, 4, 62, 5, 5, 7},              /* 16.8 MHz */
-       {665, 11, 2, 5, 8, 4, 62, 5, 5, 7},             /* 19.2 MHz */
-       {532, 12, 2, 5, 8, 4, 62, 5, 5, 7},             /* 26 MHz   */
+       {570, 8, 4, 5, 8, 8, 62, 10, 10, 14},           /* 16.8 MHz */
+       {665, 11, 4, 5, 8, 8, 62, 10, 10, 14},          /* 19.2 MHz */
+       {532, 12, 4, 8, 8, 8, 62, 10, 10, 14},          /* 26 MHz   */
        {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
-       {665, 23, 2, 5, 8, 4, 62, 5, 5, 7}              /* 38.4 MHz */
+       {665, 23, 4, 8, 8, 8, 62, 10, 10, 14}           /* 38.4 MHz */
 };
 
 static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = {
@@ -131,40 +151,40 @@ static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = {
 };
 
 static const struct dpll_params iva_dpll_params_2330mhz[NUM_SYS_CLKS] = {
-       {931, 11, -1, -1, 4, 7, -1, -1},        /* 12 MHz   */
-       {931, 12, -1, -1, 4, 7, -1, -1},        /* 13 MHz   */
-       {665, 11, -1, -1, 4, 7, -1, -1},        /* 16.8 MHz */
-       {727, 14, -1, -1, 4, 7, -1, -1},        /* 19.2 MHz */
-       {931, 25, -1, -1, 4, 7, -1, -1},        /* 26 MHz   */
-       {931, 26, -1, -1, 4, 7, -1, -1},        /* 27 MHz   */
-       {412, 16, -1, -1, 4, 7, -1, -1}         /* 38.4 MHz */
+       {1165, 11, -1, -1, 5, 6, -1, -1, -1, -1},       /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {2011, 28, -1, -1, 5, 6, -1, -1, -1, -1},       /* 16.8 MHz */
+       {1881, 30, -1, -1, 5, 6, -1, -1, -1, -1},       /* 19.2 MHz */
+       {1165, 25, -1, -1, 5, 6, -1, -1, -1, -1},       /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {1972, 64, -1, -1, 5, 6, -1, -1, -1, -1}        /* 38.4 MHz */
 };
 
 /* ABE M & N values with sys_clk as source */
 static const struct dpll_params
                abe_dpll_params_sysclk_196608khz[NUM_SYS_CLKS] = {
-       {49, 5, 1, 1, -1, -1, -1, -1},  /* 12 MHz   */
-       {68, 8, 1, 1, -1, -1, -1, -1},  /* 13 MHz   */
-       {35, 5, 1, 1, -1, -1, -1, -1},  /* 16.8 MHz */
-       {46, 8, 1, 1, -1, -1, -1, -1},  /* 19.2 MHz */
-       {34, 8, 1, 1, -1, -1, -1, -1},  /* 26 MHz   */
-       {29, 7, 1, 1, -1, -1, -1, -1},  /* 27 MHz   */
-       {64, 24, 1, 1, -1, -1, -1, -1}  /* 38.4 MHz */
+       {49, 5, 1, -1, -1, -1, -1, -1, -1, -1},         /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {35, 5, 1, 1, -1, -1, -1, -1, -1, -1},          /* 16.8 MHz */
+       {46, 8, 1, 1, -1, -1, -1, -1, -1, -1},          /* 19.2 MHz */
+       {34, 8, 1, 1, -1, -1, -1, -1, -1, -1},          /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {64, 24, 1, 1, -1, -1, -1, -1, -1, -1}          /* 38.4 MHz */
 };
 
 /* ABE M & N values with 32K clock as source */
 static const struct dpll_params abe_dpll_params_32k_196608khz = {
-       750, 0, 1, 1, -1, -1, -1, -1
+       750, 0, 1, 1, -1, -1, -1, -1, -1, -1
 };
 
 static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {
-       {80, 0, 2, -1, -1, -1, -1, -1},         /* 12 MHz   */
-       {960, 12, 2, -1, -1, -1, -1, -1},       /* 13 MHz   */
-       {400, 6, 2, -1, -1, -1, -1, -1},        /* 16.8 MHz */
-       {50, 0, 2, -1, -1, -1, -1, -1},         /* 19.2 MHz */
-       {480, 12, 2, -1, -1, -1, -1, -1},       /* 26 MHz   */
-       {320, 8, 2, -1, -1, -1, -1, -1},        /* 27 MHz   */
-       {25, 0, 2, -1, -1, -1, -1, -1}          /* 38.4 MHz */
+       {400, 4, 2, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
+       {400, 6, 2, -1, -1, -1, -1, -1, -1, -1},        /* 16.8 MHz */
+       {400, 7, 2, -1, -1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
+       {480, 12, 2, -1, -1, -1, -1, -1, -1, -1},       /* 26 MHz   */
+       {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
+       {400, 15, 2, -1, -1, -1, -1, -1, -1, -1}        /* 38.4 MHz */
 };
 
 void setup_post_dividers(u32 *const base, const struct dpll_params *params)
@@ -193,7 +213,7 @@ void setup_post_dividers(u32 *const base, const struct dpll_params *params)
 const struct dpll_params *get_mpu_dpll_params(void)
 {
        u32 sysclk_ind = get_sys_clk_index();
-       return &mpu_dpll_params_1100mhz[sysclk_ind];
+       return &mpu_dpll_params_800mhz[sysclk_ind];
 }
 
 const struct dpll_params *get_core_dpll_params(void)
@@ -201,8 +221,7 @@ const struct dpll_params *get_core_dpll_params(void)
        u32 sysclk_ind = get_sys_clk_index();
 
        /* Configuring the DDR to be at 532mhz */
-       return &core_dpll_params_2128mhz_ddr266[sysclk_ind];
-
+       return &core_dpll_params_2128mhz_ddr532[sysclk_ind];
 }
 
 const struct dpll_params *get_per_dpll_params(void)
@@ -306,6 +325,12 @@ void enable_basic_clocks(void)
        setbits_le32(&prcm->cm_l3init_hsmmc2_clkctrl,
                        HSMMC_CLKCTRL_CLKSEL_MASK);
 
+       /* Set the correct clock dividers for mmc */
+       setbits_le32(&prcm->cm_l3init_hsmmc1_clkctrl,
+                       HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
+       setbits_le32(&prcm->cm_l3init_hsmmc2_clkctrl,
+                       HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
+
        /* Select 32KHz clock as the source of GPTIMER1 */
        setbits_le32(&prcm->cm_wkup_gptimer1_clkctrl,
                        GPTIMER1_CLKCTRL_CLKSEL_MASK);
@@ -314,6 +339,18 @@ void enable_basic_clocks(void)
                         clk_modules_hw_auto_essential,
                         clk_modules_explicit_en_essential,
                         1);
+
+       /* Select 384Mhz for GPU as its the POR for ES1.0 */
+       setbits_le32(&prcm->cm_sgx_sgx_clkctrl,
+                       CLKSEL_GPU_HYD_GCLK_MASK);
+       setbits_le32(&prcm->cm_sgx_sgx_clkctrl,
+                       CLKSEL_GPU_CORE_GCLK_MASK);
+
+       /* Enable SCRM OPT clocks for PER and CORE dpll */
+       setbits_le32(&prcm->cm_wkupaon_scrm_clkctrl,
+                       OPTFCLKEN_SCRM_PER_MASK);
+       setbits_le32(&prcm->cm_wkupaon_scrm_clkctrl,
+                       OPTFCLKEN_SCRM_CORE_MASK);
 }
 
 void enable_basic_uboot_clocks(void)
@@ -371,6 +408,7 @@ void enable_non_essential_clocks(void)
                &prcm->cm_l3instr_intrconn_wp1_clkctrl,
                &prcm->cm_l3init_hsi_clkctrl,
                &prcm->cm_l3init_hsusbtll_clkctrl,
+               &prcm->cm_l4per_hdq1w_clkctrl,
                0
        };
 
@@ -393,7 +431,6 @@ void enable_non_essential_clocks(void)
                &prcm->cm_l4per_gptimer11_clkctrl,
                &prcm->cm_l4per_gptimer3_clkctrl,
                &prcm->cm_l4per_gptimer4_clkctrl,
-               &prcm->cm_l4per_hdq1w_clkctrl,
                &prcm->cm_l4per_mcspi2_clkctrl,
                &prcm->cm_l4per_mcspi3_clkctrl,
                &prcm->cm_l4per_mcspi4_clkctrl,
index 55145bbee2ebf486a4d3a7c2d8dd2608053a6bae..cf6022da2f971951f528da6bd5960e07694dd92b 100644 (file)
@@ -473,9 +473,11 @@ struct omap5_prcm_regs {
        u32 cm_wkup_rtc_clkctrl;                /* 4ae07880 */
        u32 pad214;                             /* 4ae07884 */
        u32 cm_wkup_bandgap_clkctrl;            /* 4ae07888 */
-       u32 pad215[197];                        /* 4ae0788c */
+       u32 pad215[1];                          /* 4ae0788c */
+       u32 cm_wkupaon_scrm_clkctrl;            /* 4ae07890 */
+       u32 pad216[195];
        u32 prm_vc_val_bypass;                  /* 4ae07ba0 */
-       u32 pad216[4];
+       u32 pad217[4];
        u32 prm_vc_cfg_i2c_mode;                /* 4ae07bb4 */
        u32 prm_vc_cfg_i2c_clk;                 /* 4ae07bb8 */
 };
@@ -514,6 +516,10 @@ struct omap5_prcm_regs {
 /* CM_IDLEST_DPLL fields */
 #define ST_DPLL_CLK_MASK               1
 
+/* SGX */
+#define CLKSEL_GPU_HYD_GCLK_MASK               (1 << 25)
+#define CLKSEL_GPU_CORE_GCLK_MASK              (1 << 24)
+
 /* CM_CLKSEL_DPLL */
 #define CM_CLKSEL_DPLL_DPLL_SD_DIV_SHIFT       24
 #define CM_CLKSEL_DPLL_DPLL_SD_DIV_MASK                (0xFF << 24)
@@ -591,6 +597,7 @@ struct omap5_prcm_regs {
 
 /* CM_L3INIT_HSMMCn_CLKCTRL */
 #define HSMMC_CLKCTRL_CLKSEL_MASK              (1 << 24)
+#define HSMMC_CLKCTRL_CLKSEL_DIV_MASK          (1 << 25)
 
 /* CM_WKUP_GPTIMER1_CLKCTRL */
 #define GPTIMER1_CLKCTRL_CLKSEL_MASK           (1 << 24)
@@ -610,6 +617,12 @@ struct omap5_prcm_regs {
 #define MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_SHIFT  25
 #define MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_MASK   (1 << 25)
 
+/* CM_WKUPAON_SCRM_CLKCTRL */
+#define OPTFCLKEN_SCRM_PER_SHIFT               9
+#define OPTFCLKEN_SCRM_PER_MASK                        (1 << 9)
+#define OPTFCLKEN_SCRM_CORE_SHIFT              8
+#define OPTFCLKEN_SCRM_CORE_MASK               (1 << 8)
+
 /* Clock frequencies */
 #define OMAP_SYS_CLK_FREQ_38_4_MHZ     38400000
 #define OMAP_SYS_CLK_IND_38_4_MHZ      6
@@ -663,7 +676,7 @@ struct dpll_regs {
        u32 cm_div_h12_dpll;
        u32 cm_div_h13_dpll;
        u32 cm_div_h14_dpll;
-       u32 reserved[2];
+       u32 reserved[3];
        u32 cm_div_h22_dpll;
        u32 cm_div_h23_dpll;
 };