Initialize the clock and timer using the COMMON_CLK procedure.
sh's earlytimer mechanism doesn't work properly in OF,
so timer initialization is delayed.
If CONFIG_OF=y, perform the general timer initialization procedure.

Signed-off-by: Yoshinori Sato <ys...@users.sourceforge.jp>
---
 arch/sh/boards/of-generic.c | 28 ++++------------------------
 arch/sh/kernel/time.c       | 12 ++++++++++++
 2 files changed, 16 insertions(+), 24 deletions(-)

diff --git a/arch/sh/boards/of-generic.c b/arch/sh/boards/of-generic.c
index f7f3e618e85b..f1ca5a914c11 100644
--- a/arch/sh/boards/of-generic.c
+++ b/arch/sh/boards/of-generic.c
@@ -8,6 +8,7 @@
 #include <linux/of.h>
 #include <linux/of_clk.h>
 #include <linux/of_fdt.h>
+#include <linux/of_platform.h>
 #include <linux/clocksource.h>
 #include <linux/irqchip.h>
 #include <asm/machvec.h>
@@ -98,16 +99,7 @@ static void sh_of_smp_probe(void)
 
 #endif
 
-static void noop(void)
-{
-}
-
-static int noopi(void)
-{
-       return 0;
-}
-
-static void __init sh_of_mem_reserve(void)
+static void __init sh_of_mem_init(void)
 {
        early_init_fdt_reserve_self();
        early_init_fdt_scan_reserved_mem();
@@ -140,25 +132,13 @@ static void __init sh_of_init_irq(void)
        irqchip_init();
 }
 
-static int __init sh_of_clk_init(void)
-{
-#ifdef CONFIG_COMMON_CLK
-       /* Disabled pending move to COMMON_CLK framework. */
-       pr_info("SH generic board support: scanning for clk providers\n");
-       of_clk_init(NULL);
-#endif
-       return 0;
-}
-
 static struct sh_machine_vector __initmv sh_of_generic_mv = {
        .mv_setup       = sh_of_setup,
        .mv_name        = "devicetree", /* replaced by DT root's model */
        .mv_irq_demux   = sh_of_irq_demux,
        .mv_init_irq    = sh_of_init_irq,
-       .mv_clk_init    = sh_of_clk_init,
-       .mv_mode_pins   = noopi,
-       .mv_mem_init    = noop,
-       .mv_mem_reserve = sh_of_mem_reserve,
+       .mv_mode_pins   = generic_mode_pins,
+       .mv_mem_init    = sh_of_mem_init,
 };
 
 struct sh_clk_ops;
diff --git a/arch/sh/kernel/time.c b/arch/sh/kernel/time.c
index 821a09cbd605..ce5b7c2f8628 100644
--- a/arch/sh/kernel/time.c
+++ b/arch/sh/kernel/time.c
@@ -19,7 +19,9 @@
 #include <asm/clock.h>
 #include <asm/rtc.h>
 #include <asm/platform_early.h>
+#include <linux/of_clk.h>
 
+#ifndef CONFIG_SH_DEVICE_TREE
 static void __init sh_late_time_init(void)
 {
        /*
@@ -43,3 +45,13 @@ void __init time_init(void)
 
        late_time_init = sh_late_time_init;
 }
+#else
+/* CONFIG_SH_DEVICE_TREE */
+void __init time_init(void)
+{
+       pr_info("SH generic board support: scanning for clk providers\n");
+
+       of_clk_init(NULL);
+       timer_probe();
+}
+#endif
-- 
2.39.2

Reply via email to