mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/arm: GICv3: Only initialize ITS when the distributor supports LPIs.
There are firmware tables out describing the ITS but does not support LPIs. This will result to a data abort when trying to initialize ITS. While this can be consider a bug in the Device-Tree, same configuration boots on Linux. So gate the ITS initialization with the support of LPIs in the distributor. Signed-off-by: Julien Grall <julien.grall@linaro.org> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
1 parent
a20013e8d9
commit
6fd572826c
1 file changed
+11
-3
+11
-3
@@ -1637,6 +1637,11 @@ static unsigned long gicv3_get_hwdom_extra_madt_size(const struct domain *d)
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool gic_dist_supports_lpis(void)
|
||||
{
|
||||
return (readl_relaxed(GICD + GICD_TYPER) & GICD_TYPE_LPIS);
|
||||
}
|
||||
|
||||
/* Set up the GIC */
|
||||
static int __init gicv3_init(void)
|
||||
{
|
||||
@@ -1699,9 +1704,12 @@ static int __init gicv3_init(void)
|
||||
|
||||
gicv3_dist_init();
|
||||
|
||||
res = gicv3_its_init();
|
||||
if ( res )
|
||||
panic("GICv3: ITS: initialization failed: %d\n", res);
|
||||
if ( gic_dist_supports_lpis() )
|
||||
{
|
||||
res = gicv3_its_init();
|
||||
if ( res )
|
||||
panic("GICv3: ITS: initialization failed: %d\n", res);
|
||||
}
|
||||
|
||||
res = gicv3_cpu_init();
|
||||
if ( res )
|
||||
|
||||