managarm/lai

PCI opregions: Ignore bogus _BBN on non-root busses

avdgrinten opened this issue · 2 comments

Some AML contains _BBN nodes at non-root busses. For non-root busses, we should not care about _BBN at all.

AML found in the wild:

            Device (EXP6) {
                Name (_ADR, 0x001C0005)  // _ADR: Address

                OperationRegion (PXCS, PCI_Config, Zero, 0xE0)

                Field (PXCS, AnyAcc, NoLock, WriteAsZeros) {
                    VDID,   16, 
                    Offset (0x19), 
                    SECB,   8, 
                    Offset (0x52), 
                        ,   13, 
                    LASX,   1, 
                    Offset (0x5A), 
                    ABPX,   1, 
                        ,   2, 
                    PDCX,   1, 
                        ,   2, 
                    PDSX,   1, 
                    Offset (0x5B), 
                    LSCX,   1, 
                    Offset (0x60), 
                    Offset (0x62), 
                    PSPX,   1, 
                    Offset (0xD8), 
                        ,   30, 
                    HPEN,   1, 
                    PMEN,   1, 
                        ,   30, 
                    HPSX,   1, 
                    PMSX,   1
                }

                Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number {
                    Return (SECB) /* \_SB_.PCI0.EXP6.SECB */
                }

This currently causes a failure (i.e., an infinite loop) in LAI since LAI tries to run _BBN to get the bus number which causes a read from the bus.

pretty sure this can be closed now with #82

Thanks for the reminder.