Patchwork ARM: imx: provide twd clock lookup from device tree

login
register
mail settings
Submitter Shawn Guo
Date April 3, 2013, 4:02 p.m.
Message ID <1365004963-27957-1-git-send-email-shawn.guo@linaro.org>
Download mbox | patch
Permalink /patch/233554/
State New
Headers show

Comments

Shawn Guo - April 3, 2013, 4:02 p.m.
While booting from device tree, imx6q used to provide twd clock lookup
by calling clk_register_clkdev() in clock driver.  However, the commit
bd60345 (ARM: use device tree to get smp_twd clock) forces DT boot to
look up the clock from device tree.  It causes the failure below when
twd driver tries to get the clock, and hence kernel has to calibrate the
local timer frequency.

 smp_twd: clock not found -2
 ...
 Calibrating local timer... 396.13MHz.

Fix the regression by providing twd clock lookup from device tree, and
remove the unused twd clk_register_clkdev() call from clock driver.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
Arnd, Olof,

This is a fix for 3.9.

Shawn

 arch/arm/boot/dts/imx6qdl.dtsi |    1 +
 arch/arm/mach-imx/clk-imx6q.c  |    1 -
 2 files changed, 1 insertion(+), 1 deletion(-)
Shawn Guo - April 9, 2013, 11:53 a.m.
On Thu, Apr 04, 2013 at 12:02:43AM +0800, Shawn Guo wrote:
> While booting from device tree, imx6q used to provide twd clock lookup
> by calling clk_register_clkdev() in clock driver.  However, the commit
> bd60345 (ARM: use device tree to get smp_twd clock) forces DT boot to
> look up the clock from device tree.  It causes the failure below when
> twd driver tries to get the clock, and hence kernel has to calibrate the
> local timer frequency.
> 
>  smp_twd: clock not found -2
>  ...
>  Calibrating local timer... 396.13MHz.
> 
> Fix the regression by providing twd clock lookup from device tree, and
> remove the unused twd clk_register_clkdev() call from clock driver.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> ---
> Arnd, Olof,
> 
> This is a fix for 3.9.

I will have this included in the pull request that is to be sent.

Shawn

Patch

diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
index 06ec460..281a223 100644
--- a/arch/arm/boot/dts/imx6qdl.dtsi
+++ b/arch/arm/boot/dts/imx6qdl.dtsi
@@ -91,6 +91,7 @@ 
 			compatible = "arm,cortex-a9-twd-timer";
 			reg = <0x00a00600 0x20>;
 			interrupts = <1 13 0xf01>;
+			clocks = <&clks 15>;
 		};
 
 		L2: l2-cache@00a02000 {
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c
index 2f9ff93..22a3021 100644
--- a/arch/arm/mach-imx/clk-imx6q.c
+++ b/arch/arm/mach-imx/clk-imx6q.c
@@ -443,7 +443,6 @@  int __init mx6q_clocks_init(void)
 
 	clk_register_clkdev(clk[gpt_ipg], "ipg", "imx-gpt.0");
 	clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0");
-	clk_register_clkdev(clk[twd], NULL, "smp_twd");
 	clk_register_clkdev(clk[cko1_sel], "cko1_sel", NULL);
 	clk_register_clkdev(clk[ahb], "ahb", NULL);
 	clk_register_clkdev(clk[cko1], "cko1", NULL);