[PATCH v3 1/3] ARM: sun7i/sun6i: irqchip: Add irqchip driver for NMI controller

Carlo Caione carlo.caione at gmail.com
Wed Jan 29 08:21:37 EST 2014


On Wed, Jan 29, 2014 at 1:58 PM, Maxime Ripard
<maxime.ripard at free-electrons.com> wrote:

>
> So, to sum things up, what you see is something like:
>
>         handle_level_irq
>                |              device    device
>                | mask ack     handler irq acked unmask
>                |  |    |         |         |       |
>                v  v    v         v         v       v
>
> NMI -> GIC:
>                +--------+     +---------------------
> ---------------+        +-----+
>
> PMIC -> NMI:
>             +-------------------------+
> ------------+                         +-------------
>
> And you get a "rogue" retrigger because the NMI -> GIC level went up
> again.

I'd say something like:

         handle_level_irq
                |              device    device
                | mask ack     handler irq acked unmask
                |  |    |         |         |       |
                v  v    v         v         v       v

 NMI -> GIC:
                +-----------------------------+
 ---------------+                             +------

 PMIC -> NMI:
             +-------------------------+
 ------------+                         +-------------


> I'm not exactly sure on how to fix this. Maybe by adding a call to the
> irqchip's ack just before the unmask in irq_finalize_oneshot?

That is exactly what the unmask callback in the NMI controller driver does.
The unmask_irq() in irq_finalize_oneshot() calls the unmask callback
in the driver (sunxi_sc_nmi_ack_and_unmask()) that ACKs the line
before unmasking it again.

Best,

-- 
Carlo Caione



More information about the linux-arm-kernel mailing list