ARM: vexpress: use new init_early for clock tree and sched_clock init
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 11 Jan 2011 13:07:52 +0000 (13:07 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 19 Feb 2011 11:11:10 +0000 (11:11 +0000)
Initialize the clock tree and our sched_clock() early.

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-vexpress/core.h
arch/arm/mach-vexpress/ct-ca9x4.c
arch/arm/mach-vexpress/v2m.c

index 362780d868de02f5c5ea0e42c3d80e5b02f09607..e0312a1dce3a851b2a9624fc654290c5dbf55089 100644 (file)
@@ -21,4 +21,5 @@ struct amba_device name##_device = {          \
 struct map_desc;
 
 void v2m_map_io(struct map_desc *tile, size_t num);
+void v2m_init_early(void);
 extern struct sys_timer v2m_timer;
index 27baed18a256e8ef2d56f0ff04dc7f383b11f756..ff48ebc1a40be9dc9eb5d90f7e76e38e47afb207 100644 (file)
@@ -180,6 +180,13 @@ static struct platform_device pmu_device = {
        .resource       = pmu_resources,
 };
 
+static void __init ct_ca9x4_init_early(void)
+{
+       clkdev_add_table(lookups, ARRAY_SIZE(lookups));
+
+       v2m_init_early();
+}
+
 static void __init ct_ca9x4_init(void)
 {
        int i;
@@ -194,8 +201,6 @@ static void __init ct_ca9x4_init(void)
        l2x0_init(l2x0_base, 0x00400000, 0xfe0fffff);
 #endif
 
-       clkdev_add_table(lookups, ARRAY_SIZE(lookups));
-
        for (i = 0; i < ARRAY_SIZE(ct_ca9x4_amba_devs); i++)
                amba_device_register(ct_ca9x4_amba_devs[i], &iomem_resource);
 
@@ -206,6 +211,7 @@ MACHINE_START(VEXPRESS, "ARM-Versatile Express CA9x4")
        .boot_params    = PHYS_OFFSET + 0x00000100,
        .map_io         = ct_ca9x4_map_io,
        .init_irq       = ct_ca9x4_init_irq,
+       .init_early     = ct_ca9x4_init_early,
 #if 0
        .timer          = &ct_ca9x4_timer,
 #else
index f35d646a1bf160f257aa65d20a4eae1fac5b3351..63ef663fb0be7faa6a97c056d71c40b87b378b47 100644 (file)
@@ -49,13 +49,15 @@ void __init v2m_map_io(struct map_desc *tile, size_t num)
        iotable_init(tile, num);
 }
 
+void __init v2m_init_early(void)
+{
+       versatile_sched_clock_init(MMIO_P2V(V2M_SYS_24MHZ), 24000000);
+}
 
 static void __init v2m_timer_init(void)
 {
        u32 scctrl;
 
-       versatile_sched_clock_init(MMIO_P2V(V2M_SYS_24MHZ), 24000000);
-
        /* Select 1MHz TIMCLK as the reference clock for SP804 timers */
        scctrl = readl(MMIO_P2V(V2M_SYSCTL + SCCTRL));
        scctrl |= SCCTRL_TIMEREN0SEL_TIMCLK;