Re: [PATCH 06/19] clk: samsung: exynos5433: Add clocks for CMU_MIF domain

2014-12-08 Thread Pankaj Dubey

Hi Chanwoo,

On Tuesday 02 December 2014 02:19 PM, Chanwoo Choi wrote:

This patch adds the mux/divider/gate clock fo CMU_MIF domain which includes


nit: %s/fo/of


the clocks for DMC(DRAM memory controller) and CCI(Cache Coherent Interconnect).
The CMU_MIF domain provides the source clocks for CMU_DISP/CMU_BUS2.

Cc: Sylwester Nawrocki s.nawro...@samsung.com
Cc: Tomasz Figa tomasz.f...@gmail.com
Signed-off-by: Chanwoo Choi cw00.c...@samsung.com
Acked-by: Inki Dae inki@samsung.com
Acked-by: Geunsik Lim geunsik@samsung.com
---
  drivers/clk/samsung/clk-exynos5433.c   | 590 +
  include/dt-bindings/clock/exynos5433.h | 190 ++-
  2 files changed, 779 insertions(+), 1 deletion(-)



[snip]



  static struct samsung_pll_clock mif_pll_clks[] __initdata = {
@@ -768,9 +888,479 @@ static struct samsung_pll_clock mif_pll_clks[] __initdata 
= {
MFC_PLL_LOCK, MFC_PLL_CON0, exynos5443_pll_rates),
  };

+/* list of all parent clock list */
+PNAME(mout_mfc_pll_div2_p) = { mout_mfc_pll, dout_mfc_pll, };
+PNAME(mout_bus_pll_div2_p) = { mout_bus_pll, dout_bus_pll, };
+PNAME(mout_mem1_pll_div2_p)= { mout_mem1_pll, dout_mem1_pll, };
+PNAME(mout_mem0_pll_div2_p)= { mout_mem0_pll, dout_mem0_pll, };
+PNAME(mout_mfc_pll_p)  = { fin_pll, fout_mfc_pll, };
+PNAME(mout_bus_pll_p)  = { fin_pll, fout_bus_pll, };
+PNAME(mout_mem1_pll_p) = { fin_pll, fout_mem1_pll, };
+PNAME(mout_mem0_pll_p) = { fin_pll, fout_mem0_pll, };
+
+PNAME(mout_clk2x_phy_c_p)  = { mout_mem0_pll_div2, mout_clkm_phy_b, };
+PNAME(mout_clk2x_phy_b_p)  = { mout_bus_pll_div2, mout_clkm_phy_a, };
+PNAME(mout_clk2x_phy_a_p)  = { mout_bus_pll_div2, mout_mfc_pll_div2, };
+PNAME(mout_clkm_phy_c_p)   = { mout_mem0_pll_div2, mout_clkm_phy_b, };


As mout_clk2x_phy_c_p and mout_clkm_phy_c_p both has same parent list 
one of them can be dropped.



+PNAME(mout_clkm_phy_b_p)   = { mout_mem1_pll_div2, mout_clkm_phy_a, };
+PNAME(mout_clkm_phy_a_p)   = { mout_bus_pll_div2, mout_mfc_pll_div2, };


As mout_clk2x_phy_a_p and mout_clkm_phy_a_p both has same parent list 
one of them can be dropped.



