diff options
| -rw-r--r-- | arch/arm/common/gic.c | 10 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/gic.h | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/smp_twd.c | 7 |
3 files changed, 12 insertions, 6 deletions
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c index c7155bdeb815..0b89ef001330 100644 --- a/arch/arm/common/gic.c +++ b/arch/arm/common/gic.c | |||
| @@ -331,6 +331,16 @@ void __cpuinit gic_secondary_init(unsigned int gic_nr) | |||
| 331 | gic_cpu_init(&gic_data[gic_nr]); | 331 | gic_cpu_init(&gic_data[gic_nr]); |
| 332 | } | 332 | } |
| 333 | 333 | ||
| 334 | void __cpuinit gic_enable_ppi(unsigned int irq) | ||
| 335 | { | ||
| 336 | unsigned long flags; | ||
| 337 | |||
| 338 | local_irq_save(flags); | ||
| 339 | irq_to_desc(irq)->status |= IRQ_NOPROBE; | ||
| 340 | gic_unmask_irq(irq); | ||
| 341 | local_irq_restore(flags); | ||
| 342 | } | ||
| 343 | |||
| 334 | #ifdef CONFIG_SMP | 344 | #ifdef CONFIG_SMP |
| 335 | void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) | 345 | void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) |
| 336 | { | 346 | { |
diff --git a/arch/arm/include/asm/hardware/gic.h b/arch/arm/include/asm/hardware/gic.h index a82a77703544..84557d321001 100644 --- a/arch/arm/include/asm/hardware/gic.h +++ b/arch/arm/include/asm/hardware/gic.h | |||
| @@ -39,6 +39,7 @@ void gic_init(unsigned int, unsigned int, void __iomem *, void __iomem *); | |||
| 39 | void gic_secondary_init(unsigned int); | 39 | void gic_secondary_init(unsigned int); |
| 40 | void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); | 40 | void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); |
| 41 | void gic_raise_softirq(const struct cpumask *mask, unsigned int irq); | 41 | void gic_raise_softirq(const struct cpumask *mask, unsigned int irq); |
| 42 | void gic_enable_ppi(unsigned int); | ||
| 42 | #endif | 43 | #endif |
| 43 | 44 | ||
| 44 | #endif | 45 | #endif |
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index 35882fbf37f9..67f933ec4177 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
| @@ -127,8 +127,6 @@ static void __cpuinit twd_calibrate_rate(void) | |||
| 127 | */ | 127 | */ |
| 128 | void __cpuinit twd_timer_setup(struct clock_event_device *clk) | 128 | void __cpuinit twd_timer_setup(struct clock_event_device *clk) |
| 129 | { | 129 | { |
| 130 | unsigned long flags; | ||
| 131 | |||
| 132 | twd_calibrate_rate(); | 130 | twd_calibrate_rate(); |
| 133 | 131 | ||
| 134 | clk->name = "local_timer"; | 132 | clk->name = "local_timer"; |
| @@ -143,10 +141,7 @@ void __cpuinit twd_timer_setup(struct clock_event_device *clk) | |||
| 143 | clk->min_delta_ns = clockevent_delta2ns(0xf, clk); | 141 | clk->min_delta_ns = clockevent_delta2ns(0xf, clk); |
| 144 | 142 | ||
| 145 | /* Make sure our local interrupt controller has this enabled */ | 143 | /* Make sure our local interrupt controller has this enabled */ |
| 146 | local_irq_save(flags); | 144 | gic_enable_ppi(clk->irq); |
| 147 | irq_to_desc(clk->irq)->status |= IRQ_NOPROBE; | ||
| 148 | get_irq_chip(clk->irq)->unmask(clk->irq); | ||
| 149 | local_irq_restore(flags); | ||
| 150 | 145 | ||
| 151 | clockevents_register_device(clk); | 146 | clockevents_register_device(clk); |
| 152 | } | 147 | } |
