diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index cd51d5356079f7ef83c9acab78848cd52f170f81..83e3f2c5c7e696bc2091cb3ecfeabe8335eec5a6 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -5176,3 +5176,26 @@ 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 pci_quirk_hisi_fixup_class(struct pci_dev *dev) +{ + dev->class = PCI_BASE_CLASS_NETWORK << 8; + pci_info(dev, "force hisi class type to network\n"); +} +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_HUAWEI, PCIE_DEVICE_ID_HISI_5896, + pci_quirk_hisi_fixup_class); + +static void pci_quirk_hisi_fixup_bar(struct pci_dev *dev) +{ + int i, start = 3; + + for (i = start; i < PCI_NUM_RESOURCES; i++) { + dev->resource[i].start = 0; + dev->resource[i].end = 0; + dev->resource[i].flags = 0; + } + + pci_info(dev, "force disable hisilicon np bar\n"); +} +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_HUAWEI, PCIE_DEVICE_ID_HISI_5896, + pci_quirk_hisi_fixup_bar); diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index a051ae7068f579bb68d943de84901e64a8a4dc50..5dd03b5d68c8910a45f4efd694757b1d1c308642 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2539,6 +2539,8 @@ #define PCI_VENDOR_ID_HUAWEI 0x19e5 #define PCI_DEVICE_ID_ZIP_PF 0xa250 #define PCI_DEVICE_ID_ZIP_VF 0xa251 +/* Hisilicon PCIe NP devices */ +#define PCIE_DEVICE_ID_HISI_5896 0x5896 #define PCI_VENDOR_ID_NETRONOME 0x19ee #define PCI_DEVICE_ID_NETRONOME_NFP3200 0x3200