• Keith Busch's avatar
    PCI: Set MPS to match upstream bridge · 27d868b5
    Keith Busch authored
    Firmware typically configures the PCIe fabric with a consistent Max Payload
    Size setting based on the devices present at boot.  A hot-added device
    typically has the power-on default MPS setting (128 bytes), which may not
    match the fabric.
    
    The previous Linux default, in the absence of any "pci=pcie_bus_*" options,
    was PCIE_BUS_TUNE_OFF, in which we never touch MPS, even for hot-added
    devices.
    
    Add a new default setting, PCIE_BUS_DEFAULT, in which we make sure every
    device's MPS setting matches the upstream bridge.  This makes it more
    likely that a hot-added device will work in a system with optimized MPS
    configuration.
    
    Note that if we hot-add a device that only supports 128-byte MPS, it still
    likely won't work because we don't reconfigure the rest of the fabric.
    Booting with "pci=pcie_bus_peer2peer" is a workaround for this because it
    sets MPS to 128 for everything.
    
    [bhelgaas: changelog, new default, rework for pci_configure_device() path]
    Tested-by: default avatarKeith Busch <keith.busch@intel.com>
    Tested-by: default avatarJordan Hargrave <jharg93@gmail.com>
    Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Acked-by: default avatarYinghai Lu <yinghai@kernel.org>
    27d868b5
pci.c 119 KB