git: 21d9853ed553 - main - arm64/gicv3: Skip programming vPE GITS_BASERs to avoid a boot crash
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 11 Oct 2024 14:14:27 UTC
The branch main has been updated by emaste:
URL: https://cgit.FreeBSD.org/src/commit/?id=21d9853ed5533a87f59937b564a53a2d6ac3c637
commit 21d9853ed5533a87f59937b564a53a2d6ac3c637
Author: D Scott Phillips <scottph@FreeBSD.org>
AuthorDate: 2024-10-11 14:12:15 +0000
Commit: Ed Maste <emaste@FreeBSD.org>
CommitDate: 2024-10-11 14:13:04 +0000
arm64/gicv3: Skip programming vPE GITS_BASERs to avoid a boot crash
On AmpereOne, the current programming of GITS_BASER2 to individual
allocations per ITS causes a:
panic: APEI Fatal Hardware Error!
This is due to the ITS reporting a BASER2_DATA_ERR error. The GIC-700
expects all GITS_BASER2.Physical_Address fields to match system-wide.
Skip programming any vPE GITS_BASER registers to avoid this crash.
Sponsored by: Ampere Computing LLC
Reviewed by: andrew
Differential Revision: https://reviews.freebsd.org/D46094
---
sys/arm64/arm64/gicv3_its.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/sys/arm64/arm64/gicv3_its.c b/sys/arm64/arm64/gicv3_its.c
index a79706526c80..5ecd9b8c0e94 100644
--- a/sys/arm64/arm64/gicv3_its.c
+++ b/sys/arm64/arm64/gicv3_its.c
@@ -586,11 +586,20 @@ gicv3_its_table_init(device_t dev, struct gicv3_its_softc *sc)
its_tbl_size = l1_esize * l1_nidents;
its_tbl_size = roundup2(its_tbl_size, page_size);
break;
- case GITS_BASER_TYPE_VP:
case GITS_BASER_TYPE_PP: /* Undocumented? */
case GITS_BASER_TYPE_IC:
its_tbl_size = page_size;
break;
+ case GITS_BASER_TYPE_VP:
+ /*
+ * If GITS_TYPER.SVPET != 0, the pending table is
+ * shared amongst the redistibutors and ther other
+ * ITSes. Requiring sharing across the ITSes when none
+ * of the redistributors have GICR_VPROPBASER.Valid==1
+ * isn't specified in the architecture, but that's how
+ * the GIC-700 behaves. We don't handle vPE tables at
+ * all yet, so just skip this base register.
+ */
default:
if (bootverbose)
device_printf(dev, "Unhandled table type %lx\n",