mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge branch 'irqchip/handle_domain' into irqchip/core
This commit is contained in:
commit
468a903c0e
31 changed files with 116 additions and 130 deletions
|
|
@ -393,13 +393,15 @@ static void armada_370_xp_handle_msi_irq(struct pt_regs *regs, bool is_chained)
|
|||
if (!(msimask & BIT(msinr)))
|
||||
continue;
|
||||
|
||||
irq = irq_find_mapping(armada_370_xp_msi_domain,
|
||||
msinr - 16);
|
||||
|
||||
if (is_chained)
|
||||
if (is_chained) {
|
||||
irq = irq_find_mapping(armada_370_xp_msi_domain,
|
||||
msinr - 16);
|
||||
generic_handle_irq(irq);
|
||||
else
|
||||
handle_IRQ(irq, regs);
|
||||
} else {
|
||||
irq = msinr - 16;
|
||||
handle_domain_irq(armada_370_xp_msi_domain,
|
||||
irq, regs);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
|
@ -444,9 +446,8 @@ armada_370_xp_handle_irq(struct pt_regs *regs)
|
|||
break;
|
||||
|
||||
if (irqnr > 1) {
|
||||
irqnr = irq_find_mapping(armada_370_xp_mpic_domain,
|
||||
irqnr);
|
||||
handle_IRQ(irqnr, regs);
|
||||
handle_domain_irq(armada_370_xp_mpic_domain,
|
||||
irqnr, regs);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -68,12 +68,10 @@ aic_handle(struct pt_regs *regs)
|
|||
irqnr = irq_reg_readl(gc->reg_base + AT91_AIC_IVR);
|
||||
irqstat = irq_reg_readl(gc->reg_base + AT91_AIC_ISR);
|
||||
|
||||
irqnr = irq_find_mapping(aic_domain, irqnr);
|
||||
|
||||
if (!irqstat)
|
||||
irq_reg_writel(0, gc->reg_base + AT91_AIC_EOICR);
|
||||
else
|
||||
handle_IRQ(irqnr, regs);
|
||||
handle_domain_irq(aic_domain, irqnr, regs);
|
||||
}
|
||||
|
||||
static int aic_retrigger(struct irq_data *d)
|
||||
|
|
|
|||
|
|
@ -78,12 +78,10 @@ aic5_handle(struct pt_regs *regs)
|
|||
irqnr = irq_reg_readl(gc->reg_base + AT91_AIC5_IVR);
|
||||
irqstat = irq_reg_readl(gc->reg_base + AT91_AIC5_ISR);
|
||||
|
||||
irqnr = irq_find_mapping(aic5_domain, irqnr);
|
||||
|
||||
if (!irqstat)
|
||||
irq_reg_writel(0, gc->reg_base + AT91_AIC5_EOICR);
|
||||
else
|
||||
handle_IRQ(irqnr, regs);
|
||||
handle_domain_irq(aic5_domain, irqnr, regs);
|
||||
}
|
||||
|
||||
static void aic5_mask(struct irq_data *d)
|
||||
|
|
|
|||
|
|
@ -76,24 +76,20 @@ static struct {
|
|||
|
||||
static asmlinkage void __exception_irq_entry clps711x_irqh(struct pt_regs *regs)
|
||||
{
|
||||
u32 irqnr, irqstat;
|
||||
u32 irqstat;
|
||||
|
||||
do {
|
||||
irqstat = readw_relaxed(clps711x_intc->intmr[0]) &
|
||||
readw_relaxed(clps711x_intc->intsr[0]);
|
||||
if (irqstat) {
|
||||
irqnr = irq_find_mapping(clps711x_intc->domain,
|
||||
fls(irqstat) - 1);
|
||||
handle_IRQ(irqnr, regs);
|
||||
}
|
||||
if (irqstat)
|
||||
handle_domain_irq(clps711x_intc->domain,
|
||||
fls(irqstat) - 1, regs);
|
||||
|
||||
irqstat = readw_relaxed(clps711x_intc->intmr[1]) &
|
||||
readw_relaxed(clps711x_intc->intsr[1]);
|
||||
if (irqstat) {
|
||||
irqnr = irq_find_mapping(clps711x_intc->domain,
|
||||
fls(irqstat) - 1 + 16);
|
||||
handle_IRQ(irqnr, regs);
|
||||
}
|
||||
if (irqstat)
|
||||
handle_domain_irq(clps711x_intc->domain,
|
||||
fls(irqstat) - 1 + 16, regs);
|
||||
} while (irqstat);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -274,14 +274,13 @@ static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs
|
|||
irqnr = gic_read_iar();
|
||||
|
||||
if (likely(irqnr > 15 && irqnr < 1020)) {
|
||||
u64 irq = irq_find_mapping(gic_data.domain, irqnr);
|
||||
if (likely(irq)) {
|
||||
handle_IRQ(irq, regs);
|
||||
continue;
|
||||
int err;
|
||||
err = handle_domain_irq(gic_data.domain, irqnr, regs);
|
||||
if (err) {
|
||||
WARN_ONCE(true, "Unexpected SPI received!\n");
|
||||
gic_write_eoir(irqnr);
|
||||
}
|
||||
|
||||
WARN_ONCE(true, "Unexpected SPI received!\n");
|
||||
gic_write_eoir(irqnr);
|
||||
continue;
|
||||
}
|
||||
if (irqnr < 16) {
|
||||
gic_write_eoir(irqnr);
|
||||
|
|
|
|||
|
|
@ -270,8 +270,7 @@ static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
|
|||
irqnr = irqstat & GICC_IAR_INT_ID_MASK;
|
||||
|
||||
if (likely(irqnr > 15 && irqnr < 1021)) {
|
||||
irqnr = irq_find_mapping(gic->domain, irqnr);
|
||||
handle_IRQ(irqnr, regs);
|
||||
handle_domain_irq(gic->domain, irqnr, regs);
|
||||
continue;
|
||||
}
|
||||
if (irqnr < 16) {
|
||||
|
|
|
|||
|
|
@ -196,26 +196,24 @@ static struct mmp_intc_conf mmp2_conf = {
|
|||
|
||||
static void __exception_irq_entry mmp_handle_irq(struct pt_regs *regs)
|
||||
{
|
||||
int irq, hwirq;
|
||||
int hwirq;
|
||||
|
||||
hwirq = readl_relaxed(mmp_icu_base + PJ1_INT_SEL);
|
||||
if (!(hwirq & SEL_INT_PENDING))
|
||||
return;
|
||||
hwirq &= SEL_INT_NUM_MASK;
|
||||
irq = irq_find_mapping(icu_data[0].domain, hwirq);
|
||||
handle_IRQ(irq, regs);
|
||||
handle_domain_irq(icu_data[0].domain, hwirq, regs);
|
||||
}
|
||||
|
||||
static void __exception_irq_entry mmp2_handle_irq(struct pt_regs *regs)
|
||||
{
|
||||
int irq, hwirq;
|
||||
int hwirq;
|
||||
|
||||
hwirq = readl_relaxed(mmp_icu_base + PJ4_INT_SEL);
|
||||
if (!(hwirq & SEL_INT_PENDING))
|
||||
return;
|
||||
hwirq &= SEL_INT_NUM_MASK;
|
||||
irq = irq_find_mapping(icu_data[0].domain, hwirq);
|
||||
handle_IRQ(irq, regs);
|
||||
handle_domain_irq(icu_data[0].domain, hwirq, regs);
|
||||
}
|
||||
|
||||
/* MMP (ARMv5) */
|
||||
|
|
|
|||
|
|
@ -78,8 +78,7 @@ asmlinkage void __exception_irq_entry icoll_handle_irq(struct pt_regs *regs)
|
|||
|
||||
irqnr = __raw_readl(icoll_base + HW_ICOLL_STAT_OFFSET);
|
||||
__raw_writel(irqnr, icoll_base + HW_ICOLL_VECTOR);
|
||||
irqnr = irq_find_mapping(icoll_domain, irqnr);
|
||||
handle_IRQ(irqnr, regs);
|
||||
handle_domain_irq(icoll_domain, irqnr, regs);
|
||||
}
|
||||
|
||||
static int icoll_irq_domain_map(struct irq_domain *d, unsigned int virq,
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ static inline int pic_get_irq(int first)
|
|||
else
|
||||
hwirq = hwirq + first - 1;
|
||||
|
||||
return irq_find_mapping(root_domain, hwirq);
|
||||
return hwirq;
|
||||
}
|
||||
|
||||
static void or1k_pic_handle_irq(struct pt_regs *regs)
|
||||
|
|
@ -121,7 +121,7 @@ static void or1k_pic_handle_irq(struct pt_regs *regs)
|
|||
int irq = -1;
|
||||
|
||||
while ((irq = pic_get_irq(irq + 1)) != NO_IRQ)
|
||||
handle_IRQ(irq, regs);
|
||||
handle_domain_irq(root_domain, irq, regs);
|
||||
}
|
||||
|
||||
static int or1k_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw)
|
||||
|
|
|
|||
|
|
@ -43,9 +43,8 @@ __exception_irq_entry orion_handle_irq(struct pt_regs *regs)
|
|||
gc->mask_cache;
|
||||
while (stat) {
|
||||
u32 hwirq = __fls(stat);
|
||||
u32 irq = irq_find_mapping(orion_irq_domain,
|
||||
gc->irq_base + hwirq);
|
||||
handle_IRQ(irq, regs);
|
||||
handle_domain_irq(orion_irq_domain,
|
||||
gc->irq_base + hwirq, regs);
|
||||
stat &= ~(1 << hwirq);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -339,7 +339,6 @@ static inline int s3c24xx_handle_intc(struct s3c_irq_intc *intc,
|
|||
{
|
||||
int pnd;
|
||||
int offset;
|
||||
int irq;
|
||||
|
||||
pnd = __raw_readl(intc->reg_intpnd);
|
||||
if (!pnd)
|
||||
|
|
@ -365,8 +364,7 @@ static inline int s3c24xx_handle_intc(struct s3c_irq_intc *intc,
|
|||
if (!(pnd & (1 << offset)))
|
||||
offset = __ffs(pnd);
|
||||
|
||||
irq = irq_find_mapping(intc->domain, intc_offset + offset);
|
||||
handle_IRQ(irq, regs);
|
||||
handle_domain_irq(intc->domain, intc_offset + offset, regs);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,12 +50,10 @@ sirfsoc_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num)
|
|||
static void __exception_irq_entry sirfsoc_handle_irq(struct pt_regs *regs)
|
||||
{
|
||||
void __iomem *base = sirfsoc_irqdomain->host_data;
|
||||
u32 irqstat, irqnr;
|
||||
u32 irqstat;
|
||||
|
||||
irqstat = readl_relaxed(base + SIRFSOC_INIT_IRQ_ID);
|
||||
irqnr = irq_find_mapping(sirfsoc_irqdomain, irqstat & 0xff);
|
||||
|
||||
handle_IRQ(irqnr, regs);
|
||||
handle_domain_irq(sirfsoc_irqdomain, irqstat & 0xff, regs);
|
||||
}
|
||||
|
||||
static int __init sirfsoc_irq_init(struct device_node *np,
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ IRQCHIP_DECLARE(allwinner_sun4i_ic, "allwinner,sun4i-a10-ic", sun4i_of_init);
|
|||
|
||||
static void __exception_irq_entry sun4i_handle_irq(struct pt_regs *regs)
|
||||
{
|
||||
u32 irq, hwirq;
|
||||
u32 hwirq;
|
||||
|
||||
/*
|
||||
* hwirq == 0 can mean one of 3 things:
|
||||
|
|
@ -154,8 +154,7 @@ static void __exception_irq_entry sun4i_handle_irq(struct pt_regs *regs)
|
|||
return;
|
||||
|
||||
do {
|
||||
irq = irq_find_mapping(sun4i_irq_domain, hwirq);
|
||||
handle_IRQ(irq, regs);
|
||||
handle_domain_irq(sun4i_irq_domain, hwirq, regs);
|
||||
hwirq = readl(sun4i_irq_base + SUN4I_IRQ_VECTOR_REG) >> 2;
|
||||
} while (hwirq != 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ static int handle_one_fpga(struct fpga_irq_data *f, struct pt_regs *regs)
|
|||
|
||||
while ((status = readl(f->base + IRQ_STATUS))) {
|
||||
irq = ffs(status) - 1;
|
||||
handle_IRQ(irq_find_mapping(f->domain, irq), regs);
|
||||
handle_domain_irq(f->domain, irq, regs);
|
||||
handled = 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@ static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs)
|
|||
|
||||
while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) {
|
||||
irq = ffs(stat) - 1;
|
||||
handle_IRQ(irq_find_mapping(vic->domain, irq), regs);
|
||||
handle_domain_irq(vic->domain, irq, regs);
|
||||
handled = 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ static struct irq_domain_ops vt8500_irq_domain_ops = {
|
|||
static void __exception_irq_entry vt8500_handle_irq(struct pt_regs *regs)
|
||||
{
|
||||
u32 stat, i;
|
||||
int irqnr, virq;
|
||||
int irqnr;
|
||||
void __iomem *base;
|
||||
|
||||
/* Loop through each active controller */
|
||||
|
|
@ -198,8 +198,7 @@ static void __exception_irq_entry vt8500_handle_irq(struct pt_regs *regs)
|
|||
continue;
|
||||
}
|
||||
|
||||
virq = irq_find_mapping(intc[i].domain, irqnr);
|
||||
handle_IRQ(virq, regs);
|
||||
handle_domain_irq(intc[i].domain, irqnr, regs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -56,8 +56,7 @@ static void __exception_irq_entry zevio_handle_irq(struct pt_regs *regs)
|
|||
|
||||
while (readl(zevio_irq_io + IO_STATUS)) {
|
||||
irqnr = readl(zevio_irq_io + IO_CURRENT);
|
||||
irqnr = irq_find_mapping(zevio_irq_domain, irqnr);
|
||||
handle_IRQ(irqnr, regs);
|
||||
handle_domain_irq(zevio_irq_domain, irqnr, regs);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue