diff options
author | Alex Williamson <alex.williamson@redhat.com> | 2017-01-19 10:51:30 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2017-01-28 15:46:02 -0500 |
commit | 7184f5b451cf3dc61de79091d235b5d2bba2782d (patch) | |
tree | 4d561b92857246fb58dd73bea5d983d0448c0b21 | |
parent | 7ce7d89f48834cefece7804d38fc5d85382edf77 (diff) |
PCI: Add ACS quirk for Intel Union Point
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>
-rw-r--r-- | drivers/pci/quirks.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 1800befa8b8b..a0b3cd5726dc 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -4150,15 +4150,35 @@ static int pci_quirk_intel_pch_acs(struct pci_dev *dev, u16 acs_flags) | |||
4150 | * | 4150 | * |
4151 | * N.B. This doesn't fix what lspci shows. | 4151 | * N.B. This doesn't fix what lspci shows. |
4152 | * | 4152 | * |
4153 | * The 100 series chipset specification update includes this as errata #23[3]. | ||
4154 | * | ||
4155 | * The 200 series chipset (Union Point) has the same bug according to the | ||
4156 | * specification update (Intel 200 Series Chipset Family Platform Controller | ||
4157 | * Hub, Specification Update, January 2017, Revision 001, Document# 335194-001, | ||
4158 | * Errata 22)[4]. Per the datasheet[5], root port PCI Device IDs for this | ||
4159 | * chipset include: | ||
4160 | * | ||
4161 | * 0xa290-0xa29f PCI Express Root port #{0-16} | ||
4162 | * 0xa2e7-0xa2ee PCI Express Root port #{17-24} | ||
4163 | * | ||
4153 | * [1] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-2.html | 4164 | * [1] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-2.html |
4154 | * [2] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-1.html | 4165 | * [2] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-1.html |
4166 | * [3] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-spec-update.html | ||
4167 | * [4] http://www.intel.com/content/www/us/en/chipsets/200-series-chipset-pch-spec-update.html | ||
4168 | * [5] http://www.intel.com/content/www/us/en/chipsets/200-series-chipset-pch-datasheet-vol-1.html | ||
4155 | */ | 4169 | */ |
4156 | static bool pci_quirk_intel_spt_pch_acs_match(struct pci_dev *dev) | 4170 | static bool pci_quirk_intel_spt_pch_acs_match(struct pci_dev *dev) |
4157 | { | 4171 | { |
4158 | return pci_is_pcie(dev) && | 4172 | if (!pci_is_pcie(dev) || pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) |
4159 | pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT && | 4173 | return false; |
4160 | ((dev->device & ~0xf) == 0xa110 || | 4174 | |
4161 | (dev->device >= 0xa167 && dev->device <= 0xa16a)); | 4175 | switch (dev->device) { |
4176 | case 0xa110 ... 0xa11f: case 0xa167 ... 0xa16a: /* Sunrise Point */ | ||
4177 | case 0xa290 ... 0xa29f: case 0xa2e7 ... 0xa2ee: /* Union Point */ | ||
4178 | return true; | ||
4179 | } | ||
4180 | |||
4181 | return false; | ||
4162 | } | 4182 | } |
4163 | 4183 | ||
4164 | #define INTEL_SPT_ACS_CTRL (PCI_ACS_CAP + 4) | 4184 | #define INTEL_SPT_ACS_CTRL (PCI_ACS_CAP + 4) |