• Shanker Donthineni's avatar
    PCI: Setup ACPI fwnode early and at the same time with OF · 375553a9
    Shanker Donthineni authored
    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.comSigned-off-by: default avatarShanker Donthineni <sdonthineni@nvidia.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    375553a9
pci-acpi.c 35.7 KB