diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2020-04-01 12:00:52 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2020-04-01 12:00:52 +0200 |
commit | a67cd1fb660df8d8e093cb4b75343ef3dcd17cd6 (patch) | |
tree | 10890fdefc06fc48bc3c5fb42639d2f28abacdb9 /drivers | |
parent | 458ef2a25e0cbdc216012aa2b9cf549d64133b08 (diff) | |
parent | 4cea749d56bec9409f3bd126d2b2f949dc6c66e2 (diff) | |
download | lwn-a67cd1fb660df8d8e093cb4b75343ef3dcd17cd6.tar.gz lwn-a67cd1fb660df8d8e093cb4b75343ef3dcd17cd6.zip |
Merge tag 'irqchip-fixes-5.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/core
Pull irqchip fixes from Marc Zygnier:
- Partially revert Xilinx changes that break PPC systems
Diffstat (limited to 'drivers')
-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; |