Versatile Express: add support for local timers on CA9X4 daughterboard
Subsystems (3)
PATCH 1/1 Versatile Express: add support for local timers on CA9X4 daughterboard
This patch adds support for the Cortex-A9 local timers available when using the CA9X4 daughterboard with the Versatile Express.
--- arch/arm/Kconfig | 5 +++-- arch/arm/mach-vexpress/ct-ca9x4.c | 14 ++++++++------ arch/arm/mach-vexpress/include/mach/ct-ca9x4.h | 1 + 3 files changed, 12 insertions(+), 8 deletions(-)
arch/arm/Kconfig +3 -2
@@ -1172,9 +1172,10 @@ config HOTPLUG_CPU config LOCAL_TIMERS bool "Use local timer interrupts" depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \ - REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || ARCH_U8500) + REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \ + ARCH_U8500 || ARCH_VEXPRESS_CA9X4) default y - select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500) + select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_VEXPRESS || ARCH_OMAP4 || ARCH_U8500) help Enable support for local timers on SMP platforms, rather then the legacy IPI broadcast method. Local timers allows the system
arch/arm/mach-vexpress/ct-ca9x4.c +8 -6
@@ -14,6 +14,7 @@#include <asm/hardware/gic.h> #include <asm/mach-types.h> #include <asm/pmu.h> +#include <asm/smp_twd.h> #include <mach/clkdev.h> #include <mach/ct-ca9x4.h>
@@ -63,20 +64,25 @@ static void __init ct_ca9x4_init_irq(void)gic_cpu_init (0 , gic_cpu_base_addr); } -#if 0 static void ct_ca9x4_timer_init (void ) { +#if 0 writel (0 ,MMIO_P2V (CT_CA9X4_TIMER0 ) +TIMER_CTRL );writel (0 ,MMIO_P2V (CT_CA9X4_TIMER1 ) +TIMER_CTRL );sp804_clocksource_init (MMIO_P2V (CT_CA9X4_TIMER1 ));sp804_clockevents_init (MMIO_P2V (CT_CA9X4_TIMER0 ),IRQ_CT_CA9X4_TIMER0 ); +#endif + +#ifdef CONFIG_LOCAL_TIMERS + twd_base =MMIO_P2V (A9_MPCORE_TWD ); +#endif + v2m_timer.init (); }static struct sys_timer ct_ca9x4_timer = { .init = ct_ca9x4_timer_init, }; -#endif static struct clcd_panel xvga_panel = { .mode = {
@@ -240,10 +246,6 @@ MACHINE_START(VEXPRESS, "ARM-Versatile Express CA9x4") .boot_params = PHYS_OFFSET + 0x00000100, .map_io = ct_ca9x4_map_io, .init_irq = ct_ca9x4_init_irq, -#if 0 .timer = &ct_ca9x4_timer, -#else - .timer = &v2m_timer, -#endif .init_machine = ct_ca9x4_init,MACHINE_END
arch/arm/mach-vexpress/include/mach/ct-ca9x4.h +1 -0
@@ -28,6 +28,7 @@#define A9_MPCORE_SCU (CT_CA9X4_MPIC + 0x0000)#define A9_MPCORE_GIC_CPU (CT_CA9X4_MPIC + 0x0100)#define A9_MPCORE_GIT (CT_CA9X4_MPIC + 0x0200) +#define A9_MPCORE_TWD (CT_CA9X4_MPIC + 0x0600)#define A9_MPCORE_GIC_DIST (CT_CA9X4_MPIC + 0x1000)/*
Signature · 1 line
1.6.3.3
PATCH 1/1 Versatile Express: add support for local timers on CA9X4 daughterboard
Hi Russell,
Quoted 5 lines
[PATCH] Versatile Express: add support for local timers on CA9X4 daughterboard
This patch adds support for the Cortex-A9 local timers available when using the CA9X4 daughterboard with the Versatile Express.
Quoted 9 lines
Cc Russell King - ARM Linux <[email protected]>Reviewed-by Catalin Marinas <[email protected]>Signed-off-by Will Deacon <[email protected]>--- arch/arm/Kconfig | 5 +++-- arch/arm/mach-vexpress/ct-ca9x4.c | 14 ++++++++------ arch/arm/mach-vexpress/include/mach/ct-ca9x4.h | 1 + 3 files changed, 12 insertions(+), 8 deletions(-)
Do you have any objections to this patch, or can I submit it to the patch system please? There are some timer init functions in ct-ca9x4.c that are commented out so I'd like to make sure I'm not interfering with any future plans.
Thanks,
Will
PATCH 1/1 Versatile Express: add support for local timers on CA9X4 daughterboard
In reply to Will DeaconQuoted 2 lines · Will Deacon
This patch adds support for the Cortex-A9 local timers available when using the CA9X4 daughterboard with the Versatile Express.
I'd rather we didn't change the timer stuff like this - all that you seem to want is some way to setup the twd base address. Can this be done via .map_io method instead?
PATCH 1/1 Versatile Express: add support for local timers on CA9X4 daughterboard
Hello Russell,
Quoted 7 lines · Will Deacon
Quoted 2 lines
This patch adds support for the Cortex-A9 local timers available when using the CA9X4 daughterboard with the Versatile Express.
I'd rather we didn't change the timer stuff like this - all that you seem to want is some way to setup the twd base address. Can this be done via .map_io method instead?
That's a lot tidier, how about something like this?:
arch/arm/Kconfig +3 -2
@@ -1172,9 +1172,10 @@ config HOTPLUG_CPU config LOCAL_TIMERS bool "Use local timer interrupts" depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \ - REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || ARCH_U8500) + REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \ + ARCH_U8500 || ARCH_VEXPRESS_CA9X4) default y - select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500) + select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_VEXPRESS || ARCH_OMAP4 || ARCH_U8500) help Enable support for local timers on SMP platforms, rather then the legacy IPI broadcast method. Local timers allows the system
arch/arm/mach-vexpress/ct-ca9x4.c +2 -0
@@ -16,6 +16,7 @@#include <asm/hardware/gic.h> #include <asm/mach-types.h> #include <asm/pmu.h> +#include <asm/smp_twd.h> #include <mach/clkdev.h> #include <mach/ct-ca9x4.h>
@@ -53,6 +54,7 @@ static struct map_desc ct_ca9x4_io_desc[] __initdata = {static void __init ct_ca9x4_map_io (void ) { + twd_base =MMIO_P2V (A9_MPCORE_TWD );v2m_map_io (ct_ca9x4_io_desc,ARRAY_SIZE (ct_ca9x4_io_desc)); }
arch/arm/mach-vexpress/include/mach/ct-ca9x4.h +1 -0
@@ -28,6 +28,7 @@#define A9_MPCORE_SCU (CT_CA9X4_MPIC + 0x0000)#define A9_MPCORE_GIC_CPU (CT_CA9X4_MPIC + 0x0100)#define A9_MPCORE_GIT (CT_CA9X4_MPIC + 0x0200) +#define A9_MPCORE_TWD (CT_CA9X4_MPIC + 0x0600)#define A9_MPCORE_GIC_DIST (CT_CA9X4_MPIC + 0x1000)/*
My only question is; what is the commented-out timer code for in ct-ca9x4.c? It would be nice to get rid of it if it's not useful.
Cheers,
Will
PATCH 1/1 Versatile Express: add support for local timers on CA9X4 daughterboard
Quoted 1 line · Will Deacon
That's a lot tidier, how about something like this?:
Yea.
Quoted 2 lines
My only question is; what is the commented-out timer code for in
ct-ca9x4.c? It would be nice to get rid of it if it's not useful.
I tried to use the core tile timers, but I couldn't get them to work properly (I don't remember why.) I guess it would be preferable to use the core tile timers as they probably have a faster latency than the baseboard ones. Hence I left the code there for when I can investigate a little more.
PATCH 1/1 Versatile Express: add support for local timers on CA9X4 daughterboard
Quoted 4 lines · Will Deacon
Quoted 1 line
That's a lot tidier, how about something like this?:
Yea.
Great - submitted as 6218/1 superseding the old patch.
Quoted 8 lines
Quoted 2 lines
My only question is; what is the commented-out timer code for in
ct-ca9x4.c? It would be nice to get rid of it if it's not useful.I tried to use the core tile timers, but I couldn't get them to work properly (I don't remember why.) I guess it would be preferable to use the core tile timers as they probably have a faster latency than the baseboard ones. Hence I left the code there for when I can investigate a little more.
Ah, ok, I'll leave that alone then.
Thanks,
Will