[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1575546041-50907-1-git-send-email-wangxiongfeng2@huawei.com>
Date: Thu, 5 Dec 2019 19:40:41 +0800
From: Xiongfeng Wang <wangxiongfeng2@...wei.com>
To: <bhelgaas@...gle.com>
CC: <wangxiongfeng2@...wei.com>, <linux-pci@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, <wangkefeng.wang@...wei.com>,
<huawei.libin@...wei.com>, <guohanjun@...wei.com>
Subject: [PATCH] PCI: Add quirk to disable unused BAR for hisilicon NP devices 5896
Add pci quirk for hisilicon PCI Network Processor devices 5896.
The size of the unused BAR3 is set as 265T wrongly. This patch disalbes
this bar.
Signed-off-by: Xiongfeng Wang <wangxiongfeng2@...wei.com>
---
drivers/pci/quirks.c | 29 +++++++++++++++++++++++++++++
include/linux/pci_ids.h | 1 +
2 files changed, 30 insertions(+)
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 4937a08..7dfb272 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -5431,3 +5431,32 @@ static void quirk_reset_lenovo_thinkpad_p50_nvgpu(struct pci_dev *pdev)
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_NVIDIA, 0x13b1,
PCI_CLASS_DISPLAY_VGA, 8,
quirk_reset_lenovo_thinkpad_p50_nvgpu);
+
+static void quirk_hisi_fixup_np_class(struct pci_dev *pdev)
+{
+ u32 class = pdev->class;
+
+ pdev->class = PCI_BASE_CLASS_NETWORK << 8;
+ pci_info(pdev, "PCI class overriden (%#08x -> %#08x)\n",
+ class, pdev->class);
+}
+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_HUAWEI, PCI_DEVICE_ID_HISI_5896,
+ quirk_hisi_fixup_np_class);
+
+/*
+ * Hisilicon NP devices 5896 BAR3 size is misreported as 256T. Actually, this
+ * BAR is unused, so let's disable it.
+ */
+#define HISI_5896_WRONG_BAR 3
+static void quirk_hisi_fixup_np_bar(struct pci_dev *pdev)
+{
+ struct resource *r = &pdev->resource[HISI_5896_WRONG_BAR];
+
+ r->start = 0;
+ r->end = 0;
+ r->flags = 0;
+
+ pci_info(pdev, "disable BAR %d\n", HISI_5896_WRONG_BAR);
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_HUAWEI, PCI_DEVICE_ID_HISI_5896,
+ quirk_hisi_fixup_np_bar);
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 2302d133..56e2b91 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2558,6 +2558,7 @@
#define PCI_DEVICE_ID_KORENIX_JETCARDF3 0x17ff
#define PCI_VENDOR_ID_HUAWEI 0x19e5
+#define PCI_DEVICE_ID_HISI_5896 0x5896 /* Hisilicon NP devices 5896 */
#define PCI_VENDOR_ID_NETRONOME 0x19ee
#define PCI_DEVICE_ID_NETRONOME_NFP4000 0x4000
--
1.7.12.4
Powered by blists - more mailing lists