drivers: pci: ignore disabled devices
authorMichael Walle <michael@walle.cc>
Sun, 1 Dec 2019 16:45:18 +0000 (17:45 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 5 Dec 2019 15:28:38 +0000 (10:28 -0500)
PCI devices may be disabled in the device tree. Devices which are probed
by the device tree handle the "status" property and are skipped if
disabled. Devices which are probed by the PCI enumeration don't check
that property. Fix it.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Alex Marginean <alexandru.marginean@nxp.com>
Tested-by: Alex Marginean <alexandru.marginean@nxp.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
drivers/pci/pci-uclass.c

index 896cb6b23a1a23516fd5b6664b5bf62dd3654beb..fab20fc60e55bf9fcd3681f26be77735a8b37489 100644 (file)
@@ -677,6 +677,11 @@ static int pci_find_and_bind_driver(struct udevice *parent,
        /* Determine optional OF node */
        pci_dev_find_ofnode(parent, bdf, &node);
 
+       if (ofnode_valid(node) && !ofnode_is_available(node)) {
+               debug("%s: Ignoring disabled device\n", __func__);
+               return -EPERM;
+       }
+
        start = ll_entry_start(struct pci_driver_entry, pci_driver_entry);
        n_ents = ll_entry_count(struct pci_driver_entry, pci_driver_entry);
        for (entry = start; entry != start + n_ents; entry++) {