arm/its: enable LPIs before mapping the collection table
authorRahul Singh <rahul.singh@arm.com>
Wed, 4 May 2022 17:15:12 +0000 (18:15 +0100)
committerStefano Stabellini <stefano.stabellini@amd.com>
Wed, 3 Aug 2022 21:57:31 +0000 (14:57 -0700)
commit271e9e860b7b5ee5fc01a8fd539aa7e1bcb096c6
tree8ffe995f6450321bd08661bf0e2f6762e0cc65e1
parent89fe6d0edea841d1d2690cf3f5173e334c687823
arm/its: enable LPIs before mapping the collection table

When Xen boots on the platform that implements the GIC 600, ITS
MAPC_LPI_OFF uncorrectable command error issue is observed.

As per the GIC-600 TRM (Revision: r1p6) MAPC_LPI_OFF command error can
be reported if the MAPC command has tried to map a collection to a core
that does not have LPIs enabled. The definition of GICR.EnableLPIs
also suggests enabling the LPIs before sending any ITS command that
involves LPIs

0b0 LPI support is disabled. Any doorbell interrupt generated as a
    result of a write to a virtual LPI register must be discarded,
    and any ITS translation requests or commands involving LPIs in
    this Redistributor are ignored.

0b1 LPI support is enabled.

To fix the MAPC command error issue, enable the LPIs using
GICR_CTLR.EnableLPIs before mapping the collection table.

gicv3_enable_lpis() is using writel_relaxed(), write to the GICR_CTLR
register may not be visible before gicv3_its_setup_collection() send the
MAPC command. Use wmb() after writel_relaxed() to make sure register
write to enable LPIs is visible.

Signed-off-by: Rahul Singh <rahul.singh@arm.com>
Acked-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
(cherry picked from commit 95604873ccf56eb81e96ed0dc8b4dec3278f40ca)
xen/arch/arm/gic-v3.c