1
There are some bugfix for the HNS3 ethernet driver
1
There are some bugfix for the HNS3 ethernet driver
2
2
3
Hao Lan (1):
3
Hao Lan (2):
4
net: hns3: fix spelling mistake "reg_um" -> "reg_num"
4
net: hns3: add new 200G link modes for hisilicon device
5
net: hns3: Disable SerDes serial loopback for HiLink H60
5
6
6
Jian Shen (1):
7
Jian Shen (1):
7
net: hns3: store rx VLAN tag offload state for VF
8
net: hns3: add checking for vf id of mailbox
9
10
Jie Wang (1):
11
net: hns3: fix port duplex configure error in IMP reset
12
13
Jijie Shao (2):
14
net: hns3: fix wrong judgment condition issue
15
net: hns3: fix delete tc fail issue
16
17
Peiyang Wang (1):
18
net: hns3: fix reset timeout under full functions and queues
8
19
9
Yonglong Liu (1):
20
Yonglong Liu (1):
10
net: hns3: fix a use of uninitialized variable problem
21
net: hns3: fix kernel crash when 1588 is received on HIP08 devices
11
22
12
.../hisilicon/hns3/hns3pf/hclge_main.c | 2 +-
23
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 2 +
13
.../hisilicon/hns3/hns3vf/hclgevf_main.c | 25 ++++++++++++-----
24
.../hns3/hns3_common/hclge_comm_cmd.c | 2 +-
14
.../hisilicon/hns3/hns3vf/hclgevf_main.h | 3 ++-
25
.../hns3/hns3_common/hclge_comm_cmd.h | 2 +-
15
.../hisilicon/hns3/hns3vf/hclgevf_regs.c | 27 ++++++++++---------
26
.../net/ethernet/hisilicon/hns3/hns3_dcbnl.c | 2 +-
16
4 files changed, 36 insertions(+), 21 deletions(-)
27
.../ethernet/hisilicon/hns3/hns3_debugfs.c | 2 +
28
.../hisilicon/hns3/hns3pf/hclge_cmd.h | 3 +-
29
.../hisilicon/hns3/hns3pf/hclge_dcb.c | 2 +
30
.../hisilicon/hns3/hns3pf/hclge_main.c | 44 +++++++++++++------
31
.../hisilicon/hns3/hns3pf/hclge_main.h | 11 ++++-
32
.../hisilicon/hns3/hns3pf/hclge_mbx.c | 7 +--
33
.../hisilicon/hns3/hns3pf/hclge_ptp.c | 2 +-
34
.../ethernet/hisilicon/hns3/hns3pf/hclge_tm.c | 16 +++++++
35
.../ethernet/hisilicon/hns3/hns3pf/hclge_tm.h | 1 +
36
13 files changed, 74 insertions(+), 22 deletions(-)
17
37
18
--
38
--
19
2.33.0
39
2.30.0
diff view generated by jsdifflib
New patch
1
In hns3_dcbnl_ieee_delapp, should check ieee_delapp not ieee_setapp.
2
This path fix the wrong judgment.
1
3
4
Fixes: 0ba22bcb222d ("net: hns3: add support config dscp map to tc")
5
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
6
---
7
drivers/net/ethernet/hisilicon/hns3/hns3_dcbnl.c | 2 +-
8
1 file changed, 1 insertion(+), 1 deletion(-)
9
10
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_dcbnl.c b/drivers/net/ethernet/hisilicon/hns3/hns3_dcbnl.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_dcbnl.c
13
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_dcbnl.c
14
@@ -XXX,XX +XXX,XX @@ static int hns3_dcbnl_ieee_delapp(struct net_device *ndev, struct dcb_app *app)
15
    if (hns3_nic_resetting(ndev))
16
        return -EBUSY;
17
18
-    if (h->kinfo.dcb_ops->ieee_setapp)
19
+    if (h->kinfo.dcb_ops->ieee_delapp)
20
        return h->kinfo.dcb_ops->ieee_delapp(h, app);
21
22
    return -EOPNOTSUPP;
23
--
24
2.30.0
diff view generated by jsdifflib
New patch
1
From: Hao Lan <lanhao@huawei.com>
1
2
3
The hisilicon device now supports a new 200G link interface,
4
which query from firmware in a new bit. Therefore,
5
the HCLGE_SUPPORT_200G_R4_BIT capability bit has been added.
6
The HCLGE_SUPPORT_200G_BIT has been renamed as
7
HCLGE_SUPPORT_200G_R4_EXT_BIT, and the firmware has
8
extended support for this mode.
9
10
Fixes: ae6f010cb1a7 ("net: hns3: add support for 200G device")
11
Signed-off-by: Hao Lan <lanhao@huawei.com>
12
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
13
---
14
.../hisilicon/hns3/hns3pf/hclge_main.c | 28 ++++++++++++-------
15
.../hisilicon/hns3/hns3pf/hclge_main.h | 5 +++-
16
2 files changed, 22 insertions(+), 11 deletions(-)
17
18
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
19
index XXXXXXX..XXXXXXX 100644
20
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
21
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
22
@@ -XXX,XX +XXX,XX @@ static const struct hclge_speed_bit_map speed_bit_map[] = {
23
    {HCLGE_MAC_SPEED_40G, HCLGE_SUPPORT_40G_BIT},
24
    {HCLGE_MAC_SPEED_50G, HCLGE_SUPPORT_50G_BITS},
25
    {HCLGE_MAC_SPEED_100G, HCLGE_SUPPORT_100G_BITS},
26
-    {HCLGE_MAC_SPEED_200G, HCLGE_SUPPORT_200G_BIT},
27
+    {HCLGE_MAC_SPEED_200G, HCLGE_SUPPORT_200G_BITS},
28
};
29
30
static int hclge_get_speed_bit(u32 speed, u32 *speed_bit)
31
@@ -XXX,XX +XXX,XX @@ static void hclge_update_fec_support(struct hclge_mac *mac)
32
                 mac->supported);
33
}
34
35
-static const struct hclge_link_mode_bmap hclge_sr_link_mode_bmap[8] = {
36
+static const struct hclge_link_mode_bmap hclge_sr_link_mode_bmap[] = {
37
    {HCLGE_SUPPORT_10G_BIT, ETHTOOL_LINK_MODE_10000baseSR_Full_BIT},
38
    {HCLGE_SUPPORT_25G_BIT, ETHTOOL_LINK_MODE_25000baseSR_Full_BIT},
39
    {HCLGE_SUPPORT_40G_BIT, ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT},
40
@@ -XXX,XX +XXX,XX @@ static const struct hclge_link_mode_bmap hclge_sr_link_mode_bmap[8] = {
41
    {HCLGE_SUPPORT_50G_R1_BIT, ETHTOOL_LINK_MODE_50000baseSR_Full_BIT},
42
    {HCLGE_SUPPORT_100G_R4_BIT, ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT},
43
    {HCLGE_SUPPORT_100G_R2_BIT, ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT},
44
-    {HCLGE_SUPPORT_200G_BIT, ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT},
45
+    {HCLGE_SUPPORT_200G_R4_EXT_BIT,
46
+     ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT},
47
+    {HCLGE_SUPPORT_200G_R4_BIT, ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT},
48
};
49
50
-static const struct hclge_link_mode_bmap hclge_lr_link_mode_bmap[6] = {
51
+static const struct hclge_link_mode_bmap hclge_lr_link_mode_bmap[] = {
52
    {HCLGE_SUPPORT_10G_BIT, ETHTOOL_LINK_MODE_10000baseLR_Full_BIT},
53
    {HCLGE_SUPPORT_40G_BIT, ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT},
54
    {HCLGE_SUPPORT_50G_R1_BIT, ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT},
55
@@ -XXX,XX +XXX,XX @@ static const struct hclge_link_mode_bmap hclge_lr_link_mode_bmap[6] = {
56
     ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT},
57
    {HCLGE_SUPPORT_100G_R2_BIT,
58
     ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT},
59
-    {HCLGE_SUPPORT_200G_BIT,
60
+    {HCLGE_SUPPORT_200G_R4_EXT_BIT,
61
+     ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT},
62
+    {HCLGE_SUPPORT_200G_R4_BIT,
63
     ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT},
64
};
65
66
-static const struct hclge_link_mode_bmap hclge_cr_link_mode_bmap[8] = {
67
+static const struct hclge_link_mode_bmap hclge_cr_link_mode_bmap[] = {
68
    {HCLGE_SUPPORT_10G_BIT, ETHTOOL_LINK_MODE_10000baseCR_Full_BIT},
69
    {HCLGE_SUPPORT_25G_BIT, ETHTOOL_LINK_MODE_25000baseCR_Full_BIT},
70
    {HCLGE_SUPPORT_40G_BIT, ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT},
71
@@ -XXX,XX +XXX,XX @@ static const struct hclge_link_mode_bmap hclge_cr_link_mode_bmap[8] = {
72
    {HCLGE_SUPPORT_50G_R1_BIT, ETHTOOL_LINK_MODE_50000baseCR_Full_BIT},
73
    {HCLGE_SUPPORT_100G_R4_BIT, ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT},
74
    {HCLGE_SUPPORT_100G_R2_BIT, ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT},
75
-    {HCLGE_SUPPORT_200G_BIT, ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT},
76
+    {HCLGE_SUPPORT_200G_R4_EXT_BIT,
77
+     ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT},
78
+    {HCLGE_SUPPORT_200G_R4_BIT, ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT},
79
};
80
81
-static const struct hclge_link_mode_bmap hclge_kr_link_mode_bmap[9] = {
82
+static const struct hclge_link_mode_bmap hclge_kr_link_mode_bmap[] = {
83
    {HCLGE_SUPPORT_1G_BIT, ETHTOOL_LINK_MODE_1000baseKX_Full_BIT},
84
    {HCLGE_SUPPORT_10G_BIT, ETHTOOL_LINK_MODE_10000baseKR_Full_BIT},
85
    {HCLGE_SUPPORT_25G_BIT, ETHTOOL_LINK_MODE_25000baseKR_Full_BIT},
86
@@ -XXX,XX +XXX,XX @@ static const struct hclge_link_mode_bmap hclge_kr_link_mode_bmap[9] = {
87
    {HCLGE_SUPPORT_50G_R1_BIT, ETHTOOL_LINK_MODE_50000baseKR_Full_BIT},
88
    {HCLGE_SUPPORT_100G_R4_BIT, ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT},
89
    {HCLGE_SUPPORT_100G_R2_BIT, ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT},
90
-    {HCLGE_SUPPORT_200G_BIT, ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT},
91
+    {HCLGE_SUPPORT_200G_R4_EXT_BIT,
92
+     ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT},
93
+    {HCLGE_SUPPORT_200G_R4_BIT, ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT},
94
};
95
96
static void hclge_convert_setting_sr(u16 speed_ability,
97
@@ -XXX,XX +XXX,XX @@ static void hclge_parse_link_mode(struct hclge_dev *hdev, u16 speed_ability)
98
99
static u32 hclge_get_max_speed(u16 speed_ability)
100
{
101
-    if (speed_ability & HCLGE_SUPPORT_200G_BIT)
102
+    if (speed_ability & HCLGE_SUPPORT_200G_BITS)
103
        return HCLGE_MAC_SPEED_200G;
104
105
    if (speed_ability & HCLGE_SUPPORT_100G_BITS)
106
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
107
index XXXXXXX..XXXXXXX 100644
108
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
109
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
110
@@ -XXX,XX +XXX,XX @@ enum HLCGE_PORT_TYPE {
111
#define HCLGE_SUPPORT_40G_BIT        BIT(5)
112
#define HCLGE_SUPPORT_100M_BIT        BIT(6)
113
#define HCLGE_SUPPORT_10M_BIT        BIT(7)
114
-#define HCLGE_SUPPORT_200G_BIT        BIT(8)
115
+#define HCLGE_SUPPORT_200G_R4_EXT_BIT    BIT(8)
116
#define HCLGE_SUPPORT_50G_R1_BIT    BIT(9)
117
#define HCLGE_SUPPORT_100G_R2_BIT    BIT(10)
118
+#define HCLGE_SUPPORT_200G_R4_BIT    BIT(11)
119
120
#define HCLGE_SUPPORT_GE \
121
    (HCLGE_SUPPORT_1G_BIT | HCLGE_SUPPORT_100M_BIT | HCLGE_SUPPORT_10M_BIT)
122
@@ -XXX,XX +XXX,XX @@ enum HLCGE_PORT_TYPE {
123
    (HCLGE_SUPPORT_50G_R2_BIT | HCLGE_SUPPORT_50G_R1_BIT)
124
#define HCLGE_SUPPORT_100G_BITS \
125
    (HCLGE_SUPPORT_100G_R4_BIT | HCLGE_SUPPORT_100G_R2_BIT)
126
+#define HCLGE_SUPPORT_200G_BITS \
127
+    (HCLGE_SUPPORT_200G_R4_EXT_BIT | HCLGE_SUPPORT_200G_R4_BIT)
128
129
enum HCLGE_DEV_STATE {
130
    HCLGE_STATE_REINITING,
131
--
132
2.30.0
diff view generated by jsdifflib
1
From: Hao Lan <lanhao@huawei.com>
1
From: Hao Lan <lanhao@huawei.com>
2
2
3
There are spelling mistakes in hclgevf_get_regs. Fix them.
3
When the hilink version is H60, the serdes serial loopback test is not
4
supported. This patch add hilink version detection. When the version
5
is H60, the serdes serial loopback test will be disable.
4
6
5
Signed-off-by: Hao Lan <lanhao@huawei.com>
7
Signed-off-by: Hao Lan <lanhao@huawei.com>
6
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
8
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
7
---
9
---
8
.../hisilicon/hns3/hns3vf/hclgevf_regs.c | 27 ++++++++++---------
10
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 1 +
9
1 file changed, 14 insertions(+), 13 deletions(-)
11
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 2 ++
12
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h | 3 ++-
13
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 9 +++++++--
14
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h | 6 ++++++
15
5 files changed, 18 insertions(+), 3 deletions(-)
10
16
11
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c
17
diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
12
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
13
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c
19
--- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
14
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_regs.c
20
+++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
15
@@ -XXX,XX +XXX,XX @@ void hclgevf_get_regs(struct hnae3_handle *handle, u32 *version,
21
@@ -XXX,XX +XXX,XX @@ struct hnae3_dev_specs {
16
22
    u16 mc_mac_size;
17
    struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
23
    u32 mac_stats_num;
18
    struct hnae3_queue *tqp;
24
    u8 tnl_num;
19
-    int i, j, reg_um;
25
+    u8 hilink_version;
20
+    int i, j, reg_num;
26
};
21
    u32 *reg = data;
27
22
28
struct hnae3_client_ops {
23
    *version = hdev->fw_version;
29
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
24
    reg += hclgevf_reg_get_header(reg);
30
index XXXXXXX..XXXXXXX 100644
25
31
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
26
    /* fetching per-VF registers values from VF PCIe register space */
32
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
27
-    reg_um = ARRAY_SIZE(cmdq_reg_addr_list);
33
@@ -XXX,XX +XXX,XX @@ hns3_dbg_dev_specs(struct hnae3_handle *h, char *buf, int len, int *pos)
28
-    reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_CMDQ, reg_um, reg);
34
    *pos += scnprintf(buf + *pos, len - *pos,
29
-    for (i = 0; i < reg_um; i++)
35
             "TX timeout threshold: %d seconds\n",
30
+    reg_num = ARRAY_SIZE(cmdq_reg_addr_list);
36
             dev->watchdog_timeo / HZ);
31
+    reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_CMDQ, reg_num, reg);
37
+    *pos += scnprintf(buf + *pos, len - *pos, "Hilink Version: %u\n",
32
+    for (i = 0; i < reg_num; i++)
38
+             dev_specs->hilink_version);
33
        *reg++ = hclgevf_read_dev(&hdev->hw, cmdq_reg_addr_list[i]);
39
}
34
40
35
-    reg_um = ARRAY_SIZE(common_reg_addr_list);
41
static int hns3_dbg_dev_info(struct hnae3_handle *h, char *buf, int len)
36
-    reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_COMMON, reg_um, reg);
42
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h
37
-    for (i = 0; i < reg_um; i++)
43
index XXXXXXX..XXXXXXX 100644
38
+    reg_num = ARRAY_SIZE(common_reg_addr_list);
44
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h
39
+    reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_COMMON, reg_num, reg);
45
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h
40
+    for (i = 0; i < reg_num; i++)
46
@@ -XXX,XX +XXX,XX @@ struct hclge_dev_specs_1_cmd {
41
        *reg++ = hclgevf_read_dev(&hdev->hw, common_reg_addr_list[i]);
47
    __le16 mc_mac_size;
42
48
    u8 rsv1[6];
43
-    reg_um = ARRAY_SIZE(ring_reg_addr_list);
49
    u8 tnl_num;
44
+    reg_num = ARRAY_SIZE(ring_reg_addr_list);
50
-    u8 rsv2[5];
45
    for (j = 0; j < hdev->num_tqps; j++) {
51
+    u8 hilink_version;
46
-        reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_RING, reg_um, reg);
52
+    u8 rsv2[4];
47
+        reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_RING, reg_num, reg);
53
};
48
        tqp = &hdev->htqp[j].q;
54
49
-        for (i = 0; i < reg_um; i++)
55
/* mac speed type defined in firmware command */
50
+        for (i = 0; i < reg_num; i++)
56
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
51
            *reg++ = readl_relaxed(tqp->io_base -
57
index XXXXXXX..XXXXXXX 100644
52
                     HCLGEVF_TQP_REG_OFFSET +
58
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
53
                     ring_reg_addr_list[i]);
59
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
54
    }
60
@@ -XXX,XX +XXX,XX @@ static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset)
55
61
            handle->flags |= HNAE3_SUPPORT_APP_LOOPBACK;
56
-    reg_um = ARRAY_SIZE(tqp_intr_reg_addr_list);
62
        }
57
+    reg_num = ARRAY_SIZE(tqp_intr_reg_addr_list);
63
58
    for (j = 0; j < hdev->num_msi_used - 1; j++) {
64
-        count += 1;
59
-        reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_TQP_INTR, reg_um, reg);
65
-        handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK;
60
-        for (i = 0; i < reg_um; i++)
66
+        if (hdev->ae_dev->dev_specs.hilink_version !=
61
+        reg += hclgevf_reg_get_tlv(HCLGEVF_REG_TAG_TQP_INTR,
67
+         HCLGE_HILINK_H60) {
62
+                     reg_num, reg);
68
+            count += 1;
63
+        for (i = 0; i < reg_num; i++)
69
+            handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK;
64
            *reg++ = hclgevf_read_dev(&hdev->hw,
70
+        }
65
                         tqp_intr_reg_addr_list[i] +
71
+
66
                         HCLGEVF_RING_INT_REG_OFFSET * j);
72
        count += 1;
73
        handle->flags |= HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK;
74
        count += 1;
75
@@ -XXX,XX +XXX,XX @@ static void hclge_parse_dev_specs(struct hclge_dev *hdev,
76
    ae_dev->dev_specs.umv_size = le16_to_cpu(req1->umv_size);
77
    ae_dev->dev_specs.mc_mac_size = le16_to_cpu(req1->mc_mac_size);
78
    ae_dev->dev_specs.tnl_num = req1->tnl_num;
79
+    ae_dev->dev_specs.hilink_version = req1->hilink_version;
80
}
81
82
static void hclge_check_dev_specs(struct hclge_dev *hdev)
83
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
84
index XXXXXXX..XXXXXXX 100644
85
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
86
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
87
@@ -XXX,XX +XXX,XX @@ enum HCLGE_MAC_DUPLEX {
88
    HCLGE_MAC_FULL
89
};
90
91
+/* hilink version */
92
+enum hclge_hilink_version {
93
+    HCLGE_HILINK_H32 = 0,
94
+    HCLGE_HILINK_H60 = 1,
95
+};
96
+
97
#define QUERY_SFP_SPEED        0
98
#define QUERY_ACTIVE_SPEED    1
99
67
--
100
--
68
2.33.0
101
2.30.0
diff view generated by jsdifflib
New patch
1
From: Yonglong Liu <liuyonglong@huawei.com>
1
2
3
The HIP08 devices does not register the ptp devices, so the
4
hdev->ptp is NULL, but the hardware can receive 1588 messages,
5
and set the HNS3_RXD_TS_VLD_B bit, so, if match this case, the
6
access of hdev->ptp->flags will cause a kernel crash:
7
8
[ 5888.946472] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000018
9
[ 5888.946475] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000018
10
...
11
[ 5889.266118] pc : hclge_ptp_get_rx_hwts+0x40/0x170 [hclge]
12
[ 5889.272612] lr : hclge_ptp_get_rx_hwts+0x34/0x170 [hclge]
13
[ 5889.279101] sp : ffff800012c3bc50
14
[ 5889.283516] x29: ffff800012c3bc50 x28: ffff2040002be040
15
[ 5889.289927] x27: ffff800009116484 x26: 0000000080007500
16
[ 5889.296333] x25: 0000000000000000 x24: ffff204001c6f000
17
[ 5889.302738] x23: ffff204144f53c00 x22: 0000000000000000
18
[ 5889.309134] x21: 0000000000000000 x20: ffff204004220080
19
[ 5889.315520] x19: ffff204144f53c00 x18: 0000000000000000
20
[ 5889.321897] x17: 0000000000000000 x16: 0000000000000000
21
[ 5889.328263] x15: 0000004000140ec8 x14: 0000000000000000
22
[ 5889.334617] x13: 0000000000000000 x12: 00000000010011df
23
[ 5889.340965] x11: bbfeff4d22000000 x10: 0000000000000000
24
[ 5889.347303] x9 : ffff800009402124 x8 : 0200f78811dfbb4d
25
[ 5889.353637] x7 : 2200000000191b01 x6 : ffff208002a7d480
26
[ 5889.359959] x5 : 0000000000000000 x4 : 0000000000000000
27
[ 5889.366271] x3 : 0000000000000000 x2 : 0000000000000000
28
[ 5889.372567] x1 : 0000000000000000 x0 : ffff20400095c080
29
[ 5889.378857] Call trace:
30
[ 5889.382285] hclge_ptp_get_rx_hwts+0x40/0x170 [hclge]
31
[ 5889.388304] hns3_handle_bdinfo+0x324/0x410 [hns3]
32
[ 5889.394055] hns3_handle_rx_bd+0x60/0x150 [hns3]
33
[ 5889.399624] hns3_clean_rx_ring+0x84/0x170 [hns3]
34
[ 5889.405270] hns3_nic_common_poll+0xa8/0x220 [hns3]
35
[ 5889.411084] napi_poll+0xcc/0x264
36
[ 5889.415329] net_rx_action+0xd4/0x21c
37
[ 5889.419911] __do_softirq+0x130/0x358
38
[ 5889.424484] irq_exit+0x134/0x154
39
[ 5889.428700] __handle_domain_irq+0x88/0xf0
40
[ 5889.433684] gic_handle_irq+0x78/0x2c0
41
[ 5889.438319] el1_irq+0xb8/0x140
42
[ 5889.442354] arch_cpu_idle+0x18/0x40
43
[ 5889.446816] default_idle_call+0x5c/0x1c0
44
[ 5889.451714] cpuidle_idle_call+0x174/0x1b0
45
[ 5889.456692] do_idle+0xc8/0x160
46
[ 5889.460717] cpu_startup_entry+0x30/0xfc
47
[ 5889.465523] secondary_start_kernel+0x158/0x1ec
48
[ 5889.470936] Code: 97ffab78 f9411c14 91408294 f9457284 (f9400c80)
49
[ 5889.477950] SMP: stopping secondary CPUs
50
[ 5890.514626] SMP: failed to stop secondary CPUs 0-69,71-95
51
[ 5890.522951] Starting crashdump kernel...
52
53
Fixes: 0bf5eb788512 ("net: hns3: add support for PTP")
54
Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
55
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
56
---
57
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c | 2 +-
58
1 file changed, 1 insertion(+), 1 deletion(-)
59
60
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c
61
index XXXXXXX..XXXXXXX 100644
62
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c
63
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c
64
@@ -XXX,XX +XXX,XX @@ void hclge_ptp_get_rx_hwts(struct hnae3_handle *handle, struct sk_buff *skb,
65
    u64 ns = nsec;
66
    u32 sec_h;
67
68
-    if (!test_bit(HCLGE_PTP_FLAG_RX_EN, &hdev->ptp->flags))
69
+    if (!hdev->ptp || !test_bit(HCLGE_PTP_FLAG_RX_EN, &hdev->ptp->flags))
70
        return;
71
72
    /* Since the BD does not have enough space for the higher 16 bits of
73
--
74
2.30.0
diff view generated by jsdifflib
New patch
1
When the tc is removed during reset, hns3 driver will return a errcode.
2
But kernel ignores this errcode, As a result,
3
the driver status is inconsistent with the kernel status.
1
4
5
This patch retains the deletion status when the deletion fails
6
and continues to delete after the reset to ensure that
7
the status of the driver is consistent with that of kernel.
8
9
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
10
---
11
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 1 +
12
.../ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c | 2 ++
13
.../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 2 ++
14
.../ethernet/hisilicon/hns3/hns3pf/hclge_tm.c | 16 ++++++++++++++++
15
.../ethernet/hisilicon/hns3/hns3pf/hclge_tm.h | 1 +
16
5 files changed, 22 insertions(+)
17
18
diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
19
index XXXXXXX..XXXXXXX 100644
20
--- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
21
+++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
22
@@ -XXX,XX +XXX,XX @@ struct hnae3_tc_info {
23
    u8 max_tc; /* Total number of TCs */
24
    u8 num_tc; /* Total number of enabled TCs */
25
    bool mqprio_active;
26
+    bool mqprio_destroy;
27
    bool dcb_ets_active;
28
};
29
30
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
31
index XXXXXXX..XXXXXXX 100644
32
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
33
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
34
@@ -XXX,XX +XXX,XX @@ static int hclge_setup_tc(struct hnae3_handle *h,
35
        return ret;
36
    }
37
38
+    kinfo->tc_info.mqprio_destroy = !tc;
39
+
40
    ret = hclge_notify_down_uinit(hdev);
41
    if (ret)
42
        return ret;
43
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
44
index XXXXXXX..XXXXXXX 100644
45
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
46
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
47
@@ -XXX,XX +XXX,XX @@ static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev)
48
        return ret;
49
    }
50
51
+    hclge_reset_tc_config(hdev);
52
+
53
    ret = hclge_tm_init_hw(hdev, true);
54
    if (ret) {
55
        dev_err(&pdev->dev, "tm init hw fail, ret =%d\n", ret);
56
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
57
index XXXXXXX..XXXXXXX 100644
58
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
59
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
60
@@ -XXX,XX +XXX,XX @@ int hclge_tm_flush_cfg(struct hclge_dev *hdev, bool enable)
61
62
    return ret;
63
}
64
+
65
+void hclge_reset_tc_config(struct hclge_dev *hdev)
66
+{
67
+    struct hclge_vport *vport = &hdev->vport[0];
68
+    struct hnae3_knic_private_info *kinfo;
69
+
70
+    kinfo = &vport->nic.kinfo;
71
+
72
+    if (!kinfo->tc_info.mqprio_destroy)
73
+        return;
74
+
75
+    /* clear tc info, including mqprio_destroy and mqprio_active */
76
+    memset(&kinfo->tc_info, 0, sizeof(kinfo->tc_info));
77
+    hclge_tm_schd_info_update(hdev, 0);
78
+    hclge_comm_rss_indir_init_cfg(hdev->ae_dev, &hdev->rss_cfg);
79
+}
80
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h
81
index XXXXXXX..XXXXXXX 100644
82
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h
83
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h
84
@@ -XXX,XX +XXX,XX @@ int hclge_tm_get_port_shaper(struct hclge_dev *hdev,
85
int hclge_up_to_tc_map(struct hclge_dev *hdev);
86
int hclge_dscp_to_tc_map(struct hclge_dev *hdev);
87
int hclge_tm_flush_cfg(struct hclge_dev *hdev, bool enable);
88
+void hclge_reset_tc_config(struct hclge_dev *hdev);
89
#endif
90
--
91
2.30.0
diff view generated by jsdifflib
New patch
1
From: Peiyang Wang <wangpeiyang1@huawei.com>
1
2
3
The cmdq reset command times out when all VFs are enabled and the queue is
4
full. The hardware processing time exceeds the timeout set by the driver.
5
In order to avoid the above extreme situations, the driver extends the
6
reset timeout to 1 second.
7
8
Signed-off-by: Peiyang Wang <wangpeiyang1@huawei.com>
9
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
10
---
11
.../net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.c | 2 +-
12
.../net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h | 2 +-
13
2 files changed, 2 insertions(+), 2 deletions(-)
14
15
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.c b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.c
16
index XXXXXXX..XXXXXXX 100644
17
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.c
18
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.c
19
@@ -XXX,XX +XXX,XX @@ static int hclge_comm_cmd_csq_done(struct hclge_comm_hw *hw)
20
static u32 hclge_get_cmdq_tx_timeout(u16 opcode, u32 tx_timeout)
21
{
22
    static const struct hclge_cmdq_tx_timeout_map cmdq_tx_timeout_map[] = {
23
-        {HCLGE_OPC_CFG_RST_TRIGGER, HCLGE_COMM_CMDQ_TX_TIMEOUT_500MS},
24
+        {HCLGE_OPC_CFG_RST_TRIGGER, HCLGE_COMM_CMDQ_CFG_RST_TIMEOUT},
25
    };
26
    u32 i;
27
28
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h
29
index XXXXXXX..XXXXXXX 100644
30
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h
31
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h
32
@@ -XXX,XX +XXX,XX @@
33
#define HCLGE_COMM_NIC_CMQ_DESC_NUM_S        3
34
#define HCLGE_COMM_NIC_CMQ_DESC_NUM        1024
35
#define HCLGE_COMM_CMDQ_TX_TIMEOUT_DEFAULT    30000
36
-#define HCLGE_COMM_CMDQ_TX_TIMEOUT_500MS    500000
37
+#define HCLGE_COMM_CMDQ_CFG_RST_TIMEOUT        1000000
38
39
enum hclge_opcode_type {
40
    /* Generic commands */
41
--
42
2.30.0
diff view generated by jsdifflib
1
From: Yonglong Liu <liuyonglong@huawei.com>
1
From: Jie Wang <wangjie125@huawei.com>
2
2
3
In hclge_add_fd_entry(), if the flow type is FLOW_EXT, and the data of
3
Currently, the mac port is fixed to configured as full dplex mode in
4
m_ext is all zero, then some members of the local variable "info" are
4
hclge_mac_init() when driver initialization or reset restore. Users may
5
not initialized.
5
change the mode to half duplex with ethtool, so it may cause the user
6
configuration dropped after reset.
6
7
7
Fixes: 67b0e1428e2f ("net: hns3: add support for user-def data of flow director")
8
To fix it, don't change the duplex mode when resetting.
8
Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
9
10
Fixes: 2d03eacc0b7e ("net: hns3: Only update mac configuation when necessary")
11
Signed-off-by: Jie Wang <wangjie125@huawei.com>
9
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
12
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
10
---
13
---
11
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 2 +-
14
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 5 ++++-
12
1 file changed, 1 insertion(+), 1 deletion(-)
15
1 file changed, 4 insertions(+), 1 deletion(-)
13
16
14
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
17
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
15
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
16
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
19
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
17
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
20
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
18
@@ -XXX,XX +XXX,XX @@ static int hclge_add_fd_entry(struct hnae3_handle *handle,
21
@@ -XXX,XX +XXX,XX @@ static int hclge_mac_init(struct hclge_dev *hdev)
19
             struct ethtool_rxnfc *cmd)
22
    int ret;
20
{
23
21
    struct hclge_vport *vport = hclge_get_vport(handle);
24
    hdev->support_sfp_query = true;
22
+    struct hclge_fd_user_def_info info = {0};
25
-    hdev->hw.mac.duplex = HCLGE_MAC_FULL;
23
    struct hclge_dev *hdev = vport->back;
26
+
24
-    struct hclge_fd_user_def_info info;
27
+    if (!test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
25
    u16 dst_vport_id = 0, q_index = 0;
28
+        hdev->hw.mac.duplex = HCLGE_MAC_FULL;
26
    struct ethtool_rx_flow_spec *fs;
29
+
27
    struct hclge_fd_rule *rule;
30
    ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.speed,
31
                     hdev->hw.mac.duplex, hdev->hw.mac.lane_num);
32
    if (ret)
28
--
33
--
29
2.33.0
34
2.30.0
diff view generated by jsdifflib
1
From: Jian Shen <shenjian15@huawei.com>
1
From: Jian Shen <shenjian15@huawei.com>
2
2
3
The VF driver missed to store the rx VLAN tag strip state when
3
Add checking for vf id of mailbox, in order to avoid array
4
user change the rx VLAN tag offload state. And it will default
4
out-of-bounds risk.
5
to enable the rx vlan tag strip when re-init VF device after
6
reset. So if user disable rx VLAN tag offload, and trig reset,
7
then the HW will still strip the VLAN tag from packet nad fill
8
into RX BD, but the VF driver will ignore it for rx VLAN tag
9
offload disabled. It may cause the rx VLAN tag dropped.
10
5
11
Fixes: b2641e2ad456 ("net: hns3: Add support of hardware rx-vlan-offload to HNS3 VF driver")
12
Signed-off-by: Jian Shen <shenjian15@huawei.com>
6
Signed-off-by: Jian Shen <shenjian15@huawei.com>
13
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
7
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
14
---
8
---
15
.../hisilicon/hns3/hns3vf/hclgevf_main.c | 25 ++++++++++++++-----
9
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c | 7 ++++---
16
.../hisilicon/hns3/hns3vf/hclgevf_main.h | 3 ++-
10
1 file changed, 4 insertions(+), 3 deletions(-)
17
2 files changed, 21 insertions(+), 7 deletions(-)
18
11
19
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
12
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
20
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
21
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
14
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
22
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
15
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
23
@@ -XXX,XX +XXX,XX @@ static void hclgevf_sync_vlan_filter(struct hclgevf_dev *hdev)
16
@@ -XXX,XX +XXX,XX @@ void hclge_mbx_handler(struct hclge_dev *hdev)
24
    rtnl_unlock();
17
        req = (struct hclge_mbx_vf_to_pf_cmd *)desc->data;
25
}
18
26
19
        flag = le16_to_cpu(crq->desc[crq->next_to_use].flag);
27
-static int hclgevf_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable)
20
-        if (unlikely(!hnae3_get_bit(flag, HCLGE_CMDQ_RX_OUTVLD_B))) {
28
+static int hclgevf_en_hw_strip_rxvtag_cmd(struct hclgevf_dev *hdev, bool enable)
21
+        if (unlikely(!hnae3_get_bit(flag, HCLGE_CMDQ_RX_OUTVLD_B) ||
29
{
22
+             req->mbx_src_vfid > hdev->num_req_vfs)) {
30
-    struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
23
            dev_warn(&hdev->pdev->dev,
31
    struct hclge_vf_to_pf_msg send_msg;
24
-                 "dropped invalid mailbox message, code = %u\n",
32
25
-                 req->msg.code);
33
    hclgevf_build_send_msg(&send_msg, HCLGE_MBX_SET_VLAN,
26
+                 "dropped invalid mailbox message, code = %u, vfid = %u\n",
34
@@ -XXX,XX +XXX,XX @@ static int hclgevf_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable)
27
+                 req->msg.code, req->mbx_src_vfid);
35
    return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0);
28
36
}
29
            /* dropping/not processing this invalid message */
37
30
            crq->desc[crq->next_to_use].flag = 0;
38
+static int hclgevf_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable)
39
+{
40
+    struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
41
+    int ret;
42
+
43
+    ret = hclgevf_en_hw_strip_rxvtag_cmd(hdev, enable);
44
+    if (ret)
45
+        return ret;
46
+
47
+    hdev->rxvtag_strip_en = enable;
48
+    return 0;
49
+}
50
+
51
static int hclgevf_reset_tqp(struct hnae3_handle *handle)
52
{
53
#define HCLGEVF_RESET_ALL_QUEUE_DONE    1U
54
@@ -XXX,XX +XXX,XX @@ static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev)
55
                     tc_valid, tc_size);
56
}
57
58
-static int hclgevf_init_vlan_config(struct hclgevf_dev *hdev)
59
+static int hclgevf_init_vlan_config(struct hclgevf_dev *hdev,
60
+                 bool rxvtag_strip_en)
61
{
62
    struct hnae3_handle *nic = &hdev->nic;
63
    int ret;
64
65
-    ret = hclgevf_en_hw_strip_rxvtag(nic, true);
66
+    ret = hclgevf_en_hw_strip_rxvtag(nic, rxvtag_strip_en);
67
    if (ret) {
68
        dev_err(&hdev->pdev->dev,
69
            "failed to enable rx vlan offload, ret = %d\n", ret);
70
@@ -XXX,XX +XXX,XX @@ static int hclgevf_reset_hdev(struct hclgevf_dev *hdev)
71
    if (ret)
72
        return ret;
73
74
-    ret = hclgevf_init_vlan_config(hdev);
75
+    ret = hclgevf_init_vlan_config(hdev, hdev->rxvtag_strip_en);
76
    if (ret) {
77
        dev_err(&hdev->pdev->dev,
78
            "failed(%d) to initialize VLAN config\n", ret);
79
@@ -XXX,XX +XXX,XX @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
80
        goto err_config;
81
    }
82
83
-    ret = hclgevf_init_vlan_config(hdev);
84
+    ret = hclgevf_init_vlan_config(hdev, true);
85
    if (ret) {
86
        dev_err(&hdev->pdev->dev,
87
            "failed(%d) to initialize VLAN config\n", ret);
88
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
89
index XXXXXXX..XXXXXXX 100644
90
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
91
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
92
@@ -XXX,XX +XXX,XX @@ struct hclgevf_dev {
93
    u16 *vector_status;
94
    int *vector_irq;
95
96
-    bool gro_en;
97
+    u32 gro_en :1;
98
+    u32 rxvtag_strip_en :1;
99
100
    unsigned long vlan_del_fail_bmap[BITS_TO_LONGS(VLAN_N_VID)];
101
102
--
31
--
103
2.33.0
32
2.30.0
diff view generated by jsdifflib