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;
 
                return ret;
        }
 
+       ret = hclge_set_default_loopback(hdev);
+       if (ret)
+               return ret;
+
        ret = hclge_buffer_alloc(hdev);
        if (ret)
                dev_err(&hdev->pdev->dev,
        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
                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);
 
        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);