|
@@ -1725,7 +1725,7 @@ int pci_setup_device(struct pci_dev *dev)
|
|
|
static void pci_configure_mps(struct pci_dev *dev)
|
|
|
{
|
|
|
struct pci_dev *bridge = pci_upstream_bridge(dev);
|
|
|
- int mps, p_mps, rc;
|
|
|
+ int mps, mpss, p_mps, rc;
|
|
|
|
|
|
if (!pci_is_pcie(dev) || !bridge || !pci_is_pcie(bridge))
|
|
|
return;
|
|
@@ -1753,6 +1753,14 @@ static void pci_configure_mps(struct pci_dev *dev)
|
|
|
if (pcie_bus_config != PCIE_BUS_DEFAULT)
|
|
|
return;
|
|
|
|
|
|
+ mpss = 128 << dev->pcie_mpss;
|
|
|
+ if (mpss < p_mps && pci_pcie_type(bridge) == PCI_EXP_TYPE_ROOT_PORT) {
|
|
|
+ pcie_set_mps(bridge, mpss);
|
|
|
+ pci_info(dev, "Upstream bridge's Max Payload Size set to %d (was %d, max %d)\n",
|
|
|
+ mpss, p_mps, 128 << bridge->pcie_mpss);
|
|
|
+ p_mps = pcie_get_mps(bridge);
|
|
|
+ }
|
|
|
+
|
|
|
rc = pcie_set_mps(dev, p_mps);
|
|
|
if (rc) {
|
|
|
pci_warn(dev, "can't set Max Payload Size to %d; if necessary, use \"pci=pcie_bus_safe\" and report a bug\n",
|
|
@@ -1761,7 +1769,7 @@ static void pci_configure_mps(struct pci_dev *dev)
|
|
|
}
|
|
|
|
|
|
pci_info(dev, "Max Payload Size set to %d (was %d, max %d)\n",
|
|
|
- p_mps, mps, 128 << dev->pcie_mpss);
|
|
|
+ p_mps, mps, mpss);
|
|
|
}
|
|
|
|
|
|
static struct hpp_type0 pci_default_type0 = {
|