• Marc Zyngier's avatar
    genirq/msi: Allow level-triggered MSIs to be exposed by MSI providers · 0be8153c
    Marc Zyngier authored
    So far, MSIs have been used to signal edge-triggered interrupts, as
    a write is a good model for an edge (you can't "unwrite" something).
    On the other hand, routing zillions of wires in an SoC because you
    need level interrupts is a bit extreme.
    
    People have come up with a variety of schemes to support this, which
    involves sending two messages: one to signal the interrupt, and one
    to clear it. Since the kernel cannot represent this, we've ended up
    with side-band mechanisms that are pretty awful.
    
    Instead, let's acknoledge the requirement, and ensure that, under the
    right circumstances, the irq_compose_msg and irq_write_msg can take
    as a parameter an array of two messages instead of a pointer to a
    single one. We also add some checking that the compose method only
    clobbers the second message if the MSI domain has been created with
    the MSI_FLAG_LEVEL_CAPABLE flags.
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Rob Herring <robh@kernel.org>
    Cc: Jason Cooper <jason@lakedaemon.net>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
    Cc: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lkml.kernel.org/r/20180508121438.11301-2-marc.zyngier@arm.com
    0be8153c
msi.c 13.7 KB