diff options
Diffstat (limited to 'drivers/pci/pci-efi.c')
-rw-r--r-- | drivers/pci/pci-efi.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/pci/pci-efi.c b/drivers/pci/pci-efi.c index e1fe11d070..67868d09b6 100644 --- a/drivers/pci/pci-efi.c +++ b/drivers/pci/pci-efi.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: GPL-2.0 +// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2019 Ahmad Fatoum <a.fatoum@pengutronix.de> */ @@ -9,7 +9,7 @@ #include <init.h> #include <xfuncs.h> #include <efi.h> -#include <efi/efi.h> +#include <efi/efi-payload.h> #include <efi/efi-device.h> #include <linux/pci.h> @@ -17,7 +17,7 @@ struct efi_pci_priv { struct efi_pci_root_bridge_io_protocol *protocol; - struct device_d *dev; + struct device *dev; struct pci_controller pci; struct resource mem; struct resource mem_pref; @@ -34,7 +34,7 @@ struct pci_child_id { struct pci_child { struct efi_pci_io_protocol *protocol; - struct device_d *dev; + struct device *dev; struct list_head list; struct pci_child_id id; }; @@ -209,15 +209,22 @@ static u8 *acpi_parse_resource(u8 *next, struct resource *out) return next; } +static struct efi_driver efi_pci_driver; + /* EFI already enumerated the bus for us, match our new pci devices with the efi * handles */ static void efi_pci_fixup_dev_parent(struct pci_dev *dev) { - struct efi_pci_priv *priv = host_to_efi_pci(dev->bus->host); + struct efi_pci_priv *priv; struct pci_child *child; struct pci_child_id id; + if (dev->dev.driver != &efi_pci_driver.driver) + return; + + priv = host_to_efi_pci(dev->bus->host); + id.segmentno = priv->protocol->segmentno; id.busno = dev->bus->number; id.devno = PCI_SLOT(dev->devfn); @@ -261,7 +268,7 @@ DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, efi_pci_fixup_dev_parent); static int efi_pci_probe(struct efi_device *efidev) { - struct device_d *child; + struct device *child; struct efi_pci_priv *priv; efi_status_t efiret; void *resources; |