irqchip/gic: Deal with broken firmware exposing only 4kB of GICv2 CPU interface
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 27 Oct 2017 08:34:22 +0000 (10:34 +0200)
committerMarc Zyngier <marc.zyngier@arm.com>
Thu, 2 Nov 2017 15:55:44 +0000 (15:55 +0000)
commit0962289b1cd91534f7111e763d3e6a17dcd47ecb
tree4632cbba7bdd33596de6e94c77f2ed0997834e24
parentd4d7b4ad2f05c03fb25252aea66f9f3cd7cfbe06
irqchip/gic: Deal with broken firmware exposing only 4kB of GICv2 CPU interface

There is a lot of broken firmware out there that don't really
expose the information the kernel requires when it comes with dealing
with GICv2:

(1) Firmware that only describes the first 4kB of GICv2
(2) Firmware that describe 128kB of CPU interface, while
    the usable portion of the address space is between
    60 and 68kB

So far, we only deal with (2). But we have platforms exhibiting
behaviour (1), resulting in two sub-cases:
(a) The GIC is occupying 8kB, as required by the GICv2 architecture
(b) It is actually spread 128kB, and this is likely to be a version
    of (2)

This patch tries to work around both (a) and (b) by poking at
the outside of the described memory region, and try to work out
what is actually there. This is of course unsafe, and should
only be enabled if there is no way to otherwise fix the DT provided
by the firmware (we provide a "irqchip.gicv2_force_probe" option
to that effect).

Note that for the time being, we restrict ourselves to GICv2
implementations provided by ARM, since there I have no knowledge
of an alternative implementations. This could be relaxed if such
an implementation comes to light on a broken platform.

Reviewed-by: Christoffer Dall <cdall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Documentation/admin-guide/kernel-parameters.txt
drivers/irqchip/irq-gic.c