powerpc: Add support for CoreInt delivery of interrupts on MPIC
CoreInt provides a mechansim to deliver the IRQ vector directly into the core on an interrupt (via the SPR EPR) rather than having to go IACK on the PIC. This is suppose to provide an improvment in interrupt latency by reducing the time to get the IRQ vector. Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
@ -1170,6 +1170,12 @@ struct mpic * __init mpic_alloc(struct device_node *node,
|
||||
mb();
|
||||
}
|
||||
|
||||
/* CoreInt */
|
||||
if (flags & MPIC_ENABLE_COREINT)
|
||||
mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0),
|
||||
mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0))
|
||||
| MPIC_GREG_GCONF_COREINT);
|
||||
|
||||
if (flags & MPIC_ENABLE_MCK)
|
||||
mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0),
|
||||
mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0))
|
||||
@ -1525,6 +1531,34 @@ unsigned int mpic_get_irq(void)
|
||||
return mpic_get_one_irq(mpic);
|
||||
}
|
||||
|
||||
unsigned int mpic_get_coreint_irq(void)
|
||||
{
|
||||
#ifdef CONFIG_BOOKE
|
||||
struct mpic *mpic = mpic_primary;
|
||||
u32 src;
|
||||
|
||||
BUG_ON(mpic == NULL);
|
||||
|
||||
src = mfspr(SPRN_EPR);
|
||||
|
||||
if (unlikely(src == mpic->spurious_vec)) {
|
||||
if (mpic->flags & MPIC_SPV_EOI)
|
||||
mpic_eoi(mpic);
|
||||
return NO_IRQ;
|
||||
}
|
||||
if (unlikely(mpic->protected && test_bit(src, mpic->protected))) {
|
||||
if (printk_ratelimit())
|
||||
printk(KERN_WARNING "%s: Got protected source %d !\n",
|
||||
mpic->name, (int)src);
|
||||
return NO_IRQ;
|
||||
}
|
||||
|
||||
return irq_linear_revmap(mpic->irqhost, src);
|
||||
#else
|
||||
return NO_IRQ;
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned int mpic_get_mcirq(void)
|
||||
{
|
||||
struct mpic *mpic = mpic_primary;
|
||||
|
Reference in New Issue
Block a user