The branch main has been updated by emaste:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=21d9853ed5533a87f59937b564a53a2d6ac3c637
commit 21d9853ed5533a87f59937b564a53a2d6ac3c637
Author:     D Scott Phillips <scot...@freebsd.org>
AuthorDate: 2024-10-11 14:12:15 +0000
Commit:     Ed Maste <ema...@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",

Reply via email to