aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Williamson <alex.williamson@redhat.com>2017-04-04 15:32:26 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-04-12 06:41:20 -0400
commitf36d3f1fe79e3cbf9af18434b3b2800e6a210cf4 (patch)
tree9359b04fec6429944867b959a944235c3cb9d61a
parenta452e4eb6ee2cee7a062c3c3fca3b3ec0956e08d (diff)
PCI: Add ACS quirk for Intel Union Point
[ Upstream commit 7184f5b451cf3dc61de79091d235b5d2bba2782d ] Intel 200-series chipsets have the same errata as 100-series: the ACS capability doesn't follow the PCIe spec, the capability and control registers are dwords rather than words. Add PCIe root port device IDs to existing quirk. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/pci/quirks.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 585131a77f6f..19a35fadc346 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -4151,15 +4151,35 @@ static int pci_quirk_intel_pch_acs(struct pci_dev *dev, u16 acs_flags)
4151 * 4151 *
4152 * N.B. This doesn't fix what lspci shows. 4152 * N.B. This doesn't fix what lspci shows.
4153 * 4153 *
4154 * The 100 series chipset specification update includes this as errata #23[3].
4155 *
4156 * The 200 series chipset (Union Point) has the same bug according to the
4157 * specification update (Intel 200 Series Chipset Family Platform Controller
4158 * Hub, Specification Update, January 2017, Revision 001, Document# 335194-001,
4159 * Errata 22)[4]. Per the datasheet[5], root port PCI Device IDs for this
4160 * chipset include:
4161 *
4162 * 0xa290-0xa29f PCI Express Root port #{0-16}
4163 * 0xa2e7-0xa2ee PCI Express Root port #{17-24}
4164 *
4154 * [1] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-2.html 4165 * [1] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-2.html
4155 * [2] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-1.html 4166 * [2] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-1.html
4167 * [3] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-spec-update.html
4168 * [4] http://www.intel.com/content/www/us/en/chipsets/200-series-chipset-pch-spec-update.html
4169 * [5] http://www.intel.com/content/www/us/en/chipsets/200-series-chipset-pch-datasheet-vol-1.html
4156 */ 4170 */
4157static bool pci_quirk_intel_spt_pch_acs_match(struct pci_dev *dev) 4171static bool pci_quirk_intel_spt_pch_acs_match(struct pci_dev *dev)
4158{ 4172{
4159 return pci_is_pcie(dev) && 4173 if (!pci_is_pcie(dev) || pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
4160 pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT && 4174 return false;
4161 ((dev->device & ~0xf) == 0xa110 || 4175
4162 (dev->device >= 0xa167 && dev->device <= 0xa16a)); 4176 switch (dev->device) {
4177 case 0xa110 ... 0xa11f: case 0xa167 ... 0xa16a: /* Sunrise Point */
4178 case 0xa290 ... 0xa29f: case 0xa2e7 ... 0xa2ee: /* Union Point */
4179 return true;
4180 }
4181
4182 return false;
4163} 4183}
4164 4184
4165#define INTEL_SPT_ACS_CTRL (PCI_ACS_CAP + 4) 4185#define INTEL_SPT_ACS_CTRL (PCI_ACS_CAP + 4)