+
+PNAME(mout_aclk_mifnm_200_p)   = { mout_mem0_pll_div2, div_mif_pre, };
+PNAME(mout_aclk_mifnm_400_p)   = { mout_mem1_pll_div2, mout_bus_pll_div2,};
+
+PNAME(mout_aclk_disp_333_b_p)  = { mout_aclk_disp_333_a,
+   mout_bus_pll_div2, };
+PNAME(mout_aclk_disp_333_a_p)  = { mout_mfc_pll_div2, sclk_mphy_pll, };
+
+PNAME(mout_sclk_decon_vclk_c_p)= { mout_sclk_decon_vclk_b,
+   sclk_mphy_pll, };
+PNAME(mout_sclk_decon_vclk_b_p)= { mout_sclk_decon_vclk_a,
+   mout_mfc_pll_div2, };
+PNAME(mout_sclk_decon_vclk_a_p)= { fin_pll, mout_bus_pll_div2, };
+PNAME(mout_sclk_decon_eclk_c_p)= { mout_sclk_decon_eclk_b,
+   sclk_mphy_pll, };
+PNAME(mout_sclk_decon_eclk_b_p)= { mout_sclk_decon_eclk_a,
+   mout_mfc_pll_div2, };
+PNAME(mout_sclk_decon_eclk_a_p)= { fin_pll, mout_bus_pll_div2, };
+
+PNAME(mout_sclk_decon_tv_eclk_c_p) = { mout_sclk_decon_tv_eclk_b,
+  sclk_mphy_pll, };
+PNAME(mout_sclk_decon_tv_eclk_b_p) = { mout_sclk_decon_tv_eclk_a,
+  mout_mfc_pll_div2, };
+PNAME(mout_sclk_decon_tv_eclk_a_p) = { fin_pll, mout_bus_pll_div2, };
+PNAME(mout_sclk_dsd_c_p)   = { mout_sclk_dsd_b, mout_bus_pll_div2, };
+PNAME(mout_sclk_dsd_b_p)   = { mout_sclk_dsd_a, sclk_mphy_pll, };
+PNAME(mout_sclk_dsd_a_p)   = { fin_pll, mout_mfc_pll_div2, };
+
+PNAME(mout_sclk_dsim0_c_p) = { mout_sclk_dsim0_b, sclk_mphy_pll, };
+PNAME(mout_sclk_dsim0_b_p) = { mout_sclk_dsim0_a, mout_mfc_pll_div2 };
+PNAME(mout_sclk_dsim0_a_p) = { fin_pll, mout_bus_pll_div2, };
+
+PNAME(mout_sclk_decon_tv_vclk_c_p) = { mout_sclk_decon_tv_vclk_b,
+  sclk_mphy_pll, };
+PNAME(mout_sclk_decon_tv_vclk_b_p) = { mout_sclk_decon_tv_vclk_a,
+  mout_mfc_pll_div2, };
+PNAME(mout_sclk_decon_tv_vclk_a_p) = { fin_pll, mout_bus_pll_div2, };
+PNAME(mout_sclk_dsim1_c_p) = { mout_sclk_dsim1_b, sclk_mphy_pll, };
+PNAME(mout_sclk_dsim1_b_p) = { mout_sclk_dsim1_a, mout_mfc_pll_div2,};
+PNAME(mout_sclk_dsim1_a_p) = { fin_pll, mout_bus_pll_div2, };
+


Same way I can see {fin_pll, mout_bus_pll_div2, } this combination 
of parents is repeated six times above in different PNAME, which can be 
replaced by one PNAME list with some common name, thus saving of 5 lines.



