|
@@ -1278,7 +1278,7 @@ int pci_setup_device(struct pci_dev *dev)
|
|
static void pci_configure_mps(struct pci_dev *dev)
|
|
static void pci_configure_mps(struct pci_dev *dev)
|
|
{
|
|
{
|
|
struct pci_dev *bridge = pci_upstream_bridge(dev);
|
|
struct pci_dev *bridge = pci_upstream_bridge(dev);
|
|
- int mps, p_mps;
|
|
|
|
|
|
+ int mps, p_mps, rc;
|
|
|
|
|
|
if (!pci_is_pcie(dev) || !bridge || !pci_is_pcie(bridge))
|
|
if (!pci_is_pcie(dev) || !bridge || !pci_is_pcie(bridge))
|
|
return;
|
|
return;
|
|
@@ -1294,6 +1294,23 @@ static void pci_configure_mps(struct pci_dev *dev)
|
|
mps, pci_name(bridge), p_mps);
|
|
mps, pci_name(bridge), p_mps);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Fancier MPS configuration is done later by
|
|
|
|
+ * pcie_bus_configure_settings()
|
|
|
|
+ */
|
|
|
|
+ if (pcie_bus_config != PCIE_BUS_DEFAULT)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ rc = pcie_set_mps(dev, p_mps);
|
|
|
|
+ if (rc) {
|
|
|
|
+ dev_warn(&dev->dev, "can't set Max Payload Size to %d; if necessary, use \"pci=pcie_bus_safe\" and report a bug\n",
|
|
|
|
+ p_mps);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dev_info(&dev->dev, "Max Payload Size set to %d (was %d, max %d)\n",
|
|
|
|
+ p_mps, mps, 128 << dev->pcie_mpss);
|
|
}
|
|
}
|
|
|
|
|
|
static struct hpp_type0 pci_default_type0 = {
|
|
static struct hpp_type0 pci_default_type0 = {
|
|
@@ -1821,7 +1838,8 @@ static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
|
|
if (!pci_is_pcie(dev))
|
|
if (!pci_is_pcie(dev))
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- if (pcie_bus_config == PCIE_BUS_TUNE_OFF)
|
|
|
|
|
|
+ if (pcie_bus_config == PCIE_BUS_TUNE_OFF ||
|
|
|
|
+ pcie_bus_config == PCIE_BUS_DEFAULT)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
mps = 128 << *(u8 *)data;
|
|
mps = 128 << *(u8 *)data;
|