aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-03-28 10:23:12 -0400
committerThomas Gleixner <tglx@linutronix.de>2011-03-28 10:55:11 -0400
commitf9ba4475f95b135e6f68e74d59bba92fd35ca835 (patch)
treec7bb41e453391ae750fca2d021e47c113097c961 /arch/powerpc/platforms
parent0521c8fbb3da45c2a58cd551ca6e9644983f6028 (diff)
powerpc: cell: Use the core flow handler
The core handler is a full equivalent replacement. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r--arch/powerpc/platforms/cell/Kconfig1
-rw-r--r--arch/powerpc/platforms/cell/interrupt.c50
2 files changed, 2 insertions, 49 deletions
diff --git a/arch/powerpc/platforms/cell/Kconfig b/arch/powerpc/platforms/cell/Kconfig
index 48cd7d2e1b75..81239ebed83f 100644
--- a/arch/powerpc/platforms/cell/Kconfig
+++ b/arch/powerpc/platforms/cell/Kconfig
@@ -9,6 +9,7 @@ config PPC_CELL_COMMON
9 select PPC_INDIRECT_IO 9 select PPC_INDIRECT_IO
10 select PPC_NATIVE 10 select PPC_NATIVE
11 select PPC_RTAS 11 select PPC_RTAS
12 select IRQ_EDGE_EOI_HANDLER
12 13
13config PPC_CELL_NATIVE 14config PPC_CELL_NATIVE
14 bool 15 bool
diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c
index 624d26e72f1d..ec9fc7d82068 100644
--- a/arch/powerpc/platforms/cell/interrupt.c
+++ b/arch/powerpc/platforms/cell/interrupt.c
@@ -235,54 +235,6 @@ static int iic_host_match(struct irq_host *h, struct device_node *node)
235 "IBM,CBEA-Internal-Interrupt-Controller"); 235 "IBM,CBEA-Internal-Interrupt-Controller");
236} 236}
237 237
238extern int noirqdebug;
239
240static void handle_iic_irq(unsigned int irq, struct irq_desc *desc)
241{
242 struct irq_chip *chip = get_irq_desc_chip(desc);
243
244 raw_spin_lock(&desc->lock);
245
246 desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
247
248 /*
249 * If we're currently running this IRQ, or its disabled,
250 * we shouldn't process the IRQ. Mark it pending, handle
251 * the necessary masking and go out
252 */
253 if (unlikely((desc->status & (IRQ_INPROGRESS | IRQ_DISABLED)) ||
254 !desc->action)) {
255 desc->status |= IRQ_PENDING;
256 goto out_eoi;
257 }
258
259 kstat_incr_irqs_this_cpu(irq, desc);
260
261 /* Mark the IRQ currently in progress.*/
262 desc->status |= IRQ_INPROGRESS;
263
264 do {
265 struct irqaction *action = desc->action;
266 irqreturn_t action_ret;
267
268 if (unlikely(!action))
269 goto out_eoi;
270
271 desc->status &= ~IRQ_PENDING;
272 raw_spin_unlock(&desc->lock);
273 action_ret = handle_IRQ_event(irq, action);
274 if (!noirqdebug)
275 note_interrupt(irq, desc, action_ret);
276 raw_spin_lock(&desc->lock);
277
278 } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING);
279
280 desc->status &= ~IRQ_INPROGRESS;
281out_eoi:
282 chip->irq_eoi(&desc->irq_data);
283 raw_spin_unlock(&desc->lock);
284}
285
286static int iic_host_map(struct irq_host *h, unsigned int virq, 238static int iic_host_map(struct irq_host *h, unsigned int virq,
287 irq_hw_number_t hw) 239 irq_hw_number_t hw)
288{ 240{
@@ -295,7 +247,7 @@ static int iic_host_map(struct irq_host *h, unsigned int virq,
295 handle_iic_irq); 247 handle_iic_irq);
296 break; 248 break;
297 default: 249 default:
298 set_irq_chip_and_handler(virq, &iic_chip, handle_iic_irq); 250 set_irq_chip_and_handler(virq, &iic_chip, handle_edge_eoi_irq);
299 } 251 }
300 return 0; 252 return 0;
301} 253}