Merge tag 'char-misc-5.17-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregk...
[linux-2.6-microblaze.git] / drivers / pci / probe.c
index 443efb0..17a9699 100644 (file)
@@ -206,14 +206,14 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
         * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
         * 1 must be clear.
         */
-       if (sz == 0xffffffff)
+       if (PCI_POSSIBLE_ERROR(sz))
                sz = 0;
 
        /*
         * I don't know how l can have all bits set.  Copied from old code.
         * Maybe it fixes a bug on some ancient platform.
         */
-       if (l == 0xffffffff)
+       if (PCI_POSSIBLE_ERROR(l))
                l = 0;
 
        if (type == pci_bar_unknown) {
@@ -898,8 +898,6 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
 
        bridge->bus = bus;
 
-       /* Temporarily move resources off the list */
-       list_splice_init(&bridge->windows, &resources);
        bus->sysdata = bridge->sysdata;
        bus->ops = bridge->ops;
        bus->number = bus->busn_res.start = bridge->busnr;
@@ -925,6 +923,8 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
        if (err)
                goto free;
 
+       /* Temporarily move resources off the list */
+       list_splice_init(&bridge->windows, &resources);
        err = device_add(&bridge->dev);
        if (err) {
                put_device(&bridge->dev);
@@ -1579,20 +1579,12 @@ void set_pcie_hotplug_bridge(struct pci_dev *pdev)
 
 static void set_pcie_thunderbolt(struct pci_dev *dev)
 {
-       int vsec = 0;
-       u32 header;
+       u16 vsec;
 
-       while ((vsec = pci_find_next_ext_capability(dev, vsec,
-                                                   PCI_EXT_CAP_ID_VNDR))) {
-               pci_read_config_dword(dev, vsec + PCI_VNDR_HEADER, &header);
-
-               /* Is the device part of a Thunderbolt controller? */
-               if (dev->vendor == PCI_VENDOR_ID_INTEL &&
-                   PCI_VNDR_HEADER_ID(header) == PCI_VSEC_ID_INTEL_TBT) {
-                       dev->is_thunderbolt = 1;
-                       return;
-               }
-       }
+       /* Is the device part of a Thunderbolt controller? */
+       vsec = pci_find_vsec_capability(dev, PCI_VENDOR_ID_INTEL, PCI_VSEC_ID_INTEL_TBT);
+       if (vsec)
+               dev->is_thunderbolt = 1;
 }
 
 static void set_pcie_untrusted(struct pci_dev *dev)
@@ -1683,7 +1675,7 @@ static int pci_cfg_space_size_ext(struct pci_dev *dev)
 
        if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
                return PCI_CFG_SPACE_SIZE;
-       if (status == 0xffffffff || pci_ext_cfg_is_aliased(dev))
+       if (PCI_POSSIBLE_ERROR(status) || pci_ext_cfg_is_aliased(dev))
                return PCI_CFG_SPACE_SIZE;
 
        return PCI_CFG_SPACE_EXP_SIZE;
@@ -2373,8 +2365,8 @@ bool pci_bus_generic_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
        if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
                return false;
 
-       /* Some broken boards return 0 or ~0 if a slot is empty: */
-       if (*l == 0xffffffff || *l == 0x00000000 ||
+       /* Some broken boards return 0 or ~0 (PCI_ERROR_RESPONSE) if a slot is empty: */
+       if (PCI_POSSIBLE_ERROR(*l) || *l == 0x00000000 ||
            *l == 0x0000ffff || *l == 0xffff0000)
                return false;