aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/cell/pmu.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms/cell/pmu.c')
-rw-r--r--arch/powerpc/platforms/cell/pmu.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/cell/pmu.c b/arch/powerpc/platforms/cell/pmu.c
index f28abf2fc273..99c612025e8f 100644
--- a/arch/powerpc/platforms/cell/pmu.c
+++ b/arch/powerpc/platforms/cell/pmu.c
@@ -25,6 +25,7 @@
25#include <linux/interrupt.h> 25#include <linux/interrupt.h>
26#include <linux/types.h> 26#include <linux/types.h>
27#include <asm/io.h> 27#include <asm/io.h>
28#include <asm/irq_regs.h>
28#include <asm/machdep.h> 29#include <asm/machdep.h>
29#include <asm/pmc.h> 30#include <asm/pmc.h>
30#include <asm/reg.h> 31#include <asm/reg.h>
@@ -375,9 +376,9 @@ void cbe_disable_pm_interrupts(u32 cpu)
375} 376}
376EXPORT_SYMBOL_GPL(cbe_disable_pm_interrupts); 377EXPORT_SYMBOL_GPL(cbe_disable_pm_interrupts);
377 378
378static irqreturn_t cbe_pm_irq(int irq, void *dev_id, struct pt_regs *regs) 379static irqreturn_t cbe_pm_irq(int irq, void *dev_id)
379{ 380{
380 perf_irq(regs); 381 perf_irq(get_irq_regs());
381 return IRQ_HANDLED; 382 return IRQ_HANDLED;
382} 383}
383 384
@@ -408,3 +409,21 @@ int __init cbe_init_pm_irq(void)
408} 409}
409arch_initcall(cbe_init_pm_irq); 410arch_initcall(cbe_init_pm_irq);
410 411
412void cbe_sync_irq(int node)
413{
414 unsigned int irq;
415
416 irq = irq_find_mapping(NULL,
417 IIC_IRQ_IOEX_PMI
418 | (node << IIC_IRQ_NODE_SHIFT));
419
420 if (irq == NO_IRQ) {
421 printk(KERN_WARNING "ERROR, unable to get existing irq %d " \
422 "for node %d\n", irq, node);
423 return;
424 }
425
426 synchronize_irq(irq);
427}
428EXPORT_SYMBOL_GPL(cbe_sync_irq);
429