Skip to content

Commit 68d0370

Browse files
committed
Merge branch 'pci/enumeration'
- Remove pci_fixup_cardbus(), which has no users left (Heiner Kallweit) - Print the actual delay time in pci_bridge_wait_for_secondary_bus() instead of assuming it was 1000ms (Wilfred Mallawa) - Revert 'iommu/amd: Prevent binding other PCI drivers to IOMMU PCI devices', which broke resume from system sleep on AMD platforms and has been fixed by other commits (Lukas Wunner) - Restrict visibility of pci_dev.match_driver since it's no longer used outside the PCI core (Lukas Wunner) * pci/enumeration: PCI: Limit visibility of match_driver flag to PCI core Revert "iommu/amd: Prevent binding other PCI drivers to IOMMU PCI devices" PCI: Print the actual delay time in pci_bridge_wait_for_secondary_bus() PCI: Use PCI_STD_NUM_BARS instead of 6 PCI: Remove pci_fixup_cardbus() # Conflicts: # drivers/pci/pci.h
2 parents f56278a + ce45dc4 commit 68d0370

File tree

8 files changed

+17
-19
lines changed

8 files changed

+17
-19
lines changed

drivers/iommu/amd/init.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2030,9 +2030,6 @@ static int __init iommu_init_pci(struct amd_iommu *iommu)
20302030
if (!iommu->dev)
20312031
return -ENODEV;
20322032

2033-
/* Prevent binding other PCI device drivers to IOMMU devices */
2034-
iommu->dev->match_driver = false;
2035-
20362033
/* ACPI _PRT won't have an IRQ for IOMMU */
20372034
iommu->dev->irq_managed = 1;
20382035

drivers/pci/bus.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,9 @@ void pci_bus_add_device(struct pci_dev *dev)
369369
pdev->name);
370370
}
371371

372-
dev->match_driver = !dn || of_device_is_available(dn);
372+
if (!dn || of_device_is_available(dn))
373+
pci_dev_allow_binding(dev);
374+
373375
retval = device_attach(&dev->dev);
374376
if (retval < 0 && retval != -EPROBE_DEFER)
375377
pci_warn(dev, "device attach failed (%d)\n", retval);

drivers/pci/pci-driver.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1507,7 +1507,7 @@ static int pci_bus_match(struct device *dev, const struct device_driver *drv)
15071507
struct pci_driver *pci_drv;
15081508
const struct pci_device_id *found_id;
15091509

1510-
if (!pci_dev->match_driver)
1510+
if (pci_dev_binding_disallowed(pci_dev))
15111511
return 0;
15121512

15131513
pci_drv = (struct pci_driver *)to_pci_driver(drv);

drivers/pci/pci.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4929,7 +4929,7 @@ int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type)
49294929
delay);
49304930
if (!pcie_wait_for_link_delay(dev, true, delay)) {
49314931
/* Did not train, no need to wait any further */
4932-
pci_info(dev, "Data Link Layer Link Active not set in 1000 msec\n");
4932+
pci_info(dev, "Data Link Layer Link Active not set in %d msec\n", delay);
49334933
return -ENOTTY;
49344934
}
49354935

@@ -6781,11 +6781,6 @@ int __weak pci_ext_cfg_avail(void)
67816781
return 1;
67826782
}
67836783

6784-
void __weak pci_fixup_cardbus(struct pci_bus *bus)
6785-
{
6786-
}
6787-
EXPORT_SYMBOL(pci_fixup_cardbus);
6788-
67896784
static int __init pci_setup(char *str)
67906785
{
67916786
while (str) {

drivers/pci/pci.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,7 @@ static inline int pci_dev_set_disconnected(struct pci_dev *dev, void *unused)
558558
#define PCI_DPC_RECOVERING 2
559559
#define PCI_DEV_REMOVED 3
560560
#define PCI_LINK_LBMS_SEEN 6
561+
#define PCI_DEV_ALLOW_BINDING 7
561562

562563
static inline void pci_dev_assign_added(struct pci_dev *dev)
563564
{
@@ -581,6 +582,16 @@ static inline bool pci_dev_test_and_set_removed(struct pci_dev *dev)
581582
return test_and_set_bit(PCI_DEV_REMOVED, &dev->priv_flags);
582583
}
583584

585+
static inline void pci_dev_allow_binding(struct pci_dev *dev)
586+
{
587+
set_bit(PCI_DEV_ALLOW_BINDING, &dev->priv_flags);
588+
}
589+
590+
static inline bool pci_dev_binding_disallowed(struct pci_dev *dev)
591+
{
592+
return !test_bit(PCI_DEV_ALLOW_BINDING, &dev->priv_flags);
593+
}
594+
584595
#ifdef CONFIG_PCIEAER
585596
#include <linux/aer.h>
586597

drivers/pci/probe.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2058,7 +2058,7 @@ int pci_setup_device(struct pci_dev *dev)
20582058
if (class == PCI_CLASS_BRIDGE_PCI)
20592059
goto bad;
20602060
pci_read_irq(dev);
2061-
pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
2061+
pci_read_bases(dev, PCI_STD_NUM_BARS, PCI_ROM_ADDRESS);
20622062

20632063
pci_subsystem_ids(dev, &dev->subsystem_vendor, &dev->subsystem_device);
20642064

@@ -2711,7 +2711,6 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
27112711
pci_set_msi_domain(dev);
27122712

27132713
/* Notifier could use PCI capabilities */
2714-
dev->match_driver = false;
27152714
ret = device_add(&dev->dev);
27162715
WARN_ON(ret < 0);
27172716

drivers/pcmcia/cardbus.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ int __ref cb_alloc(struct pcmcia_socket *s)
7272
pci_lock_rescan_remove();
7373

7474
s->functions = pci_scan_slot(bus, PCI_DEVFN(0, 0));
75-
pci_fixup_cardbus(bus);
7675

7776
max = bus->busn_res.start;
7877
for (pass = 0; pass < 2; pass++)

include/linux/pci.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,6 @@ struct pci_dev {
423423
struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */
424424
struct resource driver_exclusive_resource; /* driver exclusive resource ranges */
425425

426-
bool match_driver; /* Skip attaching driver */
427-
428426
unsigned int transparent:1; /* Subtractive decode bridge */
429427
unsigned int io_window:1; /* Bridge has I/O window */
430428
unsigned int pref_window:1; /* Bridge has pref mem window */
@@ -1139,9 +1137,6 @@ resource_size_t pcibios_align_resource(void *, const struct resource *,
11391137
resource_size_t,
11401138
resource_size_t);
11411139

1142-
/* Weak but can be overridden by arch */
1143-
void pci_fixup_cardbus(struct pci_bus *);
1144-
11451140
/* Generic PCI functions used internally */
11461141

11471142
void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *region,

0 commit comments

Comments
 (0)