]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: hns3: Fix for phy not link up problem after resetting
authorYunsheng Lin <linyunsheng@huawei.com>
Fri, 1 Jun 2018 16:52:07 +0000 (17:52 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 3 Aug 2018 05:47:38 +0000 (07:47 +0200)
[ Upstream commit 9617f66867b09b326cc932416be2431c5b91c8d8 ]

When resetting, phy_state_machine may be accessing the phy through
firmware if the phy is not stopped or disconnected, which will
cause firemware timeout problem because the firmware is busy
processing the reset request.

This patch fixes it by disabling the phy when resetting.

Fixes: b940aeae0ed6 ("net: hns3: never send command queue message to IMP when reset")
Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

index 2066dd734444468ec644179194898193953548be..8ce6ab07ffec756cb6b0d7a4e203aeefbe763449 100644 (file)
@@ -3787,9 +3787,6 @@ static int hclge_ae_start(struct hnae3_handle *handle)
        /* reset tqp stats */
        hclge_reset_tqp_stats(handle);
 
-       if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
-               return 0;
-
        ret = hclge_mac_start_phy(hdev);
        if (ret)
                return ret;
@@ -3806,8 +3803,10 @@ static void hclge_ae_stop(struct hnae3_handle *handle)
        del_timer_sync(&hdev->service_timer);
        cancel_work_sync(&hdev->service_task);
 
-       if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
+       if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) {
+               hclge_mac_stop_phy(hdev);
                return;
+       }
 
        for (i = 0; i < vport->alloc_tqps; i++)
                hclge_tqp_enable(hdev, i, 0, false);