diff mbox series

[5/5] qtest/bios-tables-test: Update aarch64/virt 'acpipcihp' variant blob

Message ID 20250526053123.1434204-6-gustavo.romero@linaro.org
State New
Headers show
Series ACPI tests for PCI Hotplug on ARM | expand

Commit Message

Gustavo Romero May 26, 2025, 5:31 a.m. UTC
Update the .acpipcihp blob variant for the aarch64 'virt' machine. Since
this is a new blob, the diff is large and not particularly useful, so
below is the diff against the base DSDT blob with ACPI PCI off.

Main changes include:

a) The _OSC method, which now allows the platform to control PCIe
   hotplug (masking Local0 against 0x1E), whereas previously it was
   controlled by the OS;
b) New regions in _SB.PCI0 to handle bus selection and device ejection;
c) Addition of a PDSM method (invoked by _DSM);
d) A new device PHPR, which reserves the memory regions used by QEMU's
   acpi-pci-hotplug mechanism;
e) A new event in the GED device used to notify PCI device hotplug and
   unplug.

DSDT diff against base aarch64/virt machine with acpi-pcihp=off:

 DefinitionBlock ("", "DSDT", 2, "BOCHS ", "BXPC    ", 0x00000001)
 {
     Scope (\_SB)
     {
         Device (C000)
         {
             Name (_HID, "ACPI0007" /* Processor Device */)  // _HID: Hardware ID
             Name (_UID, Zero)  // _UID: Unique ID
         }

@@ -1795,33 +1795,33 @@
                     0x0000008000000000, // Range Minimum
                     0x000000FFFFFFFFFF, // Range Maximum
                     0x0000000000000000, // Translation Offset
                     0x0000008000000000, // Length
                     ,, , AddressRangeMemory, TypeStatic)
             })
             Name (SUPP, Zero)
             Name (CTRL, Zero)
             Method (_OSC, 4, NotSerialized)  // _OSC: Operating System Capabilities
             {
                 CreateDWordField (Arg3, Zero, CDW1)
                 If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */))
                 {
                     CreateDWordField (Arg3, 0x04, CDW2)
                     CreateDWordField (Arg3, 0x08, CDW3)
                     Local0 = CDW3 /* \_SB_.PCI0._OSC.CDW3 */
-                    Local0 &= 0x1F
+                    Local0 &= 0x1E
                     If ((Arg1 != One))
                     {
                         CDW1 |= 0x08
                     }

                     If ((CDW3 != Local0))
                     {
                         CDW1 |= 0x10
                     }

                     CDW3 = Local0
                 }
                 Else
                 {
                     CDW1 |= 0x04
                 }
@@ -1852,53 +1852,217 @@
             {
                 Name (_HID, "PNP0C02" /* PNP Motherboard Resources */)  // _HID: Hardware ID
                 Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
                 {
                     QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite,
                         0x0000000000000000, // Granularity
                         0x0000004010000000, // Range Minimum
                         0x000000401FFFFFFF, // Range Maximum
                         0x0000000000000000, // Translation Offset
                         0x0000000010000000, // Length
                         ,, , AddressRangeMemory, TypeStatic)
                 })
             }
         }
     }

+    Scope (_SB.PCI0)
+    {
+        OperationRegion (PCST, SystemMemory, 0x090C0000, 0x08)
+        Field (PCST, DWordAcc, NoLock, WriteAsZeros)
+        {
+            PCIU,   32,
+            PCID,   32
+        }
+
+        OperationRegion (SEJ, SystemMemory, 0x090C0008, 0x04)
+        Field (SEJ, DWordAcc, NoLock, WriteAsZeros)
+        {
+            B0EJ,   32
+        }
+
+        OperationRegion (BNMR, SystemMemory, 0x090C0010, 0x08)
+        Field (BNMR, DWordAcc, NoLock, WriteAsZeros)
+        {
+            BNUM,   32,
+            PIDX,   32
+        }
+
+        Mutex (BLCK, 0x00)
+        Method (PCEJ, 2, NotSerialized)
+        {
+            Acquire (BLCK, 0xFFFF)
+            BNUM = Arg0
+            B0EJ = (One << Arg1)
+            Release (BLCK)
+            Return (Zero)
+        }
+
+        Method (AIDX, 2, NotSerialized)
+        {
+            Acquire (BLCK, 0xFFFF)
+            BNUM = Arg0
+            PIDX = (One << Arg1)
+            Local0 = PIDX /* \_SB_.PCI0.PIDX */
+            Release (BLCK)
+            Return (Local0)
+        }
+
+        Method (PDSM, 5, Serialized)
+        {
+            If ((Arg2 == Zero))
+            {
+                Local0 = Buffer (One)
+                    {
+                         0x00                                             // .
+                    }
+                If ((Arg0 != ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
+                {
+                    Return (Local0)
+                }
+
+                If ((Arg1 < 0x02))
+                {
+                    Return (Local0)
+                }
+
+                Local1 = Zero
+                Local2 = AIDX (DerefOf (Arg4 [Zero]), DerefOf (Arg4 [One]
+                    ))
+                If (!((Local2 == Zero) | (Local2 == 0xFFFFFFFF)))
+                {
+                    Local1 |= One
+                    Local1 |= (One << 0x07)
+                }
+
+                Local0 [Zero] = Local1
+                Return (Local0)
+            }
+
+            If ((Arg2 == 0x07))
+            {
+                Local2 = AIDX (DerefOf (Arg4 [Zero]), DerefOf (Arg4 [One]
+                    ))
+                Local0 = Package (0x02) {}
+                If (!((Local2 == Zero) || (Local2 == 0xFFFFFFFF)))
+                {
+                    Local0 [Zero] = Local2
+                    Local0 [One] = ""
+                }
+
+                Return (Local0)
+            }
+        }
+    }
+
+    Scope (\_SB.PCI0)
+    {
+        Method (EDSM, 5, Serialized)
+        {
+            If ((Arg2 == Zero))
+            {
+                Local0 = Buffer (One)
+                    {
+                         0x00                                             // .
+                    }
+                If ((Arg0 != ToUUID ("e5c937d0-3553-4d7a-9117-ea4d19c3434d") /* Device Labeling Interface */))
+                {
+                    Return (Local0)
+                }
+
+                If ((Arg1 < 0x02))
+                {
+                    Return (Local0)
+                }
+
+                Local0 [Zero] = 0x81
+                Return (Local0)
+            }
+
+            If ((Arg2 == 0x07))
+            {
+                Local0 = Package (0x02)
+                    {
+                        Zero,
+                        ""
+                    }
+                Local1 = DerefOf (Arg4 [Zero])
+                Local0 [Zero] = Local1
+                Return (Local0)
+            }
+        }
+
+        Device (PHPR)
+        {
+            Name (_HID, "PNP0A06" /* Generic Container Device */)  // _HID: Hardware ID
+            Name (_UID, "PCI Hotplug resources")  // _UID: Unique ID
+            Name (_STA, 0x0B)  // _STA: Status
+            Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
+            {
+                IO (Decode16,
+                    0x0000,             // Range Minimum
+                    0x0000,             // Range Maximum
+                    0x01,               // Alignment
+                    0x00,               // Length
+                    )
+            })
+        }
+
+        Device (S00)
+        {
+            Name (_ADR, Zero)  // _ADR: Address
+        }
+
+        Device (S08)
+        {
+            Name (_ADR, 0x00010000)  // _ADR: Address
+        }
+
+        Method (PCNT, 0, NotSerialized)
+        {
+        }
+    }
+
     Scope (\_SB)
     {
         Device (\_SB.GED)
         {
             Name (_HID, "ACPI0013" /* Generic Event Device */)  // _HID: Hardware ID
             Name (_UID, "GED")  // _UID: Unique ID
             Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
             {
                 Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, )
                 {
                     0x00000029,
                 }
             })
             OperationRegion (EREG, SystemMemory, 0x09080000, 0x04)
             Field (EREG, DWordAcc, NoLock, WriteAsZeros)
             {
                 ESEL,   32
             }

             Method (_EVT, 1, Serialized)  // _EVT: Event
             {
                 Local0 = ESEL /* \_SB_.GED_.ESEL */
                 If (((Local0 & 0x02) == 0x02))
                 {
                     Notify (PWRB, 0x80) // Status Change
                 }
+
+                If (((Local0 & 0x10) == 0x10))
+                {
+                    Acquire (\_SB.PCI0.BLCK, 0xFFFF)
+                    \_SB.PCI0.PCNT ()
+                    Release (\_SB.PCI0.BLCK)
+                }
             }
         }

         Device (PWRB)
         {
             Name (_HID, "PNP0C0C" /* Power Button Device */)  // _HID: Hardware ID
             Name (_UID, Zero)  // _UID: Unique ID
         }
     }
 }

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
---
 tests/data/acpi/aarch64/virt/DSDT.acpipcihp | Bin 0 -> 5993 bytes
 tests/qtest/bios-tables-test-allowed-diff.h |   1 -
 2 files changed, 1 deletion(-)
diff mbox series

Patch

diff --git a/tests/data/acpi/aarch64/virt/DSDT.acpipcihp b/tests/data/acpi/aarch64/virt/DSDT.acpipcihp
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1ee2699d03dd24b7f56dc6e9f88334ab5aeb3d9f 100644
GIT binary patch
literal 5993
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
Gs{aE@PSiaB

literal 0
HcmV?d00001

diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h
index dc3ab24d05..dfb8523c8b 100644
--- a/tests/qtest/bios-tables-test-allowed-diff.h
+++ b/tests/qtest/bios-tables-test-allowed-diff.h
@@ -1,2 +1 @@ 
 /* List of comma-separated changed AML files to ignore */
-"tests/data/acpi/aarch64/virt/DSDT.acpipcihp",