From: Bjorn Helgaas Date: Wed, 3 Sep 2014 19:26:29 +0000 (-0600) Subject: PCI: Preserve MPS and MRRS when applying _HPX settings X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=302328c00341f1c161bfe32d085d3e6549a08f2d;p=linux-beck.git PCI: Preserve MPS and MRRS when applying _HPX settings Linux manages MPS and MRRS settings to keep them consistent across the PCIe fabric. BIOS doesn't participate in this Linux management, so ignore that part of any _HPX settings it supplies. Signed-off-by: Bjorn Helgaas Acked-by: Yinghai Lu --- diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 1ff2105ba401..cb411fbb6435 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -1301,6 +1301,16 @@ static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp) return; } + /* + * Don't allow _HPX to change MPS or MRRS settings. We manage + * those to make sure they're consistent with the rest of the + * platform. + */ + hpp->pci_exp_devctl_and |= PCI_EXP_DEVCTL_PAYLOAD | + PCI_EXP_DEVCTL_READRQ; + hpp->pci_exp_devctl_or &= ~(PCI_EXP_DEVCTL_PAYLOAD | + PCI_EXP_DEVCTL_READRQ); + /* Initialize Device Control Register */ pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL, ~hpp->pci_exp_devctl_and, hpp->pci_exp_devctl_or);