aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Stuebner <heiko@sntech.de>2014-09-04 15:43:17 -0400
committerHeiko Stuebner <heiko@sntech.de>2014-09-27 11:57:17 -0400
commit2b9bceeab70800546050f59cee4efb69c261a683 (patch)
treebd57731277a9dc1d0b5f80d03a2bd345df5bc7fb
parentf5f7004fdec7eb1d2372278f1acad5f70f2da1e4 (diff)
clk: rockchip: make tightly bound armclk child-clocks read-only
Rockchip SoCs contain clocks tightly bound to the armclk, where the best rate / divider is supplied by the vendor after careful measuring. Often this ideal rate may be greater than the current rate. Therefore prevent the ccf from trying to set these dividers itself by setting them to read-only. In the case of the rk3066, this also includes the aclk_cpu, which makes it necessary to also split its direct child-clocks (pclk_cpu, hclk_cpu, ...) into individual definitions for rk3066 and rk3188. Signed-off-by: Heiko Stuebner <heiko@sntech.de> Reviewed-by: Doug Anderson <dianders@chromium.org> Tested-by: Doug Anderson <dianders@chromium.org>
-rw-r--r--drivers/clk/rockchip/clk-rk3188.c26
-rw-r--r--drivers/clk/rockchip/clk-rk3288.c18
2 files changed, 27 insertions, 17 deletions
diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c
index 6a81bc9e54f0..adfbfefeddf3 100644
--- a/drivers/clk/rockchip/clk-rk3188.c
+++ b/drivers/clk/rockchip/clk-rk3188.c
@@ -174,17 +174,10 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = {
174 GATE(0, "aclk_cpu", "aclk_cpu_pre", 0, 174 GATE(0, "aclk_cpu", "aclk_cpu_pre", 0,
175 RK2928_CLKGATE_CON(0), 3, GFLAGS), 175 RK2928_CLKGATE_CON(0), 3, GFLAGS),
176 176
177 DIV(0, "pclk_cpu_pre", "aclk_cpu_pre", 0,
178 RK2928_CLKSEL_CON(1), 12, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO),
179 GATE(0, "atclk_cpu", "pclk_cpu_pre", 0, 177 GATE(0, "atclk_cpu", "pclk_cpu_pre", 0,
180 RK2928_CLKGATE_CON(0), 6, GFLAGS), 178 RK2928_CLKGATE_CON(0), 6, GFLAGS),
181 GATE(0, "pclk_cpu", "pclk_cpu_pre", 0, 179 GATE(0, "pclk_cpu", "pclk_cpu_pre", 0,
182 RK2928_CLKGATE_CON(0), 5, GFLAGS), 180 RK2928_CLKGATE_CON(0), 5, GFLAGS),
183 DIV(0, "hclk_cpu_pre", "aclk_cpu_pre", 0,
184 RK2928_CLKSEL_CON(1), 8, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO),
185 COMPOSITE_NOMUX(0, "hclk_ahb2apb", "hclk_cpu_pre", 0,
186 RK2928_CLKSEL_CON(1), 14, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO,
187 RK2928_CLKGATE_CON(4), 9, GFLAGS),
188 GATE(0, "hclk_cpu", "hclk_cpu_pre", 0, 181 GATE(0, "hclk_cpu", "hclk_cpu_pre", 0,
189 RK2928_CLKGATE_CON(0), 4, GFLAGS), 182 RK2928_CLKGATE_CON(0), 4, GFLAGS),
190 183
@@ -416,7 +409,17 @@ static struct rockchip_clk_branch rk3066a_clk_branches[] __initdata = {
416 COMPOSITE_NOGATE(0, "armclk", mux_armclk_p, 0, 409 COMPOSITE_NOGATE(0, "armclk", mux_armclk_p, 0,
417 RK2928_CLKSEL_CON(0), 8, 1, MFLAGS, 0, 5, DFLAGS), 410 RK2928_CLKSEL_CON(0), 8, 1, MFLAGS, 0, 5, DFLAGS),
418 DIVTBL(0, "aclk_cpu_pre", "armclk", 0, 411 DIVTBL(0, "aclk_cpu_pre", "armclk", 0,
419 RK2928_CLKSEL_CON(1), 0, 3, DFLAGS, div_aclk_cpu_t), 412 RK2928_CLKSEL_CON(1), 0, 3, DFLAGS | CLK_DIVIDER_READ_ONLY, div_aclk_cpu_t),
413 DIV(0, "pclk_cpu_pre", "aclk_cpu_pre", 0,
414 RK2928_CLKSEL_CON(1), 12, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO
415 | CLK_DIVIDER_READ_ONLY),
416 DIV(0, "hclk_cpu_pre", "aclk_cpu_pre", 0,
417 RK2928_CLKSEL_CON(1), 8, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO
418 | CLK_DIVIDER_READ_ONLY),
419 COMPOSITE_NOMUX(0, "hclk_ahb2apb", "hclk_cpu_pre", 0,
420 RK2928_CLKSEL_CON(1), 14, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO
421 | CLK_DIVIDER_READ_ONLY,
422 RK2928_CLKGATE_CON(4), 9, GFLAGS),
420 423
421 GATE(CORE_L2C, "core_l2c", "aclk_cpu", 0, 424 GATE(CORE_L2C, "core_l2c", "aclk_cpu", 0,
422 RK2928_CLKGATE_CON(9), 4, GFLAGS), 425 RK2928_CLKGATE_CON(9), 4, GFLAGS),
@@ -534,6 +537,13 @@ static struct rockchip_clk_branch rk3188_clk_branches[] __initdata = {
534 /* do not source aclk_cpu_pre from the apll, to keep complexity down */ 537 /* do not source aclk_cpu_pre from the apll, to keep complexity down */
535 COMPOSITE_NOGATE(0, "aclk_cpu_pre", mux_aclk_cpu_p, CLK_SET_RATE_NO_REPARENT, 538 COMPOSITE_NOGATE(0, "aclk_cpu_pre", mux_aclk_cpu_p, CLK_SET_RATE_NO_REPARENT,
536 RK2928_CLKSEL_CON(0), 5, 1, MFLAGS, 0, 5, DFLAGS), 539 RK2928_CLKSEL_CON(0), 5, 1, MFLAGS, 0, 5, DFLAGS),
540 DIV(0, "pclk_cpu_pre", "aclk_cpu_pre", 0,
541 RK2928_CLKSEL_CON(1), 12, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO),
542 DIV(0, "hclk_cpu_pre", "aclk_cpu_pre", 0,
543 RK2928_CLKSEL_CON(1), 8, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO),
544 COMPOSITE_NOMUX(0, "hclk_ahb2apb", "hclk_cpu_pre", 0,
545 RK2928_CLKSEL_CON(1), 14, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO,
546 RK2928_CLKGATE_CON(4), 9, GFLAGS),
537 547
538 GATE(CORE_L2C, "core_l2c", "armclk", 0, 548 GATE(CORE_L2C, "core_l2c", "armclk", 0,
539 RK2928_CLKGATE_CON(9), 4, GFLAGS), 549 RK2928_CLKGATE_CON(9), 4, GFLAGS),
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
index 12112899ff51..f6f278b005b9 100644
--- a/drivers/clk/rockchip/clk-rk3288.c
+++ b/drivers/clk/rockchip/clk-rk3288.c
@@ -170,31 +170,31 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
170 RK3288_CLKSEL_CON(0), 15, 1, MFLAGS, 8, 5, DFLAGS), 170 RK3288_CLKSEL_CON(0), 15, 1, MFLAGS, 8, 5, DFLAGS),
171 171
172 COMPOSITE_NOMUX(0, "armcore0", "armclk", 0, 172 COMPOSITE_NOMUX(0, "armcore0", "armclk", 0,
173 RK3288_CLKSEL_CON(36), 0, 3, DFLAGS, 173 RK3288_CLKSEL_CON(36), 0, 3, DFLAGS | CLK_DIVIDER_READ_ONLY,
174 RK3288_CLKGATE_CON(12), 0, GFLAGS), 174 RK3288_CLKGATE_CON(12), 0, GFLAGS),
175 COMPOSITE_NOMUX(0, "armcore1", "armclk", 0, 175 COMPOSITE_NOMUX(0, "armcore1", "armclk", 0,
176 RK3288_CLKSEL_CON(36), 4, 3, DFLAGS, 176 RK3288_CLKSEL_CON(36), 4, 3, DFLAGS | CLK_DIVIDER_READ_ONLY,
177 RK3288_CLKGATE_CON(12), 1, GFLAGS), 177 RK3288_CLKGATE_CON(12), 1, GFLAGS),
178 COMPOSITE_NOMUX(0, "armcore2", "armclk", 0, 178 COMPOSITE_NOMUX(0, "armcore2", "armclk", 0,
179 RK3288_CLKSEL_CON(36), 8, 3, DFLAGS, 179 RK3288_CLKSEL_CON(36), 8, 3, DFLAGS | CLK_DIVIDER_READ_ONLY,
180 RK3288_CLKGATE_CON(12), 2, GFLAGS), 180 RK3288_CLKGATE_CON(12), 2, GFLAGS),
181 COMPOSITE_NOMUX(0, "armcore3", "armclk", 0, 181 COMPOSITE_NOMUX(0, "armcore3", "armclk", 0,
182 RK3288_CLKSEL_CON(36), 12, 3, DFLAGS, 182 RK3288_CLKSEL_CON(36), 12, 3, DFLAGS | CLK_DIVIDER_READ_ONLY,
183 RK3288_CLKGATE_CON(12), 3, GFLAGS), 183 RK3288_CLKGATE_CON(12), 3, GFLAGS),
184 COMPOSITE_NOMUX(0, "l2ram", "armclk", 0, 184 COMPOSITE_NOMUX(0, "l2ram", "armclk", 0,
185 RK3288_CLKSEL_CON(37), 0, 3, DFLAGS, 185 RK3288_CLKSEL_CON(37), 0, 3, DFLAGS | CLK_DIVIDER_READ_ONLY,
186 RK3288_CLKGATE_CON(12), 4, GFLAGS), 186 RK3288_CLKGATE_CON(12), 4, GFLAGS),
187 COMPOSITE_NOMUX(0, "aclk_core_m0", "armclk", 0, 187 COMPOSITE_NOMUX(0, "aclk_core_m0", "armclk", 0,
188 RK3288_CLKSEL_CON(0), 0, 4, DFLAGS, 188 RK3288_CLKSEL_CON(0), 0, 4, DFLAGS | CLK_DIVIDER_READ_ONLY,
189 RK3288_CLKGATE_CON(12), 5, GFLAGS), 189 RK3288_CLKGATE_CON(12), 5, GFLAGS),
190 COMPOSITE_NOMUX(0, "aclk_core_mp", "armclk", 0, 190 COMPOSITE_NOMUX(0, "aclk_core_mp", "armclk", 0,
191 RK3288_CLKSEL_CON(0), 4, 4, DFLAGS, 191 RK3288_CLKSEL_CON(0), 4, 4, DFLAGS | CLK_DIVIDER_READ_ONLY,
192 RK3288_CLKGATE_CON(12), 6, GFLAGS), 192 RK3288_CLKGATE_CON(12), 6, GFLAGS),
193 COMPOSITE_NOMUX(0, "atclk", "armclk", 0, 193 COMPOSITE_NOMUX(0, "atclk", "armclk", 0,
194 RK3288_CLKSEL_CON(37), 4, 5, DFLAGS, 194 RK3288_CLKSEL_CON(37), 4, 5, DFLAGS | CLK_DIVIDER_READ_ONLY,
195 RK3288_CLKGATE_CON(12), 7, GFLAGS), 195 RK3288_CLKGATE_CON(12), 7, GFLAGS),
196 COMPOSITE_NOMUX(0, "pclk_dbg_pre", "armclk", 0, 196 COMPOSITE_NOMUX(0, "pclk_dbg_pre", "armclk", 0,
197 RK3288_CLKSEL_CON(37), 9, 5, DFLAGS, 197 RK3288_CLKSEL_CON(37), 9, 5, DFLAGS | CLK_DIVIDER_READ_ONLY,
198 RK3288_CLKGATE_CON(12), 8, GFLAGS), 198 RK3288_CLKGATE_CON(12), 8, GFLAGS),
199 GATE(0, "pclk_dbg", "pclk_dbg_pre", 0, 199 GATE(0, "pclk_dbg", "pclk_dbg_pre", 0,
200 RK3288_CLKGATE_CON(12), 9, GFLAGS), 200 RK3288_CLKGATE_CON(12), 9, GFLAGS),