Unverified Commit 75803a5a authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!2617 [SYNC patch to OLK-5.10]Add ACS quirk for Wangxun NICs

Merge Pull Request from: @duanqiangwen 
 
Synchronizing linux-next patch to fix the issue #I66W4Y:[openEuler-22.03-LTS][openEuler-22.03-LTS-SP1]Make Multiple functions On Beijing Wangxun PCIE NIC belong to different IOMMU group.

Wangxun has verified there is no peer-to-peer between functions for the
below selection of SFxxx, RP1000 and RP2000 NICS. They may be
multi-function devices, but the hardware does not advertise ACS capability.

Add an ACS quirk for these devices so the functions can be in independent
IOMMU groups. 
 
Link:https://gitee.com/openeuler/kernel/pulls/2617

 

Reviewed-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents 898390cb e486387c
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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
+5 −0
Original line number Diff line number Diff line
@@ -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
+22 −1
Original line number Diff line number Diff line
@@ -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 }
};

+2 −2
Original line number Diff line number Diff line
@@ -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 */