diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index f211bbfb54feae86157e100727012656235b5c11..147d0bc8bffae91894d05ed8a5778b6ac9aa68a7 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -3337,7 +3337,7 @@ static bool hclge_reset_err_handle(struct hclge_dev *hdev, bool is_timeout) } else if (hdev->reset_fail_cnt < HCLGE_RESET_MAX_FAIL_CNT) { hdev->reset_fail_cnt++; - if (is_timeout) { + if (hdev->reset_type == HNAE3_IMP_RESET || is_timeout) { set_bit(hdev->reset_type, &hdev->reset_pending); dev_info(&hdev->pdev->dev, "re-schedule to wait for hw reset done\n"); @@ -3354,6 +3354,8 @@ static bool hclge_reset_err_handle(struct hclge_dev *hdev, bool is_timeout) } hclge_clear_reset_cause(hdev); + hclge_write_dev(&hdev->hw, HCLGE_NIC_CSQ_DEPTH_REG, + HCLGE_NIC_CMQ_ENABLE); if (handle && handle->ae_algo->ops->reset_done) handle->ae_algo->ops->reset_done(handle, false); diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c index 7ef7eb1e907e296cc2ca5bad35eb29f21d4059b6..e64d694be431457a1a568459e739c2eccfb9570c 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c @@ -1480,6 +1480,9 @@ static void hclgevf_reset_err_handle(struct hclgevf_dev *hdev) if (hclgevf_is_reset_pending(hdev)) { set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); hclgevf_reset_task_schedule(hdev); + } else { + hclgevf_write_dev(&hdev->hw, HCLGEVF_NIC_CSQ_DEPTH_REG, + HCLGEVF_NIC_CMQ_ENABLE); } }