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
This commit is contained in:
@@ -2030,9 +2030,6 @@ static int __init iommu_init_pci(struct amd_iommu *iommu)
|
||||
if (!iommu->dev)
|
||||
return -ENODEV;
|
||||
|
||||
/* Prevent binding other PCI device drivers to IOMMU devices */
|
||||
iommu->dev->match_driver = false;
|
||||
|
||||
/* ACPI _PRT won't have an IRQ for IOMMU */
|
||||
iommu->dev->irq_managed = 1;
|
||||
|
||||
|
||||
@@ -369,7 +369,9 @@ void pci_bus_add_device(struct pci_dev *dev)
|
||||
pdev->name);
|
||||
}
|
||||
|
||||
dev->match_driver = !dn || of_device_is_available(dn);
|
||||
if (!dn || of_device_is_available(dn))
|
||||
pci_dev_allow_binding(dev);
|
||||
|
||||
retval = device_attach(&dev->dev);
|
||||
if (retval < 0 && retval != -EPROBE_DEFER)
|
||||
pci_warn(dev, "device attach failed (%d)\n", retval);
|
||||
|
||||
@@ -1507,7 +1507,7 @@ static int pci_bus_match(struct device *dev, const struct device_driver *drv)
|
||||
struct pci_driver *pci_drv;
|
||||
const struct pci_device_id *found_id;
|
||||
|
||||
if (!pci_dev->match_driver)
|
||||
if (pci_dev_binding_disallowed(pci_dev))
|
||||
return 0;
|
||||
|
||||
pci_drv = (struct pci_driver *)to_pci_driver(drv);
|
||||
|
||||
@@ -4929,7 +4929,7 @@ int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type)
|
||||
delay);
|
||||
if (!pcie_wait_for_link_delay(dev, true, delay)) {
|
||||
/* Did not train, no need to wait any further */
|
||||
pci_info(dev, "Data Link Layer Link Active not set in 1000 msec\n");
|
||||
pci_info(dev, "Data Link Layer Link Active not set in %d msec\n", delay);
|
||||
return -ENOTTY;
|
||||
}
|
||||
|
||||
@@ -6781,11 +6781,6 @@ int __weak pci_ext_cfg_avail(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
void __weak pci_fixup_cardbus(struct pci_bus *bus)
|
||||
{
|
||||
}
|
||||
EXPORT_SYMBOL(pci_fixup_cardbus);
|
||||
|
||||
static int __init pci_setup(char *str)
|
||||
{
|
||||
while (str) {
|
||||
|
||||
@@ -558,6 +558,7 @@ static inline int pci_dev_set_disconnected(struct pci_dev *dev, void *unused)
|
||||
#define PCI_DPC_RECOVERING 2
|
||||
#define PCI_DEV_REMOVED 3
|
||||
#define PCI_LINK_LBMS_SEEN 6
|
||||
#define PCI_DEV_ALLOW_BINDING 7
|
||||
|
||||
static inline void pci_dev_assign_added(struct pci_dev *dev)
|
||||
{
|
||||
@@ -581,6 +582,16 @@ static inline bool pci_dev_test_and_set_removed(struct pci_dev *dev)
|
||||
return test_and_set_bit(PCI_DEV_REMOVED, &dev->priv_flags);
|
||||
}
|
||||
|
||||
static inline void pci_dev_allow_binding(struct pci_dev *dev)
|
||||
{
|
||||
set_bit(PCI_DEV_ALLOW_BINDING, &dev->priv_flags);
|
||||
}
|
||||
|
||||
static inline bool pci_dev_binding_disallowed(struct pci_dev *dev)
|
||||
{
|
||||
return !test_bit(PCI_DEV_ALLOW_BINDING, &dev->priv_flags);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCIEAER
|
||||
#include <linux/aer.h>
|
||||
|
||||
|
||||
@@ -2058,7 +2058,7 @@ int pci_setup_device(struct pci_dev *dev)
|
||||
if (class == PCI_CLASS_BRIDGE_PCI)
|
||||
goto bad;
|
||||
pci_read_irq(dev);
|
||||
pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
|
||||
pci_read_bases(dev, PCI_STD_NUM_BARS, PCI_ROM_ADDRESS);
|
||||
|
||||
pci_subsystem_ids(dev, &dev->subsystem_vendor, &dev->subsystem_device);
|
||||
|
||||
@@ -2711,7 +2711,6 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
|
||||
pci_set_msi_domain(dev);
|
||||
|
||||
/* Notifier could use PCI capabilities */
|
||||
dev->match_driver = false;
|
||||
ret = device_add(&dev->dev);
|
||||
WARN_ON(ret < 0);
|
||||
|
||||
|
||||
@@ -72,7 +72,6 @@ int __ref cb_alloc(struct pcmcia_socket *s)
|
||||
pci_lock_rescan_remove();
|
||||
|
||||
s->functions = pci_scan_slot(bus, PCI_DEVFN(0, 0));
|
||||
pci_fixup_cardbus(bus);
|
||||
|
||||
max = bus->busn_res.start;
|
||||
for (pass = 0; pass < 2; pass++)
|
||||
|
||||
@@ -423,8 +423,6 @@ struct pci_dev {
|
||||
struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */
|
||||
struct resource driver_exclusive_resource; /* driver exclusive resource ranges */
|
||||
|
||||
bool match_driver; /* Skip attaching driver */
|
||||
|
||||
unsigned int transparent:1; /* Subtractive decode bridge */
|
||||
unsigned int io_window:1; /* Bridge has I/O window */
|
||||
unsigned int pref_window:1; /* Bridge has pref mem window */
|
||||
@@ -1139,9 +1137,6 @@ resource_size_t pcibios_align_resource(void *, const struct resource *,
|
||||
resource_size_t,
|
||||
resource_size_t);
|
||||
|
||||
/* Weak but can be overridden by arch */
|
||||
void pci_fixup_cardbus(struct pci_bus *);
|
||||
|
||||
/* Generic PCI functions used internally */
|
||||
|
||||
void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *region,
|
||||
|
||||
Reference in New Issue
Block a user