Russell, > -----Original Message----- > From: Santosh Shilimkar [mailto:santosh.shilimkar@xxxxxx] > Sent: Saturday, February 12, 2011 5:00 PM > To: linux-omap@xxxxxxxxxxxxxxx > Cc: khilman@xxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; > tony@xxxxxxxxxxx; Santosh Shilimkar; Russell King; David Brown; > Daniel Walker; Bryan Huntsman; Kukjin Kim; Paul Mundt; Magnus Damm; > Colin Cross; Erik Gilling; Srinidhi Kasagar; Linus Walleij > Subject: [PATCH 1/5] ARM: smp: Select local timers vs dummy timer > support runtime > > The current code support of dummy timers in absence of local > timer is compile time. This is an attempt to convert it to runtime > so that on few SOC version if the local timers aren't supported > kernel can switch to dummy timers. OMAP4430 ES1.0 does suffer from > this limitation. > > This patch should not have any functional impact on affected > files. > > Signed-off-by: Santosh Shilimkar <santosh.shilimkar@xxxxxx> > Cc: Russell King <linux@xxxxxxxxxxxxxxxx> > Cc: David Brown <davidb@xxxxxxxxxxxxxx> > Cc: Daniel Walker <dwalker@xxxxxxxxxxxxxx> > Cc: Bryan Huntsman <bryanh@xxxxxxxxxxxxxx> > Cc: Tony Lindgren <tony@xxxxxxxxxxx> > Cc: Kukjin Kim <kgene.kim@xxxxxxxxxxx> > Cc: Paul Mundt <lethal@xxxxxxxxxxxx> > Cc: Magnus Damm <magnus.damm@xxxxxxxxx> > Cc: Colin Cross <ccross@xxxxxxxxxxx> > Cc: Erik Gilling <konkers@xxxxxxxxxxx> > Cc: Srinidhi Kasagar <srinidhi.kasagar@xxxxxxxxxxxxxx> > Cc: Linus Walleij <linus.walleij@xxxxxxxxxxxxxx> > --- Any comments on this one? So far David has acked this for mach-msm. > arch/arm/include/asm/localtimer.h | 8 +++++++- > arch/arm/kernel/smp.c | 7 +++---- > arch/arm/mach-msm/timer.c | 3 ++- > arch/arm/mach-omap2/timer-mpu.c | 3 ++- > arch/arm/mach-realview/localtimer.c | 3 ++- > arch/arm/mach-s5pv310/localtimer.c | 3 ++- > arch/arm/mach-shmobile/localtimer.c | 3 ++- > arch/arm/mach-tegra/localtimer.c | 3 ++- > arch/arm/mach-ux500/localtimer.c | 3 ++- > arch/arm/mach-vexpress/localtimer.c | 3 ++- > 10 files changed, 26 insertions(+), 13 deletions(-) > > diff --git a/arch/arm/include/asm/localtimer.h > b/arch/arm/include/asm/localtimer.h > index 6bc63ab..080d74f 100644 > --- a/arch/arm/include/asm/localtimer.h > +++ b/arch/arm/include/asm/localtimer.h > @@ -44,8 +44,14 @@ int local_timer_ack(void); > /* > * Setup a local timer interrupt for a CPU. > */ > -void local_timer_setup(struct clock_event_device *); > +int local_timer_setup(struct clock_event_device *); > > +#else > + > +static inline int local_timer_setup(struct clock_event_device *evt) > +{ > + return -ENXIO; > +} > #endif > > #endif > diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c > index 4539ebc..7b9cc53 100644 > --- a/arch/arm/kernel/smp.c > +++ b/arch/arm/kernel/smp.c > @@ -474,13 +474,12 @@ static void smp_timer_broadcast(const struct > cpumask *mask) > #define smp_timer_broadcast NULL > #endif > > -#ifndef CONFIG_LOCAL_TIMERS > static void broadcast_timer_set_mode(enum clock_event_mode mode, > struct clock_event_device *evt) > { > } > > -static void local_timer_setup(struct clock_event_device *evt) > +static void dummy_timer_setup(struct clock_event_device *evt) > { > evt->name = "dummy_timer"; > evt->features = CLOCK_EVT_FEAT_ONESHOT | > @@ -492,7 +491,6 @@ static void local_timer_setup(struct > clock_event_device *evt) > > clockevents_register_device(evt); > } > -#endif > > void __cpuinit percpu_timer_setup(void) > { > @@ -502,7 +500,8 @@ void __cpuinit percpu_timer_setup(void) > evt->cpumask = cpumask_of(cpu); > evt->broadcast = smp_timer_broadcast; > > - local_timer_setup(evt); > + if (local_timer_setup(evt)) > + dummy_timer_setup(evt); > } > > #ifdef CONFIG_HOTPLUG_CPU > diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c > index c105d28..ae85aa9 100644 > --- a/arch/arm/mach-msm/timer.c > +++ b/arch/arm/mach-msm/timer.c > @@ -255,7 +255,7 @@ static void __init msm_timer_init(void) > } > > #ifdef CONFIG_SMP > -void __cpuinit local_timer_setup(struct clock_event_device *evt) > +int __cpuinit local_timer_setup(struct clock_event_device *evt) > { > struct msm_clock *clock = &msm_clocks[MSM_GLOBAL_TIMER]; > > @@ -287,6 +287,7 @@ void __cpuinit local_timer_setup(struct > clock_event_device *evt) > gic_enable_ppi(clock->irq.irq); > > clockevents_register_device(evt); > + return 0; > } > > inline int local_timer_ack(void) > diff --git a/arch/arm/mach-omap2/timer-mpu.c b/arch/arm/mach- > omap2/timer-mpu.c > index 954682e..09c73dc 100644 > --- a/arch/arm/mach-omap2/timer-mpu.c > +++ b/arch/arm/mach-omap2/timer-mpu.c > @@ -26,9 +26,10 @@ > /* > * Setup the local clock events for a CPU. > */ > -void __cpuinit local_timer_setup(struct clock_event_device *evt) > +int __cpuinit local_timer_setup(struct clock_event_device *evt) > { > evt->irq = OMAP44XX_IRQ_LOCALTIMER; > twd_timer_setup(evt); > + return 0; > } > > diff --git a/arch/arm/mach-realview/localtimer.c b/arch/arm/mach- > realview/localtimer.c > index 60b4e11..aca29ce 100644 > --- a/arch/arm/mach-realview/localtimer.c > +++ b/arch/arm/mach-realview/localtimer.c > @@ -19,8 +19,9 @@ > /* > * Setup the local clock events for a CPU. > */ > -void __cpuinit local_timer_setup(struct clock_event_device *evt) > +int __cpuinit local_timer_setup(struct clock_event_device *evt) > { > evt->irq = IRQ_LOCALTIMER; > twd_timer_setup(evt); > + return 0; > } > diff --git a/arch/arm/mach-s5pv310/localtimer.c b/arch/arm/mach- > s5pv310/localtimer.c > index 2784036..8239c6a 100644 > --- a/arch/arm/mach-s5pv310/localtimer.c > +++ b/arch/arm/mach-s5pv310/localtimer.c > @@ -18,8 +18,9 @@ > /* > * Setup the local clock events for a CPU. > */ > -void __cpuinit local_timer_setup(struct clock_event_device *evt) > +int __cpuinit local_timer_setup(struct clock_event_device *evt) > { > evt->irq = IRQ_LOCALTIMER; > twd_timer_setup(evt); > + return 0; > } > diff --git a/arch/arm/mach-shmobile/localtimer.c b/arch/arm/mach- > shmobile/localtimer.c > index 2111c28..ad9ccc9 100644 > --- a/arch/arm/mach-shmobile/localtimer.c > +++ b/arch/arm/mach-shmobile/localtimer.c > @@ -18,8 +18,9 @@ > /* > * Setup the local clock events for a CPU. > */ > -void __cpuinit local_timer_setup(struct clock_event_device *evt) > +int __cpuinit local_timer_setup(struct clock_event_device *evt) > { > evt->irq = 29; > twd_timer_setup(evt); > + return 0; > } > diff --git a/arch/arm/mach-tegra/localtimer.c b/arch/arm/mach- > tegra/localtimer.c > index f81ca7c..e91d681 100644 > --- a/arch/arm/mach-tegra/localtimer.c > +++ b/arch/arm/mach-tegra/localtimer.c > @@ -18,8 +18,9 @@ > /* > * Setup the local clock events for a CPU. > */ > -void __cpuinit local_timer_setup(struct clock_event_device *evt) > +int __cpuinit local_timer_setup(struct clock_event_device *evt) > { > evt->irq = IRQ_LOCALTIMER; > twd_timer_setup(evt); > + return 0; > } > diff --git a/arch/arm/mach-ux500/localtimer.c b/arch/arm/mach- > ux500/localtimer.c > index 2288f6a..5ba1133 100644 > --- a/arch/arm/mach-ux500/localtimer.c > +++ b/arch/arm/mach-ux500/localtimer.c > @@ -21,8 +21,9 @@ > /* > * Setup the local clock events for a CPU. > */ > -void __cpuinit local_timer_setup(struct clock_event_device *evt) > +int __cpuinit local_timer_setup(struct clock_event_device *evt) > { > evt->irq = IRQ_LOCALTIMER; > twd_timer_setup(evt); > + return 0; > } > diff --git a/arch/arm/mach-vexpress/localtimer.c b/arch/arm/mach- > vexpress/localtimer.c > index c0e3a59..e5adbfa 100644 > --- a/arch/arm/mach-vexpress/localtimer.c > +++ b/arch/arm/mach-vexpress/localtimer.c > @@ -19,8 +19,9 @@ > /* > * Setup the local clock events for a CPU. > */ > -void __cpuinit local_timer_setup(struct clock_event_device *evt) > +int __cpuinit local_timer_setup(struct clock_event_device *evt) > { > evt->irq = IRQ_LOCALTIMER; > twd_timer_setup(evt); > + return 0; > } > -- > 1.6.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html