Commit 23e03160 authored by Yufeng Mo's avatar Yufeng Mo Committed by David S. Miller

net: hns3: optimize function hclge_cfg_common_loopback()

hclge_cfg_common_loopback() is a bit too long, so
encapsulate hclge_cfg_common_loopback_cmd_send() and
hclge_cfg_common_loopback_wait() two functions to
improve readability.
Signed-off-by: default avatarYufeng Mo <moyufeng@huawei.com>
Signed-off-by: default avatarGuangbin Huang <huangguangbin2@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0109841f
...@@ -8000,16 +8000,13 @@ static int hclge_set_app_loopback(struct hclge_dev *hdev, bool en) ...@@ -8000,16 +8000,13 @@ static int hclge_set_app_loopback(struct hclge_dev *hdev, bool en)
return ret; return ret;
} }
static int hclge_cfg_common_loopback(struct hclge_dev *hdev, bool en, static int hclge_cfg_common_loopback_cmd_send(struct hclge_dev *hdev, bool en,
enum hnae3_loop loop_mode) enum hnae3_loop loop_mode)
{ {
#define HCLGE_COMMON_LB_RETRY_MS 10
#define HCLGE_COMMON_LB_RETRY_NUM 100
struct hclge_common_lb_cmd *req; struct hclge_common_lb_cmd *req;
struct hclge_desc desc; struct hclge_desc desc;
int ret, i = 0;
u8 loop_mode_b; u8 loop_mode_b;
int ret;
req = (struct hclge_common_lb_cmd *)desc.data; req = (struct hclge_common_lb_cmd *)desc.data;
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_COMMON_LOOPBACK, false); hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_COMMON_LOOPBACK, false);
...@@ -8026,23 +8023,34 @@ static int hclge_cfg_common_loopback(struct hclge_dev *hdev, bool en, ...@@ -8026,23 +8023,34 @@ static int hclge_cfg_common_loopback(struct hclge_dev *hdev, bool en,
break; break;
default: default:
dev_err(&hdev->pdev->dev, dev_err(&hdev->pdev->dev,
"unsupported common loopback mode %d\n", loop_mode); "unsupported loopback mode %d\n", loop_mode);
return -ENOTSUPP; return -ENOTSUPP;
} }
if (en) { req->mask = loop_mode_b;
if (en)
req->enable = loop_mode_b; req->enable = loop_mode_b;
req->mask = loop_mode_b;
} else {
req->mask = loop_mode_b;
}
ret = hclge_cmd_send(&hdev->hw, &desc, 1); ret = hclge_cmd_send(&hdev->hw, &desc, 1);
if (ret) { if (ret)
dev_err(&hdev->pdev->dev, dev_err(&hdev->pdev->dev,
"common loopback set fail, ret = %d\n", ret); "failed to send loopback cmd, loop_mode = %d, ret = %d\n",
return ret; loop_mode, ret);
}
return ret;
}
static int hclge_cfg_common_loopback_wait(struct hclge_dev *hdev)
{
#define HCLGE_COMMON_LB_RETRY_MS 10
#define HCLGE_COMMON_LB_RETRY_NUM 100
struct hclge_common_lb_cmd *req;
struct hclge_desc desc;
u32 i = 0;
int ret;
req = (struct hclge_common_lb_cmd *)desc.data;
do { do {
msleep(HCLGE_COMMON_LB_RETRY_MS); msleep(HCLGE_COMMON_LB_RETRY_MS);
...@@ -8051,20 +8059,34 @@ static int hclge_cfg_common_loopback(struct hclge_dev *hdev, bool en, ...@@ -8051,20 +8059,34 @@ static int hclge_cfg_common_loopback(struct hclge_dev *hdev, bool en,
ret = hclge_cmd_send(&hdev->hw, &desc, 1); ret = hclge_cmd_send(&hdev->hw, &desc, 1);
if (ret) { if (ret) {
dev_err(&hdev->pdev->dev, dev_err(&hdev->pdev->dev,
"common loopback get, ret = %d\n", ret); "failed to get loopback done status, ret = %d\n",
ret);
return ret; return ret;
} }
} while (++i < HCLGE_COMMON_LB_RETRY_NUM && } while (++i < HCLGE_COMMON_LB_RETRY_NUM &&
!(req->result & HCLGE_CMD_COMMON_LB_DONE_B)); !(req->result & HCLGE_CMD_COMMON_LB_DONE_B));
if (!(req->result & HCLGE_CMD_COMMON_LB_DONE_B)) { if (!(req->result & HCLGE_CMD_COMMON_LB_DONE_B)) {
dev_err(&hdev->pdev->dev, "common loopback set timeout\n"); dev_err(&hdev->pdev->dev, "wait loopback timeout\n");
return -EBUSY; return -EBUSY;
} else if (!(req->result & HCLGE_CMD_COMMON_LB_SUCCESS_B)) { } else if (!(req->result & HCLGE_CMD_COMMON_LB_SUCCESS_B)) {
dev_err(&hdev->pdev->dev, "common loopback set failed in fw\n"); dev_err(&hdev->pdev->dev, "faile to do loopback test\n");
return -EIO; return -EIO;
} }
return ret;
return 0;
}
static int hclge_cfg_common_loopback(struct hclge_dev *hdev, bool en,
enum hnae3_loop loop_mode)
{
int ret;
ret = hclge_cfg_common_loopback_cmd_send(hdev, en, loop_mode);
if (ret)
return ret;
return hclge_cfg_common_loopback_wait(hdev);
} }
static int hclge_set_common_loopback(struct hclge_dev *hdev, bool en, static int hclge_set_common_loopback(struct hclge_dev *hdev, bool en,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment