Skip to content

Commit

Permalink
ACPI/PCI: Pay attention to device-specific _PXM node values
Browse files Browse the repository at this point in the history
The ACPI specification allows you to provide _PXM entries for devices based
on their location on a particular bus.  Let us use that if it is provided
rather than just assuming it makes sense to put the device into the
proximity domain of the root.

An example DSDT entry that will supply this is:

  Device (PCI2)
  {
    Name (_HID, "PNP0A08") // PCI Express Root Bridge
    Name (_CID, "PNP0A03") // Compatible PCI Root Bridge
    Name(_SEG, 2) // Segment of this Root complex
    Name(_BBN, 0xF8) // Base Bus Number
    Name(_CCA, 1)
    Method (_PXM, 0, NotSerialized) {
      Return(0x00)
    }

    ...
    Device (BRI0) {
      Name (_HID, "19E51610")
      Name (_ADR, 0)
      Name (_BBN, 0xF9)
      Device (CAR0) {
        Name (_HID, "97109912")
        Name (_ADR, 0)
        Method (_PXM, 0, NotSerialized) {
          Return(0x02)
        }
      }
    }
  }

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
  • Loading branch information
Jonathan Cameron authored and Bjorn Helgaas committed Sep 17, 2018
1 parent d193631 commit bad7dcd
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions drivers/pci/pci-acpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -751,10 +751,15 @@ static void pci_acpi_setup(struct device *dev)
{
struct pci_dev *pci_dev = to_pci_dev(dev);
struct acpi_device *adev = ACPI_COMPANION(dev);
int node;

if (!adev)
return;

node = acpi_get_node(adev->handle);
if (node != NUMA_NO_NODE)
set_dev_node(dev, node);

pci_acpi_optimize_delay(pci_dev, adev->handle);

pci_acpi_add_pm_notifier(adev, pci_dev);
Expand Down

0 comments on commit bad7dcd

Please sign in to comment.