net: hns3: modify how pause options is displayed
Currently, the pause options of HNS3 shown like this: "RX/TX" is always the same with "RX negotiated/TX negotiated". Because of the driver covered the value of "RX/TX" with the value of "RX negotiated/TX negotiated" after adjust link. This patch records the pause configurations of the user, and never covered them in adjust link. Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> Reviewed-by: Yunsheng Lin <linyunsheng@huawei.com> Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7ac243f99d
commit
aacbe27e82
@ -8207,30 +8207,17 @@ static int hclge_cfg_pauseparam(struct hclge_dev *hdev, u32 rx_en, u32 tx_en)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (rx_en && tx_en)
|
|
||||||
hdev->fc_mode_last_time = HCLGE_FC_FULL;
|
|
||||||
else if (rx_en && !tx_en)
|
|
||||||
hdev->fc_mode_last_time = HCLGE_FC_RX_PAUSE;
|
|
||||||
else if (!rx_en && tx_en)
|
|
||||||
hdev->fc_mode_last_time = HCLGE_FC_TX_PAUSE;
|
|
||||||
else
|
|
||||||
hdev->fc_mode_last_time = HCLGE_FC_NONE;
|
|
||||||
|
|
||||||
if (hdev->tm_info.fc_mode == HCLGE_FC_PFC)
|
if (hdev->tm_info.fc_mode == HCLGE_FC_PFC)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ret = hclge_mac_pause_en_cfg(hdev, tx_en, rx_en);
|
ret = hclge_mac_pause_en_cfg(hdev, tx_en, rx_en);
|
||||||
if (ret) {
|
if (ret)
|
||||||
dev_err(&hdev->pdev->dev, "configure pauseparam error, ret = %d.\n",
|
dev_err(&hdev->pdev->dev,
|
||||||
ret);
|
"configure pauseparam error, ret = %d.\n", ret);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
hdev->tm_info.fc_mode = hdev->fc_mode_last_time;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int hclge_cfg_flowctrl(struct hclge_dev *hdev)
|
int hclge_cfg_flowctrl(struct hclge_dev *hdev)
|
||||||
{
|
{
|
||||||
struct phy_device *phydev = hdev->hw.mac.phydev;
|
struct phy_device *phydev = hdev->hw.mac.phydev;
|
||||||
@ -8293,6 +8280,21 @@ static void hclge_get_pauseparam(struct hnae3_handle *handle, u32 *auto_neg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void hclge_record_user_pauseparam(struct hclge_dev *hdev,
|
||||||
|
u32 rx_en, u32 tx_en)
|
||||||
|
{
|
||||||
|
if (rx_en && tx_en)
|
||||||
|
hdev->fc_mode_last_time = HCLGE_FC_FULL;
|
||||||
|
else if (rx_en && !tx_en)
|
||||||
|
hdev->fc_mode_last_time = HCLGE_FC_RX_PAUSE;
|
||||||
|
else if (!rx_en && tx_en)
|
||||||
|
hdev->fc_mode_last_time = HCLGE_FC_TX_PAUSE;
|
||||||
|
else
|
||||||
|
hdev->fc_mode_last_time = HCLGE_FC_NONE;
|
||||||
|
|
||||||
|
hdev->tm_info.fc_mode = hdev->fc_mode_last_time;
|
||||||
|
}
|
||||||
|
|
||||||
static int hclge_set_pauseparam(struct hnae3_handle *handle, u32 auto_neg,
|
static int hclge_set_pauseparam(struct hnae3_handle *handle, u32 auto_neg,
|
||||||
u32 rx_en, u32 tx_en)
|
u32 rx_en, u32 tx_en)
|
||||||
{
|
{
|
||||||
@ -8318,6 +8320,8 @@ static int hclge_set_pauseparam(struct hnae3_handle *handle, u32 auto_neg,
|
|||||||
|
|
||||||
hclge_set_flowctrl_adv(hdev, rx_en, tx_en);
|
hclge_set_flowctrl_adv(hdev, rx_en, tx_en);
|
||||||
|
|
||||||
|
hclge_record_user_pauseparam(hdev, rx_en, tx_en);
|
||||||
|
|
||||||
if (!auto_neg)
|
if (!auto_neg)
|
||||||
return hclge_cfg_pauseparam(hdev, rx_en, tx_en);
|
return hclge_cfg_pauseparam(hdev, rx_en, tx_en);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user