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",