irqchip/gic: Work around broken Renesas integration
authorMarc Zyngier <maz@kernel.org>
Fri, 10 Sep 2021 17:29:25 +0000 (18:29 +0100)
committerMarc Zyngier <maz@kernel.org>
Wed, 22 Sep 2021 13:44:25 +0000 (14:44 +0100)
commitb78f26926b17cc289e4f16b63363abe0aa2e8efc
treea3c5456a570813a75601bba43447525d4f43ed1d
parent3ce8c70ecedb4e1f1d36301afb0281be40390f13
irqchip/gic: Work around broken Renesas integration

Geert reported that the GIC driver locks up on a Renesas system
since 005c34ae4b44f085 ("irqchip/gic: Atomically update affinity")
fixed the driver to use writeb_relaxed() instead of writel_relaxed().

As it turns out, the interconnect used on this system mandates
32bit wide accesses for all MMIO transactions, even if the GIC
architecture specifically mandates for some registers to be byte
accessible. Gahhh...

Work around the issue by crudly detecting the offending system,
and falling back to an inefficient RMW+lock implementation.

Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/CAMuHMdV+Ev47K5NO8XHsanSq5YRMCHn2gWAQyV-q2LpJVy9HiQ@mail.gmail.com
drivers/irqchip/irq-gic.c