+static struct samsung_fixed_factor_clock mif_fixed_factor_clks[] __initdata = {
+   /* dout_{mfc|bus|mem1|mem0}_pll is half fixed rate from parent mux */
+   FFACTOR(CLK_DOUT_MFC_PLL, dout_mfc_pll, mout_mfc_pll, 1, 1, 0),
+   FFACTOR(CLK_DOUT_BUS_PLL, dout_bus_pll, mout_bus_pll, 

Re: [PATCH 06/19] clk: samsung: exynos5433: Add clocks for CMU_MIF domain

2014-12-08 Thread Chanwoo Choi
Hi Pankaj,

On 12/08/2014 08:37 PM, Pankaj Dubey wrote:
 Hi Chanwoo,
 
 On Tuesday 02 December 2014 02:19 PM, Chanwoo Choi wrote:
 This patch adds the mux/divider/gate clock fo CMU_MIF domain which includes
 
 nit: %s/fo/of

I'll fix it.

 
 the clocks for DMC(DRAM memory controller) and CCI(Cache Coherent 
 Interconnect).
 The CMU_MIF domain provides the source clocks for CMU_DISP/CMU_BUS2.

 Cc: Sylwester Nawrocki s.nawro...@samsung.com
 Cc: Tomasz Figa tomasz.f...@gmail.com
 Signed-off-by: Chanwoo Choi cw00.c...@samsung.com
 Acked-by: Inki Dae inki@samsung.com
 Acked-by: Geunsik Lim geunsik@samsung.com
 ---
   drivers/clk/samsung/clk-exynos5433.c   | 590 
 +
   include/dt-bindings/clock/exynos5433.h | 190 ++-
   2 files changed, 779 insertions(+), 1 deletion(-)

 
 [snip]
 

   static struct samsung_pll_clock mif_pll_clks[] __initdata = {
 @@ -768,9 +888,479 @@ static struct samsung_pll_clock mif_pll_clks[] 
 __initdata = {
   MFC_PLL_LOCK, MFC_PLL_CON0, exynos5443_pll_rates),
   };

 +/* list of all parent clock list */
 +PNAME(mout_mfc_pll_div2_p)= { mout_mfc_pll, dout_mfc_pll, };
 +PNAME(mout_bus_pll_div2_p)= { mout_bus_pll, dout_bus_pll, };
 +PNAME(mout_mem1_pll_div2_p)= { mout_mem1_pll, dout_mem1_pll, };
 +PNAME(mout_mem0_pll_div2_p)= { mout_mem0_pll, dout_mem0_pll, };
 +PNAME(mout_mfc_pll_p)= { fin_pll, fout_mfc_pll, };
 +PNAME(mout_bus_pll_p)= { fin_pll, fout_bus_pll, };
 +PNAME(mout_mem1_pll_p)= { fin_pll, fout_mem1_pll, };
 +PNAME(mout_mem0_pll_p)= { fin_pll, fout_mem0_pll, };
 +
 +PNAME(mout_clk2x_phy_c_p)= { mout_mem0_pll_div2, mout_clkm_phy_b, };
 +PNAME(mout_clk2x_phy_b_p)= { mout_bus_pll_div2, mout_clkm_phy_a, };
 +PNAME(mout_clk2x_phy_a_p)= { mout_bus_pll_div2, mout_mfc_pll_div2, 
 };
 +PNAME(mout_clkm_phy_c_p)= { mout_mem0_pll_div2, mout_clkm_phy_b, };
 
 As mout_clk2x_phy_c_p and mout_clkm_phy_c_p both has same parent list one of 
 them can be dropped.

OK, I'll use common parent to remove duplicat code.

 
 +PNAME(mout_clkm_phy_b_p)= { mout_mem1_pll_div2, mout_clkm_phy_a, };
 +PNAME(mout_clkm_phy_a_p)= { mout_bus_pll_div2, mout_mfc_pll_div2, };
 
 As mout_clk2x_phy_a_p and mout_clkm_phy_a_p both has same parent list one of 
 them can be dropped.

OK.

 
 +
 +PNAME(mout_aclk_mifnm_200_p)= { mout_mem0_pll_div2, div_mif_pre, };
 +PNAME(mout_aclk_mifnm_400_p)= { mout_mem1_pll_div2, 
 mout_bus_pll_div2,};
 +
 +PNAME(mout_aclk_disp_333_b_p)= { mout_aclk_disp_333_a,
 +mout_bus_pll_div2, };
 +PNAME(mout_aclk_disp_333_a_p)= { mout_mfc_pll_div2, sclk_mphy_pll, 
 };
 +
 +PNAME(mout_sclk_decon_vclk_c_p)= { mout_sclk_decon_vclk_b,
 +sclk_mphy_pll, };
 +PNAME(mout_sclk_decon_vclk_b_p)= { mout_sclk_decon_vclk_a,
 +mout_mfc_pll_div2, };
 +PNAME(mout_sclk_decon_vclk_a_p)= { fin_pll, mout_bus_pll_div2, };
 +PNAME(mout_sclk_decon_eclk_c_p)= { mout_sclk_decon_eclk_b,
 +sclk_mphy_pll, };
 +PNAME(mout_sclk_decon_eclk_b_p)= { mout_sclk_decon_eclk_a,
 +mout_mfc_pll_div2, };
 +PNAME(mout_sclk_decon_eclk_a_p)= { fin_pll, mout_bus_pll_div2, };
 +
 +PNAME(mout_sclk_decon_tv_eclk_c_p) = { mout_sclk_decon_tv_eclk_b,
 +   sclk_mphy_pll, };
 +PNAME(mout_sclk_decon_tv_eclk_b_p) = { mout_sclk_decon_tv_eclk_a,
 +   mout_mfc_pll_div2, };
 +PNAME(mout_sclk_decon_tv_eclk_a_p) = { fin_pll, mout_bus_pll_div2, };
 +PNAME(mout_sclk_dsd_c_p)= { mout_sclk_dsd_b, mout_bus_pll_div2, };
 +PNAME(mout_sclk_dsd_b_p)= { mout_sclk_dsd_a, sclk_mphy_pll, };
 +PNAME(mout_sclk_dsd_a_p)= { fin_pll, mout_mfc_pll_div2, };
 +
 +PNAME(mout_sclk_dsim0_c_p)= { mout_sclk_dsim0_b, sclk_mphy_pll, };
 +PNAME(mout_sclk_dsim0_b_p)= { mout_sclk_dsim0_a, mout_mfc_pll_div2 
 };
 +PNAME(mout_sclk_dsim0_a_p)= { fin_pll, mout_bus_pll_div2, };
 +
 +PNAME(mout_sclk_decon_tv_vclk_c_p) = { mout_sclk_decon_tv_vclk_b,
 +   sclk_mphy_pll, };
 +PNAME(mout_sclk_decon_tv_vclk_b_p) = { mout_sclk_decon_tv_vclk_a,
 +   mout_mfc_pll_div2, };
 +PNAME(mout_sclk_decon_tv_vclk_a_p) = { fin_pll, mout_bus_pll_div2, };
 +PNAME(mout_sclk_dsim1_c_p)= { mout_sclk_dsim1_b, sclk_mphy_pll, };
 +PNAME(mout_sclk_dsim1_b_p)= { mout_sclk_dsim1_a, 
 mout_mfc_pll_div2,};
 +PNAME(mout_sclk_dsim1_a_p)= { fin_pll, mout_bus_pll_div2, };
 +
 
 Same way I can see {fin_pll, mout_bus_pll_div2, } this combination of 
 parents is repeated six times above in different PNAME, which can be replaced 
 by one PNAME list with some common name, thus saving of 5 lines.

OK.

 
 +static struct samsung_fixed_factor_clock mif_fixed_factor_clks[] __initdata 
 = {
 +/* dout_{mfc|bus|mem1|mem0}_pll is half fixed rate from parent mux */
 +FFACTOR(CLK_DOUT_MFC_PLL, dout_mfc_pll, mout_mfc_pll, 1, 1, 0),
 +

[PATCH 06/19] clk: samsung: exynos5433: Add clocks for CMU_MIF domain

2014-12-02 Thread Chanwoo Choi
This patch adds the mux/divider/gate clock fo CMU_MIF domain which includes
the clocks for DMC(DRAM memory controller) and CCI(Cache Coherent Interconnect).
The CMU_MIF domain provides the source clocks for CMU_DISP/CMU_BUS2.

Cc: Sylwester Nawrocki s.nawro...@samsung.com
Cc: Tomasz Figa tomasz.f...@gmail.com
Signed-off-by: Chanwoo Choi cw00.c...@samsung.com
Acked-by: Inki Dae inki@samsung.com
Acked-by: Geunsik Lim geunsik@samsung.com
---
 drivers/clk/samsung/clk-exynos5433.c   | 590 +
 include/dt-bindings/clock/exynos5433.h | 190 ++-
 2 files changed, 779 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/samsung/clk-exynos5433.c 
b/drivers/clk/samsung/clk-exynos5433.c
index 4dec9fc..10197a1 100644
--- a/drivers/clk/samsung/clk-exynos5433.c
+++ b/drivers/clk/samsung/clk-exynos5433.c
@@ -737,6 +737,66 @@ CLK_OF_DECLARE(exynos5433_cmu_cpif, 
samsung,exynos5433-cmu-cpif,
 #define MFC_PLL_CON0   0x0130
 #define MFC_PLL_CON1   0x0134
 #define MFC_PLL_FREQ_DET   0x013c
+#define MUX_SEL_MIF0   0x0200
+#define MUX_SEL_MIF1   0x0204
+#define MUX_SEL_MIF2   0x0208
+#define MUX_SEL_MIF3   0x020c
+#define MUX_SEL_MIF4   0x0210
+#define MUX_SEL_MIF5   0x0214
+#define MUX_SEL_MIF6   0x0218
+#define MUX_SEL_MIF7   0x021c
+#define MUX_ENABLE_MIF00x0300
+#define MUX_ENABLE_MIF10x0304
+#define MUX_ENABLE_MIF20x0308
+#define MUX_ENABLE_MIF30x030c
+#define MUX_ENABLE_MIF40x0310
+#define MUX_ENABLE_MIF50x0314
+#define MUX_ENABLE_MIF60x0318
+#define MUX_ENABLE_MIF70x031c
+#define MUX_STAT_MIF0  0x0400
+#define MUX_STAT_MIF1  0x0404
+#define MUX_STAT_MIF2  0x0408
+#define MUX_STAT_MIF3  0x040c
+#define MUX_STAT_MIF4  0x0410
+#define MUX_STAT_MIF5  0x0414
+#define MUX_STAT_MIF6  0x0418
+#define MUX_STAT_MIF7  0x041c
+#define DIV_MIF1   0x0604
+#define DIV_MIF2   0x0608
+#define DIV_MIF3   0x060c
+#define DIV_MIF4   0x0610
+#define DIV_MIF5   0x0614
+#define DIV_MIF_PLL_FREQ_DET   0x0618
+#define DIV_STAT_MIF1  0x0704
+#define DIV_STAT_MIF2  0x0708
+#define DIV_STAT_MIF3  0x070c
+#define DIV_STAT_MIF4  0x0710
+#define DIV_STAT_MIF5  0x0714
+#define DIV_STAT_MIF_PLL_FREQ_DET  0x0718
+#define ENABLE_ACLK_MIF0   0x0800
+#define ENABLE_ACLK_MIF1   0x0804
+#define ENABLE_ACLK_MIF2   0x0808
+#define ENABLE_ACLK_MIF3   0x080c
+#define ENABLE_PCLK_MIF0x0900
+#define ENABLE_PCLK_MIF_SECURE_DREX0_TZ0x0904
+#define ENABLE_PCLK_MIF_SECURE_DREX1_TZ0x0908
+#define ENABLE_PCLK_MIF_SECURE_MONOTONIC_CNT   0x090c
+#define ENABLE_PCLK_MIF_SECURE_RTC 0x0910
+#define ENABLE_SCLK_MIF0x0a00
+#define ENABLE_IP_MIF0 0x0b00
+#define ENABLE_IP_MIF1 0x0b04
+#define ENABLE_IP_MIF2 0x0b08
+#define ENABLE_IP_MIF3 0x0b0c
+#define ENABLE_IP_MIF_SECURE_DREX0_TZ  0x0b10
+#define ENABLE_IP_MIF_SECURE_DREX1_TZ  0x0b14
+#define ENABLE_IP_MIF_SECURE_MONOTONIC_CNT 0x0b18
+#define ENABLE_IP_MIF_SECURE_RTC   0x0b1c
+#define CLKOUT_CMU_MIF 0x0c00
+#define CLKOUT_CMU_MIF_DIV_STAT0x0c04
+#define DREX_FREQ_CTRL00x1000
+#define DREX_FREQ_CTRL10x1004
+#define PAUSE  0x1008
+#define DDRPHY_LOCK_CTRL   0x100c
 
 static unsigned long mif_clk_regs[] __initdata = {
MEM0_PLL_LOCK,
@@ -755,6 +815,66 @@ static unsigned long mif_clk_regs[] __initdata = {
MFC_PLL_CON0,
MFC_PLL_CON1,
MFC_PLL_FREQ_DET,
+   MUX_SEL_MIF0,
+   MUX_SEL_MIF1,
+   MUX_SEL_MIF2,
+   MUX_SEL_MIF3,
+   MUX_SEL_MIF4,
+   MUX_SEL_MIF5,
+   MUX_SEL_MIF6,
+   MUX_SEL_MIF7,
+   MUX_ENABLE_MIF0,
+   MUX_ENABLE_MIF1,
+   MUX_ENABLE_MIF2,
+   MUX_ENABLE_MIF3,
+   MUX_ENABLE_MIF4,
+   MUX_ENABLE_MIF5,
+   MUX_ENABLE_MIF6,
+   MUX_ENABLE_MIF7,
+   MUX_STAT_MIF0,
+   MUX_STAT_MIF1,
+   MUX_STAT_MIF2,
+   MUX_STAT_MIF3,
+   MUX_STAT_MIF4,
+   MUX_STAT_MIF5,
+   MUX_STAT_MIF6,
+   MUX_STAT_MIF7,
+   DIV_MIF1,
+   DIV_MIF2,
+   DIV_MIF3,
+   DIV_MIF4,
+   DIV_MIF5,
+   DIV_MIF_PLL_FREQ_DET,
+   DIV_STAT_MIF1,
+   DIV_STAT_MIF2,
+   DIV_STAT_MIF3,