OSDN Git Service

PCI: Setup ACPI fwnode early and at the same time with OF
authorShanker Donthineni <sdonthineni@nvidia.com>
Tue, 17 Aug 2021 18:04:58 +0000 (23:34 +0530)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 18 Aug 2021 22:16:46 +0000 (17:16 -0500)
commit375553a93201a58a52f142eab19545a07aa1eaf5
tree65b05651a18791e8a770264ada2f33b63f84c9cb
parent4273e64cc4ebb881e1954d768020f5440491dcd9
PCI: Setup ACPI fwnode early and at the same time with OF

Previously, the ACPI_COMPANION() of a pci_dev was usually set by
acpi_bind_one() in this path:

  pci_device_add
    pci_configure_device
    pci_init_capabilities
    device_add
      device_platform_notify
acpi_platform_notify
  acpi_device_notify  # KOBJ_ADD
    acpi_bind_one
      ACPI_COMPANION_SET

However, things like pci_configure_device() and pci_init_capabilities()
that run before device_add() need the ACPI_COMPANION, e.g.,
acpi_pci_bridge_d3() uses a _DSD method to learn about D3 support.  These
places had special-case code to manually look up the ACPI_COMPANION.

Set the ACPI_COMPANION earlier, in pci_setup_device(), so it will be
available while configuring the device.  This covers both paths to creating
pci_dev objects:

  pci_scan_single_device           # for normal non-SR-IOV devices
    pci_scan_device
      pci_setup_device
pci_set_acpi_fwnode
    pci_device_add

  pci_iov_add_virtfn               # for SR-IOV virtual functions
    pci_setup_device
      pci_set_acpi_fwnode

Also move the OF fwnode setup to the same spot.

[bhelgaas: commit log]
Link: https://lore.kernel.org/r/20210817180500.1253-8-ameynarkhede03@gmail.com
Signed-off-by: Shanker Donthineni <sdonthineni@nvidia.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
drivers/pci/pci-acpi.c
drivers/pci/probe.c