mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 01:51:34 +00:00
net: hns3: disable loopback setting in hclge_mac_init
If the selftest and reset are performed at the same time, the loopback setting may be still in the enable state after the reset. As a result, packets cannot be sent out. This patch fixes this issue by disabling loopback in hclge_mac_init. Signed-off-by: Yufeng Mo <moyufeng@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
1483fa4946
commit
1cbc662dd8
@ -66,6 +66,7 @@ static void hclge_rfs_filter_expire(struct hclge_dev *hdev);
|
||||
static void hclge_clear_arfs_rules(struct hnae3_handle *handle);
|
||||
static enum hnae3_reset_type hclge_get_reset_level(struct hnae3_ae_dev *ae_dev,
|
||||
unsigned long *addr);
|
||||
static int hclge_set_default_loopback(struct hclge_dev *hdev);
|
||||
|
||||
static struct hnae3_ae_algo ae_algo;
|
||||
|
||||
@ -2599,6 +2600,10 @@ static int hclge_mac_init(struct hclge_dev *hdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = hclge_set_default_loopback(hdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = hclge_buffer_alloc(hdev);
|
||||
if (ret)
|
||||
dev_err(&hdev->pdev->dev,
|
||||
@ -6331,7 +6336,7 @@ static int hclge_set_app_loopback(struct hclge_dev *hdev, bool en)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hclge_set_serdes_loopback(struct hclge_dev *hdev, bool en,
|
||||
static int hclge_cfg_serdes_loopback(struct hclge_dev *hdev, bool en,
|
||||
enum hnae3_loop loop_mode)
|
||||
{
|
||||
#define HCLGE_SERDES_RETRY_MS 10
|
||||
@ -6392,6 +6397,17 @@ static int hclge_set_serdes_loopback(struct hclge_dev *hdev, bool en,
|
||||
dev_err(&hdev->pdev->dev, "serdes loopback set failed in fw\n");
|
||||
return -EIO;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hclge_set_serdes_loopback(struct hclge_dev *hdev, bool en,
|
||||
enum hnae3_loop loop_mode)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = hclge_cfg_serdes_loopback(hdev, en, loop_mode);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
hclge_cfg_mac_mode(hdev, en);
|
||||
|
||||
@ -6535,6 +6551,22 @@ static int hclge_set_loopback(struct hnae3_handle *handle,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hclge_set_default_loopback(struct hclge_dev *hdev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = hclge_set_app_loopback(hdev, false);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = hclge_cfg_serdes_loopback(hdev, false, HNAE3_LOOP_SERIAL_SERDES);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return hclge_cfg_serdes_loopback(hdev, false,
|
||||
HNAE3_LOOP_PARALLEL_SERDES);
|
||||
}
|
||||
|
||||
static void hclge_reset_tqp_stats(struct hnae3_handle *handle)
|
||||
{
|
||||
struct hclge_vport *vport = hclge_get_vport(handle);
|
||||
|
Loading…
Reference in New Issue
Block a user