diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c index 5f25256..a5a3969 100644 --- a/arch/arm/mach-zynq/common.c +++ b/arch/arm/mach-zynq/common.c @@ -19,8 +19,6 @@ #include #include #include -#include -#include #include #include #include @@ -58,10 +56,9 @@ static void __init zynq_init_machine(void) of_platform_bus_probe(NULL, zynq_of_bus_ids, NULL); } -static void __init zynq_timer_init(void) +static void __init zynq_init_early(void) { zynq_slcr_init(); - clocksource_of_init(); } static struct map_desc zynq_cortex_a9_scu_map __initdata = { @@ -104,8 +101,8 @@ static const char * const zynq_dt_match[] = { DT_MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform") .smp = smp_ops(zynq_smp_ops), .map_io = zynq_map_io, + .init_early = zynq_init_early, .init_machine = zynq_init_machine, - .init_time = zynq_timer_init, .dt_compat = zynq_dt_match, .restart = zynq_system_reset, MACHINE_END diff --git a/arch/arm/mach-zynq/slcr.c b/arch/arm/mach-zynq/slcr.c index 1836d5a..59ad09f 100644 --- a/arch/arm/mach-zynq/slcr.c +++ b/arch/arm/mach-zynq/slcr.c @@ -106,8 +106,6 @@ int __init zynq_slcr_init(void) pr_info("%s mapped to %p\n", np->name, zynq_slcr_base); - zynq_clock_init(zynq_slcr_base); - of_node_put(np); return 0; diff --git a/drivers/clk/zynq/clkc.c b/drivers/clk/zynq/clkc.c index 089d3e3..8fa0de7 100644 --- a/drivers/clk/zynq/clkc.c +++ b/drivers/clk/zynq/clkc.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -203,9 +204,19 @@ static void __init zynq_clk_setup(struct device_node *np) const char *periph_parents[4]; const char *swdt_ext_clk_mux_parents[2]; const char *can_mio_mux_parents[NUM_MIO_PINS]; + struct device_node *slcrnp; pr_info("Zynq clock init\n"); + slcrnp = of_find_compatible_node(NULL, NULL, "xlnx,zynq-slcr"); + if (WARN_ON(!slcrnp)) + return; + + zynq_slcr_base_priv = of_iomap(slcrnp, 0); + of_node_put(slcrnp); + if (WARN_ON(!zynq_slcr_base_priv)) + return; + /* get clock output names from DT */ for (i = 0; i < clk_max; i++) { if (of_property_read_string_index(np, "clock-output-names", @@ -528,9 +539,3 @@ static void __init zynq_clk_setup(struct device_node *np) } CLK_OF_DECLARE(zynq_clkc, "xlnx,ps7-clkc", zynq_clk_setup); - -void __init zynq_clock_init(void __iomem *slcr_base) -{ - zynq_slcr_base_priv = slcr_base; - of_clk_init(NULL); -} diff --git a/include/linux/clk/zynq.h b/include/linux/clk/zynq.h index e062d31..58b5516 100644 --- a/include/linux/clk/zynq.h +++ b/include/linux/clk/zynq.h @@ -22,8 +22,6 @@ #include -void zynq_clock_init(void __iomem *slcr); - struct clk *clk_register_zynq_pll(const char *name, const char *parent, void __iomem *pll_ctrl, void __iomem *pll_status, u8 lock_index, spinlock_t *lock);