Skip to content

Commit 34dfdf2

Browse files
author
Paolo Abeni
committed
Merge branch 'there-are-some-bugfix-for-the-hns3-ethernet-driver'
Jijie Shao says: ==================== There are some bugfix for the HNS3 ethernet driver ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
2 parents 7965a7f + 7660833 commit 34dfdf2

File tree

5 files changed

+32
-14
lines changed

5 files changed

+32
-14
lines changed

drivers/net/ethernet/hisilicon/hns3/hns3_enet.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5724,6 +5724,9 @@ static int hns3_reset_notify_uninit_enet(struct hnae3_handle *handle)
57245724
struct net_device *netdev = handle->kinfo.netdev;
57255725
struct hns3_nic_priv *priv = netdev_priv(netdev);
57265726

5727+
if (!test_bit(HNS3_NIC_STATE_DOWN, &priv->state))
5728+
hns3_nic_net_stop(netdev);
5729+
57275730
if (!test_and_clear_bit(HNS3_NIC_STATE_INITED, &priv->state)) {
57285731
netdev_warn(netdev, "already uninitialized\n");
57295732
return 0;

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,8 +1598,7 @@ static void hclge_query_reg_info_of_ssu(struct hclge_dev *hdev)
15981598
{
15991599
u32 loop_para[HCLGE_MOD_MSG_PARA_ARRAY_MAX_SIZE] = {0};
16001600
struct hclge_mod_reg_common_msg msg;
1601-
u8 i, j, num;
1602-
u32 loop_time;
1601+
u8 i, j, num, loop_time;
16031602

16041603
num = ARRAY_SIZE(hclge_ssu_reg_common_msg);
16051604
for (i = 0; i < num; i++) {
@@ -1609,7 +1608,8 @@ static void hclge_query_reg_info_of_ssu(struct hclge_dev *hdev)
16091608
loop_time = 1;
16101609
loop_para[0] = 0;
16111610
if (msg.need_para) {
1612-
loop_time = hdev->ae_dev->dev_specs.tnl_num;
1611+
loop_time = min(hdev->ae_dev->dev_specs.tnl_num,
1612+
HCLGE_MOD_MSG_PARA_ARRAY_MAX_SIZE);
16131613
for (j = 0; j < loop_time; j++)
16141614
loop_para[j] = j + 1;
16151615
}

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2653,8 +2653,17 @@ static int hclge_cfg_mac_speed_dup_h(struct hnae3_handle *handle, int speed,
26532653
{
26542654
struct hclge_vport *vport = hclge_get_vport(handle);
26552655
struct hclge_dev *hdev = vport->back;
2656+
int ret;
2657+
2658+
ret = hclge_cfg_mac_speed_dup(hdev, speed, duplex, lane_num);
2659+
2660+
if (ret)
2661+
return ret;
26562662

2657-
return hclge_cfg_mac_speed_dup(hdev, speed, duplex, lane_num);
2663+
hdev->hw.mac.req_speed = speed;
2664+
hdev->hw.mac.req_duplex = duplex;
2665+
2666+
return 0;
26582667
}
26592668

26602669
static int hclge_set_autoneg_en(struct hclge_dev *hdev, bool enable)
@@ -2956,17 +2965,20 @@ static int hclge_mac_init(struct hclge_dev *hdev)
29562965
if (!test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
29572966
hdev->hw.mac.duplex = HCLGE_MAC_FULL;
29582967

2959-
ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.speed,
2960-
hdev->hw.mac.duplex, hdev->hw.mac.lane_num);
2961-
if (ret)
2962-
return ret;
2963-
29642968
if (hdev->hw.mac.support_autoneg) {
29652969
ret = hclge_set_autoneg_en(hdev, hdev->hw.mac.autoneg);
29662970
if (ret)
29672971
return ret;
29682972
}
29692973

2974+
if (!hdev->hw.mac.autoneg) {
2975+
ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.req_speed,
2976+
hdev->hw.mac.req_duplex,
2977+
hdev->hw.mac.lane_num);
2978+
if (ret)
2979+
return ret;
2980+
}
2981+
29702982
mac->link = 0;
29712983

29722984
if (mac->user_fec_mode & BIT(HNAE3_FEC_USER_DEF)) {
@@ -11444,7 +11456,7 @@ static void hclge_pci_uninit(struct hclge_dev *hdev)
1144411456

1144511457
pcim_iounmap(pdev, hdev->hw.hw.io_base);
1144611458
pci_free_irq_vectors(pdev);
11447-
pci_release_mem_regions(pdev);
11459+
pci_release_regions(pdev);
1144811460
pci_disable_device(pdev);
1144911461
}
1145011462

@@ -11516,8 +11528,8 @@ static void hclge_reset_done(struct hnae3_ae_dev *ae_dev)
1151611528
dev_err(&hdev->pdev->dev, "fail to rebuild, ret=%d\n", ret);
1151711529

1151811530
hdev->reset_type = HNAE3_NONE_RESET;
11519-
clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
11520-
up(&hdev->reset_sem);
11531+
if (test_and_clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
11532+
up(&hdev->reset_sem);
1152111533
}
1152211534

1152311535
static void hclge_clear_resetting_state(struct hclge_dev *hdev)

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,9 @@ static void hclge_mac_adjust_link(struct net_device *netdev)
191191
if (ret)
192192
netdev_err(netdev, "failed to adjust link.\n");
193193

194+
hdev->hw.mac.req_speed = (u32)speed;
195+
hdev->hw.mac.req_duplex = (u8)duplex;
196+
194197
ret = hclge_cfg_flowctrl(hdev);
195198
if (ret)
196199
netdev_err(netdev, "failed to configure flow control.\n");

drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1747,8 +1747,8 @@ static void hclgevf_reset_done(struct hnae3_ae_dev *ae_dev)
17471747
ret);
17481748

17491749
hdev->reset_type = HNAE3_NONE_RESET;
1750-
clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state);
1751-
up(&hdev->reset_sem);
1750+
if (test_and_clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state))
1751+
up(&hdev->reset_sem);
17521752
}
17531753

17541754
static u32 hclgevf_get_fw_version(struct hnae3_handle *handle)

0 commit comments

Comments
 (0)