mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
net: hns3: Only update mac configuation when necessary
Currently only fiber port checks if it is necessay to set the mac through firmware when link is changed, this patch unify the checking to allow the copper port do the checking too. Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com> Signed-off-by: Peng Li <lipeng321@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
daaa852176
commit
2d03eacc0b
@ -2066,19 +2066,17 @@ static int hclge_init_msi(struct hclge_dev *hdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void hclge_check_speed_dup(struct hclge_dev *hdev, int duplex, int speed)
|
||||
static u8 hclge_check_speed_dup(u8 duplex, int speed)
|
||||
{
|
||||
struct hclge_mac *mac = &hdev->hw.mac;
|
||||
|
||||
if ((speed == HCLGE_MAC_SPEED_10M) || (speed == HCLGE_MAC_SPEED_100M))
|
||||
mac->duplex = (u8)duplex;
|
||||
else
|
||||
mac->duplex = HCLGE_MAC_FULL;
|
||||
if (!(speed == HCLGE_MAC_SPEED_10M || speed == HCLGE_MAC_SPEED_100M))
|
||||
duplex = HCLGE_MAC_FULL;
|
||||
|
||||
mac->speed = speed;
|
||||
return duplex;
|
||||
}
|
||||
|
||||
int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex)
|
||||
static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed,
|
||||
u8 duplex)
|
||||
{
|
||||
struct hclge_config_mac_speed_dup_cmd *req;
|
||||
struct hclge_desc desc;
|
||||
@ -2138,7 +2136,23 @@ int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex)
|
||||
return ret;
|
||||
}
|
||||
|
||||
hclge_check_speed_dup(hdev, duplex, speed);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex)
|
||||
{
|
||||
int ret;
|
||||
|
||||
duplex = hclge_check_speed_dup(duplex, speed);
|
||||
if (hdev->hw.mac.speed == speed && hdev->hw.mac.duplex == duplex)
|
||||
return 0;
|
||||
|
||||
ret = hclge_cfg_mac_speed_dup_hw(hdev, speed, duplex);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
hdev->hw.mac.speed = speed;
|
||||
hdev->hw.mac.duplex = duplex;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2259,7 +2273,9 @@ static int hclge_mac_init(struct hclge_dev *hdev)
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
ret = hclge_cfg_mac_speed_dup(hdev, hdev->hw.mac.speed, HCLGE_MAC_FULL);
|
||||
hdev->hw.mac.duplex = HCLGE_MAC_FULL;
|
||||
ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.speed,
|
||||
hdev->hw.mac.duplex);
|
||||
if (ret) {
|
||||
dev_err(&hdev->pdev->dev,
|
||||
"Config mac speed dup fail ret=%d\n", ret);
|
||||
@ -2415,13 +2431,11 @@ static int hclge_update_speed_duplex(struct hclge_dev *hdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if ((mac.speed != speed) || (mac.duplex != duplex)) {
|
||||
ret = hclge_cfg_mac_speed_dup(hdev, speed, duplex);
|
||||
if (ret) {
|
||||
dev_err(&hdev->pdev->dev,
|
||||
"mac speed/duplex config failed %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
ret = hclge_cfg_mac_speed_dup(hdev, speed, duplex);
|
||||
if (ret) {
|
||||
dev_err(&hdev->pdev->dev,
|
||||
"mac speed/duplex config failed %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user