PLIC cannot EOI masked interrupts,so Re-enable the interrupt before completion if...
authorke.zhu <ke.zhu@starfivetech.com>
Fri, 3 Dec 2021 02:54:10 +0000 (10:54 +0800)
committerke.zhu <ke.zhu@starfivetech.com>
Fri, 3 Dec 2021 02:54:10 +0000 (10:54 +0800)
drivers/irqchip/irq-sifive-plic.c [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index cf74cfa..259065d
@@ -163,7 +163,13 @@ static void plic_irq_eoi(struct irq_data *d)
 {
        struct plic_handler *handler = this_cpu_ptr(&plic_handlers);
 
-       writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM);
+       if (irqd_irq_masked(d)) {
+               plic_irq_unmask(d);
+               writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM);
+               plic_irq_mask(d);
+       } else {
+               writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM);
+       }
 }
 
 static struct irq_chip plic_chip = {