2019-08-14 23:12:05

by Duran, Leo

[permalink] [raw]
Subject: Parsing PXM from ACPI (DSDT)

Hello,
Is not clear or evident to me if the kernel parses _PXM values below (or under) the root-complex.

For example, in my experience:
This ASL sample for PXM at the root-complex level produces the expected NUMA assignment from “lstopo”:
Scope (\_SB) {
// ...
Device (PCI0) { // Root PCI Bus (Host-Bridge)
Name (_HID, EISAID("PNP0A08"))
Name (_CID, EISAID("PNP0A03"))
Name (_BBN, 0)
Method (_CRS,0) {
// Return current resources for host bridge 0
}
Name (_PRT, Package() {
// Package with PCI IRQ routing table information
})
Method (_PXM, 0, NotSerialized) {
Return (0)
}
}
// ...
}

However,
This ASL sample for PXM at the P2P root-bridge level does not produce the expected NUMA assignment from “lstopo”:
(Of course, the assumption is that multiple NUMA nodes actually exist on the system)

Scope (\_SB) {
// ...
Device (PCI0) { // Root PCI Bus (Host-Bridge)
Name (_HID, EISAID ("PNP0A08"))
Name (_CID, EISAID ("PNP0A03"))
Name (_BBN, 0)
Method (_CRS,0) {
// Return current resources for host bridge 0
}
Name (_PRT, Package() {
// Package with PCI IRQ routing table information
})

    Device (P2P0) { // First PCI-to-PCI bridge (Port0)
      Name (_ADR, 0x00070001) // Device#7h, Func#1 on bus PCI0
      Name (_PRT, Package() {
      // Package with PCI IRQ routing table information
      })
Method (_PXM, 0, NotSerialized) {
Return (0)
}
    }

    Device (P2P1) { // Second PCI-to-PCI bridge (Port1)
      Name (_ADR ,0x00080001) // Device#8h, Func#1 on bus PCI0
      Name (_PRT, Package() {
      // Package with PCI IRQ routing table information
    })
Method (_PXM, 0, NotSerialized) {
Return (1)
}
    }
}
// ...
}

Thanks,
Leo.