mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
net: libwx: fix device bus LAN ID
The device bus LAN ID was obtained from PCI_FUNC(), but when a PF
port is passthrough to a virtual machine, the function number may not
match the actual port index on the device. This could cause the driver
to perform operations such as LAN reset on the wrong port.
Fix this by reading the LAN ID from port status register.
Fixes: a34b3e6ed8 ("net: txgbe: Store PCI info")
Cc: stable@vger.kernel.org
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/B60A670C1F52CB8E+20251104062321.40059-1-jiawenwu@trustnetic.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
b1d9154878
commit
a04ea57aae
@@ -2427,7 +2427,8 @@ int wx_sw_init(struct wx *wx)
|
||||
wx->oem_svid = pdev->subsystem_vendor;
|
||||
wx->oem_ssid = pdev->subsystem_device;
|
||||
wx->bus.device = PCI_SLOT(pdev->devfn);
|
||||
wx->bus.func = PCI_FUNC(pdev->devfn);
|
||||
wx->bus.func = FIELD_GET(WX_CFG_PORT_ST_LANID,
|
||||
rd32(wx, WX_CFG_PORT_ST));
|
||||
|
||||
if (wx->oem_svid == PCI_VENDOR_ID_WANGXUN ||
|
||||
pdev->is_virtfn) {
|
||||
|
||||
@@ -97,6 +97,8 @@
|
||||
#define WX_CFG_PORT_CTL_DRV_LOAD BIT(3)
|
||||
#define WX_CFG_PORT_CTL_QINQ BIT(2)
|
||||
#define WX_CFG_PORT_CTL_D_VLAN BIT(0) /* double vlan*/
|
||||
#define WX_CFG_PORT_ST 0x14404
|
||||
#define WX_CFG_PORT_ST_LANID GENMASK(9, 8)
|
||||
#define WX_CFG_TAG_TPID(_i) (0x14430 + ((_i) * 4))
|
||||
#define WX_CFG_PORT_CTL_NUM_VT_MASK GENMASK(13, 12) /* number of TVs */
|
||||
|
||||
@@ -557,8 +559,6 @@ enum WX_MSCA_CMD_value {
|
||||
#define TXD_USE_COUNT(S) DIV_ROUND_UP((S), WX_MAX_DATA_PER_TXD)
|
||||
#define DESC_NEEDED (MAX_SKB_FRAGS + 4)
|
||||
|
||||
#define WX_CFG_PORT_ST 0x14404
|
||||
|
||||
/******************* Receive Descriptor bit definitions **********************/
|
||||
#define WX_RXD_STAT_DD BIT(0) /* Done */
|
||||
#define WX_RXD_STAT_EOP BIT(1) /* End of Packet */
|
||||
|
||||
Reference in New Issue
Block a user