提交 7103a561 编写于 作者: S shenjian 提交者: Xie XiuQi

net: hns3: configure user fec mode after reset

driver inclusion
category: bugfix
bugzilla: NA
CVE: NA

Previously, the user fec mode may be lost after reset, the firmware
always uses the default fec mode, which may cause link down if the
link partner is using the usr fec mod. This patch fixes it.
Signed-off-by: Nshenjian (K) <shenjian15@huawei.com>
Reviewed-by: Nlipeng <lipeng321@huawei.com>
Reviewed-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 a1dc15ff
......@@ -133,6 +133,7 @@ enum hnae3_fec_mode {
HNAE3_FEC_AUTO = 0,
HNAE3_FEC_BASER,
HNAE3_FEC_RS,
HNAE3_FEC_USER_DEF,
};
enum hnae3_reset_notify_type {
......
......@@ -687,7 +687,7 @@ static int hns3_check_ksettings_param(struct net_device *netdev,
}
if (ops->check_port_speed) {
ret = ops->check_port_speed(handle, speed);
ret = ops->check_port_speed(handle, cmd->base.speed);
if (ret) {
netdev_err(netdev, "unsupported speed\n");
return ret;
......
......@@ -2377,13 +2377,19 @@ static int hclge_set_fec(struct hnae3_handle *handle, u32 fec_mode)
struct hclge_vport *vport = hclge_get_vport(handle);
struct hclge_dev *hdev = vport->back;
struct hclge_mac *mac = &hdev->hw.mac;
int ret;
if (fec_mode && !(mac->fec_ability & fec_mode)) {
dev_err(&hdev->pdev->dev, "unsupported fec mode\n");
return -EINVAL;
}
return hclge_set_fec_hw(hdev, fec_mode);
ret = hclge_set_fec_hw(hdev, fec_mode);
if (ret)
return ret;
mac->user_fec_mode = fec_mode | BIT(HNAE3_FEC_USER_DEF);
return 0;
}
static void hclge_get_fec(struct hnae3_handle *handle, u8 *fec_ability,
......@@ -2416,6 +2422,15 @@ static int hclge_mac_init(struct hclge_dev *hdev)
mac->link = 0;
if (mac->user_fec_mode & BIT(HNAE3_FEC_USER_DEF)) {
ret = hclge_set_fec_hw(hdev, mac->user_fec_mode);
if (ret) {
dev_err(&hdev->pdev->dev,
"Fec mode init fail, ret = %d\n", ret);
return ret;
}
}
ret = hclge_set_mac_mtu(hdev, hdev->mps);
if (ret) {
dev_err(&hdev->pdev->dev, "set mtu failed ret=%d\n", ret);
......
......@@ -201,7 +201,8 @@ struct hclge_mac {
u32 speed;
u32 speed_ability; /* speed ability supported by current media */
u32 module_type; /* sub media type, e.g. kr/cr/sr/lr */
u32 fec_mode;
u32 fec_mode; /* active fec mode */
u32 user_fec_mode;
u32 fec_ability;
int link; /* store the link status of mac & phy (if phy exit) */
struct phy_device *phydev;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册