mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 08:31:55 +00:00
net: hns3: add compatible handling for MAC VLAN switch parameter configuration
Previously, hns3 driver just directly send specific setting bit
and mask bits of MAC VLAN switch parameter to the firmware, it
can not be compatible with the old firmware, because the old one
ignores mask bits and covers all bits with new setting bits.
So when running with old firmware, the communication between PF
and VF will fail after resetting or configuring spoof check, since
they will do the MAC VLAN switch parameter configuration.
This patch fixes this problem by reading switch parameter firstly,
then just modifies the corresponding bit and sends it to firmware.
Fixes: dd2956eab1
("net: hns3: not allow SSU loopback while execute ethtool -t dev")
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
15fb35fa9f
commit
71c5e83bcf
@ -6263,11 +6263,23 @@ static int hclge_config_switch_param(struct hclge_dev *hdev, int vfid,
|
|||||||
|
|
||||||
func_id = hclge_get_port_number(HOST_PORT, 0, vfid, 0);
|
func_id = hclge_get_port_number(HOST_PORT, 0, vfid, 0);
|
||||||
req = (struct hclge_mac_vlan_switch_cmd *)desc.data;
|
req = (struct hclge_mac_vlan_switch_cmd *)desc.data;
|
||||||
|
|
||||||
|
/* read current config parameter */
|
||||||
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_SWITCH_PARAM,
|
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_SWITCH_PARAM,
|
||||||
false);
|
true);
|
||||||
req->roce_sel = HCLGE_MAC_VLAN_NIC_SEL;
|
req->roce_sel = HCLGE_MAC_VLAN_NIC_SEL;
|
||||||
req->func_id = cpu_to_le32(func_id);
|
req->func_id = cpu_to_le32(func_id);
|
||||||
req->switch_param = switch_param;
|
|
||||||
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(&hdev->pdev->dev,
|
||||||
|
"read mac vlan switch parameter fail, ret = %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* modify and write new config parameter */
|
||||||
|
hclge_cmd_reuse_desc(&desc, false);
|
||||||
|
req->switch_param = (req->switch_param & param_mask) | switch_param;
|
||||||
req->param_mask = param_mask;
|
req->param_mask = param_mask;
|
||||||
|
|
||||||
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user