|
@@ -2865,6 +2865,31 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata);
|
|
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata);
|
|
|
|
|
|
|
|
|
+/*
|
|
|
+ * Ivytown NTB BAR sizes are misreported by the hardware due to an erratum. To
|
|
|
+ * work around this, query the size it should be configured to by the device and
|
|
|
+ * modify the resource end to correspond to this new size.
|
|
|
+ */
|
|
|
+static void quirk_intel_ntb(struct pci_dev *dev)
|
|
|
+{
|
|
|
+ int rc;
|
|
|
+ u8 val;
|
|
|
+
|
|
|
+ rc = pci_read_config_byte(dev, 0x00D0, &val);
|
|
|
+ if (rc)
|
|
|
+ return;
|
|
|
+
|
|
|
+ dev->resource[2].end = dev->resource[2].start + ((u64) 1 << val) - 1;
|
|
|
+
|
|
|
+ rc = pci_read_config_byte(dev, 0x00D1, &val);
|
|
|
+ if (rc)
|
|
|
+ return;
|
|
|
+
|
|
|
+ dev->resource[4].end = dev->resource[4].start + ((u64) 1 << val) - 1;
|
|
|
+}
|
|
|
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e08, quirk_intel_ntb);
|
|
|
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb);
|
|
|
+
|
|
|
static ktime_t fixup_debug_start(struct pci_dev *dev,
|
|
|
void (*fn)(struct pci_dev *dev))
|
|
|
{
|