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:
Julien Grall authored and Stefano Stabellini committed 2018-01-30 09:56:30 -08:00
1 parent a20013e8d9
commit 6fd572826c
1 file changed
+11 -3
+11 -3
View File
@@ -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 )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.