diff --git a/drivers/net/ethernet/netswift/ngbe/ngbe_type.h b/drivers/net/ethernet/netswift/ngbe/ngbe_type.h index bae091ffd6e0d2d9acea66330d08c25635126a91..ab175d1292ccd5383426cc326e5c49deb29bc38f 100644 --- a/drivers/net/ethernet/netswift/ngbe/ngbe_type.h +++ b/drivers/net/ethernet/netswift/ngbe/ngbe_type.h @@ -65,6 +65,11 @@ #endif /************ ngbe_register.h ************/ +/* Vendor ID */ +#ifndef PCI_VENDOR_ID_TRUSTNETIC +#define PCI_VENDOR_ID_TRUSTNETIC 0x8088 +#endif + /* Device IDs */ /* copper */ #define NGBE_DEV_ID_EM_TEST 0x0000 diff --git a/drivers/net/ethernet/netswift/txgbe/txgbe_type.h b/drivers/net/ethernet/netswift/txgbe/txgbe_type.h index 9aaca94c6faee4944ff6959792c09a03c5b749fa..aadab1a21823bec1b67f44e5daa94aa68f9cb643 100644 --- a/drivers/net/ethernet/netswift/txgbe/txgbe_type.h +++ b/drivers/net/ethernet/netswift/txgbe/txgbe_type.h @@ -89,6 +89,11 @@ #endif /************ txgbe_register.h ************/ +/* Vendor ID */ +#ifndef PCI_VENDOR_ID_TRUSTNETIC +#define PCI_VENDOR_ID_TRUSTNETIC 0x8088 +#endif + /* Device IDs */ #define TXGBE_DEV_ID_SP1000 0x1001 #define TXGBE_DEV_ID_WX1820 0x2001 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 07d057a1970ca1e191ab516ae7b57c9c99e9c667..31b2a25d8a2cbbbbdd95c4cec1371d41a98fcc99 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -4824,6 +4824,26 @@ static int pci_quirk_brcm_acs(struct pci_dev *dev, u16 acs_flags) PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF); } +/* + * Wangxun 10G/1G NICs have no ACS capability, and on multi-function + * devices, peer-to-peer transactions are not be used between the functions. + * So add an ACS quirk for below devices to isolate functions. + * SFxxx 1G NICs(em). + * RP1000/RP2000 10G NICs(sp). + */ +static int pci_quirk_wangxun_nic_acs(struct pci_dev *dev, u16 acs_flags) +{ + switch (dev->device) { + case 0x0100 ... 0x010F: + case 0x1001: + case 0x2001: + return pci_acs_ctrl_enabled(acs_flags, + PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF); + } + + return false; +} + static const struct pci_dev_acs_enabled { u16 vendor; u16 device; @@ -4973,13 +4993,14 @@ static const struct pci_dev_acs_enabled { { PCI_VENDOR_ID_NXP, 0x8d9b, pci_quirk_nxp_rp_acs }, /* Zhaoxin Root/Downstream Ports */ { PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs }, + /* Wangxun nics */ + { PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs }, #ifdef CONFIG_ARCH_PHYTIUM /* because PLX switch Vendor id is 0x10b5 on phytium cpu */ { 0x10b5, PCI_ANY_ID, pci_quirk_xgene_acs }, /* because rootcomplex Vendor id is 0x17cd on phytium cpu */ { 0x17cd, PCI_ANY_ID, pci_quirk_xgene_acs }, #endif - { PCI_VENDOR_ID_TRUSTNETIC, PCI_ANY_ID, pci_quirk_mf_endpoint_acs }, { 0 } }; diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index d55f33c423d3835568937fb77d47b3a321d03f8a..27229ffde6585d564bd6ae3e6e9bba668b582140 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -3043,6 +3043,8 @@ #define PCI_DEVICE_ID_INTEL_VMD_9A0B 0x9a0b #define PCI_DEVICE_ID_INTEL_S21152BB 0xb152 +#define PCI_VENDOR_ID_WANGXUN 0x8088 + #define PCI_VENDOR_ID_SCALEMP 0x8686 #define PCI_DEVICE_ID_SCALEMP_VSMP_CTL 0x1010 @@ -3148,8 +3150,6 @@ #define PCI_VENDOR_ID_NCUBE 0x10ff -#define PCI_VENDOR_ID_TRUSTNETIC 0x8088 - #define PCI_VENDOR_ID_PHYTIUM 0x1db7 #endif /* _LINUX_PCI_IDS_H */