diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2020-04-05 11:57:12 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2020-04-05 11:57:12 -0700 |
commit | e5adbd6ec480164fe30ee65c94426cb12d64bc99 (patch) | |
tree | 15d0bf67f01bfbac1b9da8fdf35f404b21c905ae /drivers/irqchip | |
parent | 70fbdfef4ba63eeef83b2c94eac9a5a9f913e442 (diff) | |
parent | a67cd1fb660df8d8e093cb4b75343ef3dcd17cd6 (diff) | |
download | lwn-e5adbd6ec480164fe30ee65c94426cb12d64bc99.tar.gz lwn-e5adbd6ec480164fe30ee65c94426cb12d64bc99.zip |
Merge tag 'irq-urgent-2020-04-05' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fixes from Thomas Gleixner:
"Two reverts addressing regressions of the Xilinx interrupt controller
driver which affected the PPC users"
* tag 'irq-urgent-2020-04-05' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
Revert "irqchip/xilinx: Enable generic irq multi handler"
Revert "irqchip/xilinx: Do not call irq_set_default_host()"
Diffstat (limited to 'drivers/irqchip')
-rw-r--r-- | drivers/irqchip/irq-xilinx-intc.c | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/drivers/irqchip/irq-xilinx-intc.c b/drivers/irqchip/irq-xilinx-intc.c index 7f811fe5bf69..1d3d273309bd 100644 --- a/drivers/irqchip/irq-xilinx-intc.c +++ b/drivers/irqchip/irq-xilinx-intc.c @@ -124,6 +124,20 @@ static unsigned int xintc_get_irq_local(struct xintc_irq_chip *irqc) return irq; } +unsigned int xintc_get_irq(void) +{ + unsigned int irq = -1; + u32 hwirq; + + hwirq = xintc_read(primary_intc, IVR); + if (hwirq != -1U) + irq = irq_find_mapping(primary_intc->root_domain, hwirq); + + pr_debug("irq-xilinx: hwirq=%d, irq=%d\n", hwirq, irq); + + return irq; +} + static int xintc_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw) { struct xintc_irq_chip *irqc = d->host_data; @@ -163,25 +177,6 @@ static void xil_intc_irq_handler(struct irq_desc *desc) chained_irq_exit(chip, desc); } -static void xil_intc_handle_irq(struct pt_regs *regs) -{ - u32 hwirq; - struct xintc_irq_chip *irqc = primary_intc; - - do { - hwirq = xintc_read(irqc, IVR); - if (likely(hwirq != -1U)) { - int ret; - - ret = handle_domain_irq(irqc->root_domain, hwirq, regs); - WARN_ONCE(ret, "Unhandled HWIRQ %d\n", hwirq); - continue; - } - - break; - } while (1); -} - static int __init xilinx_intc_of_init(struct device_node *intc, struct device_node *parent) { @@ -250,7 +245,7 @@ static int __init xilinx_intc_of_init(struct device_node *intc, } } else { primary_intc = irqc; - set_handle_irq(xil_intc_handle_irq); + irq_set_default_host(primary_intc->root_domain); } return 0; |