aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2013-02-19 16:38:51 -0500
committerArnd Bergmann <arnd@arndb.de>2013-02-19 16:38:51 -0500
commit89dfe564b5926297ee29b973fe75e25c83c5e615 (patch)
tree8fe514cf39525f65ed5b0fbc1659120267bc0874
parentbb366da87d5921cb578211916d7a67ee8984ca3b (diff)
parent527fad1bc519df8eedd397482febb51526e5d987 (diff)
Merge tag 'tegra-for-3.9-soc-ccf-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra into next/dt
ARM: tegra: common clock framework fixes A number of small fixes are included to the new Tegra common clock driver. These are: Missing locking, definition of device tree clock IDs not matching the binding, a static cleanup, missing initialization of some UART clocks. This branch is based on Tegra's previous pull request tegra-for-3.9-dt. This dependency is caused by the one patch that edits the device tree. If this causes a problem, I can drop the final two patches in this pull request for now, and rebase it onto previous tegra-for-3.9-soc-ccf instead. * tag 'tegra-for-3.9-soc-ccf-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra: clk: tegra: initialise parent of uart clocks ARM: tegra: remove clock-frequency properties from serial nodes clk: tegra: fix driver to match DT binding clk: tegra: local arrays should be static clk: tegra: Add missing spinlock for hclk and pclk clk: tegra: Implement locking for super clock clk: tegra: fix wrong clock index between se to sata_cold (applied to next/dt branch rather than next/soc because of the dependency) Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r--arch/arm/boot/dts/tegra20.dtsi5
-rw-r--r--arch/arm/boot/dts/tegra30.dtsi5
-rw-r--r--drivers/clk/tegra/clk-super.c18
-rw-r--r--drivers/clk/tegra/clk-tegra20.c22
-rw-r--r--drivers/clk/tegra/clk-tegra30.c47
5 files changed, 56 insertions, 41 deletions
diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi
index cdb8da0b6983..9a428931d042 100644
--- a/arch/arm/boot/dts/tegra20.dtsi
+++ b/arch/arm/boot/dts/tegra20.dtsi
@@ -247,7 +247,6 @@
247 reg = <0x70006000 0x40>; 247 reg = <0x70006000 0x40>;
248 reg-shift = <2>; 248 reg-shift = <2>;
249 interrupts = <0 36 0x04>; 249 interrupts = <0 36 0x04>;
250 clock-frequency = <216000000>;
251 nvidia,dma-request-selector = <&apbdma 8>; 250 nvidia,dma-request-selector = <&apbdma 8>;
252 clocks = <&tegra_car 6>; 251 clocks = <&tegra_car 6>;
253 status = "disabled"; 252 status = "disabled";
@@ -258,7 +257,6 @@
258 reg = <0x70006040 0x40>; 257 reg = <0x70006040 0x40>;
259 reg-shift = <2>; 258 reg-shift = <2>;
260 interrupts = <0 37 0x04>; 259 interrupts = <0 37 0x04>;
261 clock-frequency = <216000000>;
262 nvidia,dma-request-selector = <&apbdma 9>; 260 nvidia,dma-request-selector = <&apbdma 9>;
263 clocks = <&tegra_car 96>; 261 clocks = <&tegra_car 96>;
264 status = "disabled"; 262 status = "disabled";
@@ -269,7 +267,6 @@
269 reg = <0x70006200 0x100>; 267 reg = <0x70006200 0x100>;
270 reg-shift = <2>; 268 reg-shift = <2>;
271 interrupts = <0 46 0x04>; 269 interrupts = <0 46 0x04>;
272 clock-frequency = <216000000>;
273 nvidia,dma-request-selector = <&apbdma 10>; 270 nvidia,dma-request-selector = <&apbdma 10>;
274 clocks = <&tegra_car 55>; 271 clocks = <&tegra_car 55>;
275 status = "disabled"; 272 status = "disabled";
@@ -280,7 +277,6 @@
280 reg = <0x70006300 0x100>; 277 reg = <0x70006300 0x100>;
281 reg-shift = <2>; 278 reg-shift = <2>;
282 interrupts = <0 90 0x04>; 279 interrupts = <0 90 0x04>;
283 clock-frequency = <216000000>;
284 nvidia,dma-request-selector = <&apbdma 19>; 280 nvidia,dma-request-selector = <&apbdma 19>;
285 clocks = <&tegra_car 65>; 281 clocks = <&tegra_car 65>;
286 status = "disabled"; 282 status = "disabled";
@@ -291,7 +287,6 @@
291 reg = <0x70006400 0x100>; 287 reg = <0x70006400 0x100>;
292 reg-shift = <2>; 288 reg-shift = <2>;
293 interrupts = <0 91 0x04>; 289 interrupts = <0 91 0x04>;
294 clock-frequency = <216000000>;
295 nvidia,dma-request-selector = <&apbdma 20>; 290 nvidia,dma-request-selector = <&apbdma 20>;
296 clocks = <&tegra_car 66>; 291 clocks = <&tegra_car 66>;
297 status = "disabled"; 292 status = "disabled";
diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi
index 572a45bab93b..767803e1fd55 100644
--- a/arch/arm/boot/dts/tegra30.dtsi
+++ b/arch/arm/boot/dts/tegra30.dtsi
@@ -234,7 +234,6 @@
234 reg = <0x70006000 0x40>; 234 reg = <0x70006000 0x40>;
235 reg-shift = <2>; 235 reg-shift = <2>;
236 interrupts = <0 36 0x04>; 236 interrupts = <0 36 0x04>;
237 clock-frequency = <408000000>;
238 nvidia,dma-request-selector = <&apbdma 8>; 237 nvidia,dma-request-selector = <&apbdma 8>;
239 clocks = <&tegra_car 6>; 238 clocks = <&tegra_car 6>;
240 status = "disabled"; 239 status = "disabled";
@@ -244,7 +243,6 @@
244 compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; 243 compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart";
245 reg = <0x70006040 0x40>; 244 reg = <0x70006040 0x40>;
246 reg-shift = <2>; 245 reg-shift = <2>;
247 clock-frequency = <408000000>;
248 interrupts = <0 37 0x04>; 246 interrupts = <0 37 0x04>;
249 nvidia,dma-request-selector = <&apbdma 9>; 247 nvidia,dma-request-selector = <&apbdma 9>;
250 clocks = <&tegra_car 160>; 248 clocks = <&tegra_car 160>;
@@ -255,7 +253,6 @@
255 compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; 253 compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart";
256 reg = <0x70006200 0x100>; 254 reg = <0x70006200 0x100>;
257 reg-shift = <2>; 255 reg-shift = <2>;
258 clock-frequency = <408000000>;
259 interrupts = <0 46 0x04>; 256 interrupts = <0 46 0x04>;
260 nvidia,dma-request-selector = <&apbdma 10>; 257 nvidia,dma-request-selector = <&apbdma 10>;
261 clocks = <&tegra_car 55>; 258 clocks = <&tegra_car 55>;
@@ -266,7 +263,6 @@
266 compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; 263 compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart";
267 reg = <0x70006300 0x100>; 264 reg = <0x70006300 0x100>;
268 reg-shift = <2>; 265 reg-shift = <2>;
269 clock-frequency = <408000000>;
270 interrupts = <0 90 0x04>; 266 interrupts = <0 90 0x04>;
271 nvidia,dma-request-selector = <&apbdma 19>; 267 nvidia,dma-request-selector = <&apbdma 19>;
272 clocks = <&tegra_car 65>; 268 clocks = <&tegra_car 65>;
@@ -277,7 +273,6 @@
277 compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; 273 compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart";
278 reg = <0x70006400 0x100>; 274 reg = <0x70006400 0x100>;
279 reg-shift = <2>; 275 reg-shift = <2>;
280 clock-frequency = <408000000>;
281 interrupts = <0 91 0x04>; 276 interrupts = <0 91 0x04>;
282 nvidia,dma-request-selector = <&apbdma 20>; 277 nvidia,dma-request-selector = <&apbdma 20>;
283 clocks = <&tegra_car 66>; 278 clocks = <&tegra_car 66>;
diff --git a/drivers/clk/tegra/clk-super.c b/drivers/clk/tegra/clk-super.c
index 7ad48a832334..2fd924d38606 100644
--- a/drivers/clk/tegra/clk-super.c
+++ b/drivers/clk/tegra/clk-super.c
@@ -73,7 +73,12 @@ static int clk_super_set_parent(struct clk_hw *hw, u8 index)
73{ 73{
74 struct tegra_clk_super_mux *mux = to_clk_super_mux(hw); 74 struct tegra_clk_super_mux *mux = to_clk_super_mux(hw);
75 u32 val, state; 75 u32 val, state;
76 int err = 0;
76 u8 parent_index, shift; 77 u8 parent_index, shift;
78 unsigned long flags = 0;
79
80 if (mux->lock)
81 spin_lock_irqsave(mux->lock, flags);
77 82
78 val = readl_relaxed(mux->reg); 83 val = readl_relaxed(mux->reg);
79 state = val & SUPER_STATE_MASK; 84 state = val & SUPER_STATE_MASK;
@@ -92,8 +97,10 @@ static int clk_super_set_parent(struct clk_hw *hw, u8 index)
92 (index == mux->pllx_index))) { 97 (index == mux->pllx_index))) {
93 parent_index = clk_super_get_parent(hw); 98 parent_index = clk_super_get_parent(hw);
94 if ((parent_index == mux->div2_index) || 99 if ((parent_index == mux->div2_index) ||
95 (parent_index == mux->pllx_index)) 100 (parent_index == mux->pllx_index)) {
96 return -EINVAL; 101 err = -EINVAL;
102 goto out;
103 }
97 104
98 val ^= SUPER_LP_DIV2_BYPASS; 105 val ^= SUPER_LP_DIV2_BYPASS;
99 writel_relaxed(val, mux->reg); 106 writel_relaxed(val, mux->reg);
@@ -107,7 +114,12 @@ static int clk_super_set_parent(struct clk_hw *hw, u8 index)
107 114
108 writel_relaxed(val, mux->reg); 115 writel_relaxed(val, mux->reg);
109 udelay(2); 116 udelay(2);
110 return 0; 117
118out:
119 if (mux->lock)
120 spin_unlock_irqrestore(mux->lock, flags);
121
122 return err;
111} 123}
112 124
113const struct clk_ops tegra_clk_super_ops = { 125const struct clk_ops tegra_clk_super_ops = {
diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c
index 5d41569883a7..143ce1f899ad 100644
--- a/drivers/clk/tegra/clk-tegra20.c
+++ b/drivers/clk/tegra/clk-tegra20.c
@@ -194,6 +194,7 @@ static void __iomem *clk_base;
194static void __iomem *pmc_base; 194static void __iomem *pmc_base;
195 195
196static DEFINE_SPINLOCK(pll_div_lock); 196static DEFINE_SPINLOCK(pll_div_lock);
197static DEFINE_SPINLOCK(sysrate_lock);
197 198
198#define TEGRA_INIT_DATA_MUX(_name, _con_id, _dev_id, _parents, _offset, \ 199#define TEGRA_INIT_DATA_MUX(_name, _con_id, _dev_id, _parents, _offset, \
199 _clk_num, _regs, _gate_flags, _clk_id) \ 200 _clk_num, _regs, _gate_flags, _clk_id) \
@@ -239,8 +240,8 @@ enum tegra20_clk {
239 uartb = 96, vfir, spdif_in, spdif_out, vi, vi_sensor, tvo, cve, 240 uartb = 96, vfir, spdif_in, spdif_out, vi, vi_sensor, tvo, cve,
240 osc, clk_32k, clk_m, sclk, cclk, hclk, pclk, blink, pll_a, pll_a_out0, 241 osc, clk_32k, clk_m, sclk, cclk, hclk, pclk, blink, pll_a, pll_a_out0,
241 pll_c, pll_c_out1, pll_d, pll_d_out0, pll_e, pll_m, pll_m_out1, 242 pll_c, pll_c_out1, pll_d, pll_d_out0, pll_e, pll_m, pll_m_out1,
242 pll_p, pll_p_out1, pll_p_out2, pll_p_out3, pll_p_out4, pll_u, 243 pll_p, pll_p_out1, pll_p_out2, pll_p_out3, pll_p_out4, pll_s, pll_u,
243 pll_x, audio, pll_ref, twd, clk_max, 244 pll_x, cop, audio, pll_ref, twd, clk_max,
244}; 245};
245 246
246static struct clk *clks[clk_max]; 247static struct clk *clks[clk_max];
@@ -768,19 +769,21 @@ static void tegra20_super_clk_init(void)
768 769
769 /* HCLK */ 770 /* HCLK */
770 clk = clk_register_divider(NULL, "hclk_div", "sclk", 0, 771 clk = clk_register_divider(NULL, "hclk_div", "sclk", 0,
771 clk_base + CLK_SYSTEM_RATE, 4, 2, 0, NULL); 772 clk_base + CLK_SYSTEM_RATE, 4, 2, 0,
773 &sysrate_lock);
772 clk = clk_register_gate(NULL, "hclk", "hclk_div", CLK_SET_RATE_PARENT, 774 clk = clk_register_gate(NULL, "hclk", "hclk_div", CLK_SET_RATE_PARENT,
773 clk_base + CLK_SYSTEM_RATE, 7, 775 clk_base + CLK_SYSTEM_RATE, 7,
774 CLK_GATE_SET_TO_DISABLE, NULL); 776 CLK_GATE_SET_TO_DISABLE, &sysrate_lock);
775 clk_register_clkdev(clk, "hclk", NULL); 777 clk_register_clkdev(clk, "hclk", NULL);
776 clks[hclk] = clk; 778 clks[hclk] = clk;
777 779
778 /* PCLK */ 780 /* PCLK */
779 clk = clk_register_divider(NULL, "pclk_div", "hclk", 0, 781 clk = clk_register_divider(NULL, "pclk_div", "hclk", 0,
780 clk_base + CLK_SYSTEM_RATE, 0, 2, 0, NULL); 782 clk_base + CLK_SYSTEM_RATE, 0, 2, 0,
783 &sysrate_lock);
781 clk = clk_register_gate(NULL, "pclk", "pclk_div", CLK_SET_RATE_PARENT, 784 clk = clk_register_gate(NULL, "pclk", "pclk_div", CLK_SET_RATE_PARENT,
782 clk_base + CLK_SYSTEM_RATE, 3, 785 clk_base + CLK_SYSTEM_RATE, 3,
783 CLK_GATE_SET_TO_DISABLE, NULL); 786 CLK_GATE_SET_TO_DISABLE, &sysrate_lock);
784 clk_register_clkdev(clk, "pclk", NULL); 787 clk_register_clkdev(clk, "pclk", NULL);
785 clks[pclk] = clk; 788 clks[pclk] = clk;
786 789
@@ -1251,8 +1254,11 @@ static __initdata struct tegra_clk_init_table init_table[] = {
1251 {csite, clk_max, 0, 1}, 1254 {csite, clk_max, 0, 1},
1252 {emc, clk_max, 0, 1}, 1255 {emc, clk_max, 0, 1},
1253 {cclk, clk_max, 0, 1}, 1256 {cclk, clk_max, 0, 1},
1254 {uarta, pll_p, 0, 1}, 1257 {uarta, pll_p, 0, 0},
1255 {uartd, pll_p, 0, 1}, 1258 {uartb, pll_p, 0, 0},
1259 {uartc, pll_p, 0, 0},
1260 {uartd, pll_p, 0, 0},
1261 {uarte, pll_p, 0, 0},
1256 {usbd, clk_max, 12000000, 0}, 1262 {usbd, clk_max, 12000000, 0},
1257 {usb2, clk_max, 12000000, 0}, 1263 {usb2, clk_max, 12000000, 0},
1258 {usb3, clk_max, 12000000, 0}, 1264 {usb3, clk_max, 12000000, 0},
diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c
index a1638129eba4..32c61cb6d0bb 100644
--- a/drivers/clk/tegra/clk-tegra30.c
+++ b/drivers/clk/tegra/clk-tegra30.c
@@ -275,6 +275,7 @@ static DEFINE_SPINLOCK(clk_out_lock);
275static DEFINE_SPINLOCK(pll_div_lock); 275static DEFINE_SPINLOCK(pll_div_lock);
276static DEFINE_SPINLOCK(cml_lock); 276static DEFINE_SPINLOCK(cml_lock);
277static DEFINE_SPINLOCK(pll_d_lock); 277static DEFINE_SPINLOCK(pll_d_lock);
278static DEFINE_SPINLOCK(sysrate_lock);
278 279
279#define TEGRA_INIT_DATA_MUX(_name, _con_id, _dev_id, _parents, _offset, \ 280#define TEGRA_INIT_DATA_MUX(_name, _con_id, _dev_id, _parents, _offset, \
280 _clk_num, _regs, _gate_flags, _clk_id) \ 281 _clk_num, _regs, _gate_flags, _clk_id) \
@@ -327,21 +328,21 @@ enum tegra30_clk {
327 kbc = 36, statmon, pmc, kfuse = 40, sbc1, nor, sbc2 = 44, sbc3 = 46, 328 kbc = 36, statmon, pmc, kfuse = 40, sbc1, nor, sbc2 = 44, sbc3 = 46,
328 i2c5, dsia, mipi = 50, hdmi, csi, tvdac, i2c2, uartc, emc = 57, usb2, 329 i2c5, dsia, mipi = 50, hdmi, csi, tvdac, i2c2, uartc, emc = 57, usb2,
329 usb3, mpe, vde, bsea, bsev, speedo, uartd, uarte, i2c3, sbc4, sdmmc3, 330 usb3, mpe, vde, bsea, bsev, speedo, uartd, uarte, i2c3, sbc4, sdmmc3,
330 pcie, owr, afi, csite, pciex, avpucq, la, dtv = 79, ndspeed, i2c_slow, 331 pcie, owr, afi, csite, pciex, avpucq, la, dtv = 79, ndspeed, i2cslow,
331 dsib, irama = 84, iramb, iramc, iramd, cram2, audio_2x = 90, csus = 92, 332 dsib, irama = 84, iramb, iramc, iramd, cram2, audio_2x = 90, csus = 92,
332 cdev1, cdev2, cpu_g = 96, cpu_lp, gr3d2, mselect, tsensor, i2s3, i2s4, 333 cdev1, cdev2, cpu_g = 96, cpu_lp, gr3d2, mselect, tsensor, i2s3, i2s4,
333 i2c4, sbc5, sbc6, d_audio, apbif, dam0, dam1, dam2, hda2codec_2x, 334 i2c4, sbc5, sbc6, d_audio, apbif, dam0, dam1, dam2, hda2codec_2x,
334 atomics, audio0_2x, audio1_2x, audio2_2x, audio3_2x, audio4_2x, 335 atomics, audio0_2x, audio1_2x, audio2_2x, audio3_2x, audio4_2x,
335 spdif_2x, actmon, extern1, extern2, extern3, sata_oob, sata, hda, se, 336 spdif_2x, actmon, extern1, extern2, extern3, sata_oob, sata, hda,
336 hda2hdmi, sata_cold, uartb = 160, vfir, spdif_out, spdif_in, vi, 337 se = 127, hda2hdmi, sata_cold, uartb = 160, vfir, spdif_in, spdif_out,
337 vi_sensor, fuse, fuse_burn, cve, tvo, clk_32k, clk_m, clk_m_div2, 338 vi, vi_sensor, fuse, fuse_burn, cve, tvo, clk_32k, clk_m, clk_m_div2,
338 clk_m_div4, pll_ref, pll_c, pll_c_out1, pll_m, pll_m_out1, pll_p, 339 clk_m_div4, pll_ref, pll_c, pll_c_out1, pll_m, pll_m_out1, pll_p,
339 pll_p_out1, pll_p_out2, pll_p_out3, pll_p_out4, pll_a, pll_a_out0, 340 pll_p_out1, pll_p_out2, pll_p_out3, pll_p_out4, pll_a, pll_a_out0,
340 pll_d, pll_d_out0, pll_d2, pll_d2_out0, pll_u, pll_x, pll_x_out0, pll_e, 341 pll_d, pll_d_out0, pll_d2, pll_d2_out0, pll_u, pll_x, pll_x_out0, pll_e,
341 spdif_in_sync, i2s0_sync, i2s1_sync, i2s2_sync, i2s3_sync, i2s4_sync, 342 spdif_in_sync, i2s0_sync, i2s1_sync, i2s2_sync, i2s3_sync, i2s4_sync,
342 vimclk_sync, audio0, audio1, audio2, audio3, audio4, spdif, clk_out_1, 343 vimclk_sync, audio0, audio1, audio2, audio3, audio4, spdif, clk_out_1,
343 clk_out_2, clk_out_3, sclk, blink, cclk_g, cclk_lp, twd, cml0, cml1, 344 clk_out_2, clk_out_3, sclk, blink, cclk_g, cclk_lp, twd, cml0, cml1,
344 i2cslow, hclk, pclk, clk_out_1_mux = 300, clk_max 345 hclk, pclk, clk_out_1_mux = 300, clk_max
345}; 346};
346 347
347static struct clk *clks[clk_max]; 348static struct clk *clks[clk_max];
@@ -1249,16 +1250,16 @@ static void __init tegra30_pmc_clk_init(void)
1249 1250
1250} 1251}
1251 1252
1252const char *cclk_g_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m", 1253static const char *cclk_g_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m",
1253 "pll_p_cclkg", "pll_p_out4_cclkg", 1254 "pll_p_cclkg", "pll_p_out4_cclkg",
1254 "pll_p_out3_cclkg", "unused", "pll_x" }; 1255 "pll_p_out3_cclkg", "unused", "pll_x" };
1255const char *cclk_lp_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m", 1256static const char *cclk_lp_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m",
1256 "pll_p_cclklp", "pll_p_out4_cclklp", 1257 "pll_p_cclklp", "pll_p_out4_cclklp",
1257 "pll_p_out3_cclklp", "unused", "pll_x", 1258 "pll_p_out3_cclklp", "unused", "pll_x",
1258 "pll_x_out0" }; 1259 "pll_x_out0" };
1259const char *sclk_parents[] = { "clk_m", "pll_c_out1", "pll_p_out4", 1260static const char *sclk_parents[] = { "clk_m", "pll_c_out1", "pll_p_out4",
1260 "pll_p_out3", "pll_p_out2", "unused", 1261 "pll_p_out3", "pll_p_out2", "unused",
1261 "clk_32k", "pll_m_out1" }; 1262 "clk_32k", "pll_m_out1" };
1262 1263
1263static void __init tegra30_super_clk_init(void) 1264static void __init tegra30_super_clk_init(void)
1264{ 1265{
@@ -1348,19 +1349,21 @@ static void __init tegra30_super_clk_init(void)
1348 1349
1349 /* HCLK */ 1350 /* HCLK */
1350 clk = clk_register_divider(NULL, "hclk_div", "sclk", 0, 1351 clk = clk_register_divider(NULL, "hclk_div", "sclk", 0,
1351 clk_base + SYSTEM_CLK_RATE, 4, 2, 0, NULL); 1352 clk_base + SYSTEM_CLK_RATE, 4, 2, 0,
1353 &sysrate_lock);
1352 clk = clk_register_gate(NULL, "hclk", "hclk_div", CLK_SET_RATE_PARENT, 1354 clk = clk_register_gate(NULL, "hclk", "hclk_div", CLK_SET_RATE_PARENT,
1353 clk_base + SYSTEM_CLK_RATE, 7, 1355 clk_base + SYSTEM_CLK_RATE, 7,
1354 CLK_GATE_SET_TO_DISABLE, NULL); 1356 CLK_GATE_SET_TO_DISABLE, &sysrate_lock);
1355 clk_register_clkdev(clk, "hclk", NULL); 1357 clk_register_clkdev(clk, "hclk", NULL);
1356 clks[hclk] = clk; 1358 clks[hclk] = clk;
1357 1359
1358 /* PCLK */ 1360 /* PCLK */
1359 clk = clk_register_divider(NULL, "pclk_div", "hclk", 0, 1361 clk = clk_register_divider(NULL, "pclk_div", "hclk", 0,
1360 clk_base + SYSTEM_CLK_RATE, 0, 2, 0, NULL); 1362 clk_base + SYSTEM_CLK_RATE, 0, 2, 0,
1363 &sysrate_lock);
1361 clk = clk_register_gate(NULL, "pclk", "pclk_div", CLK_SET_RATE_PARENT, 1364 clk = clk_register_gate(NULL, "pclk", "pclk_div", CLK_SET_RATE_PARENT,
1362 clk_base + SYSTEM_CLK_RATE, 3, 1365 clk_base + SYSTEM_CLK_RATE, 3,
1363 CLK_GATE_SET_TO_DISABLE, NULL); 1366 CLK_GATE_SET_TO_DISABLE, &sysrate_lock);
1364 clk_register_clkdev(clk, "pclk", NULL); 1367 clk_register_clkdev(clk, "pclk", NULL);
1365 clks[pclk] = clk; 1368 clks[pclk] = clk;
1366 1369
@@ -1874,7 +1877,11 @@ static struct tegra_cpu_car_ops tegra30_cpu_car_ops = {
1874}; 1877};
1875 1878
1876static __initdata struct tegra_clk_init_table init_table[] = { 1879static __initdata struct tegra_clk_init_table init_table[] = {
1877 {uarta, pll_p, 408000000, 1}, 1880 {uarta, pll_p, 408000000, 0},
1881 {uartb, pll_p, 408000000, 0},
1882 {uartc, pll_p, 408000000, 0},
1883 {uartd, pll_p, 408000000, 0},
1884 {uarte, pll_p, 408000000, 0},
1878 {pll_a, clk_max, 564480000, 1}, 1885 {pll_a, clk_max, 564480000, 1},
1879 {pll_a_out0, clk_max, 11289600, 1}, 1886 {pll_a_out0, clk_max, 11289600, 1},
1880 {extern1, pll_a_out0, 0, 1}, 1887 {extern1, pll_a_out0, 0, 1},