1 // SPDX-License-Identifier: GPL-2.0+
2 // Copyright (c) 2016-2017 Hisilicon Limited.
3 
4 #include <linux/acpi.h>
5 #include <linux/device.h>
6 #include <linux/etherdevice.h>
7 #include <linux/init.h>
8 #include <linux/interrupt.h>
9 #include <linux/kernel.h>
10 #include <linux/module.h>
11 #include <linux/netdevice.h>
12 #include <linux/pci.h>
13 #include <linux/platform_device.h>
14 #include <linux/if_vlan.h>
15 #include <linux/crash_dump.h>
16 #include <net/ipv6.h>
17 #include <net/rtnetlink.h>
18 #include "hclge_cmd.h"
19 #include "hclge_dcb.h"
20 #include "hclge_main.h"
21 #include "hclge_mbx.h"
22 #include "hclge_mdio.h"
23 #include "hclge_tm.h"
24 #include "hclge_err.h"
25 #include "hnae3.h"
26 #include "hclge_devlink.h"
27 
28 #define HCLGE_NAME			"hclge"
29 #define HCLGE_STATS_READ(p, offset) (*(u64 *)((u8 *)(p) + (offset)))
30 #define HCLGE_MAC_STATS_FIELD_OFF(f) (offsetof(struct hclge_mac_stats, f))
31 
32 #define HCLGE_BUF_SIZE_UNIT	256U
33 #define HCLGE_BUF_MUL_BY	2
34 #define HCLGE_BUF_DIV_BY	2
35 #define NEED_RESERVE_TC_NUM	2
36 #define BUF_MAX_PERCENT		100
37 #define BUF_RESERVE_PERCENT	90
38 
39 #define HCLGE_RESET_MAX_FAIL_CNT	5
40 #define HCLGE_RESET_SYNC_TIME		100
41 #define HCLGE_PF_RESET_SYNC_TIME	20
42 #define HCLGE_PF_RESET_SYNC_CNT		1500
43 
44 /* Get DFX BD number offset */
45 #define HCLGE_DFX_BIOS_BD_OFFSET        1
46 #define HCLGE_DFX_SSU_0_BD_OFFSET       2
47 #define HCLGE_DFX_SSU_1_BD_OFFSET       3
48 #define HCLGE_DFX_IGU_BD_OFFSET         4
49 #define HCLGE_DFX_RPU_0_BD_OFFSET       5
50 #define HCLGE_DFX_RPU_1_BD_OFFSET       6
51 #define HCLGE_DFX_NCSI_BD_OFFSET        7
52 #define HCLGE_DFX_RTC_BD_OFFSET         8
53 #define HCLGE_DFX_PPP_BD_OFFSET         9
54 #define HCLGE_DFX_RCB_BD_OFFSET         10
55 #define HCLGE_DFX_TQP_BD_OFFSET         11
56 #define HCLGE_DFX_SSU_2_BD_OFFSET       12
57 
58 #define HCLGE_LINK_STATUS_MS	10
59 
60 static int hclge_set_mac_mtu(struct hclge_dev *hdev, int new_mps);
61 static int hclge_init_vlan_config(struct hclge_dev *hdev);
62 static void hclge_sync_vlan_filter(struct hclge_dev *hdev);
63 static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev);
64 static bool hclge_get_hw_reset_stat(struct hnae3_handle *handle);
65 static void hclge_rfs_filter_expire(struct hclge_dev *hdev);
66 static int hclge_clear_arfs_rules(struct hclge_dev *hdev);
67 static enum hnae3_reset_type hclge_get_reset_level(struct hnae3_ae_dev *ae_dev,
68 						   unsigned long *addr);
69 static int hclge_set_default_loopback(struct hclge_dev *hdev);
70 
71 static void hclge_sync_mac_table(struct hclge_dev *hdev);
72 static void hclge_restore_hw_table(struct hclge_dev *hdev);
73 static void hclge_sync_promisc_mode(struct hclge_dev *hdev);
74 static void hclge_sync_fd_table(struct hclge_dev *hdev);
75 
76 static struct hnae3_ae_algo ae_algo;
77 
78 static struct workqueue_struct *hclge_wq;
79 
80 static const struct pci_device_id ae_algo_pci_tbl[] = {
81 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_GE), 0},
82 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE), 0},
83 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA), 0},
84 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA_MACSEC), 0},
85 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA), 0},
86 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA_MACSEC), 0},
87 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_100G_RDMA_MACSEC), 0},
88 	{PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_200G_RDMA), 0},
89 	/* required last entry */
90 	{0, }
91 };
92 
93 MODULE_DEVICE_TABLE(pci, ae_algo_pci_tbl);
94 
95 static const u32 cmdq_reg_addr_list[] = {HCLGE_NIC_CSQ_BASEADDR_L_REG,
96 					 HCLGE_NIC_CSQ_BASEADDR_H_REG,
97 					 HCLGE_NIC_CSQ_DEPTH_REG,
98 					 HCLGE_NIC_CSQ_TAIL_REG,
99 					 HCLGE_NIC_CSQ_HEAD_REG,
100 					 HCLGE_NIC_CRQ_BASEADDR_L_REG,
101 					 HCLGE_NIC_CRQ_BASEADDR_H_REG,
102 					 HCLGE_NIC_CRQ_DEPTH_REG,
103 					 HCLGE_NIC_CRQ_TAIL_REG,
104 					 HCLGE_NIC_CRQ_HEAD_REG,
105 					 HCLGE_VECTOR0_CMDQ_SRC_REG,
106 					 HCLGE_CMDQ_INTR_STS_REG,
107 					 HCLGE_CMDQ_INTR_EN_REG,
108 					 HCLGE_CMDQ_INTR_GEN_REG};
109 
110 static const u32 common_reg_addr_list[] = {HCLGE_MISC_VECTOR_REG_BASE,
111 					   HCLGE_PF_OTHER_INT_REG,
112 					   HCLGE_MISC_RESET_STS_REG,
113 					   HCLGE_MISC_VECTOR_INT_STS,
114 					   HCLGE_GLOBAL_RESET_REG,
115 					   HCLGE_FUN_RST_ING,
116 					   HCLGE_GRO_EN_REG};
117 
118 static const u32 ring_reg_addr_list[] = {HCLGE_RING_RX_ADDR_L_REG,
119 					 HCLGE_RING_RX_ADDR_H_REG,
120 					 HCLGE_RING_RX_BD_NUM_REG,
121 					 HCLGE_RING_RX_BD_LENGTH_REG,
122 					 HCLGE_RING_RX_MERGE_EN_REG,
123 					 HCLGE_RING_RX_TAIL_REG,
124 					 HCLGE_RING_RX_HEAD_REG,
125 					 HCLGE_RING_RX_FBD_NUM_REG,
126 					 HCLGE_RING_RX_OFFSET_REG,
127 					 HCLGE_RING_RX_FBD_OFFSET_REG,
128 					 HCLGE_RING_RX_STASH_REG,
129 					 HCLGE_RING_RX_BD_ERR_REG,
130 					 HCLGE_RING_TX_ADDR_L_REG,
131 					 HCLGE_RING_TX_ADDR_H_REG,
132 					 HCLGE_RING_TX_BD_NUM_REG,
133 					 HCLGE_RING_TX_PRIORITY_REG,
134 					 HCLGE_RING_TX_TC_REG,
135 					 HCLGE_RING_TX_MERGE_EN_REG,
136 					 HCLGE_RING_TX_TAIL_REG,
137 					 HCLGE_RING_TX_HEAD_REG,
138 					 HCLGE_RING_TX_FBD_NUM_REG,
139 					 HCLGE_RING_TX_OFFSET_REG,
140 					 HCLGE_RING_TX_EBD_NUM_REG,
141 					 HCLGE_RING_TX_EBD_OFFSET_REG,
142 					 HCLGE_RING_TX_BD_ERR_REG,
143 					 HCLGE_RING_EN_REG};
144 
145 static const u32 tqp_intr_reg_addr_list[] = {HCLGE_TQP_INTR_CTRL_REG,
146 					     HCLGE_TQP_INTR_GL0_REG,
147 					     HCLGE_TQP_INTR_GL1_REG,
148 					     HCLGE_TQP_INTR_GL2_REG,
149 					     HCLGE_TQP_INTR_RL_REG};
150 
151 static const char hns3_nic_test_strs[][ETH_GSTRING_LEN] = {
152 	"App    Loopback test",
153 	"Serdes serial Loopback test",
154 	"Serdes parallel Loopback test",
155 	"Phy    Loopback test"
156 };
157 
158 static const struct hclge_comm_stats_str g_mac_stats_string[] = {
159 	{"mac_tx_mac_pause_num",
160 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_mac_pause_num)},
161 	{"mac_rx_mac_pause_num",
162 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_mac_pause_num)},
163 	{"mac_tx_control_pkt_num",
164 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_ctrl_pkt_num)},
165 	{"mac_rx_control_pkt_num",
166 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_ctrl_pkt_num)},
167 	{"mac_tx_pfc_pkt_num",
168 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pause_pkt_num)},
169 	{"mac_tx_pfc_pri0_pkt_num",
170 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri0_pkt_num)},
171 	{"mac_tx_pfc_pri1_pkt_num",
172 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri1_pkt_num)},
173 	{"mac_tx_pfc_pri2_pkt_num",
174 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri2_pkt_num)},
175 	{"mac_tx_pfc_pri3_pkt_num",
176 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri3_pkt_num)},
177 	{"mac_tx_pfc_pri4_pkt_num",
178 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri4_pkt_num)},
179 	{"mac_tx_pfc_pri5_pkt_num",
180 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri5_pkt_num)},
181 	{"mac_tx_pfc_pri6_pkt_num",
182 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri6_pkt_num)},
183 	{"mac_tx_pfc_pri7_pkt_num",
184 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri7_pkt_num)},
185 	{"mac_rx_pfc_pkt_num",
186 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pause_pkt_num)},
187 	{"mac_rx_pfc_pri0_pkt_num",
188 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri0_pkt_num)},
189 	{"mac_rx_pfc_pri1_pkt_num",
190 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri1_pkt_num)},
191 	{"mac_rx_pfc_pri2_pkt_num",
192 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri2_pkt_num)},
193 	{"mac_rx_pfc_pri3_pkt_num",
194 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri3_pkt_num)},
195 	{"mac_rx_pfc_pri4_pkt_num",
196 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri4_pkt_num)},
197 	{"mac_rx_pfc_pri5_pkt_num",
198 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri5_pkt_num)},
199 	{"mac_rx_pfc_pri6_pkt_num",
200 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri6_pkt_num)},
201 	{"mac_rx_pfc_pri7_pkt_num",
202 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri7_pkt_num)},
203 	{"mac_tx_total_pkt_num",
204 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_total_pkt_num)},
205 	{"mac_tx_total_oct_num",
206 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_total_oct_num)},
207 	{"mac_tx_good_pkt_num",
208 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_good_pkt_num)},
209 	{"mac_tx_bad_pkt_num",
210 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_bad_pkt_num)},
211 	{"mac_tx_good_oct_num",
212 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_good_oct_num)},
213 	{"mac_tx_bad_oct_num",
214 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_bad_oct_num)},
215 	{"mac_tx_uni_pkt_num",
216 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_uni_pkt_num)},
217 	{"mac_tx_multi_pkt_num",
218 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_multi_pkt_num)},
219 	{"mac_tx_broad_pkt_num",
220 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_broad_pkt_num)},
221 	{"mac_tx_undersize_pkt_num",
222 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_undersize_pkt_num)},
223 	{"mac_tx_oversize_pkt_num",
224 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_oversize_pkt_num)},
225 	{"mac_tx_64_oct_pkt_num",
226 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_64_oct_pkt_num)},
227 	{"mac_tx_65_127_oct_pkt_num",
228 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_65_127_oct_pkt_num)},
229 	{"mac_tx_128_255_oct_pkt_num",
230 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_128_255_oct_pkt_num)},
231 	{"mac_tx_256_511_oct_pkt_num",
232 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_256_511_oct_pkt_num)},
233 	{"mac_tx_512_1023_oct_pkt_num",
234 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_512_1023_oct_pkt_num)},
235 	{"mac_tx_1024_1518_oct_pkt_num",
236 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1024_1518_oct_pkt_num)},
237 	{"mac_tx_1519_2047_oct_pkt_num",
238 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1519_2047_oct_pkt_num)},
239 	{"mac_tx_2048_4095_oct_pkt_num",
240 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_2048_4095_oct_pkt_num)},
241 	{"mac_tx_4096_8191_oct_pkt_num",
242 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_4096_8191_oct_pkt_num)},
243 	{"mac_tx_8192_9216_oct_pkt_num",
244 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_8192_9216_oct_pkt_num)},
245 	{"mac_tx_9217_12287_oct_pkt_num",
246 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_9217_12287_oct_pkt_num)},
247 	{"mac_tx_12288_16383_oct_pkt_num",
248 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_12288_16383_oct_pkt_num)},
249 	{"mac_tx_1519_max_good_pkt_num",
250 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1519_max_good_oct_pkt_num)},
251 	{"mac_tx_1519_max_bad_pkt_num",
252 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1519_max_bad_oct_pkt_num)},
253 	{"mac_rx_total_pkt_num",
254 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_total_pkt_num)},
255 	{"mac_rx_total_oct_num",
256 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_total_oct_num)},
257 	{"mac_rx_good_pkt_num",
258 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_good_pkt_num)},
259 	{"mac_rx_bad_pkt_num",
260 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_bad_pkt_num)},
261 	{"mac_rx_good_oct_num",
262 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_good_oct_num)},
263 	{"mac_rx_bad_oct_num",
264 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_bad_oct_num)},
265 	{"mac_rx_uni_pkt_num",
266 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_uni_pkt_num)},
267 	{"mac_rx_multi_pkt_num",
268 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_multi_pkt_num)},
269 	{"mac_rx_broad_pkt_num",
270 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_broad_pkt_num)},
271 	{"mac_rx_undersize_pkt_num",
272 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_undersize_pkt_num)},
273 	{"mac_rx_oversize_pkt_num",
274 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_oversize_pkt_num)},
275 	{"mac_rx_64_oct_pkt_num",
276 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_64_oct_pkt_num)},
277 	{"mac_rx_65_127_oct_pkt_num",
278 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_65_127_oct_pkt_num)},
279 	{"mac_rx_128_255_oct_pkt_num",
280 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_128_255_oct_pkt_num)},
281 	{"mac_rx_256_511_oct_pkt_num",
282 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_256_511_oct_pkt_num)},
283 	{"mac_rx_512_1023_oct_pkt_num",
284 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_512_1023_oct_pkt_num)},
285 	{"mac_rx_1024_1518_oct_pkt_num",
286 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1024_1518_oct_pkt_num)},
287 	{"mac_rx_1519_2047_oct_pkt_num",
288 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1519_2047_oct_pkt_num)},
289 	{"mac_rx_2048_4095_oct_pkt_num",
290 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_2048_4095_oct_pkt_num)},
291 	{"mac_rx_4096_8191_oct_pkt_num",
292 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_4096_8191_oct_pkt_num)},
293 	{"mac_rx_8192_9216_oct_pkt_num",
294 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_8192_9216_oct_pkt_num)},
295 	{"mac_rx_9217_12287_oct_pkt_num",
296 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_9217_12287_oct_pkt_num)},
297 	{"mac_rx_12288_16383_oct_pkt_num",
298 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_12288_16383_oct_pkt_num)},
299 	{"mac_rx_1519_max_good_pkt_num",
300 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1519_max_good_oct_pkt_num)},
301 	{"mac_rx_1519_max_bad_pkt_num",
302 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1519_max_bad_oct_pkt_num)},
303 
304 	{"mac_tx_fragment_pkt_num",
305 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_fragment_pkt_num)},
306 	{"mac_tx_undermin_pkt_num",
307 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_undermin_pkt_num)},
308 	{"mac_tx_jabber_pkt_num",
309 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_jabber_pkt_num)},
310 	{"mac_tx_err_all_pkt_num",
311 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_err_all_pkt_num)},
312 	{"mac_tx_from_app_good_pkt_num",
313 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_from_app_good_pkt_num)},
314 	{"mac_tx_from_app_bad_pkt_num",
315 		HCLGE_MAC_STATS_FIELD_OFF(mac_tx_from_app_bad_pkt_num)},
316 	{"mac_rx_fragment_pkt_num",
317 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_fragment_pkt_num)},
318 	{"mac_rx_undermin_pkt_num",
319 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_undermin_pkt_num)},
320 	{"mac_rx_jabber_pkt_num",
321 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_jabber_pkt_num)},
322 	{"mac_rx_fcs_err_pkt_num",
323 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_fcs_err_pkt_num)},
324 	{"mac_rx_send_app_good_pkt_num",
325 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_send_app_good_pkt_num)},
326 	{"mac_rx_send_app_bad_pkt_num",
327 		HCLGE_MAC_STATS_FIELD_OFF(mac_rx_send_app_bad_pkt_num)}
328 };
329 
330 static const struct hclge_mac_mgr_tbl_entry_cmd hclge_mgr_table[] = {
331 	{
332 		.flags = HCLGE_MAC_MGR_MASK_VLAN_B,
333 		.ethter_type = cpu_to_le16(ETH_P_LLDP),
334 		.mac_addr = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e},
335 		.i_port_bitmap = 0x1,
336 	},
337 };
338 
339 static const u8 hclge_hash_key[] = {
340 	0x6D, 0x5A, 0x56, 0xDA, 0x25, 0x5B, 0x0E, 0xC2,
341 	0x41, 0x67, 0x25, 0x3D, 0x43, 0xA3, 0x8F, 0xB0,
342 	0xD0, 0xCA, 0x2B, 0xCB, 0xAE, 0x7B, 0x30, 0xB4,
343 	0x77, 0xCB, 0x2D, 0xA3, 0x80, 0x30, 0xF2, 0x0C,
344 	0x6A, 0x42, 0xB7, 0x3B, 0xBE, 0xAC, 0x01, 0xFA
345 };
346 
347 static const u32 hclge_dfx_bd_offset_list[] = {
348 	HCLGE_DFX_BIOS_BD_OFFSET,
349 	HCLGE_DFX_SSU_0_BD_OFFSET,
350 	HCLGE_DFX_SSU_1_BD_OFFSET,
351 	HCLGE_DFX_IGU_BD_OFFSET,
352 	HCLGE_DFX_RPU_0_BD_OFFSET,
353 	HCLGE_DFX_RPU_1_BD_OFFSET,
354 	HCLGE_DFX_NCSI_BD_OFFSET,
355 	HCLGE_DFX_RTC_BD_OFFSET,
356 	HCLGE_DFX_PPP_BD_OFFSET,
357 	HCLGE_DFX_RCB_BD_OFFSET,
358 	HCLGE_DFX_TQP_BD_OFFSET,
359 	HCLGE_DFX_SSU_2_BD_OFFSET
360 };
361 
362 static const enum hclge_opcode_type hclge_dfx_reg_opcode_list[] = {
363 	HCLGE_OPC_DFX_BIOS_COMMON_REG,
364 	HCLGE_OPC_DFX_SSU_REG_0,
365 	HCLGE_OPC_DFX_SSU_REG_1,
366 	HCLGE_OPC_DFX_IGU_EGU_REG,
367 	HCLGE_OPC_DFX_RPU_REG_0,
368 	HCLGE_OPC_DFX_RPU_REG_1,
369 	HCLGE_OPC_DFX_NCSI_REG,
370 	HCLGE_OPC_DFX_RTC_REG,
371 	HCLGE_OPC_DFX_PPP_REG,
372 	HCLGE_OPC_DFX_RCB_REG,
373 	HCLGE_OPC_DFX_TQP_REG,
374 	HCLGE_OPC_DFX_SSU_REG_2
375 };
376 
377 static const struct key_info meta_data_key_info[] = {
378 	{ PACKET_TYPE_ID, 6 },
379 	{ IP_FRAGEMENT, 1 },
380 	{ ROCE_TYPE, 1 },
381 	{ NEXT_KEY, 5 },
382 	{ VLAN_NUMBER, 2 },
383 	{ SRC_VPORT, 12 },
384 	{ DST_VPORT, 12 },
385 	{ TUNNEL_PACKET, 1 },
386 };
387 
388 static const struct key_info tuple_key_info[] = {
389 	{ OUTER_DST_MAC, 48, KEY_OPT_MAC, -1, -1 },
390 	{ OUTER_SRC_MAC, 48, KEY_OPT_MAC, -1, -1 },
391 	{ OUTER_VLAN_TAG_FST, 16, KEY_OPT_LE16, -1, -1 },
392 	{ OUTER_VLAN_TAG_SEC, 16, KEY_OPT_LE16, -1, -1 },
393 	{ OUTER_ETH_TYPE, 16, KEY_OPT_LE16, -1, -1 },
394 	{ OUTER_L2_RSV, 16, KEY_OPT_LE16, -1, -1 },
395 	{ OUTER_IP_TOS, 8, KEY_OPT_U8, -1, -1 },
396 	{ OUTER_IP_PROTO, 8, KEY_OPT_U8, -1, -1 },
397 	{ OUTER_SRC_IP, 32, KEY_OPT_IP, -1, -1 },
398 	{ OUTER_DST_IP, 32, KEY_OPT_IP, -1, -1 },
399 	{ OUTER_L3_RSV, 16, KEY_OPT_LE16, -1, -1 },
400 	{ OUTER_SRC_PORT, 16, KEY_OPT_LE16, -1, -1 },
401 	{ OUTER_DST_PORT, 16, KEY_OPT_LE16, -1, -1 },
402 	{ OUTER_L4_RSV, 32, KEY_OPT_LE32, -1, -1 },
403 	{ OUTER_TUN_VNI, 24, KEY_OPT_VNI, -1, -1 },
404 	{ OUTER_TUN_FLOW_ID, 8, KEY_OPT_U8, -1, -1 },
405 	{ INNER_DST_MAC, 48, KEY_OPT_MAC,
406 	  offsetof(struct hclge_fd_rule, tuples.dst_mac),
407 	  offsetof(struct hclge_fd_rule, tuples_mask.dst_mac) },
408 	{ INNER_SRC_MAC, 48, KEY_OPT_MAC,
409 	  offsetof(struct hclge_fd_rule, tuples.src_mac),
410 	  offsetof(struct hclge_fd_rule, tuples_mask.src_mac) },
411 	{ INNER_VLAN_TAG_FST, 16, KEY_OPT_LE16,
412 	  offsetof(struct hclge_fd_rule, tuples.vlan_tag1),
413 	  offsetof(struct hclge_fd_rule, tuples_mask.vlan_tag1) },
414 	{ INNER_VLAN_TAG_SEC, 16, KEY_OPT_LE16, -1, -1 },
415 	{ INNER_ETH_TYPE, 16, KEY_OPT_LE16,
416 	  offsetof(struct hclge_fd_rule, tuples.ether_proto),
417 	  offsetof(struct hclge_fd_rule, tuples_mask.ether_proto) },
418 	{ INNER_L2_RSV, 16, KEY_OPT_LE16,
419 	  offsetof(struct hclge_fd_rule, tuples.l2_user_def),
420 	  offsetof(struct hclge_fd_rule, tuples_mask.l2_user_def) },
421 	{ INNER_IP_TOS, 8, KEY_OPT_U8,
422 	  offsetof(struct hclge_fd_rule, tuples.ip_tos),
423 	  offsetof(struct hclge_fd_rule, tuples_mask.ip_tos) },
424 	{ INNER_IP_PROTO, 8, KEY_OPT_U8,
425 	  offsetof(struct hclge_fd_rule, tuples.ip_proto),
426 	  offsetof(struct hclge_fd_rule, tuples_mask.ip_proto) },
427 	{ INNER_SRC_IP, 32, KEY_OPT_IP,
428 	  offsetof(struct hclge_fd_rule, tuples.src_ip),
429 	  offsetof(struct hclge_fd_rule, tuples_mask.src_ip) },
430 	{ INNER_DST_IP, 32, KEY_OPT_IP,
431 	  offsetof(struct hclge_fd_rule, tuples.dst_ip),
432 	  offsetof(struct hclge_fd_rule, tuples_mask.dst_ip) },
433 	{ INNER_L3_RSV, 16, KEY_OPT_LE16,
434 	  offsetof(struct hclge_fd_rule, tuples.l3_user_def),
435 	  offsetof(struct hclge_fd_rule, tuples_mask.l3_user_def) },
436 	{ INNER_SRC_PORT, 16, KEY_OPT_LE16,
437 	  offsetof(struct hclge_fd_rule, tuples.src_port),
438 	  offsetof(struct hclge_fd_rule, tuples_mask.src_port) },
439 	{ INNER_DST_PORT, 16, KEY_OPT_LE16,
440 	  offsetof(struct hclge_fd_rule, tuples.dst_port),
441 	  offsetof(struct hclge_fd_rule, tuples_mask.dst_port) },
442 	{ INNER_L4_RSV, 32, KEY_OPT_LE32,
443 	  offsetof(struct hclge_fd_rule, tuples.l4_user_def),
444 	  offsetof(struct hclge_fd_rule, tuples_mask.l4_user_def) },
445 };
446 
447 static int hclge_mac_update_stats_defective(struct hclge_dev *hdev)
448 {
449 #define HCLGE_MAC_CMD_NUM 21
450 
451 	u64 *data = (u64 *)(&hdev->mac_stats);
452 	struct hclge_desc desc[HCLGE_MAC_CMD_NUM];
453 	__le64 *desc_data;
454 	int i, k, n;
455 	int ret;
456 
457 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_STATS_MAC, true);
458 	ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_MAC_CMD_NUM);
459 	if (ret) {
460 		dev_err(&hdev->pdev->dev,
461 			"Get MAC pkt stats fail, status = %d.\n", ret);
462 
463 		return ret;
464 	}
465 
466 	for (i = 0; i < HCLGE_MAC_CMD_NUM; i++) {
467 		/* for special opcode 0032, only the first desc has the head */
468 		if (unlikely(i == 0)) {
469 			desc_data = (__le64 *)(&desc[i].data[0]);
470 			n = HCLGE_RD_FIRST_STATS_NUM;
471 		} else {
472 			desc_data = (__le64 *)(&desc[i]);
473 			n = HCLGE_RD_OTHER_STATS_NUM;
474 		}
475 
476 		for (k = 0; k < n; k++) {
477 			*data += le64_to_cpu(*desc_data);
478 			data++;
479 			desc_data++;
480 		}
481 	}
482 
483 	return 0;
484 }
485 
486 static int hclge_mac_update_stats_complete(struct hclge_dev *hdev, u32 desc_num)
487 {
488 	u64 *data = (u64 *)(&hdev->mac_stats);
489 	struct hclge_desc *desc;
490 	__le64 *desc_data;
491 	u16 i, k, n;
492 	int ret;
493 
494 	/* This may be called inside atomic sections,
495 	 * so GFP_ATOMIC is more suitalbe here
496 	 */
497 	desc = kcalloc(desc_num, sizeof(struct hclge_desc), GFP_ATOMIC);
498 	if (!desc)
499 		return -ENOMEM;
500 
501 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_STATS_MAC_ALL, true);
502 	ret = hclge_cmd_send(&hdev->hw, desc, desc_num);
503 	if (ret) {
504 		kfree(desc);
505 		return ret;
506 	}
507 
508 	for (i = 0; i < desc_num; i++) {
509 		/* for special opcode 0034, only the first desc has the head */
510 		if (i == 0) {
511 			desc_data = (__le64 *)(&desc[i].data[0]);
512 			n = HCLGE_RD_FIRST_STATS_NUM;
513 		} else {
514 			desc_data = (__le64 *)(&desc[i]);
515 			n = HCLGE_RD_OTHER_STATS_NUM;
516 		}
517 
518 		for (k = 0; k < n; k++) {
519 			*data += le64_to_cpu(*desc_data);
520 			data++;
521 			desc_data++;
522 		}
523 	}
524 
525 	kfree(desc);
526 
527 	return 0;
528 }
529 
530 static int hclge_mac_query_reg_num(struct hclge_dev *hdev, u32 *desc_num)
531 {
532 	struct hclge_desc desc;
533 	__le32 *desc_data;
534 	u32 reg_num;
535 	int ret;
536 
537 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_MAC_REG_NUM, true);
538 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
539 	if (ret)
540 		return ret;
541 
542 	desc_data = (__le32 *)(&desc.data[0]);
543 	reg_num = le32_to_cpu(*desc_data);
544 
545 	*desc_num = 1 + ((reg_num - 3) >> 2) +
546 		    (u32)(((reg_num - 3) & 0x3) ? 1 : 0);
547 
548 	return 0;
549 }
550 
551 static int hclge_mac_update_stats(struct hclge_dev *hdev)
552 {
553 	u32 desc_num;
554 	int ret;
555 
556 	ret = hclge_mac_query_reg_num(hdev, &desc_num);
557 	/* The firmware supports the new statistics acquisition method */
558 	if (!ret)
559 		ret = hclge_mac_update_stats_complete(hdev, desc_num);
560 	else if (ret == -EOPNOTSUPP)
561 		ret = hclge_mac_update_stats_defective(hdev);
562 	else
563 		dev_err(&hdev->pdev->dev, "query mac reg num fail!\n");
564 
565 	return ret;
566 }
567 
568 static int hclge_tqps_update_stats(struct hnae3_handle *handle)
569 {
570 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
571 	struct hclge_vport *vport = hclge_get_vport(handle);
572 	struct hclge_dev *hdev = vport->back;
573 	struct hnae3_queue *queue;
574 	struct hclge_desc desc[1];
575 	struct hclge_tqp *tqp;
576 	int ret, i;
577 
578 	for (i = 0; i < kinfo->num_tqps; i++) {
579 		queue = handle->kinfo.tqp[i];
580 		tqp = container_of(queue, struct hclge_tqp, q);
581 		/* command : HCLGE_OPC_QUERY_IGU_STAT */
582 		hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_RX_STATS,
583 					   true);
584 
585 		desc[0].data[0] = cpu_to_le32(tqp->index);
586 		ret = hclge_cmd_send(&hdev->hw, desc, 1);
587 		if (ret) {
588 			dev_err(&hdev->pdev->dev,
589 				"Query tqp stat fail, status = %d,queue = %d\n",
590 				ret, i);
591 			return ret;
592 		}
593 		tqp->tqp_stats.rcb_rx_ring_pktnum_rcd +=
594 			le32_to_cpu(desc[0].data[1]);
595 	}
596 
597 	for (i = 0; i < kinfo->num_tqps; i++) {
598 		queue = handle->kinfo.tqp[i];
599 		tqp = container_of(queue, struct hclge_tqp, q);
600 		/* command : HCLGE_OPC_QUERY_IGU_STAT */
601 		hclge_cmd_setup_basic_desc(&desc[0],
602 					   HCLGE_OPC_QUERY_TX_STATS,
603 					   true);
604 
605 		desc[0].data[0] = cpu_to_le32(tqp->index);
606 		ret = hclge_cmd_send(&hdev->hw, desc, 1);
607 		if (ret) {
608 			dev_err(&hdev->pdev->dev,
609 				"Query tqp stat fail, status = %d,queue = %d\n",
610 				ret, i);
611 			return ret;
612 		}
613 		tqp->tqp_stats.rcb_tx_ring_pktnum_rcd +=
614 			le32_to_cpu(desc[0].data[1]);
615 	}
616 
617 	return 0;
618 }
619 
620 static u64 *hclge_tqps_get_stats(struct hnae3_handle *handle, u64 *data)
621 {
622 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
623 	struct hclge_tqp *tqp;
624 	u64 *buff = data;
625 	int i;
626 
627 	for (i = 0; i < kinfo->num_tqps; i++) {
628 		tqp = container_of(kinfo->tqp[i], struct hclge_tqp, q);
629 		*buff++ = tqp->tqp_stats.rcb_tx_ring_pktnum_rcd;
630 	}
631 
632 	for (i = 0; i < kinfo->num_tqps; i++) {
633 		tqp = container_of(kinfo->tqp[i], struct hclge_tqp, q);
634 		*buff++ = tqp->tqp_stats.rcb_rx_ring_pktnum_rcd;
635 	}
636 
637 	return buff;
638 }
639 
640 static int hclge_tqps_get_sset_count(struct hnae3_handle *handle, int stringset)
641 {
642 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
643 
644 	/* each tqp has TX & RX two queues */
645 	return kinfo->num_tqps * (2);
646 }
647 
648 static u8 *hclge_tqps_get_strings(struct hnae3_handle *handle, u8 *data)
649 {
650 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
651 	u8 *buff = data;
652 	int i;
653 
654 	for (i = 0; i < kinfo->num_tqps; i++) {
655 		struct hclge_tqp *tqp = container_of(handle->kinfo.tqp[i],
656 			struct hclge_tqp, q);
657 		snprintf(buff, ETH_GSTRING_LEN, "txq%u_pktnum_rcd",
658 			 tqp->index);
659 		buff = buff + ETH_GSTRING_LEN;
660 	}
661 
662 	for (i = 0; i < kinfo->num_tqps; i++) {
663 		struct hclge_tqp *tqp = container_of(kinfo->tqp[i],
664 			struct hclge_tqp, q);
665 		snprintf(buff, ETH_GSTRING_LEN, "rxq%u_pktnum_rcd",
666 			 tqp->index);
667 		buff = buff + ETH_GSTRING_LEN;
668 	}
669 
670 	return buff;
671 }
672 
673 static u64 *hclge_comm_get_stats(const void *comm_stats,
674 				 const struct hclge_comm_stats_str strs[],
675 				 int size, u64 *data)
676 {
677 	u64 *buf = data;
678 	u32 i;
679 
680 	for (i = 0; i < size; i++)
681 		buf[i] = HCLGE_STATS_READ(comm_stats, strs[i].offset);
682 
683 	return buf + size;
684 }
685 
686 static u8 *hclge_comm_get_strings(u32 stringset,
687 				  const struct hclge_comm_stats_str strs[],
688 				  int size, u8 *data)
689 {
690 	char *buff = (char *)data;
691 	u32 i;
692 
693 	if (stringset != ETH_SS_STATS)
694 		return buff;
695 
696 	for (i = 0; i < size; i++) {
697 		snprintf(buff, ETH_GSTRING_LEN, "%s", strs[i].desc);
698 		buff = buff + ETH_GSTRING_LEN;
699 	}
700 
701 	return (u8 *)buff;
702 }
703 
704 static void hclge_update_stats_for_all(struct hclge_dev *hdev)
705 {
706 	struct hnae3_handle *handle;
707 	int status;
708 
709 	handle = &hdev->vport[0].nic;
710 	if (handle->client) {
711 		status = hclge_tqps_update_stats(handle);
712 		if (status) {
713 			dev_err(&hdev->pdev->dev,
714 				"Update TQPS stats fail, status = %d.\n",
715 				status);
716 		}
717 	}
718 
719 	status = hclge_mac_update_stats(hdev);
720 	if (status)
721 		dev_err(&hdev->pdev->dev,
722 			"Update MAC stats fail, status = %d.\n", status);
723 }
724 
725 static void hclge_update_stats(struct hnae3_handle *handle,
726 			       struct net_device_stats *net_stats)
727 {
728 	struct hclge_vport *vport = hclge_get_vport(handle);
729 	struct hclge_dev *hdev = vport->back;
730 	int status;
731 
732 	if (test_and_set_bit(HCLGE_STATE_STATISTICS_UPDATING, &hdev->state))
733 		return;
734 
735 	status = hclge_mac_update_stats(hdev);
736 	if (status)
737 		dev_err(&hdev->pdev->dev,
738 			"Update MAC stats fail, status = %d.\n",
739 			status);
740 
741 	status = hclge_tqps_update_stats(handle);
742 	if (status)
743 		dev_err(&hdev->pdev->dev,
744 			"Update TQPS stats fail, status = %d.\n",
745 			status);
746 
747 	clear_bit(HCLGE_STATE_STATISTICS_UPDATING, &hdev->state);
748 }
749 
750 static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset)
751 {
752 #define HCLGE_LOOPBACK_TEST_FLAGS (HNAE3_SUPPORT_APP_LOOPBACK | \
753 		HNAE3_SUPPORT_PHY_LOOPBACK | \
754 		HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK | \
755 		HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK)
756 
757 	struct hclge_vport *vport = hclge_get_vport(handle);
758 	struct hclge_dev *hdev = vport->back;
759 	int count = 0;
760 
761 	/* Loopback test support rules:
762 	 * mac: only GE mode support
763 	 * serdes: all mac mode will support include GE/XGE/LGE/CGE
764 	 * phy: only support when phy device exist on board
765 	 */
766 	if (stringset == ETH_SS_TEST) {
767 		/* clear loopback bit flags at first */
768 		handle->flags = (handle->flags & (~HCLGE_LOOPBACK_TEST_FLAGS));
769 		if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2 ||
770 		    hdev->hw.mac.speed == HCLGE_MAC_SPEED_10M ||
771 		    hdev->hw.mac.speed == HCLGE_MAC_SPEED_100M ||
772 		    hdev->hw.mac.speed == HCLGE_MAC_SPEED_1G) {
773 			count += 1;
774 			handle->flags |= HNAE3_SUPPORT_APP_LOOPBACK;
775 		}
776 
777 		count += 2;
778 		handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK;
779 		handle->flags |= HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK;
780 
781 		if ((hdev->hw.mac.phydev && hdev->hw.mac.phydev->drv &&
782 		     hdev->hw.mac.phydev->drv->set_loopback) ||
783 		    hnae3_dev_phy_imp_supported(hdev)) {
784 			count += 1;
785 			handle->flags |= HNAE3_SUPPORT_PHY_LOOPBACK;
786 		}
787 	} else if (stringset == ETH_SS_STATS) {
788 		count = ARRAY_SIZE(g_mac_stats_string) +
789 			hclge_tqps_get_sset_count(handle, stringset);
790 	}
791 
792 	return count;
793 }
794 
795 static void hclge_get_strings(struct hnae3_handle *handle, u32 stringset,
796 			      u8 *data)
797 {
798 	u8 *p = (char *)data;
799 	int size;
800 
801 	if (stringset == ETH_SS_STATS) {
802 		size = ARRAY_SIZE(g_mac_stats_string);
803 		p = hclge_comm_get_strings(stringset, g_mac_stats_string,
804 					   size, p);
805 		p = hclge_tqps_get_strings(handle, p);
806 	} else if (stringset == ETH_SS_TEST) {
807 		if (handle->flags & HNAE3_SUPPORT_APP_LOOPBACK) {
808 			memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_APP],
809 			       ETH_GSTRING_LEN);
810 			p += ETH_GSTRING_LEN;
811 		}
812 		if (handle->flags & HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK) {
813 			memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_SERIAL_SERDES],
814 			       ETH_GSTRING_LEN);
815 			p += ETH_GSTRING_LEN;
816 		}
817 		if (handle->flags & HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK) {
818 			memcpy(p,
819 			       hns3_nic_test_strs[HNAE3_LOOP_PARALLEL_SERDES],
820 			       ETH_GSTRING_LEN);
821 			p += ETH_GSTRING_LEN;
822 		}
823 		if (handle->flags & HNAE3_SUPPORT_PHY_LOOPBACK) {
824 			memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_PHY],
825 			       ETH_GSTRING_LEN);
826 			p += ETH_GSTRING_LEN;
827 		}
828 	}
829 }
830 
831 static void hclge_get_stats(struct hnae3_handle *handle, u64 *data)
832 {
833 	struct hclge_vport *vport = hclge_get_vport(handle);
834 	struct hclge_dev *hdev = vport->back;
835 	u64 *p;
836 
837 	p = hclge_comm_get_stats(&hdev->mac_stats, g_mac_stats_string,
838 				 ARRAY_SIZE(g_mac_stats_string), data);
839 	p = hclge_tqps_get_stats(handle, p);
840 }
841 
842 static void hclge_get_mac_stat(struct hnae3_handle *handle,
843 			       struct hns3_mac_stats *mac_stats)
844 {
845 	struct hclge_vport *vport = hclge_get_vport(handle);
846 	struct hclge_dev *hdev = vport->back;
847 
848 	hclge_update_stats(handle, NULL);
849 
850 	mac_stats->tx_pause_cnt = hdev->mac_stats.mac_tx_mac_pause_num;
851 	mac_stats->rx_pause_cnt = hdev->mac_stats.mac_rx_mac_pause_num;
852 }
853 
854 static int hclge_parse_func_status(struct hclge_dev *hdev,
855 				   struct hclge_func_status_cmd *status)
856 {
857 #define HCLGE_MAC_ID_MASK	0xF
858 
859 	if (!(status->pf_state & HCLGE_PF_STATE_DONE))
860 		return -EINVAL;
861 
862 	/* Set the pf to main pf */
863 	if (status->pf_state & HCLGE_PF_STATE_MAIN)
864 		hdev->flag |= HCLGE_FLAG_MAIN;
865 	else
866 		hdev->flag &= ~HCLGE_FLAG_MAIN;
867 
868 	hdev->hw.mac.mac_id = status->mac_id & HCLGE_MAC_ID_MASK;
869 	return 0;
870 }
871 
872 static int hclge_query_function_status(struct hclge_dev *hdev)
873 {
874 #define HCLGE_QUERY_MAX_CNT	5
875 
876 	struct hclge_func_status_cmd *req;
877 	struct hclge_desc desc;
878 	int timeout = 0;
879 	int ret;
880 
881 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_FUNC_STATUS, true);
882 	req = (struct hclge_func_status_cmd *)desc.data;
883 
884 	do {
885 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
886 		if (ret) {
887 			dev_err(&hdev->pdev->dev,
888 				"query function status failed %d.\n", ret);
889 			return ret;
890 		}
891 
892 		/* Check pf reset is done */
893 		if (req->pf_state)
894 			break;
895 		usleep_range(1000, 2000);
896 	} while (timeout++ < HCLGE_QUERY_MAX_CNT);
897 
898 	return hclge_parse_func_status(hdev, req);
899 }
900 
901 static int hclge_query_pf_resource(struct hclge_dev *hdev)
902 {
903 	struct hclge_pf_res_cmd *req;
904 	struct hclge_desc desc;
905 	int ret;
906 
907 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_PF_RSRC, true);
908 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
909 	if (ret) {
910 		dev_err(&hdev->pdev->dev,
911 			"query pf resource failed %d.\n", ret);
912 		return ret;
913 	}
914 
915 	req = (struct hclge_pf_res_cmd *)desc.data;
916 	hdev->num_tqps = le16_to_cpu(req->tqp_num) +
917 			 le16_to_cpu(req->ext_tqp_num);
918 	hdev->pkt_buf_size = le16_to_cpu(req->buf_size) << HCLGE_BUF_UNIT_S;
919 
920 	if (req->tx_buf_size)
921 		hdev->tx_buf_size =
922 			le16_to_cpu(req->tx_buf_size) << HCLGE_BUF_UNIT_S;
923 	else
924 		hdev->tx_buf_size = HCLGE_DEFAULT_TX_BUF;
925 
926 	hdev->tx_buf_size = roundup(hdev->tx_buf_size, HCLGE_BUF_SIZE_UNIT);
927 
928 	if (req->dv_buf_size)
929 		hdev->dv_buf_size =
930 			le16_to_cpu(req->dv_buf_size) << HCLGE_BUF_UNIT_S;
931 	else
932 		hdev->dv_buf_size = HCLGE_DEFAULT_DV;
933 
934 	hdev->dv_buf_size = roundup(hdev->dv_buf_size, HCLGE_BUF_SIZE_UNIT);
935 
936 	hdev->num_nic_msi = le16_to_cpu(req->msixcap_localid_number_nic);
937 	if (hdev->num_nic_msi < HNAE3_MIN_VECTOR_NUM) {
938 		dev_err(&hdev->pdev->dev,
939 			"only %u msi resources available, not enough for pf(min:2).\n",
940 			hdev->num_nic_msi);
941 		return -EINVAL;
942 	}
943 
944 	if (hnae3_dev_roce_supported(hdev)) {
945 		hdev->num_roce_msi =
946 			le16_to_cpu(req->pf_intr_vector_number_roce);
947 
948 		/* PF should have NIC vectors and Roce vectors,
949 		 * NIC vectors are queued before Roce vectors.
950 		 */
951 		hdev->num_msi = hdev->num_nic_msi + hdev->num_roce_msi;
952 	} else {
953 		hdev->num_msi = hdev->num_nic_msi;
954 	}
955 
956 	return 0;
957 }
958 
959 static int hclge_parse_speed(u8 speed_cmd, u32 *speed)
960 {
961 	switch (speed_cmd) {
962 	case HCLGE_FW_MAC_SPEED_10M:
963 		*speed = HCLGE_MAC_SPEED_10M;
964 		break;
965 	case HCLGE_FW_MAC_SPEED_100M:
966 		*speed = HCLGE_MAC_SPEED_100M;
967 		break;
968 	case HCLGE_FW_MAC_SPEED_1G:
969 		*speed = HCLGE_MAC_SPEED_1G;
970 		break;
971 	case HCLGE_FW_MAC_SPEED_10G:
972 		*speed = HCLGE_MAC_SPEED_10G;
973 		break;
974 	case HCLGE_FW_MAC_SPEED_25G:
975 		*speed = HCLGE_MAC_SPEED_25G;
976 		break;
977 	case HCLGE_FW_MAC_SPEED_40G:
978 		*speed = HCLGE_MAC_SPEED_40G;
979 		break;
980 	case HCLGE_FW_MAC_SPEED_50G:
981 		*speed = HCLGE_MAC_SPEED_50G;
982 		break;
983 	case HCLGE_FW_MAC_SPEED_100G:
984 		*speed = HCLGE_MAC_SPEED_100G;
985 		break;
986 	case HCLGE_FW_MAC_SPEED_200G:
987 		*speed = HCLGE_MAC_SPEED_200G;
988 		break;
989 	default:
990 		return -EINVAL;
991 	}
992 
993 	return 0;
994 }
995 
996 static const struct hclge_speed_bit_map speed_bit_map[] = {
997 	{HCLGE_MAC_SPEED_10M, HCLGE_SUPPORT_10M_BIT},
998 	{HCLGE_MAC_SPEED_100M, HCLGE_SUPPORT_100M_BIT},
999 	{HCLGE_MAC_SPEED_1G, HCLGE_SUPPORT_1G_BIT},
1000 	{HCLGE_MAC_SPEED_10G, HCLGE_SUPPORT_10G_BIT},
1001 	{HCLGE_MAC_SPEED_25G, HCLGE_SUPPORT_25G_BIT},
1002 	{HCLGE_MAC_SPEED_40G, HCLGE_SUPPORT_40G_BIT},
1003 	{HCLGE_MAC_SPEED_50G, HCLGE_SUPPORT_50G_BIT},
1004 	{HCLGE_MAC_SPEED_100G, HCLGE_SUPPORT_100G_BIT},
1005 	{HCLGE_MAC_SPEED_200G, HCLGE_SUPPORT_200G_BIT},
1006 };
1007 
1008 static int hclge_get_speed_bit(u32 speed, u32 *speed_bit)
1009 {
1010 	u16 i;
1011 
1012 	for (i = 0; i < ARRAY_SIZE(speed_bit_map); i++) {
1013 		if (speed == speed_bit_map[i].speed) {
1014 			*speed_bit = speed_bit_map[i].speed_bit;
1015 			return 0;
1016 		}
1017 	}
1018 
1019 	return -EINVAL;
1020 }
1021 
1022 static int hclge_check_port_speed(struct hnae3_handle *handle, u32 speed)
1023 {
1024 	struct hclge_vport *vport = hclge_get_vport(handle);
1025 	struct hclge_dev *hdev = vport->back;
1026 	u32 speed_ability = hdev->hw.mac.speed_ability;
1027 	u32 speed_bit = 0;
1028 	int ret;
1029 
1030 	ret = hclge_get_speed_bit(speed, &speed_bit);
1031 	if (ret)
1032 		return ret;
1033 
1034 	if (speed_bit & speed_ability)
1035 		return 0;
1036 
1037 	return -EINVAL;
1038 }
1039 
1040 static void hclge_convert_setting_sr(struct hclge_mac *mac, u16 speed_ability)
1041 {
1042 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1043 		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseSR_Full_BIT,
1044 				 mac->supported);
1045 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1046 		linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseSR_Full_BIT,
1047 				 mac->supported);
1048 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1049 		linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT,
1050 				 mac->supported);
1051 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1052 		linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT,
1053 				 mac->supported);
1054 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1055 		linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT,
1056 				 mac->supported);
1057 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1058 		linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT,
1059 				 mac->supported);
1060 }
1061 
1062 static void hclge_convert_setting_lr(struct hclge_mac *mac, u16 speed_ability)
1063 {
1064 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1065 		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseLR_Full_BIT,
1066 				 mac->supported);
1067 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1068 		linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseSR_Full_BIT,
1069 				 mac->supported);
1070 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1071 		linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT,
1072 				 mac->supported);
1073 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1074 		linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT,
1075 				 mac->supported);
1076 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1077 		linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT,
1078 				 mac->supported);
1079 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1080 		linkmode_set_bit(
1081 			ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT,
1082 			mac->supported);
1083 }
1084 
1085 static void hclge_convert_setting_cr(struct hclge_mac *mac, u16 speed_ability)
1086 {
1087 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1088 		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseCR_Full_BIT,
1089 				 mac->supported);
1090 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1091 		linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseCR_Full_BIT,
1092 				 mac->supported);
1093 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1094 		linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT,
1095 				 mac->supported);
1096 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1097 		linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT,
1098 				 mac->supported);
1099 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1100 		linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT,
1101 				 mac->supported);
1102 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1103 		linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT,
1104 				 mac->supported);
1105 }
1106 
1107 static void hclge_convert_setting_kr(struct hclge_mac *mac, u16 speed_ability)
1108 {
1109 	if (speed_ability & HCLGE_SUPPORT_1G_BIT)
1110 		linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
1111 				 mac->supported);
1112 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1113 		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
1114 				 mac->supported);
1115 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1116 		linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseKR_Full_BIT,
1117 				 mac->supported);
1118 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1119 		linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT,
1120 				 mac->supported);
1121 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1122 		linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT,
1123 				 mac->supported);
1124 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1125 		linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT,
1126 				 mac->supported);
1127 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1128 		linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT,
1129 				 mac->supported);
1130 }
1131 
1132 static void hclge_convert_setting_fec(struct hclge_mac *mac)
1133 {
1134 	linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_BASER_BIT, mac->supported);
1135 	linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT, mac->supported);
1136 
1137 	switch (mac->speed) {
1138 	case HCLGE_MAC_SPEED_10G:
1139 	case HCLGE_MAC_SPEED_40G:
1140 		linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_BASER_BIT,
1141 				 mac->supported);
1142 		mac->fec_ability =
1143 			BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_AUTO);
1144 		break;
1145 	case HCLGE_MAC_SPEED_25G:
1146 	case HCLGE_MAC_SPEED_50G:
1147 		linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT,
1148 				 mac->supported);
1149 		mac->fec_ability =
1150 			BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_RS) |
1151 			BIT(HNAE3_FEC_AUTO);
1152 		break;
1153 	case HCLGE_MAC_SPEED_100G:
1154 	case HCLGE_MAC_SPEED_200G:
1155 		linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT, mac->supported);
1156 		mac->fec_ability = BIT(HNAE3_FEC_RS) | BIT(HNAE3_FEC_AUTO);
1157 		break;
1158 	default:
1159 		mac->fec_ability = 0;
1160 		break;
1161 	}
1162 }
1163 
1164 static void hclge_parse_fiber_link_mode(struct hclge_dev *hdev,
1165 					u16 speed_ability)
1166 {
1167 	struct hclge_mac *mac = &hdev->hw.mac;
1168 
1169 	if (speed_ability & HCLGE_SUPPORT_1G_BIT)
1170 		linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
1171 				 mac->supported);
1172 
1173 	hclge_convert_setting_sr(mac, speed_ability);
1174 	hclge_convert_setting_lr(mac, speed_ability);
1175 	hclge_convert_setting_cr(mac, speed_ability);
1176 	if (hnae3_dev_fec_supported(hdev))
1177 		hclge_convert_setting_fec(mac);
1178 
1179 	if (hnae3_dev_pause_supported(hdev))
1180 		linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, mac->supported);
1181 
1182 	linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, mac->supported);
1183 	linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_NONE_BIT, mac->supported);
1184 }
1185 
1186 static void hclge_parse_backplane_link_mode(struct hclge_dev *hdev,
1187 					    u16 speed_ability)
1188 {
1189 	struct hclge_mac *mac = &hdev->hw.mac;
1190 
1191 	hclge_convert_setting_kr(mac, speed_ability);
1192 	if (hnae3_dev_fec_supported(hdev))
1193 		hclge_convert_setting_fec(mac);
1194 
1195 	if (hnae3_dev_pause_supported(hdev))
1196 		linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, mac->supported);
1197 
1198 	linkmode_set_bit(ETHTOOL_LINK_MODE_Backplane_BIT, mac->supported);
1199 	linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_NONE_BIT, mac->supported);
1200 }
1201 
1202 static void hclge_parse_copper_link_mode(struct hclge_dev *hdev,
1203 					 u16 speed_ability)
1204 {
1205 	unsigned long *supported = hdev->hw.mac.supported;
1206 
1207 	/* default to support all speed for GE port */
1208 	if (!speed_ability)
1209 		speed_ability = HCLGE_SUPPORT_GE;
1210 
1211 	if (speed_ability & HCLGE_SUPPORT_1G_BIT)
1212 		linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
1213 				 supported);
1214 
1215 	if (speed_ability & HCLGE_SUPPORT_100M_BIT) {
1216 		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
1217 				 supported);
1218 		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
1219 				 supported);
1220 	}
1221 
1222 	if (speed_ability & HCLGE_SUPPORT_10M_BIT) {
1223 		linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, supported);
1224 		linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, supported);
1225 	}
1226 
1227 	if (hnae3_dev_pause_supported(hdev)) {
1228 		linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, supported);
1229 		linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, supported);
1230 	}
1231 
1232 	linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, supported);
1233 	linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, supported);
1234 }
1235 
1236 static void hclge_parse_link_mode(struct hclge_dev *hdev, u16 speed_ability)
1237 {
1238 	u8 media_type = hdev->hw.mac.media_type;
1239 
1240 	if (media_type == HNAE3_MEDIA_TYPE_FIBER)
1241 		hclge_parse_fiber_link_mode(hdev, speed_ability);
1242 	else if (media_type == HNAE3_MEDIA_TYPE_COPPER)
1243 		hclge_parse_copper_link_mode(hdev, speed_ability);
1244 	else if (media_type == HNAE3_MEDIA_TYPE_BACKPLANE)
1245 		hclge_parse_backplane_link_mode(hdev, speed_ability);
1246 }
1247 
1248 static u32 hclge_get_max_speed(u16 speed_ability)
1249 {
1250 	if (speed_ability & HCLGE_SUPPORT_200G_BIT)
1251 		return HCLGE_MAC_SPEED_200G;
1252 
1253 	if (speed_ability & HCLGE_SUPPORT_100G_BIT)
1254 		return HCLGE_MAC_SPEED_100G;
1255 
1256 	if (speed_ability & HCLGE_SUPPORT_50G_BIT)
1257 		return HCLGE_MAC_SPEED_50G;
1258 
1259 	if (speed_ability & HCLGE_SUPPORT_40G_BIT)
1260 		return HCLGE_MAC_SPEED_40G;
1261 
1262 	if (speed_ability & HCLGE_SUPPORT_25G_BIT)
1263 		return HCLGE_MAC_SPEED_25G;
1264 
1265 	if (speed_ability & HCLGE_SUPPORT_10G_BIT)
1266 		return HCLGE_MAC_SPEED_10G;
1267 
1268 	if (speed_ability & HCLGE_SUPPORT_1G_BIT)
1269 		return HCLGE_MAC_SPEED_1G;
1270 
1271 	if (speed_ability & HCLGE_SUPPORT_100M_BIT)
1272 		return HCLGE_MAC_SPEED_100M;
1273 
1274 	if (speed_ability & HCLGE_SUPPORT_10M_BIT)
1275 		return HCLGE_MAC_SPEED_10M;
1276 
1277 	return HCLGE_MAC_SPEED_1G;
1278 }
1279 
1280 static void hclge_parse_cfg(struct hclge_cfg *cfg, struct hclge_desc *desc)
1281 {
1282 #define HCLGE_TX_SPARE_SIZE_UNIT		4096
1283 #define SPEED_ABILITY_EXT_SHIFT			8
1284 
1285 	struct hclge_cfg_param_cmd *req;
1286 	u64 mac_addr_tmp_high;
1287 	u16 speed_ability_ext;
1288 	u64 mac_addr_tmp;
1289 	unsigned int i;
1290 
1291 	req = (struct hclge_cfg_param_cmd *)desc[0].data;
1292 
1293 	/* get the configuration */
1294 	cfg->tc_num = hnae3_get_field(__le32_to_cpu(req->param[0]),
1295 				      HCLGE_CFG_TC_NUM_M, HCLGE_CFG_TC_NUM_S);
1296 	cfg->tqp_desc_num = hnae3_get_field(__le32_to_cpu(req->param[0]),
1297 					    HCLGE_CFG_TQP_DESC_N_M,
1298 					    HCLGE_CFG_TQP_DESC_N_S);
1299 
1300 	cfg->phy_addr = hnae3_get_field(__le32_to_cpu(req->param[1]),
1301 					HCLGE_CFG_PHY_ADDR_M,
1302 					HCLGE_CFG_PHY_ADDR_S);
1303 	cfg->media_type = hnae3_get_field(__le32_to_cpu(req->param[1]),
1304 					  HCLGE_CFG_MEDIA_TP_M,
1305 					  HCLGE_CFG_MEDIA_TP_S);
1306 	cfg->rx_buf_len = hnae3_get_field(__le32_to_cpu(req->param[1]),
1307 					  HCLGE_CFG_RX_BUF_LEN_M,
1308 					  HCLGE_CFG_RX_BUF_LEN_S);
1309 	/* get mac_address */
1310 	mac_addr_tmp = __le32_to_cpu(req->param[2]);
1311 	mac_addr_tmp_high = hnae3_get_field(__le32_to_cpu(req->param[3]),
1312 					    HCLGE_CFG_MAC_ADDR_H_M,
1313 					    HCLGE_CFG_MAC_ADDR_H_S);
1314 
1315 	mac_addr_tmp |= (mac_addr_tmp_high << 31) << 1;
1316 
1317 	cfg->default_speed = hnae3_get_field(__le32_to_cpu(req->param[3]),
1318 					     HCLGE_CFG_DEFAULT_SPEED_M,
1319 					     HCLGE_CFG_DEFAULT_SPEED_S);
1320 	cfg->vf_rss_size_max = hnae3_get_field(__le32_to_cpu(req->param[3]),
1321 					       HCLGE_CFG_RSS_SIZE_M,
1322 					       HCLGE_CFG_RSS_SIZE_S);
1323 
1324 	for (i = 0; i < ETH_ALEN; i++)
1325 		cfg->mac_addr[i] = (mac_addr_tmp >> (8 * i)) & 0xff;
1326 
1327 	req = (struct hclge_cfg_param_cmd *)desc[1].data;
1328 	cfg->numa_node_map = __le32_to_cpu(req->param[0]);
1329 
1330 	cfg->speed_ability = hnae3_get_field(__le32_to_cpu(req->param[1]),
1331 					     HCLGE_CFG_SPEED_ABILITY_M,
1332 					     HCLGE_CFG_SPEED_ABILITY_S);
1333 	speed_ability_ext = hnae3_get_field(__le32_to_cpu(req->param[1]),
1334 					    HCLGE_CFG_SPEED_ABILITY_EXT_M,
1335 					    HCLGE_CFG_SPEED_ABILITY_EXT_S);
1336 	cfg->speed_ability |= speed_ability_ext << SPEED_ABILITY_EXT_SHIFT;
1337 
1338 	cfg->vlan_fliter_cap = hnae3_get_field(__le32_to_cpu(req->param[1]),
1339 					       HCLGE_CFG_VLAN_FLTR_CAP_M,
1340 					       HCLGE_CFG_VLAN_FLTR_CAP_S);
1341 
1342 	cfg->umv_space = hnae3_get_field(__le32_to_cpu(req->param[1]),
1343 					 HCLGE_CFG_UMV_TBL_SPACE_M,
1344 					 HCLGE_CFG_UMV_TBL_SPACE_S);
1345 	if (!cfg->umv_space)
1346 		cfg->umv_space = HCLGE_DEFAULT_UMV_SPACE_PER_PF;
1347 
1348 	cfg->pf_rss_size_max = hnae3_get_field(__le32_to_cpu(req->param[2]),
1349 					       HCLGE_CFG_PF_RSS_SIZE_M,
1350 					       HCLGE_CFG_PF_RSS_SIZE_S);
1351 
1352 	/* HCLGE_CFG_PF_RSS_SIZE_M is the PF max rss size, which is a
1353 	 * power of 2, instead of reading out directly. This would
1354 	 * be more flexible for future changes and expansions.
1355 	 * When VF max  rss size field is HCLGE_CFG_RSS_SIZE_S,
1356 	 * it does not make sense if PF's field is 0. In this case, PF and VF
1357 	 * has the same max rss size filed: HCLGE_CFG_RSS_SIZE_S.
1358 	 */
1359 	cfg->pf_rss_size_max = cfg->pf_rss_size_max ?
1360 			       1U << cfg->pf_rss_size_max :
1361 			       cfg->vf_rss_size_max;
1362 
1363 	/* The unit of the tx spare buffer size queried from configuration
1364 	 * file is HCLGE_TX_SPARE_SIZE_UNIT(4096) bytes, so a conversion is
1365 	 * needed here.
1366 	 */
1367 	cfg->tx_spare_buf_size = hnae3_get_field(__le32_to_cpu(req->param[2]),
1368 						 HCLGE_CFG_TX_SPARE_BUF_SIZE_M,
1369 						 HCLGE_CFG_TX_SPARE_BUF_SIZE_S);
1370 	cfg->tx_spare_buf_size *= HCLGE_TX_SPARE_SIZE_UNIT;
1371 }
1372 
1373 /* hclge_get_cfg: query the static parameter from flash
1374  * @hdev: pointer to struct hclge_dev
1375  * @hcfg: the config structure to be getted
1376  */
1377 static int hclge_get_cfg(struct hclge_dev *hdev, struct hclge_cfg *hcfg)
1378 {
1379 	struct hclge_desc desc[HCLGE_PF_CFG_DESC_NUM];
1380 	struct hclge_cfg_param_cmd *req;
1381 	unsigned int i;
1382 	int ret;
1383 
1384 	for (i = 0; i < HCLGE_PF_CFG_DESC_NUM; i++) {
1385 		u32 offset = 0;
1386 
1387 		req = (struct hclge_cfg_param_cmd *)desc[i].data;
1388 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_GET_CFG_PARAM,
1389 					   true);
1390 		hnae3_set_field(offset, HCLGE_CFG_OFFSET_M,
1391 				HCLGE_CFG_OFFSET_S, i * HCLGE_CFG_RD_LEN_BYTES);
1392 		/* Len should be united by 4 bytes when send to hardware */
1393 		hnae3_set_field(offset, HCLGE_CFG_RD_LEN_M, HCLGE_CFG_RD_LEN_S,
1394 				HCLGE_CFG_RD_LEN_BYTES / HCLGE_CFG_RD_LEN_UNIT);
1395 		req->offset = cpu_to_le32(offset);
1396 	}
1397 
1398 	ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_PF_CFG_DESC_NUM);
1399 	if (ret) {
1400 		dev_err(&hdev->pdev->dev, "get config failed %d.\n", ret);
1401 		return ret;
1402 	}
1403 
1404 	hclge_parse_cfg(hcfg, desc);
1405 
1406 	return 0;
1407 }
1408 
1409 static void hclge_set_default_dev_specs(struct hclge_dev *hdev)
1410 {
1411 #define HCLGE_MAX_NON_TSO_BD_NUM			8U
1412 
1413 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
1414 
1415 	ae_dev->dev_specs.max_non_tso_bd_num = HCLGE_MAX_NON_TSO_BD_NUM;
1416 	ae_dev->dev_specs.rss_ind_tbl_size = HCLGE_RSS_IND_TBL_SIZE;
1417 	ae_dev->dev_specs.rss_key_size = HCLGE_RSS_KEY_SIZE;
1418 	ae_dev->dev_specs.max_tm_rate = HCLGE_ETHER_MAX_RATE;
1419 	ae_dev->dev_specs.max_int_gl = HCLGE_DEF_MAX_INT_GL;
1420 	ae_dev->dev_specs.max_frm_size = HCLGE_MAC_MAX_FRAME;
1421 	ae_dev->dev_specs.max_qset_num = HCLGE_MAX_QSET_NUM;
1422 }
1423 
1424 static void hclge_parse_dev_specs(struct hclge_dev *hdev,
1425 				  struct hclge_desc *desc)
1426 {
1427 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
1428 	struct hclge_dev_specs_0_cmd *req0;
1429 	struct hclge_dev_specs_1_cmd *req1;
1430 
1431 	req0 = (struct hclge_dev_specs_0_cmd *)desc[0].data;
1432 	req1 = (struct hclge_dev_specs_1_cmd *)desc[1].data;
1433 
1434 	ae_dev->dev_specs.max_non_tso_bd_num = req0->max_non_tso_bd_num;
1435 	ae_dev->dev_specs.rss_ind_tbl_size =
1436 		le16_to_cpu(req0->rss_ind_tbl_size);
1437 	ae_dev->dev_specs.int_ql_max = le16_to_cpu(req0->int_ql_max);
1438 	ae_dev->dev_specs.rss_key_size = le16_to_cpu(req0->rss_key_size);
1439 	ae_dev->dev_specs.max_tm_rate = le32_to_cpu(req0->max_tm_rate);
1440 	ae_dev->dev_specs.max_qset_num = le16_to_cpu(req1->max_qset_num);
1441 	ae_dev->dev_specs.max_int_gl = le16_to_cpu(req1->max_int_gl);
1442 	ae_dev->dev_specs.max_frm_size = le16_to_cpu(req1->max_frm_size);
1443 }
1444 
1445 static void hclge_check_dev_specs(struct hclge_dev *hdev)
1446 {
1447 	struct hnae3_dev_specs *dev_specs = &hdev->ae_dev->dev_specs;
1448 
1449 	if (!dev_specs->max_non_tso_bd_num)
1450 		dev_specs->max_non_tso_bd_num = HCLGE_MAX_NON_TSO_BD_NUM;
1451 	if (!dev_specs->rss_ind_tbl_size)
1452 		dev_specs->rss_ind_tbl_size = HCLGE_RSS_IND_TBL_SIZE;
1453 	if (!dev_specs->rss_key_size)
1454 		dev_specs->rss_key_size = HCLGE_RSS_KEY_SIZE;
1455 	if (!dev_specs->max_tm_rate)
1456 		dev_specs->max_tm_rate = HCLGE_ETHER_MAX_RATE;
1457 	if (!dev_specs->max_qset_num)
1458 		dev_specs->max_qset_num = HCLGE_MAX_QSET_NUM;
1459 	if (!dev_specs->max_int_gl)
1460 		dev_specs->max_int_gl = HCLGE_DEF_MAX_INT_GL;
1461 	if (!dev_specs->max_frm_size)
1462 		dev_specs->max_frm_size = HCLGE_MAC_MAX_FRAME;
1463 }
1464 
1465 static int hclge_query_dev_specs(struct hclge_dev *hdev)
1466 {
1467 	struct hclge_desc desc[HCLGE_QUERY_DEV_SPECS_BD_NUM];
1468 	int ret;
1469 	int i;
1470 
1471 	/* set default specifications as devices lower than version V3 do not
1472 	 * support querying specifications from firmware.
1473 	 */
1474 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V3) {
1475 		hclge_set_default_dev_specs(hdev);
1476 		return 0;
1477 	}
1478 
1479 	for (i = 0; i < HCLGE_QUERY_DEV_SPECS_BD_NUM - 1; i++) {
1480 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_QUERY_DEV_SPECS,
1481 					   true);
1482 		desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
1483 	}
1484 	hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_QUERY_DEV_SPECS, true);
1485 
1486 	ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_QUERY_DEV_SPECS_BD_NUM);
1487 	if (ret)
1488 		return ret;
1489 
1490 	hclge_parse_dev_specs(hdev, desc);
1491 	hclge_check_dev_specs(hdev);
1492 
1493 	return 0;
1494 }
1495 
1496 static int hclge_get_cap(struct hclge_dev *hdev)
1497 {
1498 	int ret;
1499 
1500 	ret = hclge_query_function_status(hdev);
1501 	if (ret) {
1502 		dev_err(&hdev->pdev->dev,
1503 			"query function status error %d.\n", ret);
1504 		return ret;
1505 	}
1506 
1507 	/* get pf resource */
1508 	return hclge_query_pf_resource(hdev);
1509 }
1510 
1511 static void hclge_init_kdump_kernel_config(struct hclge_dev *hdev)
1512 {
1513 #define HCLGE_MIN_TX_DESC	64
1514 #define HCLGE_MIN_RX_DESC	64
1515 
1516 	if (!is_kdump_kernel())
1517 		return;
1518 
1519 	dev_info(&hdev->pdev->dev,
1520 		 "Running kdump kernel. Using minimal resources\n");
1521 
1522 	/* minimal queue pairs equals to the number of vports */
1523 	hdev->num_tqps = hdev->num_req_vfs + 1;
1524 	hdev->num_tx_desc = HCLGE_MIN_TX_DESC;
1525 	hdev->num_rx_desc = HCLGE_MIN_RX_DESC;
1526 }
1527 
1528 static int hclge_configure(struct hclge_dev *hdev)
1529 {
1530 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
1531 	struct hclge_cfg cfg;
1532 	unsigned int i;
1533 	int ret;
1534 
1535 	ret = hclge_get_cfg(hdev, &cfg);
1536 	if (ret)
1537 		return ret;
1538 
1539 	hdev->base_tqp_pid = 0;
1540 	hdev->vf_rss_size_max = cfg.vf_rss_size_max;
1541 	hdev->pf_rss_size_max = cfg.pf_rss_size_max;
1542 	hdev->rx_buf_len = cfg.rx_buf_len;
1543 	ether_addr_copy(hdev->hw.mac.mac_addr, cfg.mac_addr);
1544 	hdev->hw.mac.media_type = cfg.media_type;
1545 	hdev->hw.mac.phy_addr = cfg.phy_addr;
1546 	hdev->num_tx_desc = cfg.tqp_desc_num;
1547 	hdev->num_rx_desc = cfg.tqp_desc_num;
1548 	hdev->tm_info.num_pg = 1;
1549 	hdev->tc_max = cfg.tc_num;
1550 	hdev->tm_info.hw_pfc_map = 0;
1551 	hdev->wanted_umv_size = cfg.umv_space;
1552 	hdev->tx_spare_buf_size = cfg.tx_spare_buf_size;
1553 	hdev->gro_en = true;
1554 	if (cfg.vlan_fliter_cap == HCLGE_VLAN_FLTR_CAN_MDF)
1555 		set_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps);
1556 
1557 	if (hnae3_dev_fd_supported(hdev)) {
1558 		hdev->fd_en = true;
1559 		hdev->fd_active_type = HCLGE_FD_RULE_NONE;
1560 	}
1561 
1562 	ret = hclge_parse_speed(cfg.default_speed, &hdev->hw.mac.speed);
1563 	if (ret) {
1564 		dev_err(&hdev->pdev->dev, "failed to parse speed %u, ret = %d\n",
1565 			cfg.default_speed, ret);
1566 		return ret;
1567 	}
1568 
1569 	hclge_parse_link_mode(hdev, cfg.speed_ability);
1570 
1571 	hdev->hw.mac.max_speed = hclge_get_max_speed(cfg.speed_ability);
1572 
1573 	if ((hdev->tc_max > HNAE3_MAX_TC) ||
1574 	    (hdev->tc_max < 1)) {
1575 		dev_warn(&hdev->pdev->dev, "TC num = %u.\n",
1576 			 hdev->tc_max);
1577 		hdev->tc_max = 1;
1578 	}
1579 
1580 	/* Dev does not support DCB */
1581 	if (!hnae3_dev_dcb_supported(hdev)) {
1582 		hdev->tc_max = 1;
1583 		hdev->pfc_max = 0;
1584 	} else {
1585 		hdev->pfc_max = hdev->tc_max;
1586 	}
1587 
1588 	hdev->tm_info.num_tc = 1;
1589 
1590 	/* Currently not support uncontiuous tc */
1591 	for (i = 0; i < hdev->tm_info.num_tc; i++)
1592 		hnae3_set_bit(hdev->hw_tc_map, i, 1);
1593 
1594 	hdev->tx_sch_mode = HCLGE_FLAG_TC_BASE_SCH_MODE;
1595 
1596 	hclge_init_kdump_kernel_config(hdev);
1597 
1598 	/* Set the init affinity based on pci func number */
1599 	i = cpumask_weight(cpumask_of_node(dev_to_node(&hdev->pdev->dev)));
1600 	i = i ? PCI_FUNC(hdev->pdev->devfn) % i : 0;
1601 	cpumask_set_cpu(cpumask_local_spread(i, dev_to_node(&hdev->pdev->dev)),
1602 			&hdev->affinity_mask);
1603 
1604 	return ret;
1605 }
1606 
1607 static int hclge_config_tso(struct hclge_dev *hdev, u16 tso_mss_min,
1608 			    u16 tso_mss_max)
1609 {
1610 	struct hclge_cfg_tso_status_cmd *req;
1611 	struct hclge_desc desc;
1612 
1613 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_TSO_GENERIC_CONFIG, false);
1614 
1615 	req = (struct hclge_cfg_tso_status_cmd *)desc.data;
1616 	req->tso_mss_min = cpu_to_le16(tso_mss_min);
1617 	req->tso_mss_max = cpu_to_le16(tso_mss_max);
1618 
1619 	return hclge_cmd_send(&hdev->hw, &desc, 1);
1620 }
1621 
1622 static int hclge_config_gro(struct hclge_dev *hdev)
1623 {
1624 	struct hclge_cfg_gro_status_cmd *req;
1625 	struct hclge_desc desc;
1626 	int ret;
1627 
1628 	if (!hnae3_dev_gro_supported(hdev))
1629 		return 0;
1630 
1631 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GRO_GENERIC_CONFIG, false);
1632 	req = (struct hclge_cfg_gro_status_cmd *)desc.data;
1633 
1634 	req->gro_en = hdev->gro_en ? 1 : 0;
1635 
1636 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1637 	if (ret)
1638 		dev_err(&hdev->pdev->dev,
1639 			"GRO hardware config cmd failed, ret = %d\n", ret);
1640 
1641 	return ret;
1642 }
1643 
1644 static int hclge_alloc_tqps(struct hclge_dev *hdev)
1645 {
1646 	struct hclge_tqp *tqp;
1647 	int i;
1648 
1649 	hdev->htqp = devm_kcalloc(&hdev->pdev->dev, hdev->num_tqps,
1650 				  sizeof(struct hclge_tqp), GFP_KERNEL);
1651 	if (!hdev->htqp)
1652 		return -ENOMEM;
1653 
1654 	tqp = hdev->htqp;
1655 
1656 	for (i = 0; i < hdev->num_tqps; i++) {
1657 		tqp->dev = &hdev->pdev->dev;
1658 		tqp->index = i;
1659 
1660 		tqp->q.ae_algo = &ae_algo;
1661 		tqp->q.buf_size = hdev->rx_buf_len;
1662 		tqp->q.tx_desc_num = hdev->num_tx_desc;
1663 		tqp->q.rx_desc_num = hdev->num_rx_desc;
1664 
1665 		/* need an extended offset to configure queues >=
1666 		 * HCLGE_TQP_MAX_SIZE_DEV_V2
1667 		 */
1668 		if (i < HCLGE_TQP_MAX_SIZE_DEV_V2)
1669 			tqp->q.io_base = hdev->hw.io_base +
1670 					 HCLGE_TQP_REG_OFFSET +
1671 					 i * HCLGE_TQP_REG_SIZE;
1672 		else
1673 			tqp->q.io_base = hdev->hw.io_base +
1674 					 HCLGE_TQP_REG_OFFSET +
1675 					 HCLGE_TQP_EXT_REG_OFFSET +
1676 					 (i - HCLGE_TQP_MAX_SIZE_DEV_V2) *
1677 					 HCLGE_TQP_REG_SIZE;
1678 
1679 		tqp++;
1680 	}
1681 
1682 	return 0;
1683 }
1684 
1685 static int hclge_map_tqps_to_func(struct hclge_dev *hdev, u16 func_id,
1686 				  u16 tqp_pid, u16 tqp_vid, bool is_pf)
1687 {
1688 	struct hclge_tqp_map_cmd *req;
1689 	struct hclge_desc desc;
1690 	int ret;
1691 
1692 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_SET_TQP_MAP, false);
1693 
1694 	req = (struct hclge_tqp_map_cmd *)desc.data;
1695 	req->tqp_id = cpu_to_le16(tqp_pid);
1696 	req->tqp_vf = func_id;
1697 	req->tqp_flag = 1U << HCLGE_TQP_MAP_EN_B;
1698 	if (!is_pf)
1699 		req->tqp_flag |= 1U << HCLGE_TQP_MAP_TYPE_B;
1700 	req->tqp_vid = cpu_to_le16(tqp_vid);
1701 
1702 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1703 	if (ret)
1704 		dev_err(&hdev->pdev->dev, "TQP map failed %d.\n", ret);
1705 
1706 	return ret;
1707 }
1708 
1709 static int  hclge_assign_tqp(struct hclge_vport *vport, u16 num_tqps)
1710 {
1711 	struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
1712 	struct hclge_dev *hdev = vport->back;
1713 	int i, alloced;
1714 
1715 	for (i = 0, alloced = 0; i < hdev->num_tqps &&
1716 	     alloced < num_tqps; i++) {
1717 		if (!hdev->htqp[i].alloced) {
1718 			hdev->htqp[i].q.handle = &vport->nic;
1719 			hdev->htqp[i].q.tqp_index = alloced;
1720 			hdev->htqp[i].q.tx_desc_num = kinfo->num_tx_desc;
1721 			hdev->htqp[i].q.rx_desc_num = kinfo->num_rx_desc;
1722 			kinfo->tqp[alloced] = &hdev->htqp[i].q;
1723 			hdev->htqp[i].alloced = true;
1724 			alloced++;
1725 		}
1726 	}
1727 	vport->alloc_tqps = alloced;
1728 	kinfo->rss_size = min_t(u16, hdev->pf_rss_size_max,
1729 				vport->alloc_tqps / hdev->tm_info.num_tc);
1730 
1731 	/* ensure one to one mapping between irq and queue at default */
1732 	kinfo->rss_size = min_t(u16, kinfo->rss_size,
1733 				(hdev->num_nic_msi - 1) / hdev->tm_info.num_tc);
1734 
1735 	return 0;
1736 }
1737 
1738 static int hclge_knic_setup(struct hclge_vport *vport, u16 num_tqps,
1739 			    u16 num_tx_desc, u16 num_rx_desc)
1740 
1741 {
1742 	struct hnae3_handle *nic = &vport->nic;
1743 	struct hnae3_knic_private_info *kinfo = &nic->kinfo;
1744 	struct hclge_dev *hdev = vport->back;
1745 	int ret;
1746 
1747 	kinfo->num_tx_desc = num_tx_desc;
1748 	kinfo->num_rx_desc = num_rx_desc;
1749 
1750 	kinfo->rx_buf_len = hdev->rx_buf_len;
1751 	kinfo->tx_spare_buf_size = hdev->tx_spare_buf_size;
1752 
1753 	kinfo->tqp = devm_kcalloc(&hdev->pdev->dev, num_tqps,
1754 				  sizeof(struct hnae3_queue *), GFP_KERNEL);
1755 	if (!kinfo->tqp)
1756 		return -ENOMEM;
1757 
1758 	ret = hclge_assign_tqp(vport, num_tqps);
1759 	if (ret)
1760 		dev_err(&hdev->pdev->dev, "fail to assign TQPs %d.\n", ret);
1761 
1762 	return ret;
1763 }
1764 
1765 static int hclge_map_tqp_to_vport(struct hclge_dev *hdev,
1766 				  struct hclge_vport *vport)
1767 {
1768 	struct hnae3_handle *nic = &vport->nic;
1769 	struct hnae3_knic_private_info *kinfo;
1770 	u16 i;
1771 
1772 	kinfo = &nic->kinfo;
1773 	for (i = 0; i < vport->alloc_tqps; i++) {
1774 		struct hclge_tqp *q =
1775 			container_of(kinfo->tqp[i], struct hclge_tqp, q);
1776 		bool is_pf;
1777 		int ret;
1778 
1779 		is_pf = !(vport->vport_id);
1780 		ret = hclge_map_tqps_to_func(hdev, vport->vport_id, q->index,
1781 					     i, is_pf);
1782 		if (ret)
1783 			return ret;
1784 	}
1785 
1786 	return 0;
1787 }
1788 
1789 static int hclge_map_tqp(struct hclge_dev *hdev)
1790 {
1791 	struct hclge_vport *vport = hdev->vport;
1792 	u16 i, num_vport;
1793 
1794 	num_vport = hdev->num_req_vfs + 1;
1795 	for (i = 0; i < num_vport; i++)	{
1796 		int ret;
1797 
1798 		ret = hclge_map_tqp_to_vport(hdev, vport);
1799 		if (ret)
1800 			return ret;
1801 
1802 		vport++;
1803 	}
1804 
1805 	return 0;
1806 }
1807 
1808 static int hclge_vport_setup(struct hclge_vport *vport, u16 num_tqps)
1809 {
1810 	struct hnae3_handle *nic = &vport->nic;
1811 	struct hclge_dev *hdev = vport->back;
1812 	int ret;
1813 
1814 	nic->pdev = hdev->pdev;
1815 	nic->ae_algo = &ae_algo;
1816 	nic->numa_node_mask = hdev->numa_node_mask;
1817 	nic->kinfo.io_base = hdev->hw.io_base;
1818 
1819 	ret = hclge_knic_setup(vport, num_tqps,
1820 			       hdev->num_tx_desc, hdev->num_rx_desc);
1821 	if (ret)
1822 		dev_err(&hdev->pdev->dev, "knic setup failed %d\n", ret);
1823 
1824 	return ret;
1825 }
1826 
1827 static int hclge_alloc_vport(struct hclge_dev *hdev)
1828 {
1829 	struct pci_dev *pdev = hdev->pdev;
1830 	struct hclge_vport *vport;
1831 	u32 tqp_main_vport;
1832 	u32 tqp_per_vport;
1833 	int num_vport, i;
1834 	int ret;
1835 
1836 	/* We need to alloc a vport for main NIC of PF */
1837 	num_vport = hdev->num_req_vfs + 1;
1838 
1839 	if (hdev->num_tqps < num_vport) {
1840 		dev_err(&hdev->pdev->dev, "tqps(%u) is less than vports(%d)",
1841 			hdev->num_tqps, num_vport);
1842 		return -EINVAL;
1843 	}
1844 
1845 	/* Alloc the same number of TQPs for every vport */
1846 	tqp_per_vport = hdev->num_tqps / num_vport;
1847 	tqp_main_vport = tqp_per_vport + hdev->num_tqps % num_vport;
1848 
1849 	vport = devm_kcalloc(&pdev->dev, num_vport, sizeof(struct hclge_vport),
1850 			     GFP_KERNEL);
1851 	if (!vport)
1852 		return -ENOMEM;
1853 
1854 	hdev->vport = vport;
1855 	hdev->num_alloc_vport = num_vport;
1856 
1857 	if (IS_ENABLED(CONFIG_PCI_IOV))
1858 		hdev->num_alloc_vfs = hdev->num_req_vfs;
1859 
1860 	for (i = 0; i < num_vport; i++) {
1861 		vport->back = hdev;
1862 		vport->vport_id = i;
1863 		vport->vf_info.link_state = IFLA_VF_LINK_STATE_AUTO;
1864 		vport->mps = HCLGE_MAC_DEFAULT_FRAME;
1865 		vport->port_base_vlan_cfg.state = HNAE3_PORT_BASE_VLAN_DISABLE;
1866 		vport->rxvlan_cfg.rx_vlan_offload_en = true;
1867 		vport->req_vlan_fltr_en = true;
1868 		INIT_LIST_HEAD(&vport->vlan_list);
1869 		INIT_LIST_HEAD(&vport->uc_mac_list);
1870 		INIT_LIST_HEAD(&vport->mc_mac_list);
1871 		spin_lock_init(&vport->mac_list_lock);
1872 
1873 		if (i == 0)
1874 			ret = hclge_vport_setup(vport, tqp_main_vport);
1875 		else
1876 			ret = hclge_vport_setup(vport, tqp_per_vport);
1877 		if (ret) {
1878 			dev_err(&pdev->dev,
1879 				"vport setup failed for vport %d, %d\n",
1880 				i, ret);
1881 			return ret;
1882 		}
1883 
1884 		vport++;
1885 	}
1886 
1887 	return 0;
1888 }
1889 
1890 static int  hclge_cmd_alloc_tx_buff(struct hclge_dev *hdev,
1891 				    struct hclge_pkt_buf_alloc *buf_alloc)
1892 {
1893 /* TX buffer size is unit by 128 byte */
1894 #define HCLGE_BUF_SIZE_UNIT_SHIFT	7
1895 #define HCLGE_BUF_SIZE_UPDATE_EN_MSK	BIT(15)
1896 	struct hclge_tx_buff_alloc_cmd *req;
1897 	struct hclge_desc desc;
1898 	int ret;
1899 	u8 i;
1900 
1901 	req = (struct hclge_tx_buff_alloc_cmd *)desc.data;
1902 
1903 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_TX_BUFF_ALLOC, 0);
1904 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1905 		u32 buf_size = buf_alloc->priv_buf[i].tx_buf_size;
1906 
1907 		req->tx_pkt_buff[i] =
1908 			cpu_to_le16((buf_size >> HCLGE_BUF_SIZE_UNIT_SHIFT) |
1909 				     HCLGE_BUF_SIZE_UPDATE_EN_MSK);
1910 	}
1911 
1912 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
1913 	if (ret)
1914 		dev_err(&hdev->pdev->dev, "tx buffer alloc cmd failed %d.\n",
1915 			ret);
1916 
1917 	return ret;
1918 }
1919 
1920 static int hclge_tx_buffer_alloc(struct hclge_dev *hdev,
1921 				 struct hclge_pkt_buf_alloc *buf_alloc)
1922 {
1923 	int ret = hclge_cmd_alloc_tx_buff(hdev, buf_alloc);
1924 
1925 	if (ret)
1926 		dev_err(&hdev->pdev->dev, "tx buffer alloc failed %d\n", ret);
1927 
1928 	return ret;
1929 }
1930 
1931 static u32 hclge_get_tc_num(struct hclge_dev *hdev)
1932 {
1933 	unsigned int i;
1934 	u32 cnt = 0;
1935 
1936 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++)
1937 		if (hdev->hw_tc_map & BIT(i))
1938 			cnt++;
1939 	return cnt;
1940 }
1941 
1942 /* Get the number of pfc enabled TCs, which have private buffer */
1943 static int hclge_get_pfc_priv_num(struct hclge_dev *hdev,
1944 				  struct hclge_pkt_buf_alloc *buf_alloc)
1945 {
1946 	struct hclge_priv_buf *priv;
1947 	unsigned int i;
1948 	int cnt = 0;
1949 
1950 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1951 		priv = &buf_alloc->priv_buf[i];
1952 		if ((hdev->tm_info.hw_pfc_map & BIT(i)) &&
1953 		    priv->enable)
1954 			cnt++;
1955 	}
1956 
1957 	return cnt;
1958 }
1959 
1960 /* Get the number of pfc disabled TCs, which have private buffer */
1961 static int hclge_get_no_pfc_priv_num(struct hclge_dev *hdev,
1962 				     struct hclge_pkt_buf_alloc *buf_alloc)
1963 {
1964 	struct hclge_priv_buf *priv;
1965 	unsigned int i;
1966 	int cnt = 0;
1967 
1968 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1969 		priv = &buf_alloc->priv_buf[i];
1970 		if (hdev->hw_tc_map & BIT(i) &&
1971 		    !(hdev->tm_info.hw_pfc_map & BIT(i)) &&
1972 		    priv->enable)
1973 			cnt++;
1974 	}
1975 
1976 	return cnt;
1977 }
1978 
1979 static u32 hclge_get_rx_priv_buff_alloced(struct hclge_pkt_buf_alloc *buf_alloc)
1980 {
1981 	struct hclge_priv_buf *priv;
1982 	u32 rx_priv = 0;
1983 	int i;
1984 
1985 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
1986 		priv = &buf_alloc->priv_buf[i];
1987 		if (priv->enable)
1988 			rx_priv += priv->buf_size;
1989 	}
1990 	return rx_priv;
1991 }
1992 
1993 static u32 hclge_get_tx_buff_alloced(struct hclge_pkt_buf_alloc *buf_alloc)
1994 {
1995 	u32 i, total_tx_size = 0;
1996 
1997 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++)
1998 		total_tx_size += buf_alloc->priv_buf[i].tx_buf_size;
1999 
2000 	return total_tx_size;
2001 }
2002 
2003 static bool  hclge_is_rx_buf_ok(struct hclge_dev *hdev,
2004 				struct hclge_pkt_buf_alloc *buf_alloc,
2005 				u32 rx_all)
2006 {
2007 	u32 shared_buf_min, shared_buf_tc, shared_std, hi_thrd, lo_thrd;
2008 	u32 tc_num = hclge_get_tc_num(hdev);
2009 	u32 shared_buf, aligned_mps;
2010 	u32 rx_priv;
2011 	int i;
2012 
2013 	aligned_mps = roundup(hdev->mps, HCLGE_BUF_SIZE_UNIT);
2014 
2015 	if (hnae3_dev_dcb_supported(hdev))
2016 		shared_buf_min = HCLGE_BUF_MUL_BY * aligned_mps +
2017 					hdev->dv_buf_size;
2018 	else
2019 		shared_buf_min = aligned_mps + HCLGE_NON_DCB_ADDITIONAL_BUF
2020 					+ hdev->dv_buf_size;
2021 
2022 	shared_buf_tc = tc_num * aligned_mps + aligned_mps;
2023 	shared_std = roundup(max_t(u32, shared_buf_min, shared_buf_tc),
2024 			     HCLGE_BUF_SIZE_UNIT);
2025 
2026 	rx_priv = hclge_get_rx_priv_buff_alloced(buf_alloc);
2027 	if (rx_all < rx_priv + shared_std)
2028 		return false;
2029 
2030 	shared_buf = rounddown(rx_all - rx_priv, HCLGE_BUF_SIZE_UNIT);
2031 	buf_alloc->s_buf.buf_size = shared_buf;
2032 	if (hnae3_dev_dcb_supported(hdev)) {
2033 		buf_alloc->s_buf.self.high = shared_buf - hdev->dv_buf_size;
2034 		buf_alloc->s_buf.self.low = buf_alloc->s_buf.self.high
2035 			- roundup(aligned_mps / HCLGE_BUF_DIV_BY,
2036 				  HCLGE_BUF_SIZE_UNIT);
2037 	} else {
2038 		buf_alloc->s_buf.self.high = aligned_mps +
2039 						HCLGE_NON_DCB_ADDITIONAL_BUF;
2040 		buf_alloc->s_buf.self.low = aligned_mps;
2041 	}
2042 
2043 	if (hnae3_dev_dcb_supported(hdev)) {
2044 		hi_thrd = shared_buf - hdev->dv_buf_size;
2045 
2046 		if (tc_num <= NEED_RESERVE_TC_NUM)
2047 			hi_thrd = hi_thrd * BUF_RESERVE_PERCENT
2048 					/ BUF_MAX_PERCENT;
2049 
2050 		if (tc_num)
2051 			hi_thrd = hi_thrd / tc_num;
2052 
2053 		hi_thrd = max_t(u32, hi_thrd, HCLGE_BUF_MUL_BY * aligned_mps);
2054 		hi_thrd = rounddown(hi_thrd, HCLGE_BUF_SIZE_UNIT);
2055 		lo_thrd = hi_thrd - aligned_mps / HCLGE_BUF_DIV_BY;
2056 	} else {
2057 		hi_thrd = aligned_mps + HCLGE_NON_DCB_ADDITIONAL_BUF;
2058 		lo_thrd = aligned_mps;
2059 	}
2060 
2061 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2062 		buf_alloc->s_buf.tc_thrd[i].low = lo_thrd;
2063 		buf_alloc->s_buf.tc_thrd[i].high = hi_thrd;
2064 	}
2065 
2066 	return true;
2067 }
2068 
2069 static int hclge_tx_buffer_calc(struct hclge_dev *hdev,
2070 				struct hclge_pkt_buf_alloc *buf_alloc)
2071 {
2072 	u32 i, total_size;
2073 
2074 	total_size = hdev->pkt_buf_size;
2075 
2076 	/* alloc tx buffer for all enabled tc */
2077 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2078 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2079 
2080 		if (hdev->hw_tc_map & BIT(i)) {
2081 			if (total_size < hdev->tx_buf_size)
2082 				return -ENOMEM;
2083 
2084 			priv->tx_buf_size = hdev->tx_buf_size;
2085 		} else {
2086 			priv->tx_buf_size = 0;
2087 		}
2088 
2089 		total_size -= priv->tx_buf_size;
2090 	}
2091 
2092 	return 0;
2093 }
2094 
2095 static bool hclge_rx_buf_calc_all(struct hclge_dev *hdev, bool max,
2096 				  struct hclge_pkt_buf_alloc *buf_alloc)
2097 {
2098 	u32 rx_all = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc);
2099 	u32 aligned_mps = round_up(hdev->mps, HCLGE_BUF_SIZE_UNIT);
2100 	unsigned int i;
2101 
2102 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2103 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2104 
2105 		priv->enable = 0;
2106 		priv->wl.low = 0;
2107 		priv->wl.high = 0;
2108 		priv->buf_size = 0;
2109 
2110 		if (!(hdev->hw_tc_map & BIT(i)))
2111 			continue;
2112 
2113 		priv->enable = 1;
2114 
2115 		if (hdev->tm_info.hw_pfc_map & BIT(i)) {
2116 			priv->wl.low = max ? aligned_mps : HCLGE_BUF_SIZE_UNIT;
2117 			priv->wl.high = roundup(priv->wl.low + aligned_mps,
2118 						HCLGE_BUF_SIZE_UNIT);
2119 		} else {
2120 			priv->wl.low = 0;
2121 			priv->wl.high = max ? (aligned_mps * HCLGE_BUF_MUL_BY) :
2122 					aligned_mps;
2123 		}
2124 
2125 		priv->buf_size = priv->wl.high + hdev->dv_buf_size;
2126 	}
2127 
2128 	return hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all);
2129 }
2130 
2131 static bool hclge_drop_nopfc_buf_till_fit(struct hclge_dev *hdev,
2132 					  struct hclge_pkt_buf_alloc *buf_alloc)
2133 {
2134 	u32 rx_all = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc);
2135 	int no_pfc_priv_num = hclge_get_no_pfc_priv_num(hdev, buf_alloc);
2136 	int i;
2137 
2138 	/* let the last to be cleared first */
2139 	for (i = HCLGE_MAX_TC_NUM - 1; i >= 0; i--) {
2140 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2141 		unsigned int mask = BIT((unsigned int)i);
2142 
2143 		if (hdev->hw_tc_map & mask &&
2144 		    !(hdev->tm_info.hw_pfc_map & mask)) {
2145 			/* Clear the no pfc TC private buffer */
2146 			priv->wl.low = 0;
2147 			priv->wl.high = 0;
2148 			priv->buf_size = 0;
2149 			priv->enable = 0;
2150 			no_pfc_priv_num--;
2151 		}
2152 
2153 		if (hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all) ||
2154 		    no_pfc_priv_num == 0)
2155 			break;
2156 	}
2157 
2158 	return hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all);
2159 }
2160 
2161 static bool hclge_drop_pfc_buf_till_fit(struct hclge_dev *hdev,
2162 					struct hclge_pkt_buf_alloc *buf_alloc)
2163 {
2164 	u32 rx_all = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc);
2165 	int pfc_priv_num = hclge_get_pfc_priv_num(hdev, buf_alloc);
2166 	int i;
2167 
2168 	/* let the last to be cleared first */
2169 	for (i = HCLGE_MAX_TC_NUM - 1; i >= 0; i--) {
2170 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2171 		unsigned int mask = BIT((unsigned int)i);
2172 
2173 		if (hdev->hw_tc_map & mask &&
2174 		    hdev->tm_info.hw_pfc_map & mask) {
2175 			/* Reduce the number of pfc TC with private buffer */
2176 			priv->wl.low = 0;
2177 			priv->enable = 0;
2178 			priv->wl.high = 0;
2179 			priv->buf_size = 0;
2180 			pfc_priv_num--;
2181 		}
2182 
2183 		if (hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all) ||
2184 		    pfc_priv_num == 0)
2185 			break;
2186 	}
2187 
2188 	return hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all);
2189 }
2190 
2191 static int hclge_only_alloc_priv_buff(struct hclge_dev *hdev,
2192 				      struct hclge_pkt_buf_alloc *buf_alloc)
2193 {
2194 #define COMPENSATE_BUFFER	0x3C00
2195 #define COMPENSATE_HALF_MPS_NUM	5
2196 #define PRIV_WL_GAP		0x1800
2197 
2198 	u32 rx_priv = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc);
2199 	u32 tc_num = hclge_get_tc_num(hdev);
2200 	u32 half_mps = hdev->mps >> 1;
2201 	u32 min_rx_priv;
2202 	unsigned int i;
2203 
2204 	if (tc_num)
2205 		rx_priv = rx_priv / tc_num;
2206 
2207 	if (tc_num <= NEED_RESERVE_TC_NUM)
2208 		rx_priv = rx_priv * BUF_RESERVE_PERCENT / BUF_MAX_PERCENT;
2209 
2210 	min_rx_priv = hdev->dv_buf_size + COMPENSATE_BUFFER +
2211 			COMPENSATE_HALF_MPS_NUM * half_mps;
2212 	min_rx_priv = round_up(min_rx_priv, HCLGE_BUF_SIZE_UNIT);
2213 	rx_priv = round_down(rx_priv, HCLGE_BUF_SIZE_UNIT);
2214 	if (rx_priv < min_rx_priv)
2215 		return false;
2216 
2217 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2218 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2219 
2220 		priv->enable = 0;
2221 		priv->wl.low = 0;
2222 		priv->wl.high = 0;
2223 		priv->buf_size = 0;
2224 
2225 		if (!(hdev->hw_tc_map & BIT(i)))
2226 			continue;
2227 
2228 		priv->enable = 1;
2229 		priv->buf_size = rx_priv;
2230 		priv->wl.high = rx_priv - hdev->dv_buf_size;
2231 		priv->wl.low = priv->wl.high - PRIV_WL_GAP;
2232 	}
2233 
2234 	buf_alloc->s_buf.buf_size = 0;
2235 
2236 	return true;
2237 }
2238 
2239 /* hclge_rx_buffer_calc: calculate the rx private buffer size for all TCs
2240  * @hdev: pointer to struct hclge_dev
2241  * @buf_alloc: pointer to buffer calculation data
2242  * @return: 0: calculate successful, negative: fail
2243  */
2244 static int hclge_rx_buffer_calc(struct hclge_dev *hdev,
2245 				struct hclge_pkt_buf_alloc *buf_alloc)
2246 {
2247 	/* When DCB is not supported, rx private buffer is not allocated. */
2248 	if (!hnae3_dev_dcb_supported(hdev)) {
2249 		u32 rx_all = hdev->pkt_buf_size;
2250 
2251 		rx_all -= hclge_get_tx_buff_alloced(buf_alloc);
2252 		if (!hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all))
2253 			return -ENOMEM;
2254 
2255 		return 0;
2256 	}
2257 
2258 	if (hclge_only_alloc_priv_buff(hdev, buf_alloc))
2259 		return 0;
2260 
2261 	if (hclge_rx_buf_calc_all(hdev, true, buf_alloc))
2262 		return 0;
2263 
2264 	/* try to decrease the buffer size */
2265 	if (hclge_rx_buf_calc_all(hdev, false, buf_alloc))
2266 		return 0;
2267 
2268 	if (hclge_drop_nopfc_buf_till_fit(hdev, buf_alloc))
2269 		return 0;
2270 
2271 	if (hclge_drop_pfc_buf_till_fit(hdev, buf_alloc))
2272 		return 0;
2273 
2274 	return -ENOMEM;
2275 }
2276 
2277 static int hclge_rx_priv_buf_alloc(struct hclge_dev *hdev,
2278 				   struct hclge_pkt_buf_alloc *buf_alloc)
2279 {
2280 	struct hclge_rx_priv_buff_cmd *req;
2281 	struct hclge_desc desc;
2282 	int ret;
2283 	int i;
2284 
2285 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RX_PRIV_BUFF_ALLOC, false);
2286 	req = (struct hclge_rx_priv_buff_cmd *)desc.data;
2287 
2288 	/* Alloc private buffer TCs */
2289 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
2290 		struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i];
2291 
2292 		req->buf_num[i] =
2293 			cpu_to_le16(priv->buf_size >> HCLGE_BUF_UNIT_S);
2294 		req->buf_num[i] |=
2295 			cpu_to_le16(1 << HCLGE_TC0_PRI_BUF_EN_B);
2296 	}
2297 
2298 	req->shared_buf =
2299 		cpu_to_le16((buf_alloc->s_buf.buf_size >> HCLGE_BUF_UNIT_S) |
2300 			    (1 << HCLGE_TC0_PRI_BUF_EN_B));
2301 
2302 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2303 	if (ret)
2304 		dev_err(&hdev->pdev->dev,
2305 			"rx private buffer alloc cmd failed %d\n", ret);
2306 
2307 	return ret;
2308 }
2309 
2310 static int hclge_rx_priv_wl_config(struct hclge_dev *hdev,
2311 				   struct hclge_pkt_buf_alloc *buf_alloc)
2312 {
2313 	struct hclge_rx_priv_wl_buf *req;
2314 	struct hclge_priv_buf *priv;
2315 	struct hclge_desc desc[2];
2316 	int i, j;
2317 	int ret;
2318 
2319 	for (i = 0; i < 2; i++) {
2320 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_RX_PRIV_WL_ALLOC,
2321 					   false);
2322 		req = (struct hclge_rx_priv_wl_buf *)desc[i].data;
2323 
2324 		/* The first descriptor set the NEXT bit to 1 */
2325 		if (i == 0)
2326 			desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2327 		else
2328 			desc[i].flag &= ~cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2329 
2330 		for (j = 0; j < HCLGE_TC_NUM_ONE_DESC; j++) {
2331 			u32 idx = i * HCLGE_TC_NUM_ONE_DESC + j;
2332 
2333 			priv = &buf_alloc->priv_buf[idx];
2334 			req->tc_wl[j].high =
2335 				cpu_to_le16(priv->wl.high >> HCLGE_BUF_UNIT_S);
2336 			req->tc_wl[j].high |=
2337 				cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2338 			req->tc_wl[j].low =
2339 				cpu_to_le16(priv->wl.low >> HCLGE_BUF_UNIT_S);
2340 			req->tc_wl[j].low |=
2341 				 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2342 		}
2343 	}
2344 
2345 	/* Send 2 descriptor at one time */
2346 	ret = hclge_cmd_send(&hdev->hw, desc, 2);
2347 	if (ret)
2348 		dev_err(&hdev->pdev->dev,
2349 			"rx private waterline config cmd failed %d\n",
2350 			ret);
2351 	return ret;
2352 }
2353 
2354 static int hclge_common_thrd_config(struct hclge_dev *hdev,
2355 				    struct hclge_pkt_buf_alloc *buf_alloc)
2356 {
2357 	struct hclge_shared_buf *s_buf = &buf_alloc->s_buf;
2358 	struct hclge_rx_com_thrd *req;
2359 	struct hclge_desc desc[2];
2360 	struct hclge_tc_thrd *tc;
2361 	int i, j;
2362 	int ret;
2363 
2364 	for (i = 0; i < 2; i++) {
2365 		hclge_cmd_setup_basic_desc(&desc[i],
2366 					   HCLGE_OPC_RX_COM_THRD_ALLOC, false);
2367 		req = (struct hclge_rx_com_thrd *)&desc[i].data;
2368 
2369 		/* The first descriptor set the NEXT bit to 1 */
2370 		if (i == 0)
2371 			desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2372 		else
2373 			desc[i].flag &= ~cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
2374 
2375 		for (j = 0; j < HCLGE_TC_NUM_ONE_DESC; j++) {
2376 			tc = &s_buf->tc_thrd[i * HCLGE_TC_NUM_ONE_DESC + j];
2377 
2378 			req->com_thrd[j].high =
2379 				cpu_to_le16(tc->high >> HCLGE_BUF_UNIT_S);
2380 			req->com_thrd[j].high |=
2381 				 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2382 			req->com_thrd[j].low =
2383 				cpu_to_le16(tc->low >> HCLGE_BUF_UNIT_S);
2384 			req->com_thrd[j].low |=
2385 				 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2386 		}
2387 	}
2388 
2389 	/* Send 2 descriptors at one time */
2390 	ret = hclge_cmd_send(&hdev->hw, desc, 2);
2391 	if (ret)
2392 		dev_err(&hdev->pdev->dev,
2393 			"common threshold config cmd failed %d\n", ret);
2394 	return ret;
2395 }
2396 
2397 static int hclge_common_wl_config(struct hclge_dev *hdev,
2398 				  struct hclge_pkt_buf_alloc *buf_alloc)
2399 {
2400 	struct hclge_shared_buf *buf = &buf_alloc->s_buf;
2401 	struct hclge_rx_com_wl *req;
2402 	struct hclge_desc desc;
2403 	int ret;
2404 
2405 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RX_COM_WL_ALLOC, false);
2406 
2407 	req = (struct hclge_rx_com_wl *)desc.data;
2408 	req->com_wl.high = cpu_to_le16(buf->self.high >> HCLGE_BUF_UNIT_S);
2409 	req->com_wl.high |=  cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2410 
2411 	req->com_wl.low = cpu_to_le16(buf->self.low >> HCLGE_BUF_UNIT_S);
2412 	req->com_wl.low |=  cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
2413 
2414 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2415 	if (ret)
2416 		dev_err(&hdev->pdev->dev,
2417 			"common waterline config cmd failed %d\n", ret);
2418 
2419 	return ret;
2420 }
2421 
2422 int hclge_buffer_alloc(struct hclge_dev *hdev)
2423 {
2424 	struct hclge_pkt_buf_alloc *pkt_buf;
2425 	int ret;
2426 
2427 	pkt_buf = kzalloc(sizeof(*pkt_buf), GFP_KERNEL);
2428 	if (!pkt_buf)
2429 		return -ENOMEM;
2430 
2431 	ret = hclge_tx_buffer_calc(hdev, pkt_buf);
2432 	if (ret) {
2433 		dev_err(&hdev->pdev->dev,
2434 			"could not calc tx buffer size for all TCs %d\n", ret);
2435 		goto out;
2436 	}
2437 
2438 	ret = hclge_tx_buffer_alloc(hdev, pkt_buf);
2439 	if (ret) {
2440 		dev_err(&hdev->pdev->dev,
2441 			"could not alloc tx buffers %d\n", ret);
2442 		goto out;
2443 	}
2444 
2445 	ret = hclge_rx_buffer_calc(hdev, pkt_buf);
2446 	if (ret) {
2447 		dev_err(&hdev->pdev->dev,
2448 			"could not calc rx priv buffer size for all TCs %d\n",
2449 			ret);
2450 		goto out;
2451 	}
2452 
2453 	ret = hclge_rx_priv_buf_alloc(hdev, pkt_buf);
2454 	if (ret) {
2455 		dev_err(&hdev->pdev->dev, "could not alloc rx priv buffer %d\n",
2456 			ret);
2457 		goto out;
2458 	}
2459 
2460 	if (hnae3_dev_dcb_supported(hdev)) {
2461 		ret = hclge_rx_priv_wl_config(hdev, pkt_buf);
2462 		if (ret) {
2463 			dev_err(&hdev->pdev->dev,
2464 				"could not configure rx private waterline %d\n",
2465 				ret);
2466 			goto out;
2467 		}
2468 
2469 		ret = hclge_common_thrd_config(hdev, pkt_buf);
2470 		if (ret) {
2471 			dev_err(&hdev->pdev->dev,
2472 				"could not configure common threshold %d\n",
2473 				ret);
2474 			goto out;
2475 		}
2476 	}
2477 
2478 	ret = hclge_common_wl_config(hdev, pkt_buf);
2479 	if (ret)
2480 		dev_err(&hdev->pdev->dev,
2481 			"could not configure common waterline %d\n", ret);
2482 
2483 out:
2484 	kfree(pkt_buf);
2485 	return ret;
2486 }
2487 
2488 static int hclge_init_roce_base_info(struct hclge_vport *vport)
2489 {
2490 	struct hnae3_handle *roce = &vport->roce;
2491 	struct hnae3_handle *nic = &vport->nic;
2492 	struct hclge_dev *hdev = vport->back;
2493 
2494 	roce->rinfo.num_vectors = vport->back->num_roce_msi;
2495 
2496 	if (hdev->num_msi < hdev->num_nic_msi + hdev->num_roce_msi)
2497 		return -EINVAL;
2498 
2499 	roce->rinfo.base_vector = hdev->roce_base_vector;
2500 
2501 	roce->rinfo.netdev = nic->kinfo.netdev;
2502 	roce->rinfo.roce_io_base = hdev->hw.io_base;
2503 	roce->rinfo.roce_mem_base = hdev->hw.mem_base;
2504 
2505 	roce->pdev = nic->pdev;
2506 	roce->ae_algo = nic->ae_algo;
2507 	roce->numa_node_mask = nic->numa_node_mask;
2508 
2509 	return 0;
2510 }
2511 
2512 static int hclge_init_msi(struct hclge_dev *hdev)
2513 {
2514 	struct pci_dev *pdev = hdev->pdev;
2515 	int vectors;
2516 	int i;
2517 
2518 	vectors = pci_alloc_irq_vectors(pdev, HNAE3_MIN_VECTOR_NUM,
2519 					hdev->num_msi,
2520 					PCI_IRQ_MSI | PCI_IRQ_MSIX);
2521 	if (vectors < 0) {
2522 		dev_err(&pdev->dev,
2523 			"failed(%d) to allocate MSI/MSI-X vectors\n",
2524 			vectors);
2525 		return vectors;
2526 	}
2527 	if (vectors < hdev->num_msi)
2528 		dev_warn(&hdev->pdev->dev,
2529 			 "requested %u MSI/MSI-X, but allocated %d MSI/MSI-X\n",
2530 			 hdev->num_msi, vectors);
2531 
2532 	hdev->num_msi = vectors;
2533 	hdev->num_msi_left = vectors;
2534 
2535 	hdev->base_msi_vector = pdev->irq;
2536 	hdev->roce_base_vector = hdev->base_msi_vector +
2537 				hdev->num_nic_msi;
2538 
2539 	hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi,
2540 					   sizeof(u16), GFP_KERNEL);
2541 	if (!hdev->vector_status) {
2542 		pci_free_irq_vectors(pdev);
2543 		return -ENOMEM;
2544 	}
2545 
2546 	for (i = 0; i < hdev->num_msi; i++)
2547 		hdev->vector_status[i] = HCLGE_INVALID_VPORT;
2548 
2549 	hdev->vector_irq = devm_kcalloc(&pdev->dev, hdev->num_msi,
2550 					sizeof(int), GFP_KERNEL);
2551 	if (!hdev->vector_irq) {
2552 		pci_free_irq_vectors(pdev);
2553 		return -ENOMEM;
2554 	}
2555 
2556 	return 0;
2557 }
2558 
2559 static u8 hclge_check_speed_dup(u8 duplex, int speed)
2560 {
2561 	if (!(speed == HCLGE_MAC_SPEED_10M || speed == HCLGE_MAC_SPEED_100M))
2562 		duplex = HCLGE_MAC_FULL;
2563 
2564 	return duplex;
2565 }
2566 
2567 static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed,
2568 				      u8 duplex)
2569 {
2570 	struct hclge_config_mac_speed_dup_cmd *req;
2571 	struct hclge_desc desc;
2572 	int ret;
2573 
2574 	req = (struct hclge_config_mac_speed_dup_cmd *)desc.data;
2575 
2576 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_SPEED_DUP, false);
2577 
2578 	if (duplex)
2579 		hnae3_set_bit(req->speed_dup, HCLGE_CFG_DUPLEX_B, 1);
2580 
2581 	switch (speed) {
2582 	case HCLGE_MAC_SPEED_10M:
2583 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2584 				HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_10M);
2585 		break;
2586 	case HCLGE_MAC_SPEED_100M:
2587 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2588 				HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_100M);
2589 		break;
2590 	case HCLGE_MAC_SPEED_1G:
2591 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2592 				HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_1G);
2593 		break;
2594 	case HCLGE_MAC_SPEED_10G:
2595 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2596 				HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_10G);
2597 		break;
2598 	case HCLGE_MAC_SPEED_25G:
2599 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2600 				HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_25G);
2601 		break;
2602 	case HCLGE_MAC_SPEED_40G:
2603 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2604 				HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_40G);
2605 		break;
2606 	case HCLGE_MAC_SPEED_50G:
2607 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2608 				HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_50G);
2609 		break;
2610 	case HCLGE_MAC_SPEED_100G:
2611 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2612 				HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_100G);
2613 		break;
2614 	case HCLGE_MAC_SPEED_200G:
2615 		hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M,
2616 				HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_200G);
2617 		break;
2618 	default:
2619 		dev_err(&hdev->pdev->dev, "invalid speed (%d)\n", speed);
2620 		return -EINVAL;
2621 	}
2622 
2623 	hnae3_set_bit(req->mac_change_fec_en, HCLGE_CFG_MAC_SPEED_CHANGE_EN_B,
2624 		      1);
2625 
2626 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2627 	if (ret) {
2628 		dev_err(&hdev->pdev->dev,
2629 			"mac speed/duplex config cmd failed %d.\n", ret);
2630 		return ret;
2631 	}
2632 
2633 	return 0;
2634 }
2635 
2636 int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex)
2637 {
2638 	struct hclge_mac *mac = &hdev->hw.mac;
2639 	int ret;
2640 
2641 	duplex = hclge_check_speed_dup(duplex, speed);
2642 	if (!mac->support_autoneg && mac->speed == speed &&
2643 	    mac->duplex == duplex)
2644 		return 0;
2645 
2646 	ret = hclge_cfg_mac_speed_dup_hw(hdev, speed, duplex);
2647 	if (ret)
2648 		return ret;
2649 
2650 	hdev->hw.mac.speed = speed;
2651 	hdev->hw.mac.duplex = duplex;
2652 
2653 	return 0;
2654 }
2655 
2656 static int hclge_cfg_mac_speed_dup_h(struct hnae3_handle *handle, int speed,
2657 				     u8 duplex)
2658 {
2659 	struct hclge_vport *vport = hclge_get_vport(handle);
2660 	struct hclge_dev *hdev = vport->back;
2661 
2662 	return hclge_cfg_mac_speed_dup(hdev, speed, duplex);
2663 }
2664 
2665 static int hclge_set_autoneg_en(struct hclge_dev *hdev, bool enable)
2666 {
2667 	struct hclge_config_auto_neg_cmd *req;
2668 	struct hclge_desc desc;
2669 	u32 flag = 0;
2670 	int ret;
2671 
2672 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_AN_MODE, false);
2673 
2674 	req = (struct hclge_config_auto_neg_cmd *)desc.data;
2675 	if (enable)
2676 		hnae3_set_bit(flag, HCLGE_MAC_CFG_AN_EN_B, 1U);
2677 	req->cfg_an_cmd_flag = cpu_to_le32(flag);
2678 
2679 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2680 	if (ret)
2681 		dev_err(&hdev->pdev->dev, "auto neg set cmd failed %d.\n",
2682 			ret);
2683 
2684 	return ret;
2685 }
2686 
2687 static int hclge_set_autoneg(struct hnae3_handle *handle, bool enable)
2688 {
2689 	struct hclge_vport *vport = hclge_get_vport(handle);
2690 	struct hclge_dev *hdev = vport->back;
2691 
2692 	if (!hdev->hw.mac.support_autoneg) {
2693 		if (enable) {
2694 			dev_err(&hdev->pdev->dev,
2695 				"autoneg is not supported by current port\n");
2696 			return -EOPNOTSUPP;
2697 		} else {
2698 			return 0;
2699 		}
2700 	}
2701 
2702 	return hclge_set_autoneg_en(hdev, enable);
2703 }
2704 
2705 static int hclge_get_autoneg(struct hnae3_handle *handle)
2706 {
2707 	struct hclge_vport *vport = hclge_get_vport(handle);
2708 	struct hclge_dev *hdev = vport->back;
2709 	struct phy_device *phydev = hdev->hw.mac.phydev;
2710 
2711 	if (phydev)
2712 		return phydev->autoneg;
2713 
2714 	return hdev->hw.mac.autoneg;
2715 }
2716 
2717 static int hclge_restart_autoneg(struct hnae3_handle *handle)
2718 {
2719 	struct hclge_vport *vport = hclge_get_vport(handle);
2720 	struct hclge_dev *hdev = vport->back;
2721 	int ret;
2722 
2723 	dev_dbg(&hdev->pdev->dev, "restart autoneg\n");
2724 
2725 	ret = hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
2726 	if (ret)
2727 		return ret;
2728 	return hclge_notify_client(hdev, HNAE3_UP_CLIENT);
2729 }
2730 
2731 static int hclge_halt_autoneg(struct hnae3_handle *handle, bool halt)
2732 {
2733 	struct hclge_vport *vport = hclge_get_vport(handle);
2734 	struct hclge_dev *hdev = vport->back;
2735 
2736 	if (hdev->hw.mac.support_autoneg && hdev->hw.mac.autoneg)
2737 		return hclge_set_autoneg_en(hdev, !halt);
2738 
2739 	return 0;
2740 }
2741 
2742 static int hclge_set_fec_hw(struct hclge_dev *hdev, u32 fec_mode)
2743 {
2744 	struct hclge_config_fec_cmd *req;
2745 	struct hclge_desc desc;
2746 	int ret;
2747 
2748 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_FEC_MODE, false);
2749 
2750 	req = (struct hclge_config_fec_cmd *)desc.data;
2751 	if (fec_mode & BIT(HNAE3_FEC_AUTO))
2752 		hnae3_set_bit(req->fec_mode, HCLGE_MAC_CFG_FEC_AUTO_EN_B, 1);
2753 	if (fec_mode & BIT(HNAE3_FEC_RS))
2754 		hnae3_set_field(req->fec_mode, HCLGE_MAC_CFG_FEC_MODE_M,
2755 				HCLGE_MAC_CFG_FEC_MODE_S, HCLGE_MAC_FEC_RS);
2756 	if (fec_mode & BIT(HNAE3_FEC_BASER))
2757 		hnae3_set_field(req->fec_mode, HCLGE_MAC_CFG_FEC_MODE_M,
2758 				HCLGE_MAC_CFG_FEC_MODE_S, HCLGE_MAC_FEC_BASER);
2759 
2760 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2761 	if (ret)
2762 		dev_err(&hdev->pdev->dev, "set fec mode failed %d.\n", ret);
2763 
2764 	return ret;
2765 }
2766 
2767 static int hclge_set_fec(struct hnae3_handle *handle, u32 fec_mode)
2768 {
2769 	struct hclge_vport *vport = hclge_get_vport(handle);
2770 	struct hclge_dev *hdev = vport->back;
2771 	struct hclge_mac *mac = &hdev->hw.mac;
2772 	int ret;
2773 
2774 	if (fec_mode && !(mac->fec_ability & fec_mode)) {
2775 		dev_err(&hdev->pdev->dev, "unsupported fec mode\n");
2776 		return -EINVAL;
2777 	}
2778 
2779 	ret = hclge_set_fec_hw(hdev, fec_mode);
2780 	if (ret)
2781 		return ret;
2782 
2783 	mac->user_fec_mode = fec_mode | BIT(HNAE3_FEC_USER_DEF);
2784 	return 0;
2785 }
2786 
2787 static void hclge_get_fec(struct hnae3_handle *handle, u8 *fec_ability,
2788 			  u8 *fec_mode)
2789 {
2790 	struct hclge_vport *vport = hclge_get_vport(handle);
2791 	struct hclge_dev *hdev = vport->back;
2792 	struct hclge_mac *mac = &hdev->hw.mac;
2793 
2794 	if (fec_ability)
2795 		*fec_ability = mac->fec_ability;
2796 	if (fec_mode)
2797 		*fec_mode = mac->fec_mode;
2798 }
2799 
2800 static int hclge_mac_init(struct hclge_dev *hdev)
2801 {
2802 	struct hclge_mac *mac = &hdev->hw.mac;
2803 	int ret;
2804 
2805 	hdev->support_sfp_query = true;
2806 	hdev->hw.mac.duplex = HCLGE_MAC_FULL;
2807 	ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.speed,
2808 					 hdev->hw.mac.duplex);
2809 	if (ret)
2810 		return ret;
2811 
2812 	if (hdev->hw.mac.support_autoneg) {
2813 		ret = hclge_set_autoneg_en(hdev, hdev->hw.mac.autoneg);
2814 		if (ret)
2815 			return ret;
2816 	}
2817 
2818 	mac->link = 0;
2819 
2820 	if (mac->user_fec_mode & BIT(HNAE3_FEC_USER_DEF)) {
2821 		ret = hclge_set_fec_hw(hdev, mac->user_fec_mode);
2822 		if (ret)
2823 			return ret;
2824 	}
2825 
2826 	ret = hclge_set_mac_mtu(hdev, hdev->mps);
2827 	if (ret) {
2828 		dev_err(&hdev->pdev->dev, "set mtu failed ret=%d\n", ret);
2829 		return ret;
2830 	}
2831 
2832 	ret = hclge_set_default_loopback(hdev);
2833 	if (ret)
2834 		return ret;
2835 
2836 	ret = hclge_buffer_alloc(hdev);
2837 	if (ret)
2838 		dev_err(&hdev->pdev->dev,
2839 			"allocate buffer fail, ret=%d\n", ret);
2840 
2841 	return ret;
2842 }
2843 
2844 static void hclge_mbx_task_schedule(struct hclge_dev *hdev)
2845 {
2846 	if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
2847 	    !test_and_set_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state))
2848 		mod_delayed_work_on(cpumask_first(&hdev->affinity_mask),
2849 				    hclge_wq, &hdev->service_task, 0);
2850 }
2851 
2852 static void hclge_reset_task_schedule(struct hclge_dev *hdev)
2853 {
2854 	if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
2855 	    !test_and_set_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state))
2856 		mod_delayed_work_on(cpumask_first(&hdev->affinity_mask),
2857 				    hclge_wq, &hdev->service_task, 0);
2858 }
2859 
2860 static void hclge_errhand_task_schedule(struct hclge_dev *hdev)
2861 {
2862 	if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
2863 	    !test_and_set_bit(HCLGE_STATE_ERR_SERVICE_SCHED, &hdev->state))
2864 		mod_delayed_work_on(cpumask_first(&hdev->affinity_mask),
2865 				    hclge_wq, &hdev->service_task, 0);
2866 }
2867 
2868 void hclge_task_schedule(struct hclge_dev *hdev, unsigned long delay_time)
2869 {
2870 	if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) &&
2871 	    !test_bit(HCLGE_STATE_RST_FAIL, &hdev->state))
2872 		mod_delayed_work_on(cpumask_first(&hdev->affinity_mask),
2873 				    hclge_wq, &hdev->service_task,
2874 				    delay_time);
2875 }
2876 
2877 static int hclge_get_mac_link_status(struct hclge_dev *hdev, int *link_status)
2878 {
2879 	struct hclge_link_status_cmd *req;
2880 	struct hclge_desc desc;
2881 	int ret;
2882 
2883 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_LINK_STATUS, true);
2884 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
2885 	if (ret) {
2886 		dev_err(&hdev->pdev->dev, "get link status cmd failed %d\n",
2887 			ret);
2888 		return ret;
2889 	}
2890 
2891 	req = (struct hclge_link_status_cmd *)desc.data;
2892 	*link_status = (req->status & HCLGE_LINK_STATUS_UP_M) > 0 ?
2893 		HCLGE_LINK_STATUS_UP : HCLGE_LINK_STATUS_DOWN;
2894 
2895 	return 0;
2896 }
2897 
2898 static int hclge_get_mac_phy_link(struct hclge_dev *hdev, int *link_status)
2899 {
2900 	struct phy_device *phydev = hdev->hw.mac.phydev;
2901 
2902 	*link_status = HCLGE_LINK_STATUS_DOWN;
2903 
2904 	if (test_bit(HCLGE_STATE_DOWN, &hdev->state))
2905 		return 0;
2906 
2907 	if (phydev && (phydev->state != PHY_RUNNING || !phydev->link))
2908 		return 0;
2909 
2910 	return hclge_get_mac_link_status(hdev, link_status);
2911 }
2912 
2913 static void hclge_push_link_status(struct hclge_dev *hdev)
2914 {
2915 	struct hclge_vport *vport;
2916 	int ret;
2917 	u16 i;
2918 
2919 	for (i = 0; i < pci_num_vf(hdev->pdev); i++) {
2920 		vport = &hdev->vport[i + HCLGE_VF_VPORT_START_NUM];
2921 
2922 		if (!test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state) ||
2923 		    vport->vf_info.link_state != IFLA_VF_LINK_STATE_AUTO)
2924 			continue;
2925 
2926 		ret = hclge_push_vf_link_status(vport);
2927 		if (ret) {
2928 			dev_err(&hdev->pdev->dev,
2929 				"failed to push link status to vf%u, ret = %d\n",
2930 				i, ret);
2931 		}
2932 	}
2933 }
2934 
2935 static void hclge_update_link_status(struct hclge_dev *hdev)
2936 {
2937 	struct hnae3_handle *rhandle = &hdev->vport[0].roce;
2938 	struct hnae3_handle *handle = &hdev->vport[0].nic;
2939 	struct hnae3_client *rclient = hdev->roce_client;
2940 	struct hnae3_client *client = hdev->nic_client;
2941 	int state;
2942 	int ret;
2943 
2944 	if (!client)
2945 		return;
2946 
2947 	if (test_and_set_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state))
2948 		return;
2949 
2950 	ret = hclge_get_mac_phy_link(hdev, &state);
2951 	if (ret) {
2952 		clear_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state);
2953 		return;
2954 	}
2955 
2956 	if (state != hdev->hw.mac.link) {
2957 		hdev->hw.mac.link = state;
2958 		client->ops->link_status_change(handle, state);
2959 		hclge_config_mac_tnl_int(hdev, state);
2960 		if (rclient && rclient->ops->link_status_change)
2961 			rclient->ops->link_status_change(rhandle, state);
2962 
2963 		hclge_push_link_status(hdev);
2964 	}
2965 
2966 	clear_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state);
2967 }
2968 
2969 static void hclge_update_port_capability(struct hclge_dev *hdev,
2970 					 struct hclge_mac *mac)
2971 {
2972 	if (hnae3_dev_fec_supported(hdev))
2973 		/* update fec ability by speed */
2974 		hclge_convert_setting_fec(mac);
2975 
2976 	/* firmware can not identify back plane type, the media type
2977 	 * read from configuration can help deal it
2978 	 */
2979 	if (mac->media_type == HNAE3_MEDIA_TYPE_BACKPLANE &&
2980 	    mac->module_type == HNAE3_MODULE_TYPE_UNKNOWN)
2981 		mac->module_type = HNAE3_MODULE_TYPE_KR;
2982 	else if (mac->media_type == HNAE3_MEDIA_TYPE_COPPER)
2983 		mac->module_type = HNAE3_MODULE_TYPE_TP;
2984 
2985 	if (mac->support_autoneg) {
2986 		linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, mac->supported);
2987 		linkmode_copy(mac->advertising, mac->supported);
2988 	} else {
2989 		linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
2990 				   mac->supported);
2991 		linkmode_zero(mac->advertising);
2992 	}
2993 }
2994 
2995 static int hclge_get_sfp_speed(struct hclge_dev *hdev, u32 *speed)
2996 {
2997 	struct hclge_sfp_info_cmd *resp;
2998 	struct hclge_desc desc;
2999 	int ret;
3000 
3001 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GET_SFP_INFO, true);
3002 	resp = (struct hclge_sfp_info_cmd *)desc.data;
3003 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
3004 	if (ret == -EOPNOTSUPP) {
3005 		dev_warn(&hdev->pdev->dev,
3006 			 "IMP do not support get SFP speed %d\n", ret);
3007 		return ret;
3008 	} else if (ret) {
3009 		dev_err(&hdev->pdev->dev, "get sfp speed failed %d\n", ret);
3010 		return ret;
3011 	}
3012 
3013 	*speed = le32_to_cpu(resp->speed);
3014 
3015 	return 0;
3016 }
3017 
3018 static int hclge_get_sfp_info(struct hclge_dev *hdev, struct hclge_mac *mac)
3019 {
3020 	struct hclge_sfp_info_cmd *resp;
3021 	struct hclge_desc desc;
3022 	int ret;
3023 
3024 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GET_SFP_INFO, true);
3025 	resp = (struct hclge_sfp_info_cmd *)desc.data;
3026 
3027 	resp->query_type = QUERY_ACTIVE_SPEED;
3028 
3029 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
3030 	if (ret == -EOPNOTSUPP) {
3031 		dev_warn(&hdev->pdev->dev,
3032 			 "IMP does not support get SFP info %d\n", ret);
3033 		return ret;
3034 	} else if (ret) {
3035 		dev_err(&hdev->pdev->dev, "get sfp info failed %d\n", ret);
3036 		return ret;
3037 	}
3038 
3039 	/* In some case, mac speed get from IMP may be 0, it shouldn't be
3040 	 * set to mac->speed.
3041 	 */
3042 	if (!le32_to_cpu(resp->speed))
3043 		return 0;
3044 
3045 	mac->speed = le32_to_cpu(resp->speed);
3046 	/* if resp->speed_ability is 0, it means it's an old version
3047 	 * firmware, do not update these params
3048 	 */
3049 	if (resp->speed_ability) {
3050 		mac->module_type = le32_to_cpu(resp->module_type);
3051 		mac->speed_ability = le32_to_cpu(resp->speed_ability);
3052 		mac->autoneg = resp->autoneg;
3053 		mac->support_autoneg = resp->autoneg_ability;
3054 		mac->speed_type = QUERY_ACTIVE_SPEED;
3055 		if (!resp->active_fec)
3056 			mac->fec_mode = 0;
3057 		else
3058 			mac->fec_mode = BIT(resp->active_fec);
3059 	} else {
3060 		mac->speed_type = QUERY_SFP_SPEED;
3061 	}
3062 
3063 	return 0;
3064 }
3065 
3066 static int hclge_get_phy_link_ksettings(struct hnae3_handle *handle,
3067 					struct ethtool_link_ksettings *cmd)
3068 {
3069 	struct hclge_desc desc[HCLGE_PHY_LINK_SETTING_BD_NUM];
3070 	struct hclge_vport *vport = hclge_get_vport(handle);
3071 	struct hclge_phy_link_ksetting_0_cmd *req0;
3072 	struct hclge_phy_link_ksetting_1_cmd *req1;
3073 	u32 supported, advertising, lp_advertising;
3074 	struct hclge_dev *hdev = vport->back;
3075 	int ret;
3076 
3077 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_PHY_LINK_KSETTING,
3078 				   true);
3079 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
3080 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_PHY_LINK_KSETTING,
3081 				   true);
3082 
3083 	ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_PHY_LINK_SETTING_BD_NUM);
3084 	if (ret) {
3085 		dev_err(&hdev->pdev->dev,
3086 			"failed to get phy link ksetting, ret = %d.\n", ret);
3087 		return ret;
3088 	}
3089 
3090 	req0 = (struct hclge_phy_link_ksetting_0_cmd *)desc[0].data;
3091 	cmd->base.autoneg = req0->autoneg;
3092 	cmd->base.speed = le32_to_cpu(req0->speed);
3093 	cmd->base.duplex = req0->duplex;
3094 	cmd->base.port = req0->port;
3095 	cmd->base.transceiver = req0->transceiver;
3096 	cmd->base.phy_address = req0->phy_address;
3097 	cmd->base.eth_tp_mdix = req0->eth_tp_mdix;
3098 	cmd->base.eth_tp_mdix_ctrl = req0->eth_tp_mdix_ctrl;
3099 	supported = le32_to_cpu(req0->supported);
3100 	advertising = le32_to_cpu(req0->advertising);
3101 	lp_advertising = le32_to_cpu(req0->lp_advertising);
3102 	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
3103 						supported);
3104 	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
3105 						advertising);
3106 	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.lp_advertising,
3107 						lp_advertising);
3108 
3109 	req1 = (struct hclge_phy_link_ksetting_1_cmd *)desc[1].data;
3110 	cmd->base.master_slave_cfg = req1->master_slave_cfg;
3111 	cmd->base.master_slave_state = req1->master_slave_state;
3112 
3113 	return 0;
3114 }
3115 
3116 static int
3117 hclge_set_phy_link_ksettings(struct hnae3_handle *handle,
3118 			     const struct ethtool_link_ksettings *cmd)
3119 {
3120 	struct hclge_desc desc[HCLGE_PHY_LINK_SETTING_BD_NUM];
3121 	struct hclge_vport *vport = hclge_get_vport(handle);
3122 	struct hclge_phy_link_ksetting_0_cmd *req0;
3123 	struct hclge_phy_link_ksetting_1_cmd *req1;
3124 	struct hclge_dev *hdev = vport->back;
3125 	u32 advertising;
3126 	int ret;
3127 
3128 	if (cmd->base.autoneg == AUTONEG_DISABLE &&
3129 	    ((cmd->base.speed != SPEED_100 && cmd->base.speed != SPEED_10) ||
3130 	     (cmd->base.duplex != DUPLEX_HALF &&
3131 	      cmd->base.duplex != DUPLEX_FULL)))
3132 		return -EINVAL;
3133 
3134 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_PHY_LINK_KSETTING,
3135 				   false);
3136 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
3137 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_PHY_LINK_KSETTING,
3138 				   false);
3139 
3140 	req0 = (struct hclge_phy_link_ksetting_0_cmd *)desc[0].data;
3141 	req0->autoneg = cmd->base.autoneg;
3142 	req0->speed = cpu_to_le32(cmd->base.speed);
3143 	req0->duplex = cmd->base.duplex;
3144 	ethtool_convert_link_mode_to_legacy_u32(&advertising,
3145 						cmd->link_modes.advertising);
3146 	req0->advertising = cpu_to_le32(advertising);
3147 	req0->eth_tp_mdix_ctrl = cmd->base.eth_tp_mdix_ctrl;
3148 
3149 	req1 = (struct hclge_phy_link_ksetting_1_cmd *)desc[1].data;
3150 	req1->master_slave_cfg = cmd->base.master_slave_cfg;
3151 
3152 	ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_PHY_LINK_SETTING_BD_NUM);
3153 	if (ret) {
3154 		dev_err(&hdev->pdev->dev,
3155 			"failed to set phy link ksettings, ret = %d.\n", ret);
3156 		return ret;
3157 	}
3158 
3159 	hdev->hw.mac.autoneg = cmd->base.autoneg;
3160 	hdev->hw.mac.speed = cmd->base.speed;
3161 	hdev->hw.mac.duplex = cmd->base.duplex;
3162 	linkmode_copy(hdev->hw.mac.advertising, cmd->link_modes.advertising);
3163 
3164 	return 0;
3165 }
3166 
3167 static int hclge_update_tp_port_info(struct hclge_dev *hdev)
3168 {
3169 	struct ethtool_link_ksettings cmd;
3170 	int ret;
3171 
3172 	if (!hnae3_dev_phy_imp_supported(hdev))
3173 		return 0;
3174 
3175 	ret = hclge_get_phy_link_ksettings(&hdev->vport->nic, &cmd);
3176 	if (ret)
3177 		return ret;
3178 
3179 	hdev->hw.mac.autoneg = cmd.base.autoneg;
3180 	hdev->hw.mac.speed = cmd.base.speed;
3181 	hdev->hw.mac.duplex = cmd.base.duplex;
3182 
3183 	return 0;
3184 }
3185 
3186 static int hclge_tp_port_init(struct hclge_dev *hdev)
3187 {
3188 	struct ethtool_link_ksettings cmd;
3189 
3190 	if (!hnae3_dev_phy_imp_supported(hdev))
3191 		return 0;
3192 
3193 	cmd.base.autoneg = hdev->hw.mac.autoneg;
3194 	cmd.base.speed = hdev->hw.mac.speed;
3195 	cmd.base.duplex = hdev->hw.mac.duplex;
3196 	linkmode_copy(cmd.link_modes.advertising, hdev->hw.mac.advertising);
3197 
3198 	return hclge_set_phy_link_ksettings(&hdev->vport->nic, &cmd);
3199 }
3200 
3201 static int hclge_update_port_info(struct hclge_dev *hdev)
3202 {
3203 	struct hclge_mac *mac = &hdev->hw.mac;
3204 	int speed = HCLGE_MAC_SPEED_UNKNOWN;
3205 	int ret;
3206 
3207 	/* get the port info from SFP cmd if not copper port */
3208 	if (mac->media_type == HNAE3_MEDIA_TYPE_COPPER)
3209 		return hclge_update_tp_port_info(hdev);
3210 
3211 	/* if IMP does not support get SFP/qSFP info, return directly */
3212 	if (!hdev->support_sfp_query)
3213 		return 0;
3214 
3215 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2)
3216 		ret = hclge_get_sfp_info(hdev, mac);
3217 	else
3218 		ret = hclge_get_sfp_speed(hdev, &speed);
3219 
3220 	if (ret == -EOPNOTSUPP) {
3221 		hdev->support_sfp_query = false;
3222 		return ret;
3223 	} else if (ret) {
3224 		return ret;
3225 	}
3226 
3227 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
3228 		if (mac->speed_type == QUERY_ACTIVE_SPEED) {
3229 			hclge_update_port_capability(hdev, mac);
3230 			return 0;
3231 		}
3232 		return hclge_cfg_mac_speed_dup(hdev, mac->speed,
3233 					       HCLGE_MAC_FULL);
3234 	} else {
3235 		if (speed == HCLGE_MAC_SPEED_UNKNOWN)
3236 			return 0; /* do nothing if no SFP */
3237 
3238 		/* must config full duplex for SFP */
3239 		return hclge_cfg_mac_speed_dup(hdev, speed, HCLGE_MAC_FULL);
3240 	}
3241 }
3242 
3243 static int hclge_get_status(struct hnae3_handle *handle)
3244 {
3245 	struct hclge_vport *vport = hclge_get_vport(handle);
3246 	struct hclge_dev *hdev = vport->back;
3247 
3248 	hclge_update_link_status(hdev);
3249 
3250 	return hdev->hw.mac.link;
3251 }
3252 
3253 static struct hclge_vport *hclge_get_vf_vport(struct hclge_dev *hdev, int vf)
3254 {
3255 	if (!pci_num_vf(hdev->pdev)) {
3256 		dev_err(&hdev->pdev->dev,
3257 			"SRIOV is disabled, can not get vport(%d) info.\n", vf);
3258 		return NULL;
3259 	}
3260 
3261 	if (vf < 0 || vf >= pci_num_vf(hdev->pdev)) {
3262 		dev_err(&hdev->pdev->dev,
3263 			"vf id(%d) is out of range(0 <= vfid < %d)\n",
3264 			vf, pci_num_vf(hdev->pdev));
3265 		return NULL;
3266 	}
3267 
3268 	/* VF start from 1 in vport */
3269 	vf += HCLGE_VF_VPORT_START_NUM;
3270 	return &hdev->vport[vf];
3271 }
3272 
3273 static int hclge_get_vf_config(struct hnae3_handle *handle, int vf,
3274 			       struct ifla_vf_info *ivf)
3275 {
3276 	struct hclge_vport *vport = hclge_get_vport(handle);
3277 	struct hclge_dev *hdev = vport->back;
3278 
3279 	vport = hclge_get_vf_vport(hdev, vf);
3280 	if (!vport)
3281 		return -EINVAL;
3282 
3283 	ivf->vf = vf;
3284 	ivf->linkstate = vport->vf_info.link_state;
3285 	ivf->spoofchk = vport->vf_info.spoofchk;
3286 	ivf->trusted = vport->vf_info.trusted;
3287 	ivf->min_tx_rate = 0;
3288 	ivf->max_tx_rate = vport->vf_info.max_tx_rate;
3289 	ivf->vlan = vport->port_base_vlan_cfg.vlan_info.vlan_tag;
3290 	ivf->vlan_proto = htons(vport->port_base_vlan_cfg.vlan_info.vlan_proto);
3291 	ivf->qos = vport->port_base_vlan_cfg.vlan_info.qos;
3292 	ether_addr_copy(ivf->mac, vport->vf_info.mac);
3293 
3294 	return 0;
3295 }
3296 
3297 static int hclge_set_vf_link_state(struct hnae3_handle *handle, int vf,
3298 				   int link_state)
3299 {
3300 	struct hclge_vport *vport = hclge_get_vport(handle);
3301 	struct hclge_dev *hdev = vport->back;
3302 	int link_state_old;
3303 	int ret;
3304 
3305 	vport = hclge_get_vf_vport(hdev, vf);
3306 	if (!vport)
3307 		return -EINVAL;
3308 
3309 	link_state_old = vport->vf_info.link_state;
3310 	vport->vf_info.link_state = link_state;
3311 
3312 	ret = hclge_push_vf_link_status(vport);
3313 	if (ret) {
3314 		vport->vf_info.link_state = link_state_old;
3315 		dev_err(&hdev->pdev->dev,
3316 			"failed to push vf%d link status, ret = %d\n", vf, ret);
3317 	}
3318 
3319 	return ret;
3320 }
3321 
3322 static u32 hclge_check_event_cause(struct hclge_dev *hdev, u32 *clearval)
3323 {
3324 	u32 cmdq_src_reg, msix_src_reg, hw_err_src_reg;
3325 
3326 	/* fetch the events from their corresponding regs */
3327 	cmdq_src_reg = hclge_read_dev(&hdev->hw, HCLGE_VECTOR0_CMDQ_SRC_REG);
3328 	msix_src_reg = hclge_read_dev(&hdev->hw, HCLGE_MISC_VECTOR_INT_STS);
3329 	hw_err_src_reg = hclge_read_dev(&hdev->hw,
3330 					HCLGE_RAS_PF_OTHER_INT_STS_REG);
3331 
3332 	/* Assumption: If by any chance reset and mailbox events are reported
3333 	 * together then we will only process reset event in this go and will
3334 	 * defer the processing of the mailbox events. Since, we would have not
3335 	 * cleared RX CMDQ event this time we would receive again another
3336 	 * interrupt from H/W just for the mailbox.
3337 	 *
3338 	 * check for vector0 reset event sources
3339 	 */
3340 	if (BIT(HCLGE_VECTOR0_IMPRESET_INT_B) & msix_src_reg) {
3341 		dev_info(&hdev->pdev->dev, "IMP reset interrupt\n");
3342 		set_bit(HNAE3_IMP_RESET, &hdev->reset_pending);
3343 		set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
3344 		*clearval = BIT(HCLGE_VECTOR0_IMPRESET_INT_B);
3345 		hdev->rst_stats.imp_rst_cnt++;
3346 		return HCLGE_VECTOR0_EVENT_RST;
3347 	}
3348 
3349 	if (BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B) & msix_src_reg) {
3350 		dev_info(&hdev->pdev->dev, "global reset interrupt\n");
3351 		set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
3352 		set_bit(HNAE3_GLOBAL_RESET, &hdev->reset_pending);
3353 		*clearval = BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B);
3354 		hdev->rst_stats.global_rst_cnt++;
3355 		return HCLGE_VECTOR0_EVENT_RST;
3356 	}
3357 
3358 	/* check for vector0 msix event and hardware error event source */
3359 	if (msix_src_reg & HCLGE_VECTOR0_REG_MSIX_MASK ||
3360 	    hw_err_src_reg & HCLGE_RAS_REG_ERR_MASK)
3361 		return HCLGE_VECTOR0_EVENT_ERR;
3362 
3363 	/* check for vector0 ptp event source */
3364 	if (BIT(HCLGE_VECTOR0_REG_PTP_INT_B) & msix_src_reg) {
3365 		*clearval = msix_src_reg;
3366 		return HCLGE_VECTOR0_EVENT_PTP;
3367 	}
3368 
3369 	/* check for vector0 mailbox(=CMDQ RX) event source */
3370 	if (BIT(HCLGE_VECTOR0_RX_CMDQ_INT_B) & cmdq_src_reg) {
3371 		cmdq_src_reg &= ~BIT(HCLGE_VECTOR0_RX_CMDQ_INT_B);
3372 		*clearval = cmdq_src_reg;
3373 		return HCLGE_VECTOR0_EVENT_MBX;
3374 	}
3375 
3376 	/* print other vector0 event source */
3377 	dev_info(&hdev->pdev->dev,
3378 		 "INT status: CMDQ(%#x) HW errors(%#x) other(%#x)\n",
3379 		 cmdq_src_reg, hw_err_src_reg, msix_src_reg);
3380 
3381 	return HCLGE_VECTOR0_EVENT_OTHER;
3382 }
3383 
3384 static void hclge_clear_event_cause(struct hclge_dev *hdev, u32 event_type,
3385 				    u32 regclr)
3386 {
3387 	switch (event_type) {
3388 	case HCLGE_VECTOR0_EVENT_PTP:
3389 	case HCLGE_VECTOR0_EVENT_RST:
3390 		hclge_write_dev(&hdev->hw, HCLGE_MISC_RESET_STS_REG, regclr);
3391 		break;
3392 	case HCLGE_VECTOR0_EVENT_MBX:
3393 		hclge_write_dev(&hdev->hw, HCLGE_VECTOR0_CMDQ_SRC_REG, regclr);
3394 		break;
3395 	default:
3396 		break;
3397 	}
3398 }
3399 
3400 static void hclge_clear_all_event_cause(struct hclge_dev *hdev)
3401 {
3402 	hclge_clear_event_cause(hdev, HCLGE_VECTOR0_EVENT_RST,
3403 				BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B) |
3404 				BIT(HCLGE_VECTOR0_CORERESET_INT_B) |
3405 				BIT(HCLGE_VECTOR0_IMPRESET_INT_B));
3406 	hclge_clear_event_cause(hdev, HCLGE_VECTOR0_EVENT_MBX, 0);
3407 }
3408 
3409 static void hclge_enable_vector(struct hclge_misc_vector *vector, bool enable)
3410 {
3411 	writel(enable ? 1 : 0, vector->addr);
3412 }
3413 
3414 static irqreturn_t hclge_misc_irq_handle(int irq, void *data)
3415 {
3416 	struct hclge_dev *hdev = data;
3417 	unsigned long flags;
3418 	u32 clearval = 0;
3419 	u32 event_cause;
3420 
3421 	hclge_enable_vector(&hdev->misc_vector, false);
3422 	event_cause = hclge_check_event_cause(hdev, &clearval);
3423 
3424 	/* vector 0 interrupt is shared with reset and mailbox source events. */
3425 	switch (event_cause) {
3426 	case HCLGE_VECTOR0_EVENT_ERR:
3427 		hclge_errhand_task_schedule(hdev);
3428 		break;
3429 	case HCLGE_VECTOR0_EVENT_RST:
3430 		hclge_reset_task_schedule(hdev);
3431 		break;
3432 	case HCLGE_VECTOR0_EVENT_PTP:
3433 		spin_lock_irqsave(&hdev->ptp->lock, flags);
3434 		hclge_ptp_clean_tx_hwts(hdev);
3435 		spin_unlock_irqrestore(&hdev->ptp->lock, flags);
3436 		break;
3437 	case HCLGE_VECTOR0_EVENT_MBX:
3438 		/* If we are here then,
3439 		 * 1. Either we are not handling any mbx task and we are not
3440 		 *    scheduled as well
3441 		 *                        OR
3442 		 * 2. We could be handling a mbx task but nothing more is
3443 		 *    scheduled.
3444 		 * In both cases, we should schedule mbx task as there are more
3445 		 * mbx messages reported by this interrupt.
3446 		 */
3447 		hclge_mbx_task_schedule(hdev);
3448 		break;
3449 	default:
3450 		dev_warn(&hdev->pdev->dev,
3451 			 "received unknown or unhandled event of vector0\n");
3452 		break;
3453 	}
3454 
3455 	hclge_clear_event_cause(hdev, event_cause, clearval);
3456 
3457 	/* Enable interrupt if it is not caused by reset event or error event */
3458 	if (event_cause == HCLGE_VECTOR0_EVENT_PTP ||
3459 	    event_cause == HCLGE_VECTOR0_EVENT_MBX ||
3460 	    event_cause == HCLGE_VECTOR0_EVENT_OTHER)
3461 		hclge_enable_vector(&hdev->misc_vector, true);
3462 
3463 	return IRQ_HANDLED;
3464 }
3465 
3466 static void hclge_free_vector(struct hclge_dev *hdev, int vector_id)
3467 {
3468 	if (hdev->vector_status[vector_id] == HCLGE_INVALID_VPORT) {
3469 		dev_warn(&hdev->pdev->dev,
3470 			 "vector(vector_id %d) has been freed.\n", vector_id);
3471 		return;
3472 	}
3473 
3474 	hdev->vector_status[vector_id] = HCLGE_INVALID_VPORT;
3475 	hdev->num_msi_left += 1;
3476 	hdev->num_msi_used -= 1;
3477 }
3478 
3479 static void hclge_get_misc_vector(struct hclge_dev *hdev)
3480 {
3481 	struct hclge_misc_vector *vector = &hdev->misc_vector;
3482 
3483 	vector->vector_irq = pci_irq_vector(hdev->pdev, 0);
3484 
3485 	vector->addr = hdev->hw.io_base + HCLGE_MISC_VECTOR_REG_BASE;
3486 	hdev->vector_status[0] = 0;
3487 
3488 	hdev->num_msi_left -= 1;
3489 	hdev->num_msi_used += 1;
3490 }
3491 
3492 static void hclge_irq_affinity_notify(struct irq_affinity_notify *notify,
3493 				      const cpumask_t *mask)
3494 {
3495 	struct hclge_dev *hdev = container_of(notify, struct hclge_dev,
3496 					      affinity_notify);
3497 
3498 	cpumask_copy(&hdev->affinity_mask, mask);
3499 }
3500 
3501 static void hclge_irq_affinity_release(struct kref *ref)
3502 {
3503 }
3504 
3505 static void hclge_misc_affinity_setup(struct hclge_dev *hdev)
3506 {
3507 	irq_set_affinity_hint(hdev->misc_vector.vector_irq,
3508 			      &hdev->affinity_mask);
3509 
3510 	hdev->affinity_notify.notify = hclge_irq_affinity_notify;
3511 	hdev->affinity_notify.release = hclge_irq_affinity_release;
3512 	irq_set_affinity_notifier(hdev->misc_vector.vector_irq,
3513 				  &hdev->affinity_notify);
3514 }
3515 
3516 static void hclge_misc_affinity_teardown(struct hclge_dev *hdev)
3517 {
3518 	irq_set_affinity_notifier(hdev->misc_vector.vector_irq, NULL);
3519 	irq_set_affinity_hint(hdev->misc_vector.vector_irq, NULL);
3520 }
3521 
3522 static int hclge_misc_irq_init(struct hclge_dev *hdev)
3523 {
3524 	int ret;
3525 
3526 	hclge_get_misc_vector(hdev);
3527 
3528 	/* this would be explicitly freed in the end */
3529 	snprintf(hdev->misc_vector.name, HNAE3_INT_NAME_LEN, "%s-misc-%s",
3530 		 HCLGE_NAME, pci_name(hdev->pdev));
3531 	ret = request_irq(hdev->misc_vector.vector_irq, hclge_misc_irq_handle,
3532 			  0, hdev->misc_vector.name, hdev);
3533 	if (ret) {
3534 		hclge_free_vector(hdev, 0);
3535 		dev_err(&hdev->pdev->dev, "request misc irq(%d) fail\n",
3536 			hdev->misc_vector.vector_irq);
3537 	}
3538 
3539 	return ret;
3540 }
3541 
3542 static void hclge_misc_irq_uninit(struct hclge_dev *hdev)
3543 {
3544 	free_irq(hdev->misc_vector.vector_irq, hdev);
3545 	hclge_free_vector(hdev, 0);
3546 }
3547 
3548 int hclge_notify_client(struct hclge_dev *hdev,
3549 			enum hnae3_reset_notify_type type)
3550 {
3551 	struct hnae3_handle *handle = &hdev->vport[0].nic;
3552 	struct hnae3_client *client = hdev->nic_client;
3553 	int ret;
3554 
3555 	if (!test_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state) || !client)
3556 		return 0;
3557 
3558 	if (!client->ops->reset_notify)
3559 		return -EOPNOTSUPP;
3560 
3561 	ret = client->ops->reset_notify(handle, type);
3562 	if (ret)
3563 		dev_err(&hdev->pdev->dev, "notify nic client failed %d(%d)\n",
3564 			type, ret);
3565 
3566 	return ret;
3567 }
3568 
3569 static int hclge_notify_roce_client(struct hclge_dev *hdev,
3570 				    enum hnae3_reset_notify_type type)
3571 {
3572 	struct hnae3_handle *handle = &hdev->vport[0].roce;
3573 	struct hnae3_client *client = hdev->roce_client;
3574 	int ret;
3575 
3576 	if (!test_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state) || !client)
3577 		return 0;
3578 
3579 	if (!client->ops->reset_notify)
3580 		return -EOPNOTSUPP;
3581 
3582 	ret = client->ops->reset_notify(handle, type);
3583 	if (ret)
3584 		dev_err(&hdev->pdev->dev, "notify roce client failed %d(%d)",
3585 			type, ret);
3586 
3587 	return ret;
3588 }
3589 
3590 static int hclge_reset_wait(struct hclge_dev *hdev)
3591 {
3592 #define HCLGE_RESET_WATI_MS	100
3593 #define HCLGE_RESET_WAIT_CNT	350
3594 
3595 	u32 val, reg, reg_bit;
3596 	u32 cnt = 0;
3597 
3598 	switch (hdev->reset_type) {
3599 	case HNAE3_IMP_RESET:
3600 		reg = HCLGE_GLOBAL_RESET_REG;
3601 		reg_bit = HCLGE_IMP_RESET_BIT;
3602 		break;
3603 	case HNAE3_GLOBAL_RESET:
3604 		reg = HCLGE_GLOBAL_RESET_REG;
3605 		reg_bit = HCLGE_GLOBAL_RESET_BIT;
3606 		break;
3607 	case HNAE3_FUNC_RESET:
3608 		reg = HCLGE_FUN_RST_ING;
3609 		reg_bit = HCLGE_FUN_RST_ING_B;
3610 		break;
3611 	default:
3612 		dev_err(&hdev->pdev->dev,
3613 			"Wait for unsupported reset type: %d\n",
3614 			hdev->reset_type);
3615 		return -EINVAL;
3616 	}
3617 
3618 	val = hclge_read_dev(&hdev->hw, reg);
3619 	while (hnae3_get_bit(val, reg_bit) && cnt < HCLGE_RESET_WAIT_CNT) {
3620 		msleep(HCLGE_RESET_WATI_MS);
3621 		val = hclge_read_dev(&hdev->hw, reg);
3622 		cnt++;
3623 	}
3624 
3625 	if (cnt >= HCLGE_RESET_WAIT_CNT) {
3626 		dev_warn(&hdev->pdev->dev,
3627 			 "Wait for reset timeout: %d\n", hdev->reset_type);
3628 		return -EBUSY;
3629 	}
3630 
3631 	return 0;
3632 }
3633 
3634 static int hclge_set_vf_rst(struct hclge_dev *hdev, int func_id, bool reset)
3635 {
3636 	struct hclge_vf_rst_cmd *req;
3637 	struct hclge_desc desc;
3638 
3639 	req = (struct hclge_vf_rst_cmd *)desc.data;
3640 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GBL_RST_STATUS, false);
3641 	req->dest_vfid = func_id;
3642 
3643 	if (reset)
3644 		req->vf_rst = 0x1;
3645 
3646 	return hclge_cmd_send(&hdev->hw, &desc, 1);
3647 }
3648 
3649 static int hclge_set_all_vf_rst(struct hclge_dev *hdev, bool reset)
3650 {
3651 	int i;
3652 
3653 	for (i = HCLGE_VF_VPORT_START_NUM; i < hdev->num_alloc_vport; i++) {
3654 		struct hclge_vport *vport = &hdev->vport[i];
3655 		int ret;
3656 
3657 		/* Send cmd to set/clear VF's FUNC_RST_ING */
3658 		ret = hclge_set_vf_rst(hdev, vport->vport_id, reset);
3659 		if (ret) {
3660 			dev_err(&hdev->pdev->dev,
3661 				"set vf(%u) rst failed %d!\n",
3662 				vport->vport_id, ret);
3663 			return ret;
3664 		}
3665 
3666 		if (!reset || !test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state))
3667 			continue;
3668 
3669 		/* Inform VF to process the reset.
3670 		 * hclge_inform_reset_assert_to_vf may fail if VF
3671 		 * driver is not loaded.
3672 		 */
3673 		ret = hclge_inform_reset_assert_to_vf(vport);
3674 		if (ret)
3675 			dev_warn(&hdev->pdev->dev,
3676 				 "inform reset to vf(%u) failed %d!\n",
3677 				 vport->vport_id, ret);
3678 	}
3679 
3680 	return 0;
3681 }
3682 
3683 static void hclge_mailbox_service_task(struct hclge_dev *hdev)
3684 {
3685 	if (!test_and_clear_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state) ||
3686 	    test_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state) ||
3687 	    test_and_set_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state))
3688 		return;
3689 
3690 	hclge_mbx_handler(hdev);
3691 
3692 	clear_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state);
3693 }
3694 
3695 static void hclge_func_reset_sync_vf(struct hclge_dev *hdev)
3696 {
3697 	struct hclge_pf_rst_sync_cmd *req;
3698 	struct hclge_desc desc;
3699 	int cnt = 0;
3700 	int ret;
3701 
3702 	req = (struct hclge_pf_rst_sync_cmd *)desc.data;
3703 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_VF_RST_RDY, true);
3704 
3705 	do {
3706 		/* vf need to down netdev by mbx during PF or FLR reset */
3707 		hclge_mailbox_service_task(hdev);
3708 
3709 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
3710 		/* for compatible with old firmware, wait
3711 		 * 100 ms for VF to stop IO
3712 		 */
3713 		if (ret == -EOPNOTSUPP) {
3714 			msleep(HCLGE_RESET_SYNC_TIME);
3715 			return;
3716 		} else if (ret) {
3717 			dev_warn(&hdev->pdev->dev, "sync with VF fail %d!\n",
3718 				 ret);
3719 			return;
3720 		} else if (req->all_vf_ready) {
3721 			return;
3722 		}
3723 		msleep(HCLGE_PF_RESET_SYNC_TIME);
3724 		hclge_cmd_reuse_desc(&desc, true);
3725 	} while (cnt++ < HCLGE_PF_RESET_SYNC_CNT);
3726 
3727 	dev_warn(&hdev->pdev->dev, "sync with VF timeout!\n");
3728 }
3729 
3730 void hclge_report_hw_error(struct hclge_dev *hdev,
3731 			   enum hnae3_hw_error_type type)
3732 {
3733 	struct hnae3_client *client = hdev->nic_client;
3734 
3735 	if (!client || !client->ops->process_hw_error ||
3736 	    !test_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state))
3737 		return;
3738 
3739 	client->ops->process_hw_error(&hdev->vport[0].nic, type);
3740 }
3741 
3742 static void hclge_handle_imp_error(struct hclge_dev *hdev)
3743 {
3744 	u32 reg_val;
3745 
3746 	reg_val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG);
3747 	if (reg_val & BIT(HCLGE_VECTOR0_IMP_RD_POISON_B)) {
3748 		hclge_report_hw_error(hdev, HNAE3_IMP_RD_POISON_ERROR);
3749 		reg_val &= ~BIT(HCLGE_VECTOR0_IMP_RD_POISON_B);
3750 		hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, reg_val);
3751 	}
3752 
3753 	if (reg_val & BIT(HCLGE_VECTOR0_IMP_CMDQ_ERR_B)) {
3754 		hclge_report_hw_error(hdev, HNAE3_CMDQ_ECC_ERROR);
3755 		reg_val &= ~BIT(HCLGE_VECTOR0_IMP_CMDQ_ERR_B);
3756 		hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, reg_val);
3757 	}
3758 }
3759 
3760 int hclge_func_reset_cmd(struct hclge_dev *hdev, int func_id)
3761 {
3762 	struct hclge_desc desc;
3763 	struct hclge_reset_cmd *req = (struct hclge_reset_cmd *)desc.data;
3764 	int ret;
3765 
3766 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_RST_TRIGGER, false);
3767 	hnae3_set_bit(req->mac_func_reset, HCLGE_CFG_RESET_FUNC_B, 1);
3768 	req->fun_reset_vfid = func_id;
3769 
3770 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
3771 	if (ret)
3772 		dev_err(&hdev->pdev->dev,
3773 			"send function reset cmd fail, status =%d\n", ret);
3774 
3775 	return ret;
3776 }
3777 
3778 static void hclge_do_reset(struct hclge_dev *hdev)
3779 {
3780 	struct hnae3_handle *handle = &hdev->vport[0].nic;
3781 	struct pci_dev *pdev = hdev->pdev;
3782 	u32 val;
3783 
3784 	if (hclge_get_hw_reset_stat(handle)) {
3785 		dev_info(&pdev->dev, "hardware reset not finish\n");
3786 		dev_info(&pdev->dev, "func_rst_reg:0x%x, global_rst_reg:0x%x\n",
3787 			 hclge_read_dev(&hdev->hw, HCLGE_FUN_RST_ING),
3788 			 hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG));
3789 		return;
3790 	}
3791 
3792 	switch (hdev->reset_type) {
3793 	case HNAE3_IMP_RESET:
3794 		dev_info(&pdev->dev, "IMP reset requested\n");
3795 		val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG);
3796 		hnae3_set_bit(val, HCLGE_TRIGGER_IMP_RESET_B, 1);
3797 		hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, val);
3798 		break;
3799 	case HNAE3_GLOBAL_RESET:
3800 		dev_info(&pdev->dev, "global reset requested\n");
3801 		val = hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG);
3802 		hnae3_set_bit(val, HCLGE_GLOBAL_RESET_BIT, 1);
3803 		hclge_write_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG, val);
3804 		break;
3805 	case HNAE3_FUNC_RESET:
3806 		dev_info(&pdev->dev, "PF reset requested\n");
3807 		/* schedule again to check later */
3808 		set_bit(HNAE3_FUNC_RESET, &hdev->reset_pending);
3809 		hclge_reset_task_schedule(hdev);
3810 		break;
3811 	default:
3812 		dev_warn(&pdev->dev,
3813 			 "unsupported reset type: %d\n", hdev->reset_type);
3814 		break;
3815 	}
3816 }
3817 
3818 static enum hnae3_reset_type hclge_get_reset_level(struct hnae3_ae_dev *ae_dev,
3819 						   unsigned long *addr)
3820 {
3821 	enum hnae3_reset_type rst_level = HNAE3_NONE_RESET;
3822 	struct hclge_dev *hdev = ae_dev->priv;
3823 
3824 	/* return the highest priority reset level amongst all */
3825 	if (test_bit(HNAE3_IMP_RESET, addr)) {
3826 		rst_level = HNAE3_IMP_RESET;
3827 		clear_bit(HNAE3_IMP_RESET, addr);
3828 		clear_bit(HNAE3_GLOBAL_RESET, addr);
3829 		clear_bit(HNAE3_FUNC_RESET, addr);
3830 	} else if (test_bit(HNAE3_GLOBAL_RESET, addr)) {
3831 		rst_level = HNAE3_GLOBAL_RESET;
3832 		clear_bit(HNAE3_GLOBAL_RESET, addr);
3833 		clear_bit(HNAE3_FUNC_RESET, addr);
3834 	} else if (test_bit(HNAE3_FUNC_RESET, addr)) {
3835 		rst_level = HNAE3_FUNC_RESET;
3836 		clear_bit(HNAE3_FUNC_RESET, addr);
3837 	} else if (test_bit(HNAE3_FLR_RESET, addr)) {
3838 		rst_level = HNAE3_FLR_RESET;
3839 		clear_bit(HNAE3_FLR_RESET, addr);
3840 	}
3841 
3842 	if (hdev->reset_type != HNAE3_NONE_RESET &&
3843 	    rst_level < hdev->reset_type)
3844 		return HNAE3_NONE_RESET;
3845 
3846 	return rst_level;
3847 }
3848 
3849 static void hclge_clear_reset_cause(struct hclge_dev *hdev)
3850 {
3851 	u32 clearval = 0;
3852 
3853 	switch (hdev->reset_type) {
3854 	case HNAE3_IMP_RESET:
3855 		clearval = BIT(HCLGE_VECTOR0_IMPRESET_INT_B);
3856 		break;
3857 	case HNAE3_GLOBAL_RESET:
3858 		clearval = BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B);
3859 		break;
3860 	default:
3861 		break;
3862 	}
3863 
3864 	if (!clearval)
3865 		return;
3866 
3867 	/* For revision 0x20, the reset interrupt source
3868 	 * can only be cleared after hardware reset done
3869 	 */
3870 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
3871 		hclge_write_dev(&hdev->hw, HCLGE_MISC_RESET_STS_REG,
3872 				clearval);
3873 
3874 	hclge_enable_vector(&hdev->misc_vector, true);
3875 }
3876 
3877 static void hclge_reset_handshake(struct hclge_dev *hdev, bool enable)
3878 {
3879 	u32 reg_val;
3880 
3881 	reg_val = hclge_read_dev(&hdev->hw, HCLGE_NIC_CSQ_DEPTH_REG);
3882 	if (enable)
3883 		reg_val |= HCLGE_NIC_SW_RST_RDY;
3884 	else
3885 		reg_val &= ~HCLGE_NIC_SW_RST_RDY;
3886 
3887 	hclge_write_dev(&hdev->hw, HCLGE_NIC_CSQ_DEPTH_REG, reg_val);
3888 }
3889 
3890 static int hclge_func_reset_notify_vf(struct hclge_dev *hdev)
3891 {
3892 	int ret;
3893 
3894 	ret = hclge_set_all_vf_rst(hdev, true);
3895 	if (ret)
3896 		return ret;
3897 
3898 	hclge_func_reset_sync_vf(hdev);
3899 
3900 	return 0;
3901 }
3902 
3903 static int hclge_reset_prepare_wait(struct hclge_dev *hdev)
3904 {
3905 	u32 reg_val;
3906 	int ret = 0;
3907 
3908 	switch (hdev->reset_type) {
3909 	case HNAE3_FUNC_RESET:
3910 		ret = hclge_func_reset_notify_vf(hdev);
3911 		if (ret)
3912 			return ret;
3913 
3914 		ret = hclge_func_reset_cmd(hdev, 0);
3915 		if (ret) {
3916 			dev_err(&hdev->pdev->dev,
3917 				"asserting function reset fail %d!\n", ret);
3918 			return ret;
3919 		}
3920 
3921 		/* After performaning pf reset, it is not necessary to do the
3922 		 * mailbox handling or send any command to firmware, because
3923 		 * any mailbox handling or command to firmware is only valid
3924 		 * after hclge_cmd_init is called.
3925 		 */
3926 		set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
3927 		hdev->rst_stats.pf_rst_cnt++;
3928 		break;
3929 	case HNAE3_FLR_RESET:
3930 		ret = hclge_func_reset_notify_vf(hdev);
3931 		if (ret)
3932 			return ret;
3933 		break;
3934 	case HNAE3_IMP_RESET:
3935 		hclge_handle_imp_error(hdev);
3936 		reg_val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG);
3937 		hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG,
3938 				BIT(HCLGE_VECTOR0_IMP_RESET_INT_B) | reg_val);
3939 		break;
3940 	default:
3941 		break;
3942 	}
3943 
3944 	/* inform hardware that preparatory work is done */
3945 	msleep(HCLGE_RESET_SYNC_TIME);
3946 	hclge_reset_handshake(hdev, true);
3947 	dev_info(&hdev->pdev->dev, "prepare wait ok\n");
3948 
3949 	return ret;
3950 }
3951 
3952 static void hclge_show_rst_info(struct hclge_dev *hdev)
3953 {
3954 	char *buf;
3955 
3956 	buf = kzalloc(HCLGE_DBG_RESET_INFO_LEN, GFP_KERNEL);
3957 	if (!buf)
3958 		return;
3959 
3960 	hclge_dbg_dump_rst_info(hdev, buf, HCLGE_DBG_RESET_INFO_LEN);
3961 
3962 	dev_info(&hdev->pdev->dev, "dump reset info:\n%s", buf);
3963 
3964 	kfree(buf);
3965 }
3966 
3967 static bool hclge_reset_err_handle(struct hclge_dev *hdev)
3968 {
3969 #define MAX_RESET_FAIL_CNT 5
3970 
3971 	if (hdev->reset_pending) {
3972 		dev_info(&hdev->pdev->dev, "Reset pending %lu\n",
3973 			 hdev->reset_pending);
3974 		return true;
3975 	} else if (hclge_read_dev(&hdev->hw, HCLGE_MISC_VECTOR_INT_STS) &
3976 		   HCLGE_RESET_INT_M) {
3977 		dev_info(&hdev->pdev->dev,
3978 			 "reset failed because new reset interrupt\n");
3979 		hclge_clear_reset_cause(hdev);
3980 		return false;
3981 	} else if (hdev->rst_stats.reset_fail_cnt < MAX_RESET_FAIL_CNT) {
3982 		hdev->rst_stats.reset_fail_cnt++;
3983 		set_bit(hdev->reset_type, &hdev->reset_pending);
3984 		dev_info(&hdev->pdev->dev,
3985 			 "re-schedule reset task(%u)\n",
3986 			 hdev->rst_stats.reset_fail_cnt);
3987 		return true;
3988 	}
3989 
3990 	hclge_clear_reset_cause(hdev);
3991 
3992 	/* recover the handshake status when reset fail */
3993 	hclge_reset_handshake(hdev, true);
3994 
3995 	dev_err(&hdev->pdev->dev, "Reset fail!\n");
3996 
3997 	hclge_show_rst_info(hdev);
3998 
3999 	set_bit(HCLGE_STATE_RST_FAIL, &hdev->state);
4000 
4001 	return false;
4002 }
4003 
4004 static void hclge_update_reset_level(struct hclge_dev *hdev)
4005 {
4006 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
4007 	enum hnae3_reset_type reset_level;
4008 
4009 	/* reset request will not be set during reset, so clear
4010 	 * pending reset request to avoid unnecessary reset
4011 	 * caused by the same reason.
4012 	 */
4013 	hclge_get_reset_level(ae_dev, &hdev->reset_request);
4014 
4015 	/* if default_reset_request has a higher level reset request,
4016 	 * it should be handled as soon as possible. since some errors
4017 	 * need this kind of reset to fix.
4018 	 */
4019 	reset_level = hclge_get_reset_level(ae_dev,
4020 					    &hdev->default_reset_request);
4021 	if (reset_level != HNAE3_NONE_RESET)
4022 		set_bit(reset_level, &hdev->reset_request);
4023 }
4024 
4025 static int hclge_set_rst_done(struct hclge_dev *hdev)
4026 {
4027 	struct hclge_pf_rst_done_cmd *req;
4028 	struct hclge_desc desc;
4029 	int ret;
4030 
4031 	req = (struct hclge_pf_rst_done_cmd *)desc.data;
4032 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PF_RST_DONE, false);
4033 	req->pf_rst_done |= HCLGE_PF_RESET_DONE_BIT;
4034 
4035 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4036 	/* To be compatible with the old firmware, which does not support
4037 	 * command HCLGE_OPC_PF_RST_DONE, just print a warning and
4038 	 * return success
4039 	 */
4040 	if (ret == -EOPNOTSUPP) {
4041 		dev_warn(&hdev->pdev->dev,
4042 			 "current firmware does not support command(0x%x)!\n",
4043 			 HCLGE_OPC_PF_RST_DONE);
4044 		return 0;
4045 	} else if (ret) {
4046 		dev_err(&hdev->pdev->dev, "assert PF reset done fail %d!\n",
4047 			ret);
4048 	}
4049 
4050 	return ret;
4051 }
4052 
4053 static int hclge_reset_prepare_up(struct hclge_dev *hdev)
4054 {
4055 	int ret = 0;
4056 
4057 	switch (hdev->reset_type) {
4058 	case HNAE3_FUNC_RESET:
4059 	case HNAE3_FLR_RESET:
4060 		ret = hclge_set_all_vf_rst(hdev, false);
4061 		break;
4062 	case HNAE3_GLOBAL_RESET:
4063 	case HNAE3_IMP_RESET:
4064 		ret = hclge_set_rst_done(hdev);
4065 		break;
4066 	default:
4067 		break;
4068 	}
4069 
4070 	/* clear up the handshake status after re-initialize done */
4071 	hclge_reset_handshake(hdev, false);
4072 
4073 	return ret;
4074 }
4075 
4076 static int hclge_reset_stack(struct hclge_dev *hdev)
4077 {
4078 	int ret;
4079 
4080 	ret = hclge_notify_client(hdev, HNAE3_UNINIT_CLIENT);
4081 	if (ret)
4082 		return ret;
4083 
4084 	ret = hclge_reset_ae_dev(hdev->ae_dev);
4085 	if (ret)
4086 		return ret;
4087 
4088 	return hclge_notify_client(hdev, HNAE3_INIT_CLIENT);
4089 }
4090 
4091 static int hclge_reset_prepare(struct hclge_dev *hdev)
4092 {
4093 	int ret;
4094 
4095 	hdev->rst_stats.reset_cnt++;
4096 	/* perform reset of the stack & ae device for a client */
4097 	ret = hclge_notify_roce_client(hdev, HNAE3_DOWN_CLIENT);
4098 	if (ret)
4099 		return ret;
4100 
4101 	rtnl_lock();
4102 	ret = hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
4103 	rtnl_unlock();
4104 	if (ret)
4105 		return ret;
4106 
4107 	return hclge_reset_prepare_wait(hdev);
4108 }
4109 
4110 static int hclge_reset_rebuild(struct hclge_dev *hdev)
4111 {
4112 	int ret;
4113 
4114 	hdev->rst_stats.hw_reset_done_cnt++;
4115 
4116 	ret = hclge_notify_roce_client(hdev, HNAE3_UNINIT_CLIENT);
4117 	if (ret)
4118 		return ret;
4119 
4120 	rtnl_lock();
4121 	ret = hclge_reset_stack(hdev);
4122 	rtnl_unlock();
4123 	if (ret)
4124 		return ret;
4125 
4126 	hclge_clear_reset_cause(hdev);
4127 
4128 	ret = hclge_notify_roce_client(hdev, HNAE3_INIT_CLIENT);
4129 	/* ignore RoCE notify error if it fails HCLGE_RESET_MAX_FAIL_CNT - 1
4130 	 * times
4131 	 */
4132 	if (ret &&
4133 	    hdev->rst_stats.reset_fail_cnt < HCLGE_RESET_MAX_FAIL_CNT - 1)
4134 		return ret;
4135 
4136 	ret = hclge_reset_prepare_up(hdev);
4137 	if (ret)
4138 		return ret;
4139 
4140 	rtnl_lock();
4141 	ret = hclge_notify_client(hdev, HNAE3_UP_CLIENT);
4142 	rtnl_unlock();
4143 	if (ret)
4144 		return ret;
4145 
4146 	ret = hclge_notify_roce_client(hdev, HNAE3_UP_CLIENT);
4147 	if (ret)
4148 		return ret;
4149 
4150 	hdev->last_reset_time = jiffies;
4151 	hdev->rst_stats.reset_fail_cnt = 0;
4152 	hdev->rst_stats.reset_done_cnt++;
4153 	clear_bit(HCLGE_STATE_RST_FAIL, &hdev->state);
4154 
4155 	hclge_update_reset_level(hdev);
4156 
4157 	return 0;
4158 }
4159 
4160 static void hclge_reset(struct hclge_dev *hdev)
4161 {
4162 	if (hclge_reset_prepare(hdev))
4163 		goto err_reset;
4164 
4165 	if (hclge_reset_wait(hdev))
4166 		goto err_reset;
4167 
4168 	if (hclge_reset_rebuild(hdev))
4169 		goto err_reset;
4170 
4171 	return;
4172 
4173 err_reset:
4174 	if (hclge_reset_err_handle(hdev))
4175 		hclge_reset_task_schedule(hdev);
4176 }
4177 
4178 static void hclge_reset_event(struct pci_dev *pdev, struct hnae3_handle *handle)
4179 {
4180 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(pdev);
4181 	struct hclge_dev *hdev = ae_dev->priv;
4182 
4183 	/* We might end up getting called broadly because of 2 below cases:
4184 	 * 1. Recoverable error was conveyed through APEI and only way to bring
4185 	 *    normalcy is to reset.
4186 	 * 2. A new reset request from the stack due to timeout
4187 	 *
4188 	 * check if this is a new reset request and we are not here just because
4189 	 * last reset attempt did not succeed and watchdog hit us again. We will
4190 	 * know this if last reset request did not occur very recently (watchdog
4191 	 * timer = 5*HZ, let us check after sufficiently large time, say 4*5*Hz)
4192 	 * In case of new request we reset the "reset level" to PF reset.
4193 	 * And if it is a repeat reset request of the most recent one then we
4194 	 * want to make sure we throttle the reset request. Therefore, we will
4195 	 * not allow it again before 3*HZ times.
4196 	 */
4197 
4198 	if (time_before(jiffies, (hdev->last_reset_time +
4199 				  HCLGE_RESET_INTERVAL))) {
4200 		mod_timer(&hdev->reset_timer, jiffies + HCLGE_RESET_INTERVAL);
4201 		return;
4202 	}
4203 
4204 	if (hdev->default_reset_request) {
4205 		hdev->reset_level =
4206 			hclge_get_reset_level(ae_dev,
4207 					      &hdev->default_reset_request);
4208 	} else if (time_after(jiffies, (hdev->last_reset_time + 4 * 5 * HZ))) {
4209 		hdev->reset_level = HNAE3_FUNC_RESET;
4210 	}
4211 
4212 	dev_info(&hdev->pdev->dev, "received reset event, reset type is %d\n",
4213 		 hdev->reset_level);
4214 
4215 	/* request reset & schedule reset task */
4216 	set_bit(hdev->reset_level, &hdev->reset_request);
4217 	hclge_reset_task_schedule(hdev);
4218 
4219 	if (hdev->reset_level < HNAE3_GLOBAL_RESET)
4220 		hdev->reset_level++;
4221 }
4222 
4223 static void hclge_set_def_reset_request(struct hnae3_ae_dev *ae_dev,
4224 					enum hnae3_reset_type rst_type)
4225 {
4226 	struct hclge_dev *hdev = ae_dev->priv;
4227 
4228 	set_bit(rst_type, &hdev->default_reset_request);
4229 }
4230 
4231 static void hclge_reset_timer(struct timer_list *t)
4232 {
4233 	struct hclge_dev *hdev = from_timer(hdev, t, reset_timer);
4234 
4235 	/* if default_reset_request has no value, it means that this reset
4236 	 * request has already be handled, so just return here
4237 	 */
4238 	if (!hdev->default_reset_request)
4239 		return;
4240 
4241 	dev_info(&hdev->pdev->dev,
4242 		 "triggering reset in reset timer\n");
4243 	hclge_reset_event(hdev->pdev, NULL);
4244 }
4245 
4246 static void hclge_reset_subtask(struct hclge_dev *hdev)
4247 {
4248 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
4249 
4250 	/* check if there is any ongoing reset in the hardware. This status can
4251 	 * be checked from reset_pending. If there is then, we need to wait for
4252 	 * hardware to complete reset.
4253 	 *    a. If we are able to figure out in reasonable time that hardware
4254 	 *       has fully resetted then, we can proceed with driver, client
4255 	 *       reset.
4256 	 *    b. else, we can come back later to check this status so re-sched
4257 	 *       now.
4258 	 */
4259 	hdev->last_reset_time = jiffies;
4260 	hdev->reset_type = hclge_get_reset_level(ae_dev, &hdev->reset_pending);
4261 	if (hdev->reset_type != HNAE3_NONE_RESET)
4262 		hclge_reset(hdev);
4263 
4264 	/* check if we got any *new* reset requests to be honored */
4265 	hdev->reset_type = hclge_get_reset_level(ae_dev, &hdev->reset_request);
4266 	if (hdev->reset_type != HNAE3_NONE_RESET)
4267 		hclge_do_reset(hdev);
4268 
4269 	hdev->reset_type = HNAE3_NONE_RESET;
4270 }
4271 
4272 static void hclge_handle_err_reset_request(struct hclge_dev *hdev)
4273 {
4274 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
4275 	enum hnae3_reset_type reset_type;
4276 
4277 	if (ae_dev->hw_err_reset_req) {
4278 		reset_type = hclge_get_reset_level(ae_dev,
4279 						   &ae_dev->hw_err_reset_req);
4280 		hclge_set_def_reset_request(ae_dev, reset_type);
4281 	}
4282 
4283 	if (hdev->default_reset_request && ae_dev->ops->reset_event)
4284 		ae_dev->ops->reset_event(hdev->pdev, NULL);
4285 
4286 	/* enable interrupt after error handling complete */
4287 	hclge_enable_vector(&hdev->misc_vector, true);
4288 }
4289 
4290 static void hclge_handle_err_recovery(struct hclge_dev *hdev)
4291 {
4292 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
4293 
4294 	ae_dev->hw_err_reset_req = 0;
4295 
4296 	if (hclge_find_error_source(hdev)) {
4297 		hclge_handle_error_info_log(ae_dev);
4298 		hclge_handle_mac_tnl(hdev);
4299 	}
4300 
4301 	hclge_handle_err_reset_request(hdev);
4302 }
4303 
4304 static void hclge_misc_err_recovery(struct hclge_dev *hdev)
4305 {
4306 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
4307 	struct device *dev = &hdev->pdev->dev;
4308 	u32 msix_sts_reg;
4309 
4310 	msix_sts_reg = hclge_read_dev(&hdev->hw, HCLGE_MISC_VECTOR_INT_STS);
4311 	if (msix_sts_reg & HCLGE_VECTOR0_REG_MSIX_MASK) {
4312 		if (hclge_handle_hw_msix_error
4313 				(hdev, &hdev->default_reset_request))
4314 			dev_info(dev, "received msix interrupt 0x%x\n",
4315 				 msix_sts_reg);
4316 	}
4317 
4318 	hclge_handle_hw_ras_error(ae_dev);
4319 
4320 	hclge_handle_err_reset_request(hdev);
4321 }
4322 
4323 static void hclge_errhand_service_task(struct hclge_dev *hdev)
4324 {
4325 	if (!test_and_clear_bit(HCLGE_STATE_ERR_SERVICE_SCHED, &hdev->state))
4326 		return;
4327 
4328 	if (hnae3_dev_ras_imp_supported(hdev))
4329 		hclge_handle_err_recovery(hdev);
4330 	else
4331 		hclge_misc_err_recovery(hdev);
4332 }
4333 
4334 static void hclge_reset_service_task(struct hclge_dev *hdev)
4335 {
4336 	if (!test_and_clear_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state))
4337 		return;
4338 
4339 	down(&hdev->reset_sem);
4340 	set_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
4341 
4342 	hclge_reset_subtask(hdev);
4343 
4344 	clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
4345 	up(&hdev->reset_sem);
4346 }
4347 
4348 static void hclge_update_vport_alive(struct hclge_dev *hdev)
4349 {
4350 	int i;
4351 
4352 	/* start from vport 1 for PF is always alive */
4353 	for (i = 1; i < hdev->num_alloc_vport; i++) {
4354 		struct hclge_vport *vport = &hdev->vport[i];
4355 
4356 		if (time_after(jiffies, vport->last_active_jiffies + 8 * HZ))
4357 			clear_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state);
4358 
4359 		/* If vf is not alive, set to default value */
4360 		if (!test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state))
4361 			vport->mps = HCLGE_MAC_DEFAULT_FRAME;
4362 	}
4363 }
4364 
4365 static void hclge_periodic_service_task(struct hclge_dev *hdev)
4366 {
4367 	unsigned long delta = round_jiffies_relative(HZ);
4368 
4369 	if (test_bit(HCLGE_STATE_RST_FAIL, &hdev->state))
4370 		return;
4371 
4372 	/* Always handle the link updating to make sure link state is
4373 	 * updated when it is triggered by mbx.
4374 	 */
4375 	hclge_update_link_status(hdev);
4376 	hclge_sync_mac_table(hdev);
4377 	hclge_sync_promisc_mode(hdev);
4378 	hclge_sync_fd_table(hdev);
4379 
4380 	if (time_is_after_jiffies(hdev->last_serv_processed + HZ)) {
4381 		delta = jiffies - hdev->last_serv_processed;
4382 
4383 		if (delta < round_jiffies_relative(HZ)) {
4384 			delta = round_jiffies_relative(HZ) - delta;
4385 			goto out;
4386 		}
4387 	}
4388 
4389 	hdev->serv_processed_cnt++;
4390 	hclge_update_vport_alive(hdev);
4391 
4392 	if (test_bit(HCLGE_STATE_DOWN, &hdev->state)) {
4393 		hdev->last_serv_processed = jiffies;
4394 		goto out;
4395 	}
4396 
4397 	if (!(hdev->serv_processed_cnt % HCLGE_STATS_TIMER_INTERVAL))
4398 		hclge_update_stats_for_all(hdev);
4399 
4400 	hclge_update_port_info(hdev);
4401 	hclge_sync_vlan_filter(hdev);
4402 
4403 	if (!(hdev->serv_processed_cnt % HCLGE_ARFS_EXPIRE_INTERVAL))
4404 		hclge_rfs_filter_expire(hdev);
4405 
4406 	hdev->last_serv_processed = jiffies;
4407 
4408 out:
4409 	hclge_task_schedule(hdev, delta);
4410 }
4411 
4412 static void hclge_ptp_service_task(struct hclge_dev *hdev)
4413 {
4414 	unsigned long flags;
4415 
4416 	if (!test_bit(HCLGE_STATE_PTP_EN, &hdev->state) ||
4417 	    !test_bit(HCLGE_STATE_PTP_TX_HANDLING, &hdev->state) ||
4418 	    !time_is_before_jiffies(hdev->ptp->tx_start + HZ))
4419 		return;
4420 
4421 	/* to prevent concurrence with the irq handler */
4422 	spin_lock_irqsave(&hdev->ptp->lock, flags);
4423 
4424 	/* check HCLGE_STATE_PTP_TX_HANDLING here again, since the irq
4425 	 * handler may handle it just before spin_lock_irqsave().
4426 	 */
4427 	if (test_bit(HCLGE_STATE_PTP_TX_HANDLING, &hdev->state))
4428 		hclge_ptp_clean_tx_hwts(hdev);
4429 
4430 	spin_unlock_irqrestore(&hdev->ptp->lock, flags);
4431 }
4432 
4433 static void hclge_service_task(struct work_struct *work)
4434 {
4435 	struct hclge_dev *hdev =
4436 		container_of(work, struct hclge_dev, service_task.work);
4437 
4438 	hclge_errhand_service_task(hdev);
4439 	hclge_reset_service_task(hdev);
4440 	hclge_ptp_service_task(hdev);
4441 	hclge_mailbox_service_task(hdev);
4442 	hclge_periodic_service_task(hdev);
4443 
4444 	/* Handle error recovery, reset and mbx again in case periodical task
4445 	 * delays the handling by calling hclge_task_schedule() in
4446 	 * hclge_periodic_service_task().
4447 	 */
4448 	hclge_errhand_service_task(hdev);
4449 	hclge_reset_service_task(hdev);
4450 	hclge_mailbox_service_task(hdev);
4451 }
4452 
4453 struct hclge_vport *hclge_get_vport(struct hnae3_handle *handle)
4454 {
4455 	/* VF handle has no client */
4456 	if (!handle->client)
4457 		return container_of(handle, struct hclge_vport, nic);
4458 	else if (handle->client->type == HNAE3_CLIENT_ROCE)
4459 		return container_of(handle, struct hclge_vport, roce);
4460 	else
4461 		return container_of(handle, struct hclge_vport, nic);
4462 }
4463 
4464 static void hclge_get_vector_info(struct hclge_dev *hdev, u16 idx,
4465 				  struct hnae3_vector_info *vector_info)
4466 {
4467 #define HCLGE_PF_MAX_VECTOR_NUM_DEV_V2	64
4468 
4469 	vector_info->vector = pci_irq_vector(hdev->pdev, idx);
4470 
4471 	/* need an extend offset to config vector >= 64 */
4472 	if (idx - 1 < HCLGE_PF_MAX_VECTOR_NUM_DEV_V2)
4473 		vector_info->io_addr = hdev->hw.io_base +
4474 				HCLGE_VECTOR_REG_BASE +
4475 				(idx - 1) * HCLGE_VECTOR_REG_OFFSET;
4476 	else
4477 		vector_info->io_addr = hdev->hw.io_base +
4478 				HCLGE_VECTOR_EXT_REG_BASE +
4479 				(idx - 1) / HCLGE_PF_MAX_VECTOR_NUM_DEV_V2 *
4480 				HCLGE_VECTOR_REG_OFFSET_H +
4481 				(idx - 1) % HCLGE_PF_MAX_VECTOR_NUM_DEV_V2 *
4482 				HCLGE_VECTOR_REG_OFFSET;
4483 
4484 	hdev->vector_status[idx] = hdev->vport[0].vport_id;
4485 	hdev->vector_irq[idx] = vector_info->vector;
4486 }
4487 
4488 static int hclge_get_vector(struct hnae3_handle *handle, u16 vector_num,
4489 			    struct hnae3_vector_info *vector_info)
4490 {
4491 	struct hclge_vport *vport = hclge_get_vport(handle);
4492 	struct hnae3_vector_info *vector = vector_info;
4493 	struct hclge_dev *hdev = vport->back;
4494 	int alloc = 0;
4495 	u16 i = 0;
4496 	u16 j;
4497 
4498 	vector_num = min_t(u16, hdev->num_nic_msi - 1, vector_num);
4499 	vector_num = min(hdev->num_msi_left, vector_num);
4500 
4501 	for (j = 0; j < vector_num; j++) {
4502 		while (++i < hdev->num_nic_msi) {
4503 			if (hdev->vector_status[i] == HCLGE_INVALID_VPORT) {
4504 				hclge_get_vector_info(hdev, i, vector);
4505 				vector++;
4506 				alloc++;
4507 
4508 				break;
4509 			}
4510 		}
4511 	}
4512 	hdev->num_msi_left -= alloc;
4513 	hdev->num_msi_used += alloc;
4514 
4515 	return alloc;
4516 }
4517 
4518 static int hclge_get_vector_index(struct hclge_dev *hdev, int vector)
4519 {
4520 	int i;
4521 
4522 	for (i = 0; i < hdev->num_msi; i++)
4523 		if (vector == hdev->vector_irq[i])
4524 			return i;
4525 
4526 	return -EINVAL;
4527 }
4528 
4529 static int hclge_put_vector(struct hnae3_handle *handle, int vector)
4530 {
4531 	struct hclge_vport *vport = hclge_get_vport(handle);
4532 	struct hclge_dev *hdev = vport->back;
4533 	int vector_id;
4534 
4535 	vector_id = hclge_get_vector_index(hdev, vector);
4536 	if (vector_id < 0) {
4537 		dev_err(&hdev->pdev->dev,
4538 			"Get vector index fail. vector = %d\n", vector);
4539 		return vector_id;
4540 	}
4541 
4542 	hclge_free_vector(hdev, vector_id);
4543 
4544 	return 0;
4545 }
4546 
4547 static u32 hclge_get_rss_key_size(struct hnae3_handle *handle)
4548 {
4549 	return HCLGE_RSS_KEY_SIZE;
4550 }
4551 
4552 static int hclge_set_rss_algo_key(struct hclge_dev *hdev,
4553 				  const u8 hfunc, const u8 *key)
4554 {
4555 	struct hclge_rss_config_cmd *req;
4556 	unsigned int key_offset = 0;
4557 	struct hclge_desc desc;
4558 	int key_counts;
4559 	int key_size;
4560 	int ret;
4561 
4562 	key_counts = HCLGE_RSS_KEY_SIZE;
4563 	req = (struct hclge_rss_config_cmd *)desc.data;
4564 
4565 	while (key_counts) {
4566 		hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_GENERIC_CONFIG,
4567 					   false);
4568 
4569 		req->hash_config |= (hfunc & HCLGE_RSS_HASH_ALGO_MASK);
4570 		req->hash_config |= (key_offset << HCLGE_RSS_HASH_KEY_OFFSET_B);
4571 
4572 		key_size = min(HCLGE_RSS_HASH_KEY_NUM, key_counts);
4573 		memcpy(req->hash_key,
4574 		       key + key_offset * HCLGE_RSS_HASH_KEY_NUM, key_size);
4575 
4576 		key_counts -= key_size;
4577 		key_offset++;
4578 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4579 		if (ret) {
4580 			dev_err(&hdev->pdev->dev,
4581 				"Configure RSS config fail, status = %d\n",
4582 				ret);
4583 			return ret;
4584 		}
4585 	}
4586 	return 0;
4587 }
4588 
4589 static int hclge_set_rss_indir_table(struct hclge_dev *hdev, const u16 *indir)
4590 {
4591 	struct hclge_rss_indirection_table_cmd *req;
4592 	struct hclge_desc desc;
4593 	int rss_cfg_tbl_num;
4594 	u8 rss_msb_oft;
4595 	u8 rss_msb_val;
4596 	int ret;
4597 	u16 qid;
4598 	int i;
4599 	u32 j;
4600 
4601 	req = (struct hclge_rss_indirection_table_cmd *)desc.data;
4602 	rss_cfg_tbl_num = hdev->ae_dev->dev_specs.rss_ind_tbl_size /
4603 			  HCLGE_RSS_CFG_TBL_SIZE;
4604 
4605 	for (i = 0; i < rss_cfg_tbl_num; i++) {
4606 		hclge_cmd_setup_basic_desc
4607 			(&desc, HCLGE_OPC_RSS_INDIR_TABLE, false);
4608 
4609 		req->start_table_index =
4610 			cpu_to_le16(i * HCLGE_RSS_CFG_TBL_SIZE);
4611 		req->rss_set_bitmap = cpu_to_le16(HCLGE_RSS_SET_BITMAP_MSK);
4612 		for (j = 0; j < HCLGE_RSS_CFG_TBL_SIZE; j++) {
4613 			qid = indir[i * HCLGE_RSS_CFG_TBL_SIZE + j];
4614 			req->rss_qid_l[j] = qid & 0xff;
4615 			rss_msb_oft =
4616 				j * HCLGE_RSS_CFG_TBL_BW_H / BITS_PER_BYTE;
4617 			rss_msb_val = (qid >> HCLGE_RSS_CFG_TBL_BW_L & 0x1) <<
4618 				(j * HCLGE_RSS_CFG_TBL_BW_H % BITS_PER_BYTE);
4619 			req->rss_qid_h[rss_msb_oft] |= rss_msb_val;
4620 		}
4621 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4622 		if (ret) {
4623 			dev_err(&hdev->pdev->dev,
4624 				"Configure rss indir table fail,status = %d\n",
4625 				ret);
4626 			return ret;
4627 		}
4628 	}
4629 	return 0;
4630 }
4631 
4632 static int hclge_set_rss_tc_mode(struct hclge_dev *hdev, u16 *tc_valid,
4633 				 u16 *tc_size, u16 *tc_offset)
4634 {
4635 	struct hclge_rss_tc_mode_cmd *req;
4636 	struct hclge_desc desc;
4637 	int ret;
4638 	int i;
4639 
4640 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_TC_MODE, false);
4641 	req = (struct hclge_rss_tc_mode_cmd *)desc.data;
4642 
4643 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
4644 		u16 mode = 0;
4645 
4646 		hnae3_set_bit(mode, HCLGE_RSS_TC_VALID_B, (tc_valid[i] & 0x1));
4647 		hnae3_set_field(mode, HCLGE_RSS_TC_SIZE_M,
4648 				HCLGE_RSS_TC_SIZE_S, tc_size[i]);
4649 		hnae3_set_bit(mode, HCLGE_RSS_TC_SIZE_MSB_B,
4650 			      tc_size[i] >> HCLGE_RSS_TC_SIZE_MSB_OFFSET & 0x1);
4651 		hnae3_set_field(mode, HCLGE_RSS_TC_OFFSET_M,
4652 				HCLGE_RSS_TC_OFFSET_S, tc_offset[i]);
4653 
4654 		req->rss_tc_mode[i] = cpu_to_le16(mode);
4655 	}
4656 
4657 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4658 	if (ret)
4659 		dev_err(&hdev->pdev->dev,
4660 			"Configure rss tc mode fail, status = %d\n", ret);
4661 
4662 	return ret;
4663 }
4664 
4665 static void hclge_get_rss_type(struct hclge_vport *vport)
4666 {
4667 	if (vport->rss_tuple_sets.ipv4_tcp_en ||
4668 	    vport->rss_tuple_sets.ipv4_udp_en ||
4669 	    vport->rss_tuple_sets.ipv4_sctp_en ||
4670 	    vport->rss_tuple_sets.ipv6_tcp_en ||
4671 	    vport->rss_tuple_sets.ipv6_udp_en ||
4672 	    vport->rss_tuple_sets.ipv6_sctp_en)
4673 		vport->nic.kinfo.rss_type = PKT_HASH_TYPE_L4;
4674 	else if (vport->rss_tuple_sets.ipv4_fragment_en ||
4675 		 vport->rss_tuple_sets.ipv6_fragment_en)
4676 		vport->nic.kinfo.rss_type = PKT_HASH_TYPE_L3;
4677 	else
4678 		vport->nic.kinfo.rss_type = PKT_HASH_TYPE_NONE;
4679 }
4680 
4681 static int hclge_set_rss_input_tuple(struct hclge_dev *hdev)
4682 {
4683 	struct hclge_rss_input_tuple_cmd *req;
4684 	struct hclge_desc desc;
4685 	int ret;
4686 
4687 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_INPUT_TUPLE, false);
4688 
4689 	req = (struct hclge_rss_input_tuple_cmd *)desc.data;
4690 
4691 	/* Get the tuple cfg from pf */
4692 	req->ipv4_tcp_en = hdev->vport[0].rss_tuple_sets.ipv4_tcp_en;
4693 	req->ipv4_udp_en = hdev->vport[0].rss_tuple_sets.ipv4_udp_en;
4694 	req->ipv4_sctp_en = hdev->vport[0].rss_tuple_sets.ipv4_sctp_en;
4695 	req->ipv4_fragment_en = hdev->vport[0].rss_tuple_sets.ipv4_fragment_en;
4696 	req->ipv6_tcp_en = hdev->vport[0].rss_tuple_sets.ipv6_tcp_en;
4697 	req->ipv6_udp_en = hdev->vport[0].rss_tuple_sets.ipv6_udp_en;
4698 	req->ipv6_sctp_en = hdev->vport[0].rss_tuple_sets.ipv6_sctp_en;
4699 	req->ipv6_fragment_en = hdev->vport[0].rss_tuple_sets.ipv6_fragment_en;
4700 	hclge_get_rss_type(&hdev->vport[0]);
4701 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4702 	if (ret)
4703 		dev_err(&hdev->pdev->dev,
4704 			"Configure rss input fail, status = %d\n", ret);
4705 	return ret;
4706 }
4707 
4708 static int hclge_get_rss(struct hnae3_handle *handle, u32 *indir,
4709 			 u8 *key, u8 *hfunc)
4710 {
4711 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev);
4712 	struct hclge_vport *vport = hclge_get_vport(handle);
4713 	int i;
4714 
4715 	/* Get hash algorithm */
4716 	if (hfunc) {
4717 		switch (vport->rss_algo) {
4718 		case HCLGE_RSS_HASH_ALGO_TOEPLITZ:
4719 			*hfunc = ETH_RSS_HASH_TOP;
4720 			break;
4721 		case HCLGE_RSS_HASH_ALGO_SIMPLE:
4722 			*hfunc = ETH_RSS_HASH_XOR;
4723 			break;
4724 		default:
4725 			*hfunc = ETH_RSS_HASH_UNKNOWN;
4726 			break;
4727 		}
4728 	}
4729 
4730 	/* Get the RSS Key required by the user */
4731 	if (key)
4732 		memcpy(key, vport->rss_hash_key, HCLGE_RSS_KEY_SIZE);
4733 
4734 	/* Get indirect table */
4735 	if (indir)
4736 		for (i = 0; i < ae_dev->dev_specs.rss_ind_tbl_size; i++)
4737 			indir[i] =  vport->rss_indirection_tbl[i];
4738 
4739 	return 0;
4740 }
4741 
4742 static int hclge_set_rss(struct hnae3_handle *handle, const u32 *indir,
4743 			 const  u8 *key, const  u8 hfunc)
4744 {
4745 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev);
4746 	struct hclge_vport *vport = hclge_get_vport(handle);
4747 	struct hclge_dev *hdev = vport->back;
4748 	u8 hash_algo;
4749 	int ret, i;
4750 
4751 	/* Set the RSS Hash Key if specififed by the user */
4752 	if (key) {
4753 		switch (hfunc) {
4754 		case ETH_RSS_HASH_TOP:
4755 			hash_algo = HCLGE_RSS_HASH_ALGO_TOEPLITZ;
4756 			break;
4757 		case ETH_RSS_HASH_XOR:
4758 			hash_algo = HCLGE_RSS_HASH_ALGO_SIMPLE;
4759 			break;
4760 		case ETH_RSS_HASH_NO_CHANGE:
4761 			hash_algo = vport->rss_algo;
4762 			break;
4763 		default:
4764 			return -EINVAL;
4765 		}
4766 
4767 		ret = hclge_set_rss_algo_key(hdev, hash_algo, key);
4768 		if (ret)
4769 			return ret;
4770 
4771 		/* Update the shadow RSS key with user specified qids */
4772 		memcpy(vport->rss_hash_key, key, HCLGE_RSS_KEY_SIZE);
4773 		vport->rss_algo = hash_algo;
4774 	}
4775 
4776 	/* Update the shadow RSS table with user specified qids */
4777 	for (i = 0; i < ae_dev->dev_specs.rss_ind_tbl_size; i++)
4778 		vport->rss_indirection_tbl[i] = indir[i];
4779 
4780 	/* Update the hardware */
4781 	return hclge_set_rss_indir_table(hdev, vport->rss_indirection_tbl);
4782 }
4783 
4784 static u8 hclge_get_rss_hash_bits(struct ethtool_rxnfc *nfc)
4785 {
4786 	u8 hash_sets = nfc->data & RXH_L4_B_0_1 ? HCLGE_S_PORT_BIT : 0;
4787 
4788 	if (nfc->data & RXH_L4_B_2_3)
4789 		hash_sets |= HCLGE_D_PORT_BIT;
4790 	else
4791 		hash_sets &= ~HCLGE_D_PORT_BIT;
4792 
4793 	if (nfc->data & RXH_IP_SRC)
4794 		hash_sets |= HCLGE_S_IP_BIT;
4795 	else
4796 		hash_sets &= ~HCLGE_S_IP_BIT;
4797 
4798 	if (nfc->data & RXH_IP_DST)
4799 		hash_sets |= HCLGE_D_IP_BIT;
4800 	else
4801 		hash_sets &= ~HCLGE_D_IP_BIT;
4802 
4803 	if (nfc->flow_type == SCTP_V4_FLOW || nfc->flow_type == SCTP_V6_FLOW)
4804 		hash_sets |= HCLGE_V_TAG_BIT;
4805 
4806 	return hash_sets;
4807 }
4808 
4809 static int hclge_init_rss_tuple_cmd(struct hclge_vport *vport,
4810 				    struct ethtool_rxnfc *nfc,
4811 				    struct hclge_rss_input_tuple_cmd *req)
4812 {
4813 	struct hclge_dev *hdev = vport->back;
4814 	u8 tuple_sets;
4815 
4816 	req->ipv4_tcp_en = vport->rss_tuple_sets.ipv4_tcp_en;
4817 	req->ipv4_udp_en = vport->rss_tuple_sets.ipv4_udp_en;
4818 	req->ipv4_sctp_en = vport->rss_tuple_sets.ipv4_sctp_en;
4819 	req->ipv4_fragment_en = vport->rss_tuple_sets.ipv4_fragment_en;
4820 	req->ipv6_tcp_en = vport->rss_tuple_sets.ipv6_tcp_en;
4821 	req->ipv6_udp_en = vport->rss_tuple_sets.ipv6_udp_en;
4822 	req->ipv6_sctp_en = vport->rss_tuple_sets.ipv6_sctp_en;
4823 	req->ipv6_fragment_en = vport->rss_tuple_sets.ipv6_fragment_en;
4824 
4825 	tuple_sets = hclge_get_rss_hash_bits(nfc);
4826 	switch (nfc->flow_type) {
4827 	case TCP_V4_FLOW:
4828 		req->ipv4_tcp_en = tuple_sets;
4829 		break;
4830 	case TCP_V6_FLOW:
4831 		req->ipv6_tcp_en = tuple_sets;
4832 		break;
4833 	case UDP_V4_FLOW:
4834 		req->ipv4_udp_en = tuple_sets;
4835 		break;
4836 	case UDP_V6_FLOW:
4837 		req->ipv6_udp_en = tuple_sets;
4838 		break;
4839 	case SCTP_V4_FLOW:
4840 		req->ipv4_sctp_en = tuple_sets;
4841 		break;
4842 	case SCTP_V6_FLOW:
4843 		if (hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 &&
4844 		    (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)))
4845 			return -EINVAL;
4846 
4847 		req->ipv6_sctp_en = tuple_sets;
4848 		break;
4849 	case IPV4_FLOW:
4850 		req->ipv4_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
4851 		break;
4852 	case IPV6_FLOW:
4853 		req->ipv6_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
4854 		break;
4855 	default:
4856 		return -EINVAL;
4857 	}
4858 
4859 	return 0;
4860 }
4861 
4862 static int hclge_set_rss_tuple(struct hnae3_handle *handle,
4863 			       struct ethtool_rxnfc *nfc)
4864 {
4865 	struct hclge_vport *vport = hclge_get_vport(handle);
4866 	struct hclge_dev *hdev = vport->back;
4867 	struct hclge_rss_input_tuple_cmd *req;
4868 	struct hclge_desc desc;
4869 	int ret;
4870 
4871 	if (nfc->data & ~(RXH_IP_SRC | RXH_IP_DST |
4872 			  RXH_L4_B_0_1 | RXH_L4_B_2_3))
4873 		return -EINVAL;
4874 
4875 	req = (struct hclge_rss_input_tuple_cmd *)desc.data;
4876 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_INPUT_TUPLE, false);
4877 
4878 	ret = hclge_init_rss_tuple_cmd(vport, nfc, req);
4879 	if (ret) {
4880 		dev_err(&hdev->pdev->dev,
4881 			"failed to init rss tuple cmd, ret = %d\n", ret);
4882 		return ret;
4883 	}
4884 
4885 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
4886 	if (ret) {
4887 		dev_err(&hdev->pdev->dev,
4888 			"Set rss tuple fail, status = %d\n", ret);
4889 		return ret;
4890 	}
4891 
4892 	vport->rss_tuple_sets.ipv4_tcp_en = req->ipv4_tcp_en;
4893 	vport->rss_tuple_sets.ipv4_udp_en = req->ipv4_udp_en;
4894 	vport->rss_tuple_sets.ipv4_sctp_en = req->ipv4_sctp_en;
4895 	vport->rss_tuple_sets.ipv4_fragment_en = req->ipv4_fragment_en;
4896 	vport->rss_tuple_sets.ipv6_tcp_en = req->ipv6_tcp_en;
4897 	vport->rss_tuple_sets.ipv6_udp_en = req->ipv6_udp_en;
4898 	vport->rss_tuple_sets.ipv6_sctp_en = req->ipv6_sctp_en;
4899 	vport->rss_tuple_sets.ipv6_fragment_en = req->ipv6_fragment_en;
4900 	hclge_get_rss_type(vport);
4901 	return 0;
4902 }
4903 
4904 static int hclge_get_vport_rss_tuple(struct hclge_vport *vport, int flow_type,
4905 				     u8 *tuple_sets)
4906 {
4907 	switch (flow_type) {
4908 	case TCP_V4_FLOW:
4909 		*tuple_sets = vport->rss_tuple_sets.ipv4_tcp_en;
4910 		break;
4911 	case UDP_V4_FLOW:
4912 		*tuple_sets = vport->rss_tuple_sets.ipv4_udp_en;
4913 		break;
4914 	case TCP_V6_FLOW:
4915 		*tuple_sets = vport->rss_tuple_sets.ipv6_tcp_en;
4916 		break;
4917 	case UDP_V6_FLOW:
4918 		*tuple_sets = vport->rss_tuple_sets.ipv6_udp_en;
4919 		break;
4920 	case SCTP_V4_FLOW:
4921 		*tuple_sets = vport->rss_tuple_sets.ipv4_sctp_en;
4922 		break;
4923 	case SCTP_V6_FLOW:
4924 		*tuple_sets = vport->rss_tuple_sets.ipv6_sctp_en;
4925 		break;
4926 	case IPV4_FLOW:
4927 	case IPV6_FLOW:
4928 		*tuple_sets = HCLGE_S_IP_BIT | HCLGE_D_IP_BIT;
4929 		break;
4930 	default:
4931 		return -EINVAL;
4932 	}
4933 
4934 	return 0;
4935 }
4936 
4937 static u64 hclge_convert_rss_tuple(u8 tuple_sets)
4938 {
4939 	u64 tuple_data = 0;
4940 
4941 	if (tuple_sets & HCLGE_D_PORT_BIT)
4942 		tuple_data |= RXH_L4_B_2_3;
4943 	if (tuple_sets & HCLGE_S_PORT_BIT)
4944 		tuple_data |= RXH_L4_B_0_1;
4945 	if (tuple_sets & HCLGE_D_IP_BIT)
4946 		tuple_data |= RXH_IP_DST;
4947 	if (tuple_sets & HCLGE_S_IP_BIT)
4948 		tuple_data |= RXH_IP_SRC;
4949 
4950 	return tuple_data;
4951 }
4952 
4953 static int hclge_get_rss_tuple(struct hnae3_handle *handle,
4954 			       struct ethtool_rxnfc *nfc)
4955 {
4956 	struct hclge_vport *vport = hclge_get_vport(handle);
4957 	u8 tuple_sets;
4958 	int ret;
4959 
4960 	nfc->data = 0;
4961 
4962 	ret = hclge_get_vport_rss_tuple(vport, nfc->flow_type, &tuple_sets);
4963 	if (ret || !tuple_sets)
4964 		return ret;
4965 
4966 	nfc->data = hclge_convert_rss_tuple(tuple_sets);
4967 
4968 	return 0;
4969 }
4970 
4971 static int hclge_get_tc_size(struct hnae3_handle *handle)
4972 {
4973 	struct hclge_vport *vport = hclge_get_vport(handle);
4974 	struct hclge_dev *hdev = vport->back;
4975 
4976 	return hdev->pf_rss_size_max;
4977 }
4978 
4979 static int hclge_init_rss_tc_mode(struct hclge_dev *hdev)
4980 {
4981 	struct hnae3_ae_dev *ae_dev = hdev->ae_dev;
4982 	struct hclge_vport *vport = hdev->vport;
4983 	u16 tc_offset[HCLGE_MAX_TC_NUM] = {0};
4984 	u16 tc_valid[HCLGE_MAX_TC_NUM] = {0};
4985 	u16 tc_size[HCLGE_MAX_TC_NUM] = {0};
4986 	struct hnae3_tc_info *tc_info;
4987 	u16 roundup_size;
4988 	u16 rss_size;
4989 	int i;
4990 
4991 	tc_info = &vport->nic.kinfo.tc_info;
4992 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
4993 		rss_size = tc_info->tqp_count[i];
4994 		tc_valid[i] = 0;
4995 
4996 		if (!(hdev->hw_tc_map & BIT(i)))
4997 			continue;
4998 
4999 		/* tc_size set to hardware is the log2 of roundup power of two
5000 		 * of rss_size, the acutal queue size is limited by indirection
5001 		 * table.
5002 		 */
5003 		if (rss_size > ae_dev->dev_specs.rss_ind_tbl_size ||
5004 		    rss_size == 0) {
5005 			dev_err(&hdev->pdev->dev,
5006 				"Configure rss tc size failed, invalid TC_SIZE = %u\n",
5007 				rss_size);
5008 			return -EINVAL;
5009 		}
5010 
5011 		roundup_size = roundup_pow_of_two(rss_size);
5012 		roundup_size = ilog2(roundup_size);
5013 
5014 		tc_valid[i] = 1;
5015 		tc_size[i] = roundup_size;
5016 		tc_offset[i] = tc_info->tqp_offset[i];
5017 	}
5018 
5019 	return hclge_set_rss_tc_mode(hdev, tc_valid, tc_size, tc_offset);
5020 }
5021 
5022 int hclge_rss_init_hw(struct hclge_dev *hdev)
5023 {
5024 	struct hclge_vport *vport = hdev->vport;
5025 	u16 *rss_indir = vport[0].rss_indirection_tbl;
5026 	u8 *key = vport[0].rss_hash_key;
5027 	u8 hfunc = vport[0].rss_algo;
5028 	int ret;
5029 
5030 	ret = hclge_set_rss_indir_table(hdev, rss_indir);
5031 	if (ret)
5032 		return ret;
5033 
5034 	ret = hclge_set_rss_algo_key(hdev, hfunc, key);
5035 	if (ret)
5036 		return ret;
5037 
5038 	ret = hclge_set_rss_input_tuple(hdev);
5039 	if (ret)
5040 		return ret;
5041 
5042 	return hclge_init_rss_tc_mode(hdev);
5043 }
5044 
5045 void hclge_rss_indir_init_cfg(struct hclge_dev *hdev)
5046 {
5047 	struct hclge_vport *vport = &hdev->vport[0];
5048 	int i;
5049 
5050 	for (i = 0; i < hdev->ae_dev->dev_specs.rss_ind_tbl_size; i++)
5051 		vport->rss_indirection_tbl[i] = i % vport->alloc_rss_size;
5052 }
5053 
5054 static int hclge_rss_init_cfg(struct hclge_dev *hdev)
5055 {
5056 	u16 rss_ind_tbl_size = hdev->ae_dev->dev_specs.rss_ind_tbl_size;
5057 	int rss_algo = HCLGE_RSS_HASH_ALGO_TOEPLITZ;
5058 	struct hclge_vport *vport = &hdev->vport[0];
5059 	u16 *rss_ind_tbl;
5060 
5061 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2)
5062 		rss_algo = HCLGE_RSS_HASH_ALGO_SIMPLE;
5063 
5064 	vport->rss_tuple_sets.ipv4_tcp_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
5065 	vport->rss_tuple_sets.ipv4_udp_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
5066 	vport->rss_tuple_sets.ipv4_sctp_en = HCLGE_RSS_INPUT_TUPLE_SCTP;
5067 	vport->rss_tuple_sets.ipv4_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
5068 	vport->rss_tuple_sets.ipv6_tcp_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
5069 	vport->rss_tuple_sets.ipv6_udp_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
5070 	vport->rss_tuple_sets.ipv6_sctp_en =
5071 		hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 ?
5072 		HCLGE_RSS_INPUT_TUPLE_SCTP_NO_PORT :
5073 		HCLGE_RSS_INPUT_TUPLE_SCTP;
5074 	vport->rss_tuple_sets.ipv6_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER;
5075 
5076 	vport->rss_algo = rss_algo;
5077 
5078 	rss_ind_tbl = devm_kcalloc(&hdev->pdev->dev, rss_ind_tbl_size,
5079 				   sizeof(*rss_ind_tbl), GFP_KERNEL);
5080 	if (!rss_ind_tbl)
5081 		return -ENOMEM;
5082 
5083 	vport->rss_indirection_tbl = rss_ind_tbl;
5084 	memcpy(vport->rss_hash_key, hclge_hash_key, HCLGE_RSS_KEY_SIZE);
5085 
5086 	hclge_rss_indir_init_cfg(hdev);
5087 
5088 	return 0;
5089 }
5090 
5091 int hclge_bind_ring_with_vector(struct hclge_vport *vport,
5092 				int vector_id, bool en,
5093 				struct hnae3_ring_chain_node *ring_chain)
5094 {
5095 	struct hclge_dev *hdev = vport->back;
5096 	struct hnae3_ring_chain_node *node;
5097 	struct hclge_desc desc;
5098 	struct hclge_ctrl_vector_chain_cmd *req =
5099 		(struct hclge_ctrl_vector_chain_cmd *)desc.data;
5100 	enum hclge_cmd_status status;
5101 	enum hclge_opcode_type op;
5102 	u16 tqp_type_and_id;
5103 	int i;
5104 
5105 	op = en ? HCLGE_OPC_ADD_RING_TO_VECTOR : HCLGE_OPC_DEL_RING_TO_VECTOR;
5106 	hclge_cmd_setup_basic_desc(&desc, op, false);
5107 	req->int_vector_id_l = hnae3_get_field(vector_id,
5108 					       HCLGE_VECTOR_ID_L_M,
5109 					       HCLGE_VECTOR_ID_L_S);
5110 	req->int_vector_id_h = hnae3_get_field(vector_id,
5111 					       HCLGE_VECTOR_ID_H_M,
5112 					       HCLGE_VECTOR_ID_H_S);
5113 
5114 	i = 0;
5115 	for (node = ring_chain; node; node = node->next) {
5116 		tqp_type_and_id = le16_to_cpu(req->tqp_type_and_id[i]);
5117 		hnae3_set_field(tqp_type_and_id,  HCLGE_INT_TYPE_M,
5118 				HCLGE_INT_TYPE_S,
5119 				hnae3_get_bit(node->flag, HNAE3_RING_TYPE_B));
5120 		hnae3_set_field(tqp_type_and_id, HCLGE_TQP_ID_M,
5121 				HCLGE_TQP_ID_S, node->tqp_index);
5122 		hnae3_set_field(tqp_type_and_id, HCLGE_INT_GL_IDX_M,
5123 				HCLGE_INT_GL_IDX_S,
5124 				hnae3_get_field(node->int_gl_idx,
5125 						HNAE3_RING_GL_IDX_M,
5126 						HNAE3_RING_GL_IDX_S));
5127 		req->tqp_type_and_id[i] = cpu_to_le16(tqp_type_and_id);
5128 		if (++i >= HCLGE_VECTOR_ELEMENTS_PER_CMD) {
5129 			req->int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD;
5130 			req->vfid = vport->vport_id;
5131 
5132 			status = hclge_cmd_send(&hdev->hw, &desc, 1);
5133 			if (status) {
5134 				dev_err(&hdev->pdev->dev,
5135 					"Map TQP fail, status is %d.\n",
5136 					status);
5137 				return -EIO;
5138 			}
5139 			i = 0;
5140 
5141 			hclge_cmd_setup_basic_desc(&desc,
5142 						   op,
5143 						   false);
5144 			req->int_vector_id_l =
5145 				hnae3_get_field(vector_id,
5146 						HCLGE_VECTOR_ID_L_M,
5147 						HCLGE_VECTOR_ID_L_S);
5148 			req->int_vector_id_h =
5149 				hnae3_get_field(vector_id,
5150 						HCLGE_VECTOR_ID_H_M,
5151 						HCLGE_VECTOR_ID_H_S);
5152 		}
5153 	}
5154 
5155 	if (i > 0) {
5156 		req->int_cause_num = i;
5157 		req->vfid = vport->vport_id;
5158 		status = hclge_cmd_send(&hdev->hw, &desc, 1);
5159 		if (status) {
5160 			dev_err(&hdev->pdev->dev,
5161 				"Map TQP fail, status is %d.\n", status);
5162 			return -EIO;
5163 		}
5164 	}
5165 
5166 	return 0;
5167 }
5168 
5169 static int hclge_map_ring_to_vector(struct hnae3_handle *handle, int vector,
5170 				    struct hnae3_ring_chain_node *ring_chain)
5171 {
5172 	struct hclge_vport *vport = hclge_get_vport(handle);
5173 	struct hclge_dev *hdev = vport->back;
5174 	int vector_id;
5175 
5176 	vector_id = hclge_get_vector_index(hdev, vector);
5177 	if (vector_id < 0) {
5178 		dev_err(&hdev->pdev->dev,
5179 			"failed to get vector index. vector=%d\n", vector);
5180 		return vector_id;
5181 	}
5182 
5183 	return hclge_bind_ring_with_vector(vport, vector_id, true, ring_chain);
5184 }
5185 
5186 static int hclge_unmap_ring_frm_vector(struct hnae3_handle *handle, int vector,
5187 				       struct hnae3_ring_chain_node *ring_chain)
5188 {
5189 	struct hclge_vport *vport = hclge_get_vport(handle);
5190 	struct hclge_dev *hdev = vport->back;
5191 	int vector_id, ret;
5192 
5193 	if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
5194 		return 0;
5195 
5196 	vector_id = hclge_get_vector_index(hdev, vector);
5197 	if (vector_id < 0) {
5198 		dev_err(&handle->pdev->dev,
5199 			"Get vector index fail. ret =%d\n", vector_id);
5200 		return vector_id;
5201 	}
5202 
5203 	ret = hclge_bind_ring_with_vector(vport, vector_id, false, ring_chain);
5204 	if (ret)
5205 		dev_err(&handle->pdev->dev,
5206 			"Unmap ring from vector fail. vectorid=%d, ret =%d\n",
5207 			vector_id, ret);
5208 
5209 	return ret;
5210 }
5211 
5212 static int hclge_cmd_set_promisc_mode(struct hclge_dev *hdev, u8 vf_id,
5213 				      bool en_uc, bool en_mc, bool en_bc)
5214 {
5215 	struct hclge_vport *vport = &hdev->vport[vf_id];
5216 	struct hnae3_handle *handle = &vport->nic;
5217 	struct hclge_promisc_cfg_cmd *req;
5218 	struct hclge_desc desc;
5219 	bool uc_tx_en = en_uc;
5220 	u8 promisc_cfg = 0;
5221 	int ret;
5222 
5223 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_PROMISC_MODE, false);
5224 
5225 	req = (struct hclge_promisc_cfg_cmd *)desc.data;
5226 	req->vf_id = vf_id;
5227 
5228 	if (test_bit(HNAE3_PFLAG_LIMIT_PROMISC, &handle->priv_flags))
5229 		uc_tx_en = false;
5230 
5231 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_UC_RX_EN, en_uc ? 1 : 0);
5232 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_MC_RX_EN, en_mc ? 1 : 0);
5233 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_BC_RX_EN, en_bc ? 1 : 0);
5234 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_UC_TX_EN, uc_tx_en ? 1 : 0);
5235 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_MC_TX_EN, en_mc ? 1 : 0);
5236 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_BC_TX_EN, en_bc ? 1 : 0);
5237 	req->extend_promisc = promisc_cfg;
5238 
5239 	/* to be compatible with DEVICE_VERSION_V1/2 */
5240 	promisc_cfg = 0;
5241 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_EN_UC, en_uc ? 1 : 0);
5242 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_EN_MC, en_mc ? 1 : 0);
5243 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_EN_BC, en_bc ? 1 : 0);
5244 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_TX_EN, 1);
5245 	hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_RX_EN, 1);
5246 	req->promisc = promisc_cfg;
5247 
5248 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5249 	if (ret)
5250 		dev_err(&hdev->pdev->dev,
5251 			"failed to set vport %u promisc mode, ret = %d.\n",
5252 			vf_id, ret);
5253 
5254 	return ret;
5255 }
5256 
5257 int hclge_set_vport_promisc_mode(struct hclge_vport *vport, bool en_uc_pmc,
5258 				 bool en_mc_pmc, bool en_bc_pmc)
5259 {
5260 	return hclge_cmd_set_promisc_mode(vport->back, vport->vport_id,
5261 					  en_uc_pmc, en_mc_pmc, en_bc_pmc);
5262 }
5263 
5264 static int hclge_set_promisc_mode(struct hnae3_handle *handle, bool en_uc_pmc,
5265 				  bool en_mc_pmc)
5266 {
5267 	struct hclge_vport *vport = hclge_get_vport(handle);
5268 	struct hclge_dev *hdev = vport->back;
5269 	bool en_bc_pmc = true;
5270 
5271 	/* For device whose version below V2, if broadcast promisc enabled,
5272 	 * vlan filter is always bypassed. So broadcast promisc should be
5273 	 * disabled until user enable promisc mode
5274 	 */
5275 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
5276 		en_bc_pmc = handle->netdev_flags & HNAE3_BPE ? true : false;
5277 
5278 	return hclge_set_vport_promisc_mode(vport, en_uc_pmc, en_mc_pmc,
5279 					    en_bc_pmc);
5280 }
5281 
5282 static void hclge_request_update_promisc_mode(struct hnae3_handle *handle)
5283 {
5284 	struct hclge_vport *vport = hclge_get_vport(handle);
5285 
5286 	set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state);
5287 }
5288 
5289 static void hclge_sync_fd_state(struct hclge_dev *hdev)
5290 {
5291 	if (hlist_empty(&hdev->fd_rule_list))
5292 		hdev->fd_active_type = HCLGE_FD_RULE_NONE;
5293 }
5294 
5295 static void hclge_fd_inc_rule_cnt(struct hclge_dev *hdev, u16 location)
5296 {
5297 	if (!test_bit(location, hdev->fd_bmap)) {
5298 		set_bit(location, hdev->fd_bmap);
5299 		hdev->hclge_fd_rule_num++;
5300 	}
5301 }
5302 
5303 static void hclge_fd_dec_rule_cnt(struct hclge_dev *hdev, u16 location)
5304 {
5305 	if (test_bit(location, hdev->fd_bmap)) {
5306 		clear_bit(location, hdev->fd_bmap);
5307 		hdev->hclge_fd_rule_num--;
5308 	}
5309 }
5310 
5311 static void hclge_fd_free_node(struct hclge_dev *hdev,
5312 			       struct hclge_fd_rule *rule)
5313 {
5314 	hlist_del(&rule->rule_node);
5315 	kfree(rule);
5316 	hclge_sync_fd_state(hdev);
5317 }
5318 
5319 static void hclge_update_fd_rule_node(struct hclge_dev *hdev,
5320 				      struct hclge_fd_rule *old_rule,
5321 				      struct hclge_fd_rule *new_rule,
5322 				      enum HCLGE_FD_NODE_STATE state)
5323 {
5324 	switch (state) {
5325 	case HCLGE_FD_TO_ADD:
5326 	case HCLGE_FD_ACTIVE:
5327 		/* 1) if the new state is TO_ADD, just replace the old rule
5328 		 * with the same location, no matter its state, because the
5329 		 * new rule will be configured to the hardware.
5330 		 * 2) if the new state is ACTIVE, it means the new rule
5331 		 * has been configured to the hardware, so just replace
5332 		 * the old rule node with the same location.
5333 		 * 3) for it doesn't add a new node to the list, so it's
5334 		 * unnecessary to update the rule number and fd_bmap.
5335 		 */
5336 		new_rule->rule_node.next = old_rule->rule_node.next;
5337 		new_rule->rule_node.pprev = old_rule->rule_node.pprev;
5338 		memcpy(old_rule, new_rule, sizeof(*old_rule));
5339 		kfree(new_rule);
5340 		break;
5341 	case HCLGE_FD_DELETED:
5342 		hclge_fd_dec_rule_cnt(hdev, old_rule->location);
5343 		hclge_fd_free_node(hdev, old_rule);
5344 		break;
5345 	case HCLGE_FD_TO_DEL:
5346 		/* if new request is TO_DEL, and old rule is existent
5347 		 * 1) the state of old rule is TO_DEL, we need do nothing,
5348 		 * because we delete rule by location, other rule content
5349 		 * is unncessary.
5350 		 * 2) the state of old rule is ACTIVE, we need to change its
5351 		 * state to TO_DEL, so the rule will be deleted when periodic
5352 		 * task being scheduled.
5353 		 * 3) the state of old rule is TO_ADD, it means the rule hasn't
5354 		 * been added to hardware, so we just delete the rule node from
5355 		 * fd_rule_list directly.
5356 		 */
5357 		if (old_rule->state == HCLGE_FD_TO_ADD) {
5358 			hclge_fd_dec_rule_cnt(hdev, old_rule->location);
5359 			hclge_fd_free_node(hdev, old_rule);
5360 			return;
5361 		}
5362 		old_rule->state = HCLGE_FD_TO_DEL;
5363 		break;
5364 	}
5365 }
5366 
5367 static struct hclge_fd_rule *hclge_find_fd_rule(struct hlist_head *hlist,
5368 						u16 location,
5369 						struct hclge_fd_rule **parent)
5370 {
5371 	struct hclge_fd_rule *rule;
5372 	struct hlist_node *node;
5373 
5374 	hlist_for_each_entry_safe(rule, node, hlist, rule_node) {
5375 		if (rule->location == location)
5376 			return rule;
5377 		else if (rule->location > location)
5378 			return NULL;
5379 		/* record the parent node, use to keep the nodes in fd_rule_list
5380 		 * in ascend order.
5381 		 */
5382 		*parent = rule;
5383 	}
5384 
5385 	return NULL;
5386 }
5387 
5388 /* insert fd rule node in ascend order according to rule->location */
5389 static void hclge_fd_insert_rule_node(struct hlist_head *hlist,
5390 				      struct hclge_fd_rule *rule,
5391 				      struct hclge_fd_rule *parent)
5392 {
5393 	INIT_HLIST_NODE(&rule->rule_node);
5394 
5395 	if (parent)
5396 		hlist_add_behind(&rule->rule_node, &parent->rule_node);
5397 	else
5398 		hlist_add_head(&rule->rule_node, hlist);
5399 }
5400 
5401 static int hclge_fd_set_user_def_cmd(struct hclge_dev *hdev,
5402 				     struct hclge_fd_user_def_cfg *cfg)
5403 {
5404 	struct hclge_fd_user_def_cfg_cmd *req;
5405 	struct hclge_desc desc;
5406 	u16 data = 0;
5407 	int ret;
5408 
5409 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_USER_DEF_OP, false);
5410 
5411 	req = (struct hclge_fd_user_def_cfg_cmd *)desc.data;
5412 
5413 	hnae3_set_bit(data, HCLGE_FD_USER_DEF_EN_B, cfg[0].ref_cnt > 0);
5414 	hnae3_set_field(data, HCLGE_FD_USER_DEF_OFT_M,
5415 			HCLGE_FD_USER_DEF_OFT_S, cfg[0].offset);
5416 	req->ol2_cfg = cpu_to_le16(data);
5417 
5418 	data = 0;
5419 	hnae3_set_bit(data, HCLGE_FD_USER_DEF_EN_B, cfg[1].ref_cnt > 0);
5420 	hnae3_set_field(data, HCLGE_FD_USER_DEF_OFT_M,
5421 			HCLGE_FD_USER_DEF_OFT_S, cfg[1].offset);
5422 	req->ol3_cfg = cpu_to_le16(data);
5423 
5424 	data = 0;
5425 	hnae3_set_bit(data, HCLGE_FD_USER_DEF_EN_B, cfg[2].ref_cnt > 0);
5426 	hnae3_set_field(data, HCLGE_FD_USER_DEF_OFT_M,
5427 			HCLGE_FD_USER_DEF_OFT_S, cfg[2].offset);
5428 	req->ol4_cfg = cpu_to_le16(data);
5429 
5430 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5431 	if (ret)
5432 		dev_err(&hdev->pdev->dev,
5433 			"failed to set fd user def data, ret= %d\n", ret);
5434 	return ret;
5435 }
5436 
5437 static void hclge_sync_fd_user_def_cfg(struct hclge_dev *hdev, bool locked)
5438 {
5439 	int ret;
5440 
5441 	if (!test_and_clear_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state))
5442 		return;
5443 
5444 	if (!locked)
5445 		spin_lock_bh(&hdev->fd_rule_lock);
5446 
5447 	ret = hclge_fd_set_user_def_cmd(hdev, hdev->fd_cfg.user_def_cfg);
5448 	if (ret)
5449 		set_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state);
5450 
5451 	if (!locked)
5452 		spin_unlock_bh(&hdev->fd_rule_lock);
5453 }
5454 
5455 static int hclge_fd_check_user_def_refcnt(struct hclge_dev *hdev,
5456 					  struct hclge_fd_rule *rule)
5457 {
5458 	struct hlist_head *hlist = &hdev->fd_rule_list;
5459 	struct hclge_fd_rule *fd_rule, *parent = NULL;
5460 	struct hclge_fd_user_def_info *info, *old_info;
5461 	struct hclge_fd_user_def_cfg *cfg;
5462 
5463 	if (!rule || rule->rule_type != HCLGE_FD_EP_ACTIVE ||
5464 	    rule->ep.user_def.layer == HCLGE_FD_USER_DEF_NONE)
5465 		return 0;
5466 
5467 	/* for valid layer is start from 1, so need minus 1 to get the cfg */
5468 	cfg = &hdev->fd_cfg.user_def_cfg[rule->ep.user_def.layer - 1];
5469 	info = &rule->ep.user_def;
5470 
5471 	if (!cfg->ref_cnt || cfg->offset == info->offset)
5472 		return 0;
5473 
5474 	if (cfg->ref_cnt > 1)
5475 		goto error;
5476 
5477 	fd_rule = hclge_find_fd_rule(hlist, rule->location, &parent);
5478 	if (fd_rule) {
5479 		old_info = &fd_rule->ep.user_def;
5480 		if (info->layer == old_info->layer)
5481 			return 0;
5482 	}
5483 
5484 error:
5485 	dev_err(&hdev->pdev->dev,
5486 		"No available offset for layer%d fd rule, each layer only support one user def offset.\n",
5487 		info->layer + 1);
5488 	return -ENOSPC;
5489 }
5490 
5491 static void hclge_fd_inc_user_def_refcnt(struct hclge_dev *hdev,
5492 					 struct hclge_fd_rule *rule)
5493 {
5494 	struct hclge_fd_user_def_cfg *cfg;
5495 
5496 	if (!rule || rule->rule_type != HCLGE_FD_EP_ACTIVE ||
5497 	    rule->ep.user_def.layer == HCLGE_FD_USER_DEF_NONE)
5498 		return;
5499 
5500 	cfg = &hdev->fd_cfg.user_def_cfg[rule->ep.user_def.layer - 1];
5501 	if (!cfg->ref_cnt) {
5502 		cfg->offset = rule->ep.user_def.offset;
5503 		set_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state);
5504 	}
5505 	cfg->ref_cnt++;
5506 }
5507 
5508 static void hclge_fd_dec_user_def_refcnt(struct hclge_dev *hdev,
5509 					 struct hclge_fd_rule *rule)
5510 {
5511 	struct hclge_fd_user_def_cfg *cfg;
5512 
5513 	if (!rule || rule->rule_type != HCLGE_FD_EP_ACTIVE ||
5514 	    rule->ep.user_def.layer == HCLGE_FD_USER_DEF_NONE)
5515 		return;
5516 
5517 	cfg = &hdev->fd_cfg.user_def_cfg[rule->ep.user_def.layer - 1];
5518 	if (!cfg->ref_cnt)
5519 		return;
5520 
5521 	cfg->ref_cnt--;
5522 	if (!cfg->ref_cnt) {
5523 		cfg->offset = 0;
5524 		set_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state);
5525 	}
5526 }
5527 
5528 static void hclge_update_fd_list(struct hclge_dev *hdev,
5529 				 enum HCLGE_FD_NODE_STATE state, u16 location,
5530 				 struct hclge_fd_rule *new_rule)
5531 {
5532 	struct hlist_head *hlist = &hdev->fd_rule_list;
5533 	struct hclge_fd_rule *fd_rule, *parent = NULL;
5534 
5535 	fd_rule = hclge_find_fd_rule(hlist, location, &parent);
5536 	if (fd_rule) {
5537 		hclge_fd_dec_user_def_refcnt(hdev, fd_rule);
5538 		if (state == HCLGE_FD_ACTIVE)
5539 			hclge_fd_inc_user_def_refcnt(hdev, new_rule);
5540 		hclge_sync_fd_user_def_cfg(hdev, true);
5541 
5542 		hclge_update_fd_rule_node(hdev, fd_rule, new_rule, state);
5543 		return;
5544 	}
5545 
5546 	/* it's unlikely to fail here, because we have checked the rule
5547 	 * exist before.
5548 	 */
5549 	if (unlikely(state == HCLGE_FD_TO_DEL || state == HCLGE_FD_DELETED)) {
5550 		dev_warn(&hdev->pdev->dev,
5551 			 "failed to delete fd rule %u, it's inexistent\n",
5552 			 location);
5553 		return;
5554 	}
5555 
5556 	hclge_fd_inc_user_def_refcnt(hdev, new_rule);
5557 	hclge_sync_fd_user_def_cfg(hdev, true);
5558 
5559 	hclge_fd_insert_rule_node(hlist, new_rule, parent);
5560 	hclge_fd_inc_rule_cnt(hdev, new_rule->location);
5561 
5562 	if (state == HCLGE_FD_TO_ADD) {
5563 		set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state);
5564 		hclge_task_schedule(hdev, 0);
5565 	}
5566 }
5567 
5568 static int hclge_get_fd_mode(struct hclge_dev *hdev, u8 *fd_mode)
5569 {
5570 	struct hclge_get_fd_mode_cmd *req;
5571 	struct hclge_desc desc;
5572 	int ret;
5573 
5574 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_MODE_CTRL, true);
5575 
5576 	req = (struct hclge_get_fd_mode_cmd *)desc.data;
5577 
5578 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5579 	if (ret) {
5580 		dev_err(&hdev->pdev->dev, "get fd mode fail, ret=%d\n", ret);
5581 		return ret;
5582 	}
5583 
5584 	*fd_mode = req->mode;
5585 
5586 	return ret;
5587 }
5588 
5589 static int hclge_get_fd_allocation(struct hclge_dev *hdev,
5590 				   u32 *stage1_entry_num,
5591 				   u32 *stage2_entry_num,
5592 				   u16 *stage1_counter_num,
5593 				   u16 *stage2_counter_num)
5594 {
5595 	struct hclge_get_fd_allocation_cmd *req;
5596 	struct hclge_desc desc;
5597 	int ret;
5598 
5599 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_GET_ALLOCATION, true);
5600 
5601 	req = (struct hclge_get_fd_allocation_cmd *)desc.data;
5602 
5603 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5604 	if (ret) {
5605 		dev_err(&hdev->pdev->dev, "query fd allocation fail, ret=%d\n",
5606 			ret);
5607 		return ret;
5608 	}
5609 
5610 	*stage1_entry_num = le32_to_cpu(req->stage1_entry_num);
5611 	*stage2_entry_num = le32_to_cpu(req->stage2_entry_num);
5612 	*stage1_counter_num = le16_to_cpu(req->stage1_counter_num);
5613 	*stage2_counter_num = le16_to_cpu(req->stage2_counter_num);
5614 
5615 	return ret;
5616 }
5617 
5618 static int hclge_set_fd_key_config(struct hclge_dev *hdev,
5619 				   enum HCLGE_FD_STAGE stage_num)
5620 {
5621 	struct hclge_set_fd_key_config_cmd *req;
5622 	struct hclge_fd_key_cfg *stage;
5623 	struct hclge_desc desc;
5624 	int ret;
5625 
5626 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_KEY_CONFIG, false);
5627 
5628 	req = (struct hclge_set_fd_key_config_cmd *)desc.data;
5629 	stage = &hdev->fd_cfg.key_cfg[stage_num];
5630 	req->stage = stage_num;
5631 	req->key_select = stage->key_sel;
5632 	req->inner_sipv6_word_en = stage->inner_sipv6_word_en;
5633 	req->inner_dipv6_word_en = stage->inner_dipv6_word_en;
5634 	req->outer_sipv6_word_en = stage->outer_sipv6_word_en;
5635 	req->outer_dipv6_word_en = stage->outer_dipv6_word_en;
5636 	req->tuple_mask = cpu_to_le32(~stage->tuple_active);
5637 	req->meta_data_mask = cpu_to_le32(~stage->meta_data_active);
5638 
5639 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5640 	if (ret)
5641 		dev_err(&hdev->pdev->dev, "set fd key fail, ret=%d\n", ret);
5642 
5643 	return ret;
5644 }
5645 
5646 static void hclge_fd_disable_user_def(struct hclge_dev *hdev)
5647 {
5648 	struct hclge_fd_user_def_cfg *cfg = hdev->fd_cfg.user_def_cfg;
5649 
5650 	spin_lock_bh(&hdev->fd_rule_lock);
5651 	memset(cfg, 0, sizeof(hdev->fd_cfg.user_def_cfg));
5652 	spin_unlock_bh(&hdev->fd_rule_lock);
5653 
5654 	hclge_fd_set_user_def_cmd(hdev, cfg);
5655 }
5656 
5657 static int hclge_init_fd_config(struct hclge_dev *hdev)
5658 {
5659 #define LOW_2_WORDS		0x03
5660 	struct hclge_fd_key_cfg *key_cfg;
5661 	int ret;
5662 
5663 	if (!hnae3_dev_fd_supported(hdev))
5664 		return 0;
5665 
5666 	ret = hclge_get_fd_mode(hdev, &hdev->fd_cfg.fd_mode);
5667 	if (ret)
5668 		return ret;
5669 
5670 	switch (hdev->fd_cfg.fd_mode) {
5671 	case HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1:
5672 		hdev->fd_cfg.max_key_length = MAX_KEY_LENGTH;
5673 		break;
5674 	case HCLGE_FD_MODE_DEPTH_4K_WIDTH_200B_STAGE_1:
5675 		hdev->fd_cfg.max_key_length = MAX_KEY_LENGTH / 2;
5676 		break;
5677 	default:
5678 		dev_err(&hdev->pdev->dev,
5679 			"Unsupported flow director mode %u\n",
5680 			hdev->fd_cfg.fd_mode);
5681 		return -EOPNOTSUPP;
5682 	}
5683 
5684 	key_cfg = &hdev->fd_cfg.key_cfg[HCLGE_FD_STAGE_1];
5685 	key_cfg->key_sel = HCLGE_FD_KEY_BASE_ON_TUPLE;
5686 	key_cfg->inner_sipv6_word_en = LOW_2_WORDS;
5687 	key_cfg->inner_dipv6_word_en = LOW_2_WORDS;
5688 	key_cfg->outer_sipv6_word_en = 0;
5689 	key_cfg->outer_dipv6_word_en = 0;
5690 
5691 	key_cfg->tuple_active = BIT(INNER_VLAN_TAG_FST) | BIT(INNER_ETH_TYPE) |
5692 				BIT(INNER_IP_PROTO) | BIT(INNER_IP_TOS) |
5693 				BIT(INNER_SRC_IP) | BIT(INNER_DST_IP) |
5694 				BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT);
5695 
5696 	/* If use max 400bit key, we can support tuples for ether type */
5697 	if (hdev->fd_cfg.fd_mode == HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1) {
5698 		key_cfg->tuple_active |=
5699 				BIT(INNER_DST_MAC) | BIT(INNER_SRC_MAC);
5700 		if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V3)
5701 			key_cfg->tuple_active |= HCLGE_FD_TUPLE_USER_DEF_TUPLES;
5702 	}
5703 
5704 	/* roce_type is used to filter roce frames
5705 	 * dst_vport is used to specify the rule
5706 	 */
5707 	key_cfg->meta_data_active = BIT(ROCE_TYPE) | BIT(DST_VPORT);
5708 
5709 	ret = hclge_get_fd_allocation(hdev,
5710 				      &hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1],
5711 				      &hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_2],
5712 				      &hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1],
5713 				      &hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_2]);
5714 	if (ret)
5715 		return ret;
5716 
5717 	return hclge_set_fd_key_config(hdev, HCLGE_FD_STAGE_1);
5718 }
5719 
5720 static int hclge_fd_tcam_config(struct hclge_dev *hdev, u8 stage, bool sel_x,
5721 				int loc, u8 *key, bool is_add)
5722 {
5723 	struct hclge_fd_tcam_config_1_cmd *req1;
5724 	struct hclge_fd_tcam_config_2_cmd *req2;
5725 	struct hclge_fd_tcam_config_3_cmd *req3;
5726 	struct hclge_desc desc[3];
5727 	int ret;
5728 
5729 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_FD_TCAM_OP, false);
5730 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
5731 	hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_FD_TCAM_OP, false);
5732 	desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
5733 	hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_FD_TCAM_OP, false);
5734 
5735 	req1 = (struct hclge_fd_tcam_config_1_cmd *)desc[0].data;
5736 	req2 = (struct hclge_fd_tcam_config_2_cmd *)desc[1].data;
5737 	req3 = (struct hclge_fd_tcam_config_3_cmd *)desc[2].data;
5738 
5739 	req1->stage = stage;
5740 	req1->xy_sel = sel_x ? 1 : 0;
5741 	hnae3_set_bit(req1->port_info, HCLGE_FD_EPORT_SW_EN_B, 0);
5742 	req1->index = cpu_to_le32(loc);
5743 	req1->entry_vld = sel_x ? is_add : 0;
5744 
5745 	if (key) {
5746 		memcpy(req1->tcam_data, &key[0], sizeof(req1->tcam_data));
5747 		memcpy(req2->tcam_data, &key[sizeof(req1->tcam_data)],
5748 		       sizeof(req2->tcam_data));
5749 		memcpy(req3->tcam_data, &key[sizeof(req1->tcam_data) +
5750 		       sizeof(req2->tcam_data)], sizeof(req3->tcam_data));
5751 	}
5752 
5753 	ret = hclge_cmd_send(&hdev->hw, desc, 3);
5754 	if (ret)
5755 		dev_err(&hdev->pdev->dev,
5756 			"config tcam key fail, ret=%d\n",
5757 			ret);
5758 
5759 	return ret;
5760 }
5761 
5762 static int hclge_fd_ad_config(struct hclge_dev *hdev, u8 stage, int loc,
5763 			      struct hclge_fd_ad_data *action)
5764 {
5765 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
5766 	struct hclge_fd_ad_config_cmd *req;
5767 	struct hclge_desc desc;
5768 	u64 ad_data = 0;
5769 	int ret;
5770 
5771 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_AD_OP, false);
5772 
5773 	req = (struct hclge_fd_ad_config_cmd *)desc.data;
5774 	req->index = cpu_to_le32(loc);
5775 	req->stage = stage;
5776 
5777 	hnae3_set_bit(ad_data, HCLGE_FD_AD_WR_RULE_ID_B,
5778 		      action->write_rule_id_to_bd);
5779 	hnae3_set_field(ad_data, HCLGE_FD_AD_RULE_ID_M, HCLGE_FD_AD_RULE_ID_S,
5780 			action->rule_id);
5781 	if (test_bit(HNAE3_DEV_SUPPORT_FD_FORWARD_TC_B, ae_dev->caps)) {
5782 		hnae3_set_bit(ad_data, HCLGE_FD_AD_TC_OVRD_B,
5783 			      action->override_tc);
5784 		hnae3_set_field(ad_data, HCLGE_FD_AD_TC_SIZE_M,
5785 				HCLGE_FD_AD_TC_SIZE_S, (u32)action->tc_size);
5786 	}
5787 	ad_data <<= 32;
5788 	hnae3_set_bit(ad_data, HCLGE_FD_AD_DROP_B, action->drop_packet);
5789 	hnae3_set_bit(ad_data, HCLGE_FD_AD_DIRECT_QID_B,
5790 		      action->forward_to_direct_queue);
5791 	hnae3_set_field(ad_data, HCLGE_FD_AD_QID_M, HCLGE_FD_AD_QID_S,
5792 			action->queue_id);
5793 	hnae3_set_bit(ad_data, HCLGE_FD_AD_USE_COUNTER_B, action->use_counter);
5794 	hnae3_set_field(ad_data, HCLGE_FD_AD_COUNTER_NUM_M,
5795 			HCLGE_FD_AD_COUNTER_NUM_S, action->counter_id);
5796 	hnae3_set_bit(ad_data, HCLGE_FD_AD_NXT_STEP_B, action->use_next_stage);
5797 	hnae3_set_field(ad_data, HCLGE_FD_AD_NXT_KEY_M, HCLGE_FD_AD_NXT_KEY_S,
5798 			action->counter_id);
5799 
5800 	req->ad_data = cpu_to_le64(ad_data);
5801 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
5802 	if (ret)
5803 		dev_err(&hdev->pdev->dev, "fd ad config fail, ret=%d\n", ret);
5804 
5805 	return ret;
5806 }
5807 
5808 static bool hclge_fd_convert_tuple(u32 tuple_bit, u8 *key_x, u8 *key_y,
5809 				   struct hclge_fd_rule *rule)
5810 {
5811 	int offset, moffset, ip_offset;
5812 	enum HCLGE_FD_KEY_OPT key_opt;
5813 	u16 tmp_x_s, tmp_y_s;
5814 	u32 tmp_x_l, tmp_y_l;
5815 	u8 *p = (u8 *)rule;
5816 	int i;
5817 
5818 	if (rule->unused_tuple & BIT(tuple_bit))
5819 		return true;
5820 
5821 	key_opt = tuple_key_info[tuple_bit].key_opt;
5822 	offset = tuple_key_info[tuple_bit].offset;
5823 	moffset = tuple_key_info[tuple_bit].moffset;
5824 
5825 	switch (key_opt) {
5826 	case KEY_OPT_U8:
5827 		calc_x(*key_x, p[offset], p[moffset]);
5828 		calc_y(*key_y, p[offset], p[moffset]);
5829 
5830 		return true;
5831 	case KEY_OPT_LE16:
5832 		calc_x(tmp_x_s, *(u16 *)(&p[offset]), *(u16 *)(&p[moffset]));
5833 		calc_y(tmp_y_s, *(u16 *)(&p[offset]), *(u16 *)(&p[moffset]));
5834 		*(__le16 *)key_x = cpu_to_le16(tmp_x_s);
5835 		*(__le16 *)key_y = cpu_to_le16(tmp_y_s);
5836 
5837 		return true;
5838 	case KEY_OPT_LE32:
5839 		calc_x(tmp_x_l, *(u32 *)(&p[offset]), *(u32 *)(&p[moffset]));
5840 		calc_y(tmp_y_l, *(u32 *)(&p[offset]), *(u32 *)(&p[moffset]));
5841 		*(__le32 *)key_x = cpu_to_le32(tmp_x_l);
5842 		*(__le32 *)key_y = cpu_to_le32(tmp_y_l);
5843 
5844 		return true;
5845 	case KEY_OPT_MAC:
5846 		for (i = 0; i < ETH_ALEN; i++) {
5847 			calc_x(key_x[ETH_ALEN - 1 - i], p[offset + i],
5848 			       p[moffset + i]);
5849 			calc_y(key_y[ETH_ALEN - 1 - i], p[offset + i],
5850 			       p[moffset + i]);
5851 		}
5852 
5853 		return true;
5854 	case KEY_OPT_IP:
5855 		ip_offset = IPV4_INDEX * sizeof(u32);
5856 		calc_x(tmp_x_l, *(u32 *)(&p[offset + ip_offset]),
5857 		       *(u32 *)(&p[moffset + ip_offset]));
5858 		calc_y(tmp_y_l, *(u32 *)(&p[offset + ip_offset]),
5859 		       *(u32 *)(&p[moffset + ip_offset]));
5860 		*(__le32 *)key_x = cpu_to_le32(tmp_x_l);
5861 		*(__le32 *)key_y = cpu_to_le32(tmp_y_l);
5862 
5863 		return true;
5864 	default:
5865 		return false;
5866 	}
5867 }
5868 
5869 static u32 hclge_get_port_number(enum HLCGE_PORT_TYPE port_type, u8 pf_id,
5870 				 u8 vf_id, u8 network_port_id)
5871 {
5872 	u32 port_number = 0;
5873 
5874 	if (port_type == HOST_PORT) {
5875 		hnae3_set_field(port_number, HCLGE_PF_ID_M, HCLGE_PF_ID_S,
5876 				pf_id);
5877 		hnae3_set_field(port_number, HCLGE_VF_ID_M, HCLGE_VF_ID_S,
5878 				vf_id);
5879 		hnae3_set_bit(port_number, HCLGE_PORT_TYPE_B, HOST_PORT);
5880 	} else {
5881 		hnae3_set_field(port_number, HCLGE_NETWORK_PORT_ID_M,
5882 				HCLGE_NETWORK_PORT_ID_S, network_port_id);
5883 		hnae3_set_bit(port_number, HCLGE_PORT_TYPE_B, NETWORK_PORT);
5884 	}
5885 
5886 	return port_number;
5887 }
5888 
5889 static void hclge_fd_convert_meta_data(struct hclge_fd_key_cfg *key_cfg,
5890 				       __le32 *key_x, __le32 *key_y,
5891 				       struct hclge_fd_rule *rule)
5892 {
5893 	u32 tuple_bit, meta_data = 0, tmp_x, tmp_y, port_number;
5894 	u8 cur_pos = 0, tuple_size, shift_bits;
5895 	unsigned int i;
5896 
5897 	for (i = 0; i < MAX_META_DATA; i++) {
5898 		tuple_size = meta_data_key_info[i].key_length;
5899 		tuple_bit = key_cfg->meta_data_active & BIT(i);
5900 
5901 		switch (tuple_bit) {
5902 		case BIT(ROCE_TYPE):
5903 			hnae3_set_bit(meta_data, cur_pos, NIC_PACKET);
5904 			cur_pos += tuple_size;
5905 			break;
5906 		case BIT(DST_VPORT):
5907 			port_number = hclge_get_port_number(HOST_PORT, 0,
5908 							    rule->vf_id, 0);
5909 			hnae3_set_field(meta_data,
5910 					GENMASK(cur_pos + tuple_size, cur_pos),
5911 					cur_pos, port_number);
5912 			cur_pos += tuple_size;
5913 			break;
5914 		default:
5915 			break;
5916 		}
5917 	}
5918 
5919 	calc_x(tmp_x, meta_data, 0xFFFFFFFF);
5920 	calc_y(tmp_y, meta_data, 0xFFFFFFFF);
5921 	shift_bits = sizeof(meta_data) * 8 - cur_pos;
5922 
5923 	*key_x = cpu_to_le32(tmp_x << shift_bits);
5924 	*key_y = cpu_to_le32(tmp_y << shift_bits);
5925 }
5926 
5927 /* A complete key is combined with meta data key and tuple key.
5928  * Meta data key is stored at the MSB region, and tuple key is stored at
5929  * the LSB region, unused bits will be filled 0.
5930  */
5931 static int hclge_config_key(struct hclge_dev *hdev, u8 stage,
5932 			    struct hclge_fd_rule *rule)
5933 {
5934 	struct hclge_fd_key_cfg *key_cfg = &hdev->fd_cfg.key_cfg[stage];
5935 	u8 key_x[MAX_KEY_BYTES], key_y[MAX_KEY_BYTES];
5936 	u8 *cur_key_x, *cur_key_y;
5937 	u8 meta_data_region;
5938 	u8 tuple_size;
5939 	int ret;
5940 	u32 i;
5941 
5942 	memset(key_x, 0, sizeof(key_x));
5943 	memset(key_y, 0, sizeof(key_y));
5944 	cur_key_x = key_x;
5945 	cur_key_y = key_y;
5946 
5947 	for (i = 0; i < MAX_TUPLE; i++) {
5948 		bool tuple_valid;
5949 
5950 		tuple_size = tuple_key_info[i].key_length / 8;
5951 		if (!(key_cfg->tuple_active & BIT(i)))
5952 			continue;
5953 
5954 		tuple_valid = hclge_fd_convert_tuple(i, cur_key_x,
5955 						     cur_key_y, rule);
5956 		if (tuple_valid) {
5957 			cur_key_x += tuple_size;
5958 			cur_key_y += tuple_size;
5959 		}
5960 	}
5961 
5962 	meta_data_region = hdev->fd_cfg.max_key_length / 8 -
5963 			MAX_META_DATA_LENGTH / 8;
5964 
5965 	hclge_fd_convert_meta_data(key_cfg,
5966 				   (__le32 *)(key_x + meta_data_region),
5967 				   (__le32 *)(key_y + meta_data_region),
5968 				   rule);
5969 
5970 	ret = hclge_fd_tcam_config(hdev, stage, false, rule->location, key_y,
5971 				   true);
5972 	if (ret) {
5973 		dev_err(&hdev->pdev->dev,
5974 			"fd key_y config fail, loc=%u, ret=%d\n",
5975 			rule->queue_id, ret);
5976 		return ret;
5977 	}
5978 
5979 	ret = hclge_fd_tcam_config(hdev, stage, true, rule->location, key_x,
5980 				   true);
5981 	if (ret)
5982 		dev_err(&hdev->pdev->dev,
5983 			"fd key_x config fail, loc=%u, ret=%d\n",
5984 			rule->queue_id, ret);
5985 	return ret;
5986 }
5987 
5988 static int hclge_config_action(struct hclge_dev *hdev, u8 stage,
5989 			       struct hclge_fd_rule *rule)
5990 {
5991 	struct hclge_vport *vport = hdev->vport;
5992 	struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
5993 	struct hclge_fd_ad_data ad_data;
5994 
5995 	memset(&ad_data, 0, sizeof(struct hclge_fd_ad_data));
5996 	ad_data.ad_id = rule->location;
5997 
5998 	if (rule->action == HCLGE_FD_ACTION_DROP_PACKET) {
5999 		ad_data.drop_packet = true;
6000 	} else if (rule->action == HCLGE_FD_ACTION_SELECT_TC) {
6001 		ad_data.override_tc = true;
6002 		ad_data.queue_id =
6003 			kinfo->tc_info.tqp_offset[rule->cls_flower.tc];
6004 		ad_data.tc_size =
6005 			ilog2(kinfo->tc_info.tqp_count[rule->cls_flower.tc]);
6006 	} else {
6007 		ad_data.forward_to_direct_queue = true;
6008 		ad_data.queue_id = rule->queue_id;
6009 	}
6010 
6011 	if (hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1]) {
6012 		ad_data.use_counter = true;
6013 		ad_data.counter_id = rule->vf_id %
6014 				     hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1];
6015 	} else {
6016 		ad_data.use_counter = false;
6017 		ad_data.counter_id = 0;
6018 	}
6019 
6020 	ad_data.use_next_stage = false;
6021 	ad_data.next_input_key = 0;
6022 
6023 	ad_data.write_rule_id_to_bd = true;
6024 	ad_data.rule_id = rule->location;
6025 
6026 	return hclge_fd_ad_config(hdev, stage, ad_data.ad_id, &ad_data);
6027 }
6028 
6029 static int hclge_fd_check_tcpip4_tuple(struct ethtool_tcpip4_spec *spec,
6030 				       u32 *unused_tuple)
6031 {
6032 	if (!spec || !unused_tuple)
6033 		return -EINVAL;
6034 
6035 	*unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC);
6036 
6037 	if (!spec->ip4src)
6038 		*unused_tuple |= BIT(INNER_SRC_IP);
6039 
6040 	if (!spec->ip4dst)
6041 		*unused_tuple |= BIT(INNER_DST_IP);
6042 
6043 	if (!spec->psrc)
6044 		*unused_tuple |= BIT(INNER_SRC_PORT);
6045 
6046 	if (!spec->pdst)
6047 		*unused_tuple |= BIT(INNER_DST_PORT);
6048 
6049 	if (!spec->tos)
6050 		*unused_tuple |= BIT(INNER_IP_TOS);
6051 
6052 	return 0;
6053 }
6054 
6055 static int hclge_fd_check_ip4_tuple(struct ethtool_usrip4_spec *spec,
6056 				    u32 *unused_tuple)
6057 {
6058 	if (!spec || !unused_tuple)
6059 		return -EINVAL;
6060 
6061 	*unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) |
6062 		BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT);
6063 
6064 	if (!spec->ip4src)
6065 		*unused_tuple |= BIT(INNER_SRC_IP);
6066 
6067 	if (!spec->ip4dst)
6068 		*unused_tuple |= BIT(INNER_DST_IP);
6069 
6070 	if (!spec->tos)
6071 		*unused_tuple |= BIT(INNER_IP_TOS);
6072 
6073 	if (!spec->proto)
6074 		*unused_tuple |= BIT(INNER_IP_PROTO);
6075 
6076 	if (spec->l4_4_bytes)
6077 		return -EOPNOTSUPP;
6078 
6079 	if (spec->ip_ver != ETH_RX_NFC_IP4)
6080 		return -EOPNOTSUPP;
6081 
6082 	return 0;
6083 }
6084 
6085 static int hclge_fd_check_tcpip6_tuple(struct ethtool_tcpip6_spec *spec,
6086 				       u32 *unused_tuple)
6087 {
6088 	if (!spec || !unused_tuple)
6089 		return -EINVAL;
6090 
6091 	*unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC);
6092 
6093 	/* check whether src/dst ip address used */
6094 	if (ipv6_addr_any((struct in6_addr *)spec->ip6src))
6095 		*unused_tuple |= BIT(INNER_SRC_IP);
6096 
6097 	if (ipv6_addr_any((struct in6_addr *)spec->ip6dst))
6098 		*unused_tuple |= BIT(INNER_DST_IP);
6099 
6100 	if (!spec->psrc)
6101 		*unused_tuple |= BIT(INNER_SRC_PORT);
6102 
6103 	if (!spec->pdst)
6104 		*unused_tuple |= BIT(INNER_DST_PORT);
6105 
6106 	if (!spec->tclass)
6107 		*unused_tuple |= BIT(INNER_IP_TOS);
6108 
6109 	return 0;
6110 }
6111 
6112 static int hclge_fd_check_ip6_tuple(struct ethtool_usrip6_spec *spec,
6113 				    u32 *unused_tuple)
6114 {
6115 	if (!spec || !unused_tuple)
6116 		return -EINVAL;
6117 
6118 	*unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) |
6119 			BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT);
6120 
6121 	/* check whether src/dst ip address used */
6122 	if (ipv6_addr_any((struct in6_addr *)spec->ip6src))
6123 		*unused_tuple |= BIT(INNER_SRC_IP);
6124 
6125 	if (ipv6_addr_any((struct in6_addr *)spec->ip6dst))
6126 		*unused_tuple |= BIT(INNER_DST_IP);
6127 
6128 	if (!spec->l4_proto)
6129 		*unused_tuple |= BIT(INNER_IP_PROTO);
6130 
6131 	if (!spec->tclass)
6132 		*unused_tuple |= BIT(INNER_IP_TOS);
6133 
6134 	if (spec->l4_4_bytes)
6135 		return -EOPNOTSUPP;
6136 
6137 	return 0;
6138 }
6139 
6140 static int hclge_fd_check_ether_tuple(struct ethhdr *spec, u32 *unused_tuple)
6141 {
6142 	if (!spec || !unused_tuple)
6143 		return -EINVAL;
6144 
6145 	*unused_tuple |= BIT(INNER_SRC_IP) | BIT(INNER_DST_IP) |
6146 		BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT) |
6147 		BIT(INNER_IP_TOS) | BIT(INNER_IP_PROTO);
6148 
6149 	if (is_zero_ether_addr(spec->h_source))
6150 		*unused_tuple |= BIT(INNER_SRC_MAC);
6151 
6152 	if (is_zero_ether_addr(spec->h_dest))
6153 		*unused_tuple |= BIT(INNER_DST_MAC);
6154 
6155 	if (!spec->h_proto)
6156 		*unused_tuple |= BIT(INNER_ETH_TYPE);
6157 
6158 	return 0;
6159 }
6160 
6161 static int hclge_fd_check_ext_tuple(struct hclge_dev *hdev,
6162 				    struct ethtool_rx_flow_spec *fs,
6163 				    u32 *unused_tuple)
6164 {
6165 	if (fs->flow_type & FLOW_EXT) {
6166 		if (fs->h_ext.vlan_etype) {
6167 			dev_err(&hdev->pdev->dev, "vlan-etype is not supported!\n");
6168 			return -EOPNOTSUPP;
6169 		}
6170 
6171 		if (!fs->h_ext.vlan_tci)
6172 			*unused_tuple |= BIT(INNER_VLAN_TAG_FST);
6173 
6174 		if (fs->m_ext.vlan_tci &&
6175 		    be16_to_cpu(fs->h_ext.vlan_tci) >= VLAN_N_VID) {
6176 			dev_err(&hdev->pdev->dev,
6177 				"failed to config vlan_tci, invalid vlan_tci: %u, max is %d.\n",
6178 				ntohs(fs->h_ext.vlan_tci), VLAN_N_VID - 1);
6179 			return -EINVAL;
6180 		}
6181 	} else {
6182 		*unused_tuple |= BIT(INNER_VLAN_TAG_FST);
6183 	}
6184 
6185 	if (fs->flow_type & FLOW_MAC_EXT) {
6186 		if (hdev->fd_cfg.fd_mode !=
6187 		    HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1) {
6188 			dev_err(&hdev->pdev->dev,
6189 				"FLOW_MAC_EXT is not supported in current fd mode!\n");
6190 			return -EOPNOTSUPP;
6191 		}
6192 
6193 		if (is_zero_ether_addr(fs->h_ext.h_dest))
6194 			*unused_tuple |= BIT(INNER_DST_MAC);
6195 		else
6196 			*unused_tuple &= ~BIT(INNER_DST_MAC);
6197 	}
6198 
6199 	return 0;
6200 }
6201 
6202 static int hclge_fd_get_user_def_layer(u32 flow_type, u32 *unused_tuple,
6203 				       struct hclge_fd_user_def_info *info)
6204 {
6205 	switch (flow_type) {
6206 	case ETHER_FLOW:
6207 		info->layer = HCLGE_FD_USER_DEF_L2;
6208 		*unused_tuple &= ~BIT(INNER_L2_RSV);
6209 		break;
6210 	case IP_USER_FLOW:
6211 	case IPV6_USER_FLOW:
6212 		info->layer = HCLGE_FD_USER_DEF_L3;
6213 		*unused_tuple &= ~BIT(INNER_L3_RSV);
6214 		break;
6215 	case TCP_V4_FLOW:
6216 	case UDP_V4_FLOW:
6217 	case TCP_V6_FLOW:
6218 	case UDP_V6_FLOW:
6219 		info->layer = HCLGE_FD_USER_DEF_L4;
6220 		*unused_tuple &= ~BIT(INNER_L4_RSV);
6221 		break;
6222 	default:
6223 		return -EOPNOTSUPP;
6224 	}
6225 
6226 	return 0;
6227 }
6228 
6229 static bool hclge_fd_is_user_def_all_masked(struct ethtool_rx_flow_spec *fs)
6230 {
6231 	return be32_to_cpu(fs->m_ext.data[1] | fs->m_ext.data[0]) == 0;
6232 }
6233 
6234 static int hclge_fd_parse_user_def_field(struct hclge_dev *hdev,
6235 					 struct ethtool_rx_flow_spec *fs,
6236 					 u32 *unused_tuple,
6237 					 struct hclge_fd_user_def_info *info)
6238 {
6239 	u32 tuple_active = hdev->fd_cfg.key_cfg[HCLGE_FD_STAGE_1].tuple_active;
6240 	u32 flow_type = fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT);
6241 	u16 data, offset, data_mask, offset_mask;
6242 	int ret;
6243 
6244 	info->layer = HCLGE_FD_USER_DEF_NONE;
6245 	*unused_tuple |= HCLGE_FD_TUPLE_USER_DEF_TUPLES;
6246 
6247 	if (!(fs->flow_type & FLOW_EXT) || hclge_fd_is_user_def_all_masked(fs))
6248 		return 0;
6249 
6250 	/* user-def data from ethtool is 64 bit value, the bit0~15 is used
6251 	 * for data, and bit32~47 is used for offset.
6252 	 */
6253 	data = be32_to_cpu(fs->h_ext.data[1]) & HCLGE_FD_USER_DEF_DATA;
6254 	data_mask = be32_to_cpu(fs->m_ext.data[1]) & HCLGE_FD_USER_DEF_DATA;
6255 	offset = be32_to_cpu(fs->h_ext.data[0]) & HCLGE_FD_USER_DEF_OFFSET;
6256 	offset_mask = be32_to_cpu(fs->m_ext.data[0]) & HCLGE_FD_USER_DEF_OFFSET;
6257 
6258 	if (!(tuple_active & HCLGE_FD_TUPLE_USER_DEF_TUPLES)) {
6259 		dev_err(&hdev->pdev->dev, "user-def bytes are not supported\n");
6260 		return -EOPNOTSUPP;
6261 	}
6262 
6263 	if (offset > HCLGE_FD_MAX_USER_DEF_OFFSET) {
6264 		dev_err(&hdev->pdev->dev,
6265 			"user-def offset[%u] should be no more than %u\n",
6266 			offset, HCLGE_FD_MAX_USER_DEF_OFFSET);
6267 		return -EINVAL;
6268 	}
6269 
6270 	if (offset_mask != HCLGE_FD_USER_DEF_OFFSET_UNMASK) {
6271 		dev_err(&hdev->pdev->dev, "user-def offset can't be masked\n");
6272 		return -EINVAL;
6273 	}
6274 
6275 	ret = hclge_fd_get_user_def_layer(flow_type, unused_tuple, info);
6276 	if (ret) {
6277 		dev_err(&hdev->pdev->dev,
6278 			"unsupported flow type for user-def bytes, ret = %d\n",
6279 			ret);
6280 		return ret;
6281 	}
6282 
6283 	info->data = data;
6284 	info->data_mask = data_mask;
6285 	info->offset = offset;
6286 
6287 	return 0;
6288 }
6289 
6290 static int hclge_fd_check_spec(struct hclge_dev *hdev,
6291 			       struct ethtool_rx_flow_spec *fs,
6292 			       u32 *unused_tuple,
6293 			       struct hclge_fd_user_def_info *info)
6294 {
6295 	u32 flow_type;
6296 	int ret;
6297 
6298 	if (fs->location >= hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) {
6299 		dev_err(&hdev->pdev->dev,
6300 			"failed to config fd rules, invalid rule location: %u, max is %u\n.",
6301 			fs->location,
6302 			hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1] - 1);
6303 		return -EINVAL;
6304 	}
6305 
6306 	ret = hclge_fd_parse_user_def_field(hdev, fs, unused_tuple, info);
6307 	if (ret)
6308 		return ret;
6309 
6310 	flow_type = fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT);
6311 	switch (flow_type) {
6312 	case SCTP_V4_FLOW:
6313 	case TCP_V4_FLOW:
6314 	case UDP_V4_FLOW:
6315 		ret = hclge_fd_check_tcpip4_tuple(&fs->h_u.tcp_ip4_spec,
6316 						  unused_tuple);
6317 		break;
6318 	case IP_USER_FLOW:
6319 		ret = hclge_fd_check_ip4_tuple(&fs->h_u.usr_ip4_spec,
6320 					       unused_tuple);
6321 		break;
6322 	case SCTP_V6_FLOW:
6323 	case TCP_V6_FLOW:
6324 	case UDP_V6_FLOW:
6325 		ret = hclge_fd_check_tcpip6_tuple(&fs->h_u.tcp_ip6_spec,
6326 						  unused_tuple);
6327 		break;
6328 	case IPV6_USER_FLOW:
6329 		ret = hclge_fd_check_ip6_tuple(&fs->h_u.usr_ip6_spec,
6330 					       unused_tuple);
6331 		break;
6332 	case ETHER_FLOW:
6333 		if (hdev->fd_cfg.fd_mode !=
6334 			HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1) {
6335 			dev_err(&hdev->pdev->dev,
6336 				"ETHER_FLOW is not supported in current fd mode!\n");
6337 			return -EOPNOTSUPP;
6338 		}
6339 
6340 		ret = hclge_fd_check_ether_tuple(&fs->h_u.ether_spec,
6341 						 unused_tuple);
6342 		break;
6343 	default:
6344 		dev_err(&hdev->pdev->dev,
6345 			"unsupported protocol type, protocol type = %#x\n",
6346 			flow_type);
6347 		return -EOPNOTSUPP;
6348 	}
6349 
6350 	if (ret) {
6351 		dev_err(&hdev->pdev->dev,
6352 			"failed to check flow union tuple, ret = %d\n",
6353 			ret);
6354 		return ret;
6355 	}
6356 
6357 	return hclge_fd_check_ext_tuple(hdev, fs, unused_tuple);
6358 }
6359 
6360 static void hclge_fd_get_tcpip4_tuple(struct hclge_dev *hdev,
6361 				      struct ethtool_rx_flow_spec *fs,
6362 				      struct hclge_fd_rule *rule, u8 ip_proto)
6363 {
6364 	rule->tuples.src_ip[IPV4_INDEX] =
6365 			be32_to_cpu(fs->h_u.tcp_ip4_spec.ip4src);
6366 	rule->tuples_mask.src_ip[IPV4_INDEX] =
6367 			be32_to_cpu(fs->m_u.tcp_ip4_spec.ip4src);
6368 
6369 	rule->tuples.dst_ip[IPV4_INDEX] =
6370 			be32_to_cpu(fs->h_u.tcp_ip4_spec.ip4dst);
6371 	rule->tuples_mask.dst_ip[IPV4_INDEX] =
6372 			be32_to_cpu(fs->m_u.tcp_ip4_spec.ip4dst);
6373 
6374 	rule->tuples.src_port = be16_to_cpu(fs->h_u.tcp_ip4_spec.psrc);
6375 	rule->tuples_mask.src_port = be16_to_cpu(fs->m_u.tcp_ip4_spec.psrc);
6376 
6377 	rule->tuples.dst_port = be16_to_cpu(fs->h_u.tcp_ip4_spec.pdst);
6378 	rule->tuples_mask.dst_port = be16_to_cpu(fs->m_u.tcp_ip4_spec.pdst);
6379 
6380 	rule->tuples.ip_tos = fs->h_u.tcp_ip4_spec.tos;
6381 	rule->tuples_mask.ip_tos = fs->m_u.tcp_ip4_spec.tos;
6382 
6383 	rule->tuples.ether_proto = ETH_P_IP;
6384 	rule->tuples_mask.ether_proto = 0xFFFF;
6385 
6386 	rule->tuples.ip_proto = ip_proto;
6387 	rule->tuples_mask.ip_proto = 0xFF;
6388 }
6389 
6390 static void hclge_fd_get_ip4_tuple(struct hclge_dev *hdev,
6391 				   struct ethtool_rx_flow_spec *fs,
6392 				   struct hclge_fd_rule *rule)
6393 {
6394 	rule->tuples.src_ip[IPV4_INDEX] =
6395 			be32_to_cpu(fs->h_u.usr_ip4_spec.ip4src);
6396 	rule->tuples_mask.src_ip[IPV4_INDEX] =
6397 			be32_to_cpu(fs->m_u.usr_ip4_spec.ip4src);
6398 
6399 	rule->tuples.dst_ip[IPV4_INDEX] =
6400 			be32_to_cpu(fs->h_u.usr_ip4_spec.ip4dst);
6401 	rule->tuples_mask.dst_ip[IPV4_INDEX] =
6402 			be32_to_cpu(fs->m_u.usr_ip4_spec.ip4dst);
6403 
6404 	rule->tuples.ip_tos = fs->h_u.usr_ip4_spec.tos;
6405 	rule->tuples_mask.ip_tos = fs->m_u.usr_ip4_spec.tos;
6406 
6407 	rule->tuples.ip_proto = fs->h_u.usr_ip4_spec.proto;
6408 	rule->tuples_mask.ip_proto = fs->m_u.usr_ip4_spec.proto;
6409 
6410 	rule->tuples.ether_proto = ETH_P_IP;
6411 	rule->tuples_mask.ether_proto = 0xFFFF;
6412 }
6413 
6414 static void hclge_fd_get_tcpip6_tuple(struct hclge_dev *hdev,
6415 				      struct ethtool_rx_flow_spec *fs,
6416 				      struct hclge_fd_rule *rule, u8 ip_proto)
6417 {
6418 	be32_to_cpu_array(rule->tuples.src_ip, fs->h_u.tcp_ip6_spec.ip6src,
6419 			  IPV6_SIZE);
6420 	be32_to_cpu_array(rule->tuples_mask.src_ip, fs->m_u.tcp_ip6_spec.ip6src,
6421 			  IPV6_SIZE);
6422 
6423 	be32_to_cpu_array(rule->tuples.dst_ip, fs->h_u.tcp_ip6_spec.ip6dst,
6424 			  IPV6_SIZE);
6425 	be32_to_cpu_array(rule->tuples_mask.dst_ip, fs->m_u.tcp_ip6_spec.ip6dst,
6426 			  IPV6_SIZE);
6427 
6428 	rule->tuples.src_port = be16_to_cpu(fs->h_u.tcp_ip6_spec.psrc);
6429 	rule->tuples_mask.src_port = be16_to_cpu(fs->m_u.tcp_ip6_spec.psrc);
6430 
6431 	rule->tuples.dst_port = be16_to_cpu(fs->h_u.tcp_ip6_spec.pdst);
6432 	rule->tuples_mask.dst_port = be16_to_cpu(fs->m_u.tcp_ip6_spec.pdst);
6433 
6434 	rule->tuples.ether_proto = ETH_P_IPV6;
6435 	rule->tuples_mask.ether_proto = 0xFFFF;
6436 
6437 	rule->tuples.ip_tos = fs->h_u.tcp_ip6_spec.tclass;
6438 	rule->tuples_mask.ip_tos = fs->m_u.tcp_ip6_spec.tclass;
6439 
6440 	rule->tuples.ip_proto = ip_proto;
6441 	rule->tuples_mask.ip_proto = 0xFF;
6442 }
6443 
6444 static void hclge_fd_get_ip6_tuple(struct hclge_dev *hdev,
6445 				   struct ethtool_rx_flow_spec *fs,
6446 				   struct hclge_fd_rule *rule)
6447 {
6448 	be32_to_cpu_array(rule->tuples.src_ip, fs->h_u.usr_ip6_spec.ip6src,
6449 			  IPV6_SIZE);
6450 	be32_to_cpu_array(rule->tuples_mask.src_ip, fs->m_u.usr_ip6_spec.ip6src,
6451 			  IPV6_SIZE);
6452 
6453 	be32_to_cpu_array(rule->tuples.dst_ip, fs->h_u.usr_ip6_spec.ip6dst,
6454 			  IPV6_SIZE);
6455 	be32_to_cpu_array(rule->tuples_mask.dst_ip, fs->m_u.usr_ip6_spec.ip6dst,
6456 			  IPV6_SIZE);
6457 
6458 	rule->tuples.ip_proto = fs->h_u.usr_ip6_spec.l4_proto;
6459 	rule->tuples_mask.ip_proto = fs->m_u.usr_ip6_spec.l4_proto;
6460 
6461 	rule->tuples.ip_tos = fs->h_u.tcp_ip6_spec.tclass;
6462 	rule->tuples_mask.ip_tos = fs->m_u.tcp_ip6_spec.tclass;
6463 
6464 	rule->tuples.ether_proto = ETH_P_IPV6;
6465 	rule->tuples_mask.ether_proto = 0xFFFF;
6466 }
6467 
6468 static void hclge_fd_get_ether_tuple(struct hclge_dev *hdev,
6469 				     struct ethtool_rx_flow_spec *fs,
6470 				     struct hclge_fd_rule *rule)
6471 {
6472 	ether_addr_copy(rule->tuples.src_mac, fs->h_u.ether_spec.h_source);
6473 	ether_addr_copy(rule->tuples_mask.src_mac, fs->m_u.ether_spec.h_source);
6474 
6475 	ether_addr_copy(rule->tuples.dst_mac, fs->h_u.ether_spec.h_dest);
6476 	ether_addr_copy(rule->tuples_mask.dst_mac, fs->m_u.ether_spec.h_dest);
6477 
6478 	rule->tuples.ether_proto = be16_to_cpu(fs->h_u.ether_spec.h_proto);
6479 	rule->tuples_mask.ether_proto = be16_to_cpu(fs->m_u.ether_spec.h_proto);
6480 }
6481 
6482 static void hclge_fd_get_user_def_tuple(struct hclge_fd_user_def_info *info,
6483 					struct hclge_fd_rule *rule)
6484 {
6485 	switch (info->layer) {
6486 	case HCLGE_FD_USER_DEF_L2:
6487 		rule->tuples.l2_user_def = info->data;
6488 		rule->tuples_mask.l2_user_def = info->data_mask;
6489 		break;
6490 	case HCLGE_FD_USER_DEF_L3:
6491 		rule->tuples.l3_user_def = info->data;
6492 		rule->tuples_mask.l3_user_def = info->data_mask;
6493 		break;
6494 	case HCLGE_FD_USER_DEF_L4:
6495 		rule->tuples.l4_user_def = (u32)info->data << 16;
6496 		rule->tuples_mask.l4_user_def = (u32)info->data_mask << 16;
6497 		break;
6498 	default:
6499 		break;
6500 	}
6501 
6502 	rule->ep.user_def = *info;
6503 }
6504 
6505 static int hclge_fd_get_tuple(struct hclge_dev *hdev,
6506 			      struct ethtool_rx_flow_spec *fs,
6507 			      struct hclge_fd_rule *rule,
6508 			      struct hclge_fd_user_def_info *info)
6509 {
6510 	u32 flow_type = fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT);
6511 
6512 	switch (flow_type) {
6513 	case SCTP_V4_FLOW:
6514 		hclge_fd_get_tcpip4_tuple(hdev, fs, rule, IPPROTO_SCTP);
6515 		break;
6516 	case TCP_V4_FLOW:
6517 		hclge_fd_get_tcpip4_tuple(hdev, fs, rule, IPPROTO_TCP);
6518 		break;
6519 	case UDP_V4_FLOW:
6520 		hclge_fd_get_tcpip4_tuple(hdev, fs, rule, IPPROTO_UDP);
6521 		break;
6522 	case IP_USER_FLOW:
6523 		hclge_fd_get_ip4_tuple(hdev, fs, rule);
6524 		break;
6525 	case SCTP_V6_FLOW:
6526 		hclge_fd_get_tcpip6_tuple(hdev, fs, rule, IPPROTO_SCTP);
6527 		break;
6528 	case TCP_V6_FLOW:
6529 		hclge_fd_get_tcpip6_tuple(hdev, fs, rule, IPPROTO_TCP);
6530 		break;
6531 	case UDP_V6_FLOW:
6532 		hclge_fd_get_tcpip6_tuple(hdev, fs, rule, IPPROTO_UDP);
6533 		break;
6534 	case IPV6_USER_FLOW:
6535 		hclge_fd_get_ip6_tuple(hdev, fs, rule);
6536 		break;
6537 	case ETHER_FLOW:
6538 		hclge_fd_get_ether_tuple(hdev, fs, rule);
6539 		break;
6540 	default:
6541 		return -EOPNOTSUPP;
6542 	}
6543 
6544 	if (fs->flow_type & FLOW_EXT) {
6545 		rule->tuples.vlan_tag1 = be16_to_cpu(fs->h_ext.vlan_tci);
6546 		rule->tuples_mask.vlan_tag1 = be16_to_cpu(fs->m_ext.vlan_tci);
6547 		hclge_fd_get_user_def_tuple(info, rule);
6548 	}
6549 
6550 	if (fs->flow_type & FLOW_MAC_EXT) {
6551 		ether_addr_copy(rule->tuples.dst_mac, fs->h_ext.h_dest);
6552 		ether_addr_copy(rule->tuples_mask.dst_mac, fs->m_ext.h_dest);
6553 	}
6554 
6555 	return 0;
6556 }
6557 
6558 static int hclge_fd_config_rule(struct hclge_dev *hdev,
6559 				struct hclge_fd_rule *rule)
6560 {
6561 	int ret;
6562 
6563 	ret = hclge_config_action(hdev, HCLGE_FD_STAGE_1, rule);
6564 	if (ret)
6565 		return ret;
6566 
6567 	return hclge_config_key(hdev, HCLGE_FD_STAGE_1, rule);
6568 }
6569 
6570 static int hclge_add_fd_entry_common(struct hclge_dev *hdev,
6571 				     struct hclge_fd_rule *rule)
6572 {
6573 	int ret;
6574 
6575 	spin_lock_bh(&hdev->fd_rule_lock);
6576 
6577 	if (hdev->fd_active_type != rule->rule_type &&
6578 	    (hdev->fd_active_type == HCLGE_FD_TC_FLOWER_ACTIVE ||
6579 	     hdev->fd_active_type == HCLGE_FD_EP_ACTIVE)) {
6580 		dev_err(&hdev->pdev->dev,
6581 			"mode conflict(new type %d, active type %d), please delete existent rules first\n",
6582 			rule->rule_type, hdev->fd_active_type);
6583 		spin_unlock_bh(&hdev->fd_rule_lock);
6584 		return -EINVAL;
6585 	}
6586 
6587 	ret = hclge_fd_check_user_def_refcnt(hdev, rule);
6588 	if (ret)
6589 		goto out;
6590 
6591 	ret = hclge_clear_arfs_rules(hdev);
6592 	if (ret)
6593 		goto out;
6594 
6595 	ret = hclge_fd_config_rule(hdev, rule);
6596 	if (ret)
6597 		goto out;
6598 
6599 	rule->state = HCLGE_FD_ACTIVE;
6600 	hdev->fd_active_type = rule->rule_type;
6601 	hclge_update_fd_list(hdev, rule->state, rule->location, rule);
6602 
6603 out:
6604 	spin_unlock_bh(&hdev->fd_rule_lock);
6605 	return ret;
6606 }
6607 
6608 static bool hclge_is_cls_flower_active(struct hnae3_handle *handle)
6609 {
6610 	struct hclge_vport *vport = hclge_get_vport(handle);
6611 	struct hclge_dev *hdev = vport->back;
6612 
6613 	return hdev->fd_active_type == HCLGE_FD_TC_FLOWER_ACTIVE;
6614 }
6615 
6616 static int hclge_fd_parse_ring_cookie(struct hclge_dev *hdev, u64 ring_cookie,
6617 				      u16 *vport_id, u8 *action, u16 *queue_id)
6618 {
6619 	struct hclge_vport *vport = hdev->vport;
6620 
6621 	if (ring_cookie == RX_CLS_FLOW_DISC) {
6622 		*action = HCLGE_FD_ACTION_DROP_PACKET;
6623 	} else {
6624 		u32 ring = ethtool_get_flow_spec_ring(ring_cookie);
6625 		u8 vf = ethtool_get_flow_spec_ring_vf(ring_cookie);
6626 		u16 tqps;
6627 
6628 		if (vf > hdev->num_req_vfs) {
6629 			dev_err(&hdev->pdev->dev,
6630 				"Error: vf id (%u) > max vf num (%u)\n",
6631 				vf, hdev->num_req_vfs);
6632 			return -EINVAL;
6633 		}
6634 
6635 		*vport_id = vf ? hdev->vport[vf].vport_id : vport->vport_id;
6636 		tqps = hdev->vport[vf].nic.kinfo.num_tqps;
6637 
6638 		if (ring >= tqps) {
6639 			dev_err(&hdev->pdev->dev,
6640 				"Error: queue id (%u) > max tqp num (%u)\n",
6641 				ring, tqps - 1);
6642 			return -EINVAL;
6643 		}
6644 
6645 		*action = HCLGE_FD_ACTION_SELECT_QUEUE;
6646 		*queue_id = ring;
6647 	}
6648 
6649 	return 0;
6650 }
6651 
6652 static int hclge_add_fd_entry(struct hnae3_handle *handle,
6653 			      struct ethtool_rxnfc *cmd)
6654 {
6655 	struct hclge_vport *vport = hclge_get_vport(handle);
6656 	struct hclge_dev *hdev = vport->back;
6657 	struct hclge_fd_user_def_info info;
6658 	u16 dst_vport_id = 0, q_index = 0;
6659 	struct ethtool_rx_flow_spec *fs;
6660 	struct hclge_fd_rule *rule;
6661 	u32 unused = 0;
6662 	u8 action;
6663 	int ret;
6664 
6665 	if (!hnae3_dev_fd_supported(hdev)) {
6666 		dev_err(&hdev->pdev->dev,
6667 			"flow table director is not supported\n");
6668 		return -EOPNOTSUPP;
6669 	}
6670 
6671 	if (!hdev->fd_en) {
6672 		dev_err(&hdev->pdev->dev,
6673 			"please enable flow director first\n");
6674 		return -EOPNOTSUPP;
6675 	}
6676 
6677 	fs = (struct ethtool_rx_flow_spec *)&cmd->fs;
6678 
6679 	ret = hclge_fd_check_spec(hdev, fs, &unused, &info);
6680 	if (ret)
6681 		return ret;
6682 
6683 	ret = hclge_fd_parse_ring_cookie(hdev, fs->ring_cookie, &dst_vport_id,
6684 					 &action, &q_index);
6685 	if (ret)
6686 		return ret;
6687 
6688 	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
6689 	if (!rule)
6690 		return -ENOMEM;
6691 
6692 	ret = hclge_fd_get_tuple(hdev, fs, rule, &info);
6693 	if (ret) {
6694 		kfree(rule);
6695 		return ret;
6696 	}
6697 
6698 	rule->flow_type = fs->flow_type;
6699 	rule->location = fs->location;
6700 	rule->unused_tuple = unused;
6701 	rule->vf_id = dst_vport_id;
6702 	rule->queue_id = q_index;
6703 	rule->action = action;
6704 	rule->rule_type = HCLGE_FD_EP_ACTIVE;
6705 
6706 	ret = hclge_add_fd_entry_common(hdev, rule);
6707 	if (ret)
6708 		kfree(rule);
6709 
6710 	return ret;
6711 }
6712 
6713 static int hclge_del_fd_entry(struct hnae3_handle *handle,
6714 			      struct ethtool_rxnfc *cmd)
6715 {
6716 	struct hclge_vport *vport = hclge_get_vport(handle);
6717 	struct hclge_dev *hdev = vport->back;
6718 	struct ethtool_rx_flow_spec *fs;
6719 	int ret;
6720 
6721 	if (!hnae3_dev_fd_supported(hdev))
6722 		return -EOPNOTSUPP;
6723 
6724 	fs = (struct ethtool_rx_flow_spec *)&cmd->fs;
6725 
6726 	if (fs->location >= hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1])
6727 		return -EINVAL;
6728 
6729 	spin_lock_bh(&hdev->fd_rule_lock);
6730 	if (hdev->fd_active_type == HCLGE_FD_TC_FLOWER_ACTIVE ||
6731 	    !test_bit(fs->location, hdev->fd_bmap)) {
6732 		dev_err(&hdev->pdev->dev,
6733 			"Delete fail, rule %u is inexistent\n", fs->location);
6734 		spin_unlock_bh(&hdev->fd_rule_lock);
6735 		return -ENOENT;
6736 	}
6737 
6738 	ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, fs->location,
6739 				   NULL, false);
6740 	if (ret)
6741 		goto out;
6742 
6743 	hclge_update_fd_list(hdev, HCLGE_FD_DELETED, fs->location, NULL);
6744 
6745 out:
6746 	spin_unlock_bh(&hdev->fd_rule_lock);
6747 	return ret;
6748 }
6749 
6750 static void hclge_clear_fd_rules_in_list(struct hclge_dev *hdev,
6751 					 bool clear_list)
6752 {
6753 	struct hclge_fd_rule *rule;
6754 	struct hlist_node *node;
6755 	u16 location;
6756 
6757 	if (!hnae3_dev_fd_supported(hdev))
6758 		return;
6759 
6760 	spin_lock_bh(&hdev->fd_rule_lock);
6761 
6762 	for_each_set_bit(location, hdev->fd_bmap,
6763 			 hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1])
6764 		hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, location,
6765 				     NULL, false);
6766 
6767 	if (clear_list) {
6768 		hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list,
6769 					  rule_node) {
6770 			hlist_del(&rule->rule_node);
6771 			kfree(rule);
6772 		}
6773 		hdev->fd_active_type = HCLGE_FD_RULE_NONE;
6774 		hdev->hclge_fd_rule_num = 0;
6775 		bitmap_zero(hdev->fd_bmap,
6776 			    hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]);
6777 	}
6778 
6779 	spin_unlock_bh(&hdev->fd_rule_lock);
6780 }
6781 
6782 static void hclge_del_all_fd_entries(struct hclge_dev *hdev)
6783 {
6784 	hclge_clear_fd_rules_in_list(hdev, true);
6785 	hclge_fd_disable_user_def(hdev);
6786 }
6787 
6788 static int hclge_restore_fd_entries(struct hnae3_handle *handle)
6789 {
6790 	struct hclge_vport *vport = hclge_get_vport(handle);
6791 	struct hclge_dev *hdev = vport->back;
6792 	struct hclge_fd_rule *rule;
6793 	struct hlist_node *node;
6794 
6795 	/* Return ok here, because reset error handling will check this
6796 	 * return value. If error is returned here, the reset process will
6797 	 * fail.
6798 	 */
6799 	if (!hnae3_dev_fd_supported(hdev))
6800 		return 0;
6801 
6802 	/* if fd is disabled, should not restore it when reset */
6803 	if (!hdev->fd_en)
6804 		return 0;
6805 
6806 	spin_lock_bh(&hdev->fd_rule_lock);
6807 	hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
6808 		if (rule->state == HCLGE_FD_ACTIVE)
6809 			rule->state = HCLGE_FD_TO_ADD;
6810 	}
6811 	spin_unlock_bh(&hdev->fd_rule_lock);
6812 	set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state);
6813 
6814 	return 0;
6815 }
6816 
6817 static int hclge_get_fd_rule_cnt(struct hnae3_handle *handle,
6818 				 struct ethtool_rxnfc *cmd)
6819 {
6820 	struct hclge_vport *vport = hclge_get_vport(handle);
6821 	struct hclge_dev *hdev = vport->back;
6822 
6823 	if (!hnae3_dev_fd_supported(hdev) || hclge_is_cls_flower_active(handle))
6824 		return -EOPNOTSUPP;
6825 
6826 	cmd->rule_cnt = hdev->hclge_fd_rule_num;
6827 	cmd->data = hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1];
6828 
6829 	return 0;
6830 }
6831 
6832 static void hclge_fd_get_tcpip4_info(struct hclge_fd_rule *rule,
6833 				     struct ethtool_tcpip4_spec *spec,
6834 				     struct ethtool_tcpip4_spec *spec_mask)
6835 {
6836 	spec->ip4src = cpu_to_be32(rule->tuples.src_ip[IPV4_INDEX]);
6837 	spec_mask->ip4src = rule->unused_tuple & BIT(INNER_SRC_IP) ?
6838 			0 : cpu_to_be32(rule->tuples_mask.src_ip[IPV4_INDEX]);
6839 
6840 	spec->ip4dst = cpu_to_be32(rule->tuples.dst_ip[IPV4_INDEX]);
6841 	spec_mask->ip4dst = rule->unused_tuple & BIT(INNER_DST_IP) ?
6842 			0 : cpu_to_be32(rule->tuples_mask.dst_ip[IPV4_INDEX]);
6843 
6844 	spec->psrc = cpu_to_be16(rule->tuples.src_port);
6845 	spec_mask->psrc = rule->unused_tuple & BIT(INNER_SRC_PORT) ?
6846 			0 : cpu_to_be16(rule->tuples_mask.src_port);
6847 
6848 	spec->pdst = cpu_to_be16(rule->tuples.dst_port);
6849 	spec_mask->pdst = rule->unused_tuple & BIT(INNER_DST_PORT) ?
6850 			0 : cpu_to_be16(rule->tuples_mask.dst_port);
6851 
6852 	spec->tos = rule->tuples.ip_tos;
6853 	spec_mask->tos = rule->unused_tuple & BIT(INNER_IP_TOS) ?
6854 			0 : rule->tuples_mask.ip_tos;
6855 }
6856 
6857 static void hclge_fd_get_ip4_info(struct hclge_fd_rule *rule,
6858 				  struct ethtool_usrip4_spec *spec,
6859 				  struct ethtool_usrip4_spec *spec_mask)
6860 {
6861 	spec->ip4src = cpu_to_be32(rule->tuples.src_ip[IPV4_INDEX]);
6862 	spec_mask->ip4src = rule->unused_tuple & BIT(INNER_SRC_IP) ?
6863 			0 : cpu_to_be32(rule->tuples_mask.src_ip[IPV4_INDEX]);
6864 
6865 	spec->ip4dst = cpu_to_be32(rule->tuples.dst_ip[IPV4_INDEX]);
6866 	spec_mask->ip4dst = rule->unused_tuple & BIT(INNER_DST_IP) ?
6867 			0 : cpu_to_be32(rule->tuples_mask.dst_ip[IPV4_INDEX]);
6868 
6869 	spec->tos = rule->tuples.ip_tos;
6870 	spec_mask->tos = rule->unused_tuple & BIT(INNER_IP_TOS) ?
6871 			0 : rule->tuples_mask.ip_tos;
6872 
6873 	spec->proto = rule->tuples.ip_proto;
6874 	spec_mask->proto = rule->unused_tuple & BIT(INNER_IP_PROTO) ?
6875 			0 : rule->tuples_mask.ip_proto;
6876 
6877 	spec->ip_ver = ETH_RX_NFC_IP4;
6878 }
6879 
6880 static void hclge_fd_get_tcpip6_info(struct hclge_fd_rule *rule,
6881 				     struct ethtool_tcpip6_spec *spec,
6882 				     struct ethtool_tcpip6_spec *spec_mask)
6883 {
6884 	cpu_to_be32_array(spec->ip6src,
6885 			  rule->tuples.src_ip, IPV6_SIZE);
6886 	cpu_to_be32_array(spec->ip6dst,
6887 			  rule->tuples.dst_ip, IPV6_SIZE);
6888 	if (rule->unused_tuple & BIT(INNER_SRC_IP))
6889 		memset(spec_mask->ip6src, 0, sizeof(spec_mask->ip6src));
6890 	else
6891 		cpu_to_be32_array(spec_mask->ip6src, rule->tuples_mask.src_ip,
6892 				  IPV6_SIZE);
6893 
6894 	if (rule->unused_tuple & BIT(INNER_DST_IP))
6895 		memset(spec_mask->ip6dst, 0, sizeof(spec_mask->ip6dst));
6896 	else
6897 		cpu_to_be32_array(spec_mask->ip6dst, rule->tuples_mask.dst_ip,
6898 				  IPV6_SIZE);
6899 
6900 	spec->tclass = rule->tuples.ip_tos;
6901 	spec_mask->tclass = rule->unused_tuple & BIT(INNER_IP_TOS) ?
6902 			0 : rule->tuples_mask.ip_tos;
6903 
6904 	spec->psrc = cpu_to_be16(rule->tuples.src_port);
6905 	spec_mask->psrc = rule->unused_tuple & BIT(INNER_SRC_PORT) ?
6906 			0 : cpu_to_be16(rule->tuples_mask.src_port);
6907 
6908 	spec->pdst = cpu_to_be16(rule->tuples.dst_port);
6909 	spec_mask->pdst = rule->unused_tuple & BIT(INNER_DST_PORT) ?
6910 			0 : cpu_to_be16(rule->tuples_mask.dst_port);
6911 }
6912 
6913 static void hclge_fd_get_ip6_info(struct hclge_fd_rule *rule,
6914 				  struct ethtool_usrip6_spec *spec,
6915 				  struct ethtool_usrip6_spec *spec_mask)
6916 {
6917 	cpu_to_be32_array(spec->ip6src, rule->tuples.src_ip, IPV6_SIZE);
6918 	cpu_to_be32_array(spec->ip6dst, rule->tuples.dst_ip, IPV6_SIZE);
6919 	if (rule->unused_tuple & BIT(INNER_SRC_IP))
6920 		memset(spec_mask->ip6src, 0, sizeof(spec_mask->ip6src));
6921 	else
6922 		cpu_to_be32_array(spec_mask->ip6src,
6923 				  rule->tuples_mask.src_ip, IPV6_SIZE);
6924 
6925 	if (rule->unused_tuple & BIT(INNER_DST_IP))
6926 		memset(spec_mask->ip6dst, 0, sizeof(spec_mask->ip6dst));
6927 	else
6928 		cpu_to_be32_array(spec_mask->ip6dst,
6929 				  rule->tuples_mask.dst_ip, IPV6_SIZE);
6930 
6931 	spec->tclass = rule->tuples.ip_tos;
6932 	spec_mask->tclass = rule->unused_tuple & BIT(INNER_IP_TOS) ?
6933 			0 : rule->tuples_mask.ip_tos;
6934 
6935 	spec->l4_proto = rule->tuples.ip_proto;
6936 	spec_mask->l4_proto = rule->unused_tuple & BIT(INNER_IP_PROTO) ?
6937 			0 : rule->tuples_mask.ip_proto;
6938 }
6939 
6940 static void hclge_fd_get_ether_info(struct hclge_fd_rule *rule,
6941 				    struct ethhdr *spec,
6942 				    struct ethhdr *spec_mask)
6943 {
6944 	ether_addr_copy(spec->h_source, rule->tuples.src_mac);
6945 	ether_addr_copy(spec->h_dest, rule->tuples.dst_mac);
6946 
6947 	if (rule->unused_tuple & BIT(INNER_SRC_MAC))
6948 		eth_zero_addr(spec_mask->h_source);
6949 	else
6950 		ether_addr_copy(spec_mask->h_source, rule->tuples_mask.src_mac);
6951 
6952 	if (rule->unused_tuple & BIT(INNER_DST_MAC))
6953 		eth_zero_addr(spec_mask->h_dest);
6954 	else
6955 		ether_addr_copy(spec_mask->h_dest, rule->tuples_mask.dst_mac);
6956 
6957 	spec->h_proto = cpu_to_be16(rule->tuples.ether_proto);
6958 	spec_mask->h_proto = rule->unused_tuple & BIT(INNER_ETH_TYPE) ?
6959 			0 : cpu_to_be16(rule->tuples_mask.ether_proto);
6960 }
6961 
6962 static void hclge_fd_get_user_def_info(struct ethtool_rx_flow_spec *fs,
6963 				       struct hclge_fd_rule *rule)
6964 {
6965 	if ((rule->unused_tuple & HCLGE_FD_TUPLE_USER_DEF_TUPLES) ==
6966 	    HCLGE_FD_TUPLE_USER_DEF_TUPLES) {
6967 		fs->h_ext.data[0] = 0;
6968 		fs->h_ext.data[1] = 0;
6969 		fs->m_ext.data[0] = 0;
6970 		fs->m_ext.data[1] = 0;
6971 	} else {
6972 		fs->h_ext.data[0] = cpu_to_be32(rule->ep.user_def.offset);
6973 		fs->h_ext.data[1] = cpu_to_be32(rule->ep.user_def.data);
6974 		fs->m_ext.data[0] =
6975 				cpu_to_be32(HCLGE_FD_USER_DEF_OFFSET_UNMASK);
6976 		fs->m_ext.data[1] = cpu_to_be32(rule->ep.user_def.data_mask);
6977 	}
6978 }
6979 
6980 static void hclge_fd_get_ext_info(struct ethtool_rx_flow_spec *fs,
6981 				  struct hclge_fd_rule *rule)
6982 {
6983 	if (fs->flow_type & FLOW_EXT) {
6984 		fs->h_ext.vlan_tci = cpu_to_be16(rule->tuples.vlan_tag1);
6985 		fs->m_ext.vlan_tci =
6986 				rule->unused_tuple & BIT(INNER_VLAN_TAG_FST) ?
6987 				0 : cpu_to_be16(rule->tuples_mask.vlan_tag1);
6988 
6989 		hclge_fd_get_user_def_info(fs, rule);
6990 	}
6991 
6992 	if (fs->flow_type & FLOW_MAC_EXT) {
6993 		ether_addr_copy(fs->h_ext.h_dest, rule->tuples.dst_mac);
6994 		if (rule->unused_tuple & BIT(INNER_DST_MAC))
6995 			eth_zero_addr(fs->m_u.ether_spec.h_dest);
6996 		else
6997 			ether_addr_copy(fs->m_u.ether_spec.h_dest,
6998 					rule->tuples_mask.dst_mac);
6999 	}
7000 }
7001 
7002 static int hclge_get_fd_rule_info(struct hnae3_handle *handle,
7003 				  struct ethtool_rxnfc *cmd)
7004 {
7005 	struct hclge_vport *vport = hclge_get_vport(handle);
7006 	struct hclge_fd_rule *rule = NULL;
7007 	struct hclge_dev *hdev = vport->back;
7008 	struct ethtool_rx_flow_spec *fs;
7009 	struct hlist_node *node2;
7010 
7011 	if (!hnae3_dev_fd_supported(hdev))
7012 		return -EOPNOTSUPP;
7013 
7014 	fs = (struct ethtool_rx_flow_spec *)&cmd->fs;
7015 
7016 	spin_lock_bh(&hdev->fd_rule_lock);
7017 
7018 	hlist_for_each_entry_safe(rule, node2, &hdev->fd_rule_list, rule_node) {
7019 		if (rule->location >= fs->location)
7020 			break;
7021 	}
7022 
7023 	if (!rule || fs->location != rule->location) {
7024 		spin_unlock_bh(&hdev->fd_rule_lock);
7025 
7026 		return -ENOENT;
7027 	}
7028 
7029 	fs->flow_type = rule->flow_type;
7030 	switch (fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) {
7031 	case SCTP_V4_FLOW:
7032 	case TCP_V4_FLOW:
7033 	case UDP_V4_FLOW:
7034 		hclge_fd_get_tcpip4_info(rule, &fs->h_u.tcp_ip4_spec,
7035 					 &fs->m_u.tcp_ip4_spec);
7036 		break;
7037 	case IP_USER_FLOW:
7038 		hclge_fd_get_ip4_info(rule, &fs->h_u.usr_ip4_spec,
7039 				      &fs->m_u.usr_ip4_spec);
7040 		break;
7041 	case SCTP_V6_FLOW:
7042 	case TCP_V6_FLOW:
7043 	case UDP_V6_FLOW:
7044 		hclge_fd_get_tcpip6_info(rule, &fs->h_u.tcp_ip6_spec,
7045 					 &fs->m_u.tcp_ip6_spec);
7046 		break;
7047 	case IPV6_USER_FLOW:
7048 		hclge_fd_get_ip6_info(rule, &fs->h_u.usr_ip6_spec,
7049 				      &fs->m_u.usr_ip6_spec);
7050 		break;
7051 	/* The flow type of fd rule has been checked before adding in to rule
7052 	 * list. As other flow types have been handled, it must be ETHER_FLOW
7053 	 * for the default case
7054 	 */
7055 	default:
7056 		hclge_fd_get_ether_info(rule, &fs->h_u.ether_spec,
7057 					&fs->m_u.ether_spec);
7058 		break;
7059 	}
7060 
7061 	hclge_fd_get_ext_info(fs, rule);
7062 
7063 	if (rule->action == HCLGE_FD_ACTION_DROP_PACKET) {
7064 		fs->ring_cookie = RX_CLS_FLOW_DISC;
7065 	} else {
7066 		u64 vf_id;
7067 
7068 		fs->ring_cookie = rule->queue_id;
7069 		vf_id = rule->vf_id;
7070 		vf_id <<= ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
7071 		fs->ring_cookie |= vf_id;
7072 	}
7073 
7074 	spin_unlock_bh(&hdev->fd_rule_lock);
7075 
7076 	return 0;
7077 }
7078 
7079 static int hclge_get_all_rules(struct hnae3_handle *handle,
7080 			       struct ethtool_rxnfc *cmd, u32 *rule_locs)
7081 {
7082 	struct hclge_vport *vport = hclge_get_vport(handle);
7083 	struct hclge_dev *hdev = vport->back;
7084 	struct hclge_fd_rule *rule;
7085 	struct hlist_node *node2;
7086 	int cnt = 0;
7087 
7088 	if (!hnae3_dev_fd_supported(hdev))
7089 		return -EOPNOTSUPP;
7090 
7091 	cmd->data = hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1];
7092 
7093 	spin_lock_bh(&hdev->fd_rule_lock);
7094 	hlist_for_each_entry_safe(rule, node2,
7095 				  &hdev->fd_rule_list, rule_node) {
7096 		if (cnt == cmd->rule_cnt) {
7097 			spin_unlock_bh(&hdev->fd_rule_lock);
7098 			return -EMSGSIZE;
7099 		}
7100 
7101 		if (rule->state == HCLGE_FD_TO_DEL)
7102 			continue;
7103 
7104 		rule_locs[cnt] = rule->location;
7105 		cnt++;
7106 	}
7107 
7108 	spin_unlock_bh(&hdev->fd_rule_lock);
7109 
7110 	cmd->rule_cnt = cnt;
7111 
7112 	return 0;
7113 }
7114 
7115 static void hclge_fd_get_flow_tuples(const struct flow_keys *fkeys,
7116 				     struct hclge_fd_rule_tuples *tuples)
7117 {
7118 #define flow_ip6_src fkeys->addrs.v6addrs.src.in6_u.u6_addr32
7119 #define flow_ip6_dst fkeys->addrs.v6addrs.dst.in6_u.u6_addr32
7120 
7121 	tuples->ether_proto = be16_to_cpu(fkeys->basic.n_proto);
7122 	tuples->ip_proto = fkeys->basic.ip_proto;
7123 	tuples->dst_port = be16_to_cpu(fkeys->ports.dst);
7124 
7125 	if (fkeys->basic.n_proto == htons(ETH_P_IP)) {
7126 		tuples->src_ip[3] = be32_to_cpu(fkeys->addrs.v4addrs.src);
7127 		tuples->dst_ip[3] = be32_to_cpu(fkeys->addrs.v4addrs.dst);
7128 	} else {
7129 		int i;
7130 
7131 		for (i = 0; i < IPV6_SIZE; i++) {
7132 			tuples->src_ip[i] = be32_to_cpu(flow_ip6_src[i]);
7133 			tuples->dst_ip[i] = be32_to_cpu(flow_ip6_dst[i]);
7134 		}
7135 	}
7136 }
7137 
7138 /* traverse all rules, check whether an existed rule has the same tuples */
7139 static struct hclge_fd_rule *
7140 hclge_fd_search_flow_keys(struct hclge_dev *hdev,
7141 			  const struct hclge_fd_rule_tuples *tuples)
7142 {
7143 	struct hclge_fd_rule *rule = NULL;
7144 	struct hlist_node *node;
7145 
7146 	hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
7147 		if (!memcmp(tuples, &rule->tuples, sizeof(*tuples)))
7148 			return rule;
7149 	}
7150 
7151 	return NULL;
7152 }
7153 
7154 static void hclge_fd_build_arfs_rule(const struct hclge_fd_rule_tuples *tuples,
7155 				     struct hclge_fd_rule *rule)
7156 {
7157 	rule->unused_tuple = BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) |
7158 			     BIT(INNER_VLAN_TAG_FST) | BIT(INNER_IP_TOS) |
7159 			     BIT(INNER_SRC_PORT);
7160 	rule->action = 0;
7161 	rule->vf_id = 0;
7162 	rule->rule_type = HCLGE_FD_ARFS_ACTIVE;
7163 	rule->state = HCLGE_FD_TO_ADD;
7164 	if (tuples->ether_proto == ETH_P_IP) {
7165 		if (tuples->ip_proto == IPPROTO_TCP)
7166 			rule->flow_type = TCP_V4_FLOW;
7167 		else
7168 			rule->flow_type = UDP_V4_FLOW;
7169 	} else {
7170 		if (tuples->ip_proto == IPPROTO_TCP)
7171 			rule->flow_type = TCP_V6_FLOW;
7172 		else
7173 			rule->flow_type = UDP_V6_FLOW;
7174 	}
7175 	memcpy(&rule->tuples, tuples, sizeof(rule->tuples));
7176 	memset(&rule->tuples_mask, 0xFF, sizeof(rule->tuples_mask));
7177 }
7178 
7179 static int hclge_add_fd_entry_by_arfs(struct hnae3_handle *handle, u16 queue_id,
7180 				      u16 flow_id, struct flow_keys *fkeys)
7181 {
7182 	struct hclge_vport *vport = hclge_get_vport(handle);
7183 	struct hclge_fd_rule_tuples new_tuples = {};
7184 	struct hclge_dev *hdev = vport->back;
7185 	struct hclge_fd_rule *rule;
7186 	u16 bit_id;
7187 
7188 	if (!hnae3_dev_fd_supported(hdev))
7189 		return -EOPNOTSUPP;
7190 
7191 	/* when there is already fd rule existed add by user,
7192 	 * arfs should not work
7193 	 */
7194 	spin_lock_bh(&hdev->fd_rule_lock);
7195 	if (hdev->fd_active_type != HCLGE_FD_ARFS_ACTIVE &&
7196 	    hdev->fd_active_type != HCLGE_FD_RULE_NONE) {
7197 		spin_unlock_bh(&hdev->fd_rule_lock);
7198 		return -EOPNOTSUPP;
7199 	}
7200 
7201 	hclge_fd_get_flow_tuples(fkeys, &new_tuples);
7202 
7203 	/* check is there flow director filter existed for this flow,
7204 	 * if not, create a new filter for it;
7205 	 * if filter exist with different queue id, modify the filter;
7206 	 * if filter exist with same queue id, do nothing
7207 	 */
7208 	rule = hclge_fd_search_flow_keys(hdev, &new_tuples);
7209 	if (!rule) {
7210 		bit_id = find_first_zero_bit(hdev->fd_bmap, MAX_FD_FILTER_NUM);
7211 		if (bit_id >= hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) {
7212 			spin_unlock_bh(&hdev->fd_rule_lock);
7213 			return -ENOSPC;
7214 		}
7215 
7216 		rule = kzalloc(sizeof(*rule), GFP_ATOMIC);
7217 		if (!rule) {
7218 			spin_unlock_bh(&hdev->fd_rule_lock);
7219 			return -ENOMEM;
7220 		}
7221 
7222 		rule->location = bit_id;
7223 		rule->arfs.flow_id = flow_id;
7224 		rule->queue_id = queue_id;
7225 		hclge_fd_build_arfs_rule(&new_tuples, rule);
7226 		hclge_update_fd_list(hdev, rule->state, rule->location, rule);
7227 		hdev->fd_active_type = HCLGE_FD_ARFS_ACTIVE;
7228 	} else if (rule->queue_id != queue_id) {
7229 		rule->queue_id = queue_id;
7230 		rule->state = HCLGE_FD_TO_ADD;
7231 		set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state);
7232 		hclge_task_schedule(hdev, 0);
7233 	}
7234 	spin_unlock_bh(&hdev->fd_rule_lock);
7235 	return rule->location;
7236 }
7237 
7238 static void hclge_rfs_filter_expire(struct hclge_dev *hdev)
7239 {
7240 #ifdef CONFIG_RFS_ACCEL
7241 	struct hnae3_handle *handle = &hdev->vport[0].nic;
7242 	struct hclge_fd_rule *rule;
7243 	struct hlist_node *node;
7244 
7245 	spin_lock_bh(&hdev->fd_rule_lock);
7246 	if (hdev->fd_active_type != HCLGE_FD_ARFS_ACTIVE) {
7247 		spin_unlock_bh(&hdev->fd_rule_lock);
7248 		return;
7249 	}
7250 	hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
7251 		if (rule->state != HCLGE_FD_ACTIVE)
7252 			continue;
7253 		if (rps_may_expire_flow(handle->netdev, rule->queue_id,
7254 					rule->arfs.flow_id, rule->location)) {
7255 			rule->state = HCLGE_FD_TO_DEL;
7256 			set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state);
7257 		}
7258 	}
7259 	spin_unlock_bh(&hdev->fd_rule_lock);
7260 #endif
7261 }
7262 
7263 /* make sure being called after lock up with fd_rule_lock */
7264 static int hclge_clear_arfs_rules(struct hclge_dev *hdev)
7265 {
7266 #ifdef CONFIG_RFS_ACCEL
7267 	struct hclge_fd_rule *rule;
7268 	struct hlist_node *node;
7269 	int ret;
7270 
7271 	if (hdev->fd_active_type != HCLGE_FD_ARFS_ACTIVE)
7272 		return 0;
7273 
7274 	hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
7275 		switch (rule->state) {
7276 		case HCLGE_FD_TO_DEL:
7277 		case HCLGE_FD_ACTIVE:
7278 			ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true,
7279 						   rule->location, NULL, false);
7280 			if (ret)
7281 				return ret;
7282 			fallthrough;
7283 		case HCLGE_FD_TO_ADD:
7284 			hclge_fd_dec_rule_cnt(hdev, rule->location);
7285 			hlist_del(&rule->rule_node);
7286 			kfree(rule);
7287 			break;
7288 		default:
7289 			break;
7290 		}
7291 	}
7292 	hclge_sync_fd_state(hdev);
7293 
7294 #endif
7295 	return 0;
7296 }
7297 
7298 static void hclge_get_cls_key_basic(const struct flow_rule *flow,
7299 				    struct hclge_fd_rule *rule)
7300 {
7301 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_BASIC)) {
7302 		struct flow_match_basic match;
7303 		u16 ethtype_key, ethtype_mask;
7304 
7305 		flow_rule_match_basic(flow, &match);
7306 		ethtype_key = ntohs(match.key->n_proto);
7307 		ethtype_mask = ntohs(match.mask->n_proto);
7308 
7309 		if (ethtype_key == ETH_P_ALL) {
7310 			ethtype_key = 0;
7311 			ethtype_mask = 0;
7312 		}
7313 		rule->tuples.ether_proto = ethtype_key;
7314 		rule->tuples_mask.ether_proto = ethtype_mask;
7315 		rule->tuples.ip_proto = match.key->ip_proto;
7316 		rule->tuples_mask.ip_proto = match.mask->ip_proto;
7317 	} else {
7318 		rule->unused_tuple |= BIT(INNER_IP_PROTO);
7319 		rule->unused_tuple |= BIT(INNER_ETH_TYPE);
7320 	}
7321 }
7322 
7323 static void hclge_get_cls_key_mac(const struct flow_rule *flow,
7324 				  struct hclge_fd_rule *rule)
7325 {
7326 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
7327 		struct flow_match_eth_addrs match;
7328 
7329 		flow_rule_match_eth_addrs(flow, &match);
7330 		ether_addr_copy(rule->tuples.dst_mac, match.key->dst);
7331 		ether_addr_copy(rule->tuples_mask.dst_mac, match.mask->dst);
7332 		ether_addr_copy(rule->tuples.src_mac, match.key->src);
7333 		ether_addr_copy(rule->tuples_mask.src_mac, match.mask->src);
7334 	} else {
7335 		rule->unused_tuple |= BIT(INNER_DST_MAC);
7336 		rule->unused_tuple |= BIT(INNER_SRC_MAC);
7337 	}
7338 }
7339 
7340 static void hclge_get_cls_key_vlan(const struct flow_rule *flow,
7341 				   struct hclge_fd_rule *rule)
7342 {
7343 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_VLAN)) {
7344 		struct flow_match_vlan match;
7345 
7346 		flow_rule_match_vlan(flow, &match);
7347 		rule->tuples.vlan_tag1 = match.key->vlan_id |
7348 				(match.key->vlan_priority << VLAN_PRIO_SHIFT);
7349 		rule->tuples_mask.vlan_tag1 = match.mask->vlan_id |
7350 				(match.mask->vlan_priority << VLAN_PRIO_SHIFT);
7351 	} else {
7352 		rule->unused_tuple |= BIT(INNER_VLAN_TAG_FST);
7353 	}
7354 }
7355 
7356 static void hclge_get_cls_key_ip(const struct flow_rule *flow,
7357 				 struct hclge_fd_rule *rule)
7358 {
7359 	u16 addr_type = 0;
7360 
7361 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_CONTROL)) {
7362 		struct flow_match_control match;
7363 
7364 		flow_rule_match_control(flow, &match);
7365 		addr_type = match.key->addr_type;
7366 	}
7367 
7368 	if (addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) {
7369 		struct flow_match_ipv4_addrs match;
7370 
7371 		flow_rule_match_ipv4_addrs(flow, &match);
7372 		rule->tuples.src_ip[IPV4_INDEX] = be32_to_cpu(match.key->src);
7373 		rule->tuples_mask.src_ip[IPV4_INDEX] =
7374 						be32_to_cpu(match.mask->src);
7375 		rule->tuples.dst_ip[IPV4_INDEX] = be32_to_cpu(match.key->dst);
7376 		rule->tuples_mask.dst_ip[IPV4_INDEX] =
7377 						be32_to_cpu(match.mask->dst);
7378 	} else if (addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
7379 		struct flow_match_ipv6_addrs match;
7380 
7381 		flow_rule_match_ipv6_addrs(flow, &match);
7382 		be32_to_cpu_array(rule->tuples.src_ip, match.key->src.s6_addr32,
7383 				  IPV6_SIZE);
7384 		be32_to_cpu_array(rule->tuples_mask.src_ip,
7385 				  match.mask->src.s6_addr32, IPV6_SIZE);
7386 		be32_to_cpu_array(rule->tuples.dst_ip, match.key->dst.s6_addr32,
7387 				  IPV6_SIZE);
7388 		be32_to_cpu_array(rule->tuples_mask.dst_ip,
7389 				  match.mask->dst.s6_addr32, IPV6_SIZE);
7390 	} else {
7391 		rule->unused_tuple |= BIT(INNER_SRC_IP);
7392 		rule->unused_tuple |= BIT(INNER_DST_IP);
7393 	}
7394 }
7395 
7396 static void hclge_get_cls_key_port(const struct flow_rule *flow,
7397 				   struct hclge_fd_rule *rule)
7398 {
7399 	if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_PORTS)) {
7400 		struct flow_match_ports match;
7401 
7402 		flow_rule_match_ports(flow, &match);
7403 
7404 		rule->tuples.src_port = be16_to_cpu(match.key->src);
7405 		rule->tuples_mask.src_port = be16_to_cpu(match.mask->src);
7406 		rule->tuples.dst_port = be16_to_cpu(match.key->dst);
7407 		rule->tuples_mask.dst_port = be16_to_cpu(match.mask->dst);
7408 	} else {
7409 		rule->unused_tuple |= BIT(INNER_SRC_PORT);
7410 		rule->unused_tuple |= BIT(INNER_DST_PORT);
7411 	}
7412 }
7413 
7414 static int hclge_parse_cls_flower(struct hclge_dev *hdev,
7415 				  struct flow_cls_offload *cls_flower,
7416 				  struct hclge_fd_rule *rule)
7417 {
7418 	struct flow_rule *flow = flow_cls_offload_flow_rule(cls_flower);
7419 	struct flow_dissector *dissector = flow->match.dissector;
7420 
7421 	if (dissector->used_keys &
7422 	    ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
7423 	      BIT(FLOW_DISSECTOR_KEY_BASIC) |
7424 	      BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
7425 	      BIT(FLOW_DISSECTOR_KEY_VLAN) |
7426 	      BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
7427 	      BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
7428 	      BIT(FLOW_DISSECTOR_KEY_PORTS))) {
7429 		dev_err(&hdev->pdev->dev, "unsupported key set: %#x\n",
7430 			dissector->used_keys);
7431 		return -EOPNOTSUPP;
7432 	}
7433 
7434 	hclge_get_cls_key_basic(flow, rule);
7435 	hclge_get_cls_key_mac(flow, rule);
7436 	hclge_get_cls_key_vlan(flow, rule);
7437 	hclge_get_cls_key_ip(flow, rule);
7438 	hclge_get_cls_key_port(flow, rule);
7439 
7440 	return 0;
7441 }
7442 
7443 static int hclge_check_cls_flower(struct hclge_dev *hdev,
7444 				  struct flow_cls_offload *cls_flower, int tc)
7445 {
7446 	u32 prio = cls_flower->common.prio;
7447 
7448 	if (tc < 0 || tc > hdev->tc_max) {
7449 		dev_err(&hdev->pdev->dev, "invalid traffic class\n");
7450 		return -EINVAL;
7451 	}
7452 
7453 	if (prio == 0 ||
7454 	    prio > hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) {
7455 		dev_err(&hdev->pdev->dev,
7456 			"prio %u should be in range[1, %u]\n",
7457 			prio, hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]);
7458 		return -EINVAL;
7459 	}
7460 
7461 	if (test_bit(prio - 1, hdev->fd_bmap)) {
7462 		dev_err(&hdev->pdev->dev, "prio %u is already used\n", prio);
7463 		return -EINVAL;
7464 	}
7465 	return 0;
7466 }
7467 
7468 static int hclge_add_cls_flower(struct hnae3_handle *handle,
7469 				struct flow_cls_offload *cls_flower,
7470 				int tc)
7471 {
7472 	struct hclge_vport *vport = hclge_get_vport(handle);
7473 	struct hclge_dev *hdev = vport->back;
7474 	struct hclge_fd_rule *rule;
7475 	int ret;
7476 
7477 	ret = hclge_check_cls_flower(hdev, cls_flower, tc);
7478 	if (ret) {
7479 		dev_err(&hdev->pdev->dev,
7480 			"failed to check cls flower params, ret = %d\n", ret);
7481 		return ret;
7482 	}
7483 
7484 	rule = kzalloc(sizeof(*rule), GFP_KERNEL);
7485 	if (!rule)
7486 		return -ENOMEM;
7487 
7488 	ret = hclge_parse_cls_flower(hdev, cls_flower, rule);
7489 	if (ret) {
7490 		kfree(rule);
7491 		return ret;
7492 	}
7493 
7494 	rule->action = HCLGE_FD_ACTION_SELECT_TC;
7495 	rule->cls_flower.tc = tc;
7496 	rule->location = cls_flower->common.prio - 1;
7497 	rule->vf_id = 0;
7498 	rule->cls_flower.cookie = cls_flower->cookie;
7499 	rule->rule_type = HCLGE_FD_TC_FLOWER_ACTIVE;
7500 
7501 	ret = hclge_add_fd_entry_common(hdev, rule);
7502 	if (ret)
7503 		kfree(rule);
7504 
7505 	return ret;
7506 }
7507 
7508 static struct hclge_fd_rule *hclge_find_cls_flower(struct hclge_dev *hdev,
7509 						   unsigned long cookie)
7510 {
7511 	struct hclge_fd_rule *rule;
7512 	struct hlist_node *node;
7513 
7514 	hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
7515 		if (rule->cls_flower.cookie == cookie)
7516 			return rule;
7517 	}
7518 
7519 	return NULL;
7520 }
7521 
7522 static int hclge_del_cls_flower(struct hnae3_handle *handle,
7523 				struct flow_cls_offload *cls_flower)
7524 {
7525 	struct hclge_vport *vport = hclge_get_vport(handle);
7526 	struct hclge_dev *hdev = vport->back;
7527 	struct hclge_fd_rule *rule;
7528 	int ret;
7529 
7530 	spin_lock_bh(&hdev->fd_rule_lock);
7531 
7532 	rule = hclge_find_cls_flower(hdev, cls_flower->cookie);
7533 	if (!rule) {
7534 		spin_unlock_bh(&hdev->fd_rule_lock);
7535 		return -EINVAL;
7536 	}
7537 
7538 	ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, rule->location,
7539 				   NULL, false);
7540 	if (ret) {
7541 		spin_unlock_bh(&hdev->fd_rule_lock);
7542 		return ret;
7543 	}
7544 
7545 	hclge_update_fd_list(hdev, HCLGE_FD_DELETED, rule->location, NULL);
7546 	spin_unlock_bh(&hdev->fd_rule_lock);
7547 
7548 	return 0;
7549 }
7550 
7551 static void hclge_sync_fd_list(struct hclge_dev *hdev, struct hlist_head *hlist)
7552 {
7553 	struct hclge_fd_rule *rule;
7554 	struct hlist_node *node;
7555 	int ret = 0;
7556 
7557 	if (!test_and_clear_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state))
7558 		return;
7559 
7560 	spin_lock_bh(&hdev->fd_rule_lock);
7561 
7562 	hlist_for_each_entry_safe(rule, node, hlist, rule_node) {
7563 		switch (rule->state) {
7564 		case HCLGE_FD_TO_ADD:
7565 			ret = hclge_fd_config_rule(hdev, rule);
7566 			if (ret)
7567 				goto out;
7568 			rule->state = HCLGE_FD_ACTIVE;
7569 			break;
7570 		case HCLGE_FD_TO_DEL:
7571 			ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true,
7572 						   rule->location, NULL, false);
7573 			if (ret)
7574 				goto out;
7575 			hclge_fd_dec_rule_cnt(hdev, rule->location);
7576 			hclge_fd_free_node(hdev, rule);
7577 			break;
7578 		default:
7579 			break;
7580 		}
7581 	}
7582 
7583 out:
7584 	if (ret)
7585 		set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state);
7586 
7587 	spin_unlock_bh(&hdev->fd_rule_lock);
7588 }
7589 
7590 static void hclge_sync_fd_table(struct hclge_dev *hdev)
7591 {
7592 	if (test_and_clear_bit(HCLGE_STATE_FD_CLEAR_ALL, &hdev->state)) {
7593 		bool clear_list = hdev->fd_active_type == HCLGE_FD_ARFS_ACTIVE;
7594 
7595 		hclge_clear_fd_rules_in_list(hdev, clear_list);
7596 	}
7597 
7598 	hclge_sync_fd_user_def_cfg(hdev, false);
7599 
7600 	hclge_sync_fd_list(hdev, &hdev->fd_rule_list);
7601 }
7602 
7603 static bool hclge_get_hw_reset_stat(struct hnae3_handle *handle)
7604 {
7605 	struct hclge_vport *vport = hclge_get_vport(handle);
7606 	struct hclge_dev *hdev = vport->back;
7607 
7608 	return hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG) ||
7609 	       hclge_read_dev(&hdev->hw, HCLGE_FUN_RST_ING);
7610 }
7611 
7612 static bool hclge_get_cmdq_stat(struct hnae3_handle *handle)
7613 {
7614 	struct hclge_vport *vport = hclge_get_vport(handle);
7615 	struct hclge_dev *hdev = vport->back;
7616 
7617 	return test_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
7618 }
7619 
7620 static bool hclge_ae_dev_resetting(struct hnae3_handle *handle)
7621 {
7622 	struct hclge_vport *vport = hclge_get_vport(handle);
7623 	struct hclge_dev *hdev = vport->back;
7624 
7625 	return test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
7626 }
7627 
7628 static unsigned long hclge_ae_dev_reset_cnt(struct hnae3_handle *handle)
7629 {
7630 	struct hclge_vport *vport = hclge_get_vport(handle);
7631 	struct hclge_dev *hdev = vport->back;
7632 
7633 	return hdev->rst_stats.hw_reset_done_cnt;
7634 }
7635 
7636 static void hclge_enable_fd(struct hnae3_handle *handle, bool enable)
7637 {
7638 	struct hclge_vport *vport = hclge_get_vport(handle);
7639 	struct hclge_dev *hdev = vport->back;
7640 
7641 	hdev->fd_en = enable;
7642 
7643 	if (!enable)
7644 		set_bit(HCLGE_STATE_FD_CLEAR_ALL, &hdev->state);
7645 	else
7646 		hclge_restore_fd_entries(handle);
7647 
7648 	hclge_task_schedule(hdev, 0);
7649 }
7650 
7651 static void hclge_cfg_mac_mode(struct hclge_dev *hdev, bool enable)
7652 {
7653 	struct hclge_desc desc;
7654 	struct hclge_config_mac_mode_cmd *req =
7655 		(struct hclge_config_mac_mode_cmd *)desc.data;
7656 	u32 loop_en = 0;
7657 	int ret;
7658 
7659 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_MAC_MODE, false);
7660 
7661 	if (enable) {
7662 		hnae3_set_bit(loop_en, HCLGE_MAC_TX_EN_B, 1U);
7663 		hnae3_set_bit(loop_en, HCLGE_MAC_RX_EN_B, 1U);
7664 		hnae3_set_bit(loop_en, HCLGE_MAC_PAD_TX_B, 1U);
7665 		hnae3_set_bit(loop_en, HCLGE_MAC_PAD_RX_B, 1U);
7666 		hnae3_set_bit(loop_en, HCLGE_MAC_FCS_TX_B, 1U);
7667 		hnae3_set_bit(loop_en, HCLGE_MAC_RX_FCS_B, 1U);
7668 		hnae3_set_bit(loop_en, HCLGE_MAC_RX_FCS_STRIP_B, 1U);
7669 		hnae3_set_bit(loop_en, HCLGE_MAC_TX_OVERSIZE_TRUNCATE_B, 1U);
7670 		hnae3_set_bit(loop_en, HCLGE_MAC_RX_OVERSIZE_TRUNCATE_B, 1U);
7671 		hnae3_set_bit(loop_en, HCLGE_MAC_TX_UNDER_MIN_ERR_B, 1U);
7672 	}
7673 
7674 	req->txrx_pad_fcs_loop_en = cpu_to_le32(loop_en);
7675 
7676 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7677 	if (ret)
7678 		dev_err(&hdev->pdev->dev,
7679 			"mac enable fail, ret =%d.\n", ret);
7680 }
7681 
7682 static int hclge_config_switch_param(struct hclge_dev *hdev, int vfid,
7683 				     u8 switch_param, u8 param_mask)
7684 {
7685 	struct hclge_mac_vlan_switch_cmd *req;
7686 	struct hclge_desc desc;
7687 	u32 func_id;
7688 	int ret;
7689 
7690 	func_id = hclge_get_port_number(HOST_PORT, 0, vfid, 0);
7691 	req = (struct hclge_mac_vlan_switch_cmd *)desc.data;
7692 
7693 	/* read current config parameter */
7694 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_SWITCH_PARAM,
7695 				   true);
7696 	req->roce_sel = HCLGE_MAC_VLAN_NIC_SEL;
7697 	req->func_id = cpu_to_le32(func_id);
7698 
7699 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7700 	if (ret) {
7701 		dev_err(&hdev->pdev->dev,
7702 			"read mac vlan switch parameter fail, ret = %d\n", ret);
7703 		return ret;
7704 	}
7705 
7706 	/* modify and write new config parameter */
7707 	hclge_cmd_reuse_desc(&desc, false);
7708 	req->switch_param = (req->switch_param & param_mask) | switch_param;
7709 	req->param_mask = param_mask;
7710 
7711 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7712 	if (ret)
7713 		dev_err(&hdev->pdev->dev,
7714 			"set mac vlan switch parameter fail, ret = %d\n", ret);
7715 	return ret;
7716 }
7717 
7718 static void hclge_phy_link_status_wait(struct hclge_dev *hdev,
7719 				       int link_ret)
7720 {
7721 #define HCLGE_PHY_LINK_STATUS_NUM  200
7722 
7723 	struct phy_device *phydev = hdev->hw.mac.phydev;
7724 	int i = 0;
7725 	int ret;
7726 
7727 	do {
7728 		ret = phy_read_status(phydev);
7729 		if (ret) {
7730 			dev_err(&hdev->pdev->dev,
7731 				"phy update link status fail, ret = %d\n", ret);
7732 			return;
7733 		}
7734 
7735 		if (phydev->link == link_ret)
7736 			break;
7737 
7738 		msleep(HCLGE_LINK_STATUS_MS);
7739 	} while (++i < HCLGE_PHY_LINK_STATUS_NUM);
7740 }
7741 
7742 static int hclge_mac_link_status_wait(struct hclge_dev *hdev, int link_ret)
7743 {
7744 #define HCLGE_MAC_LINK_STATUS_NUM  100
7745 
7746 	int link_status;
7747 	int i = 0;
7748 	int ret;
7749 
7750 	do {
7751 		ret = hclge_get_mac_link_status(hdev, &link_status);
7752 		if (ret)
7753 			return ret;
7754 		if (link_status == link_ret)
7755 			return 0;
7756 
7757 		msleep(HCLGE_LINK_STATUS_MS);
7758 	} while (++i < HCLGE_MAC_LINK_STATUS_NUM);
7759 	return -EBUSY;
7760 }
7761 
7762 static int hclge_mac_phy_link_status_wait(struct hclge_dev *hdev, bool en,
7763 					  bool is_phy)
7764 {
7765 	int link_ret;
7766 
7767 	link_ret = en ? HCLGE_LINK_STATUS_UP : HCLGE_LINK_STATUS_DOWN;
7768 
7769 	if (is_phy)
7770 		hclge_phy_link_status_wait(hdev, link_ret);
7771 
7772 	return hclge_mac_link_status_wait(hdev, link_ret);
7773 }
7774 
7775 static int hclge_set_app_loopback(struct hclge_dev *hdev, bool en)
7776 {
7777 	struct hclge_config_mac_mode_cmd *req;
7778 	struct hclge_desc desc;
7779 	u32 loop_en;
7780 	int ret;
7781 
7782 	req = (struct hclge_config_mac_mode_cmd *)&desc.data[0];
7783 	/* 1 Read out the MAC mode config at first */
7784 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_MAC_MODE, true);
7785 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7786 	if (ret) {
7787 		dev_err(&hdev->pdev->dev,
7788 			"mac loopback get fail, ret =%d.\n", ret);
7789 		return ret;
7790 	}
7791 
7792 	/* 2 Then setup the loopback flag */
7793 	loop_en = le32_to_cpu(req->txrx_pad_fcs_loop_en);
7794 	hnae3_set_bit(loop_en, HCLGE_MAC_APP_LP_B, en ? 1 : 0);
7795 
7796 	req->txrx_pad_fcs_loop_en = cpu_to_le32(loop_en);
7797 
7798 	/* 3 Config mac work mode with loopback flag
7799 	 * and its original configure parameters
7800 	 */
7801 	hclge_cmd_reuse_desc(&desc, false);
7802 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7803 	if (ret)
7804 		dev_err(&hdev->pdev->dev,
7805 			"mac loopback set fail, ret =%d.\n", ret);
7806 	return ret;
7807 }
7808 
7809 static int hclge_cfg_common_loopback(struct hclge_dev *hdev, bool en,
7810 				     enum hnae3_loop loop_mode)
7811 {
7812 #define HCLGE_COMMON_LB_RETRY_MS	10
7813 #define HCLGE_COMMON_LB_RETRY_NUM	100
7814 
7815 	struct hclge_common_lb_cmd *req;
7816 	struct hclge_desc desc;
7817 	int ret, i = 0;
7818 	u8 loop_mode_b;
7819 
7820 	req = (struct hclge_common_lb_cmd *)desc.data;
7821 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_COMMON_LOOPBACK, false);
7822 
7823 	switch (loop_mode) {
7824 	case HNAE3_LOOP_SERIAL_SERDES:
7825 		loop_mode_b = HCLGE_CMD_SERDES_SERIAL_INNER_LOOP_B;
7826 		break;
7827 	case HNAE3_LOOP_PARALLEL_SERDES:
7828 		loop_mode_b = HCLGE_CMD_SERDES_PARALLEL_INNER_LOOP_B;
7829 		break;
7830 	case HNAE3_LOOP_PHY:
7831 		loop_mode_b = HCLGE_CMD_GE_PHY_INNER_LOOP_B;
7832 		break;
7833 	default:
7834 		dev_err(&hdev->pdev->dev,
7835 			"unsupported common loopback mode %d\n", loop_mode);
7836 		return -ENOTSUPP;
7837 	}
7838 
7839 	if (en) {
7840 		req->enable = loop_mode_b;
7841 		req->mask = loop_mode_b;
7842 	} else {
7843 		req->mask = loop_mode_b;
7844 	}
7845 
7846 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7847 	if (ret) {
7848 		dev_err(&hdev->pdev->dev,
7849 			"common loopback set fail, ret = %d\n", ret);
7850 		return ret;
7851 	}
7852 
7853 	do {
7854 		msleep(HCLGE_COMMON_LB_RETRY_MS);
7855 		hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_COMMON_LOOPBACK,
7856 					   true);
7857 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
7858 		if (ret) {
7859 			dev_err(&hdev->pdev->dev,
7860 				"common loopback get, ret = %d\n", ret);
7861 			return ret;
7862 		}
7863 	} while (++i < HCLGE_COMMON_LB_RETRY_NUM &&
7864 		 !(req->result & HCLGE_CMD_COMMON_LB_DONE_B));
7865 
7866 	if (!(req->result & HCLGE_CMD_COMMON_LB_DONE_B)) {
7867 		dev_err(&hdev->pdev->dev, "common loopback set timeout\n");
7868 		return -EBUSY;
7869 	} else if (!(req->result & HCLGE_CMD_COMMON_LB_SUCCESS_B)) {
7870 		dev_err(&hdev->pdev->dev, "common loopback set failed in fw\n");
7871 		return -EIO;
7872 	}
7873 	return ret;
7874 }
7875 
7876 static int hclge_set_common_loopback(struct hclge_dev *hdev, bool en,
7877 				     enum hnae3_loop loop_mode)
7878 {
7879 	int ret;
7880 
7881 	ret = hclge_cfg_common_loopback(hdev, en, loop_mode);
7882 	if (ret)
7883 		return ret;
7884 
7885 	hclge_cfg_mac_mode(hdev, en);
7886 
7887 	ret = hclge_mac_phy_link_status_wait(hdev, en, false);
7888 	if (ret)
7889 		dev_err(&hdev->pdev->dev,
7890 			"serdes loopback config mac mode timeout\n");
7891 
7892 	return ret;
7893 }
7894 
7895 static int hclge_enable_phy_loopback(struct hclge_dev *hdev,
7896 				     struct phy_device *phydev)
7897 {
7898 	int ret;
7899 
7900 	if (!phydev->suspended) {
7901 		ret = phy_suspend(phydev);
7902 		if (ret)
7903 			return ret;
7904 	}
7905 
7906 	ret = phy_resume(phydev);
7907 	if (ret)
7908 		return ret;
7909 
7910 	return phy_loopback(phydev, true);
7911 }
7912 
7913 static int hclge_disable_phy_loopback(struct hclge_dev *hdev,
7914 				      struct phy_device *phydev)
7915 {
7916 	int ret;
7917 
7918 	ret = phy_loopback(phydev, false);
7919 	if (ret)
7920 		return ret;
7921 
7922 	return phy_suspend(phydev);
7923 }
7924 
7925 static int hclge_set_phy_loopback(struct hclge_dev *hdev, bool en)
7926 {
7927 	struct phy_device *phydev = hdev->hw.mac.phydev;
7928 	int ret;
7929 
7930 	if (!phydev) {
7931 		if (hnae3_dev_phy_imp_supported(hdev))
7932 			return hclge_set_common_loopback(hdev, en,
7933 							 HNAE3_LOOP_PHY);
7934 		return -ENOTSUPP;
7935 	}
7936 
7937 	if (en)
7938 		ret = hclge_enable_phy_loopback(hdev, phydev);
7939 	else
7940 		ret = hclge_disable_phy_loopback(hdev, phydev);
7941 	if (ret) {
7942 		dev_err(&hdev->pdev->dev,
7943 			"set phy loopback fail, ret = %d\n", ret);
7944 		return ret;
7945 	}
7946 
7947 	hclge_cfg_mac_mode(hdev, en);
7948 
7949 	ret = hclge_mac_phy_link_status_wait(hdev, en, true);
7950 	if (ret)
7951 		dev_err(&hdev->pdev->dev,
7952 			"phy loopback config mac mode timeout\n");
7953 
7954 	return ret;
7955 }
7956 
7957 static int hclge_tqp_enable_cmd_send(struct hclge_dev *hdev, u16 tqp_id,
7958 				     u16 stream_id, bool enable)
7959 {
7960 	struct hclge_desc desc;
7961 	struct hclge_cfg_com_tqp_queue_cmd *req =
7962 		(struct hclge_cfg_com_tqp_queue_cmd *)desc.data;
7963 
7964 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_COM_TQP_QUEUE, false);
7965 	req->tqp_id = cpu_to_le16(tqp_id);
7966 	req->stream_id = cpu_to_le16(stream_id);
7967 	if (enable)
7968 		req->enable |= 1U << HCLGE_TQP_ENABLE_B;
7969 
7970 	return hclge_cmd_send(&hdev->hw, &desc, 1);
7971 }
7972 
7973 static int hclge_tqp_enable(struct hnae3_handle *handle, bool enable)
7974 {
7975 	struct hclge_vport *vport = hclge_get_vport(handle);
7976 	struct hclge_dev *hdev = vport->back;
7977 	int ret;
7978 	u16 i;
7979 
7980 	for (i = 0; i < handle->kinfo.num_tqps; i++) {
7981 		ret = hclge_tqp_enable_cmd_send(hdev, i, 0, enable);
7982 		if (ret)
7983 			return ret;
7984 	}
7985 	return 0;
7986 }
7987 
7988 static int hclge_set_loopback(struct hnae3_handle *handle,
7989 			      enum hnae3_loop loop_mode, bool en)
7990 {
7991 	struct hclge_vport *vport = hclge_get_vport(handle);
7992 	struct hclge_dev *hdev = vport->back;
7993 	int ret;
7994 
7995 	/* Loopback can be enabled in three places: SSU, MAC, and serdes. By
7996 	 * default, SSU loopback is enabled, so if the SMAC and the DMAC are
7997 	 * the same, the packets are looped back in the SSU. If SSU loopback
7998 	 * is disabled, packets can reach MAC even if SMAC is the same as DMAC.
7999 	 */
8000 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
8001 		u8 switch_param = en ? 0 : BIT(HCLGE_SWITCH_ALW_LPBK_B);
8002 
8003 		ret = hclge_config_switch_param(hdev, PF_VPORT_ID, switch_param,
8004 						HCLGE_SWITCH_ALW_LPBK_MASK);
8005 		if (ret)
8006 			return ret;
8007 	}
8008 
8009 	switch (loop_mode) {
8010 	case HNAE3_LOOP_APP:
8011 		ret = hclge_set_app_loopback(hdev, en);
8012 		break;
8013 	case HNAE3_LOOP_SERIAL_SERDES:
8014 	case HNAE3_LOOP_PARALLEL_SERDES:
8015 		ret = hclge_set_common_loopback(hdev, en, loop_mode);
8016 		break;
8017 	case HNAE3_LOOP_PHY:
8018 		ret = hclge_set_phy_loopback(hdev, en);
8019 		break;
8020 	default:
8021 		ret = -ENOTSUPP;
8022 		dev_err(&hdev->pdev->dev,
8023 			"loop_mode %d is not supported\n", loop_mode);
8024 		break;
8025 	}
8026 
8027 	if (ret)
8028 		return ret;
8029 
8030 	ret = hclge_tqp_enable(handle, en);
8031 	if (ret)
8032 		dev_err(&hdev->pdev->dev, "failed to %s tqp in loopback, ret = %d\n",
8033 			en ? "enable" : "disable", ret);
8034 
8035 	return ret;
8036 }
8037 
8038 static int hclge_set_default_loopback(struct hclge_dev *hdev)
8039 {
8040 	int ret;
8041 
8042 	ret = hclge_set_app_loopback(hdev, false);
8043 	if (ret)
8044 		return ret;
8045 
8046 	ret = hclge_cfg_common_loopback(hdev, false, HNAE3_LOOP_SERIAL_SERDES);
8047 	if (ret)
8048 		return ret;
8049 
8050 	return hclge_cfg_common_loopback(hdev, false,
8051 					 HNAE3_LOOP_PARALLEL_SERDES);
8052 }
8053 
8054 static void hclge_reset_tqp_stats(struct hnae3_handle *handle)
8055 {
8056 	struct hclge_vport *vport = hclge_get_vport(handle);
8057 	struct hnae3_knic_private_info *kinfo;
8058 	struct hnae3_queue *queue;
8059 	struct hclge_tqp *tqp;
8060 	int i;
8061 
8062 	kinfo = &vport->nic.kinfo;
8063 	for (i = 0; i < kinfo->num_tqps; i++) {
8064 		queue = handle->kinfo.tqp[i];
8065 		tqp = container_of(queue, struct hclge_tqp, q);
8066 		memset(&tqp->tqp_stats, 0, sizeof(tqp->tqp_stats));
8067 	}
8068 }
8069 
8070 static void hclge_flush_link_update(struct hclge_dev *hdev)
8071 {
8072 #define HCLGE_FLUSH_LINK_TIMEOUT	100000
8073 
8074 	unsigned long last = hdev->serv_processed_cnt;
8075 	int i = 0;
8076 
8077 	while (test_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state) &&
8078 	       i++ < HCLGE_FLUSH_LINK_TIMEOUT &&
8079 	       last == hdev->serv_processed_cnt)
8080 		usleep_range(1, 1);
8081 }
8082 
8083 static void hclge_set_timer_task(struct hnae3_handle *handle, bool enable)
8084 {
8085 	struct hclge_vport *vport = hclge_get_vport(handle);
8086 	struct hclge_dev *hdev = vport->back;
8087 
8088 	if (enable) {
8089 		hclge_task_schedule(hdev, 0);
8090 	} else {
8091 		/* Set the DOWN flag here to disable link updating */
8092 		set_bit(HCLGE_STATE_DOWN, &hdev->state);
8093 
8094 		/* flush memory to make sure DOWN is seen by service task */
8095 		smp_mb__before_atomic();
8096 		hclge_flush_link_update(hdev);
8097 	}
8098 }
8099 
8100 static int hclge_ae_start(struct hnae3_handle *handle)
8101 {
8102 	struct hclge_vport *vport = hclge_get_vport(handle);
8103 	struct hclge_dev *hdev = vport->back;
8104 
8105 	/* mac enable */
8106 	hclge_cfg_mac_mode(hdev, true);
8107 	clear_bit(HCLGE_STATE_DOWN, &hdev->state);
8108 	hdev->hw.mac.link = 0;
8109 
8110 	/* reset tqp stats */
8111 	hclge_reset_tqp_stats(handle);
8112 
8113 	hclge_mac_start_phy(hdev);
8114 
8115 	return 0;
8116 }
8117 
8118 static void hclge_ae_stop(struct hnae3_handle *handle)
8119 {
8120 	struct hclge_vport *vport = hclge_get_vport(handle);
8121 	struct hclge_dev *hdev = vport->back;
8122 
8123 	set_bit(HCLGE_STATE_DOWN, &hdev->state);
8124 	spin_lock_bh(&hdev->fd_rule_lock);
8125 	hclge_clear_arfs_rules(hdev);
8126 	spin_unlock_bh(&hdev->fd_rule_lock);
8127 
8128 	/* If it is not PF reset, the firmware will disable the MAC,
8129 	 * so it only need to stop phy here.
8130 	 */
8131 	if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) &&
8132 	    hdev->reset_type != HNAE3_FUNC_RESET) {
8133 		hclge_mac_stop_phy(hdev);
8134 		hclge_update_link_status(hdev);
8135 		return;
8136 	}
8137 
8138 	hclge_reset_tqp(handle);
8139 
8140 	hclge_config_mac_tnl_int(hdev, false);
8141 
8142 	/* Mac disable */
8143 	hclge_cfg_mac_mode(hdev, false);
8144 
8145 	hclge_mac_stop_phy(hdev);
8146 
8147 	/* reset tqp stats */
8148 	hclge_reset_tqp_stats(handle);
8149 	hclge_update_link_status(hdev);
8150 }
8151 
8152 int hclge_vport_start(struct hclge_vport *vport)
8153 {
8154 	struct hclge_dev *hdev = vport->back;
8155 
8156 	set_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state);
8157 	set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state);
8158 	vport->last_active_jiffies = jiffies;
8159 
8160 	if (test_bit(vport->vport_id, hdev->vport_config_block)) {
8161 		if (vport->vport_id) {
8162 			hclge_restore_mac_table_common(vport);
8163 			hclge_restore_vport_vlan_table(vport);
8164 		} else {
8165 			hclge_restore_hw_table(hdev);
8166 		}
8167 	}
8168 
8169 	clear_bit(vport->vport_id, hdev->vport_config_block);
8170 
8171 	return 0;
8172 }
8173 
8174 void hclge_vport_stop(struct hclge_vport *vport)
8175 {
8176 	clear_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state);
8177 }
8178 
8179 static int hclge_client_start(struct hnae3_handle *handle)
8180 {
8181 	struct hclge_vport *vport = hclge_get_vport(handle);
8182 
8183 	return hclge_vport_start(vport);
8184 }
8185 
8186 static void hclge_client_stop(struct hnae3_handle *handle)
8187 {
8188 	struct hclge_vport *vport = hclge_get_vport(handle);
8189 
8190 	hclge_vport_stop(vport);
8191 }
8192 
8193 static int hclge_get_mac_vlan_cmd_status(struct hclge_vport *vport,
8194 					 u16 cmdq_resp, u8  resp_code,
8195 					 enum hclge_mac_vlan_tbl_opcode op)
8196 {
8197 	struct hclge_dev *hdev = vport->back;
8198 
8199 	if (cmdq_resp) {
8200 		dev_err(&hdev->pdev->dev,
8201 			"cmdq execute failed for get_mac_vlan_cmd_status,status=%u.\n",
8202 			cmdq_resp);
8203 		return -EIO;
8204 	}
8205 
8206 	if (op == HCLGE_MAC_VLAN_ADD) {
8207 		if (!resp_code || resp_code == 1)
8208 			return 0;
8209 		else if (resp_code == HCLGE_ADD_UC_OVERFLOW ||
8210 			 resp_code == HCLGE_ADD_MC_OVERFLOW)
8211 			return -ENOSPC;
8212 
8213 		dev_err(&hdev->pdev->dev,
8214 			"add mac addr failed for undefined, code=%u.\n",
8215 			resp_code);
8216 		return -EIO;
8217 	} else if (op == HCLGE_MAC_VLAN_REMOVE) {
8218 		if (!resp_code) {
8219 			return 0;
8220 		} else if (resp_code == 1) {
8221 			dev_dbg(&hdev->pdev->dev,
8222 				"remove mac addr failed for miss.\n");
8223 			return -ENOENT;
8224 		}
8225 
8226 		dev_err(&hdev->pdev->dev,
8227 			"remove mac addr failed for undefined, code=%u.\n",
8228 			resp_code);
8229 		return -EIO;
8230 	} else if (op == HCLGE_MAC_VLAN_LKUP) {
8231 		if (!resp_code) {
8232 			return 0;
8233 		} else if (resp_code == 1) {
8234 			dev_dbg(&hdev->pdev->dev,
8235 				"lookup mac addr failed for miss.\n");
8236 			return -ENOENT;
8237 		}
8238 
8239 		dev_err(&hdev->pdev->dev,
8240 			"lookup mac addr failed for undefined, code=%u.\n",
8241 			resp_code);
8242 		return -EIO;
8243 	}
8244 
8245 	dev_err(&hdev->pdev->dev,
8246 		"unknown opcode for get_mac_vlan_cmd_status, opcode=%d.\n", op);
8247 
8248 	return -EINVAL;
8249 }
8250 
8251 static int hclge_update_desc_vfid(struct hclge_desc *desc, int vfid, bool clr)
8252 {
8253 #define HCLGE_VF_NUM_IN_FIRST_DESC 192
8254 
8255 	unsigned int word_num;
8256 	unsigned int bit_num;
8257 
8258 	if (vfid > 255 || vfid < 0)
8259 		return -EIO;
8260 
8261 	if (vfid >= 0 && vfid < HCLGE_VF_NUM_IN_FIRST_DESC) {
8262 		word_num = vfid / 32;
8263 		bit_num  = vfid % 32;
8264 		if (clr)
8265 			desc[1].data[word_num] &= cpu_to_le32(~(1 << bit_num));
8266 		else
8267 			desc[1].data[word_num] |= cpu_to_le32(1 << bit_num);
8268 	} else {
8269 		word_num = (vfid - HCLGE_VF_NUM_IN_FIRST_DESC) / 32;
8270 		bit_num  = vfid % 32;
8271 		if (clr)
8272 			desc[2].data[word_num] &= cpu_to_le32(~(1 << bit_num));
8273 		else
8274 			desc[2].data[word_num] |= cpu_to_le32(1 << bit_num);
8275 	}
8276 
8277 	return 0;
8278 }
8279 
8280 static bool hclge_is_all_function_id_zero(struct hclge_desc *desc)
8281 {
8282 #define HCLGE_DESC_NUMBER 3
8283 #define HCLGE_FUNC_NUMBER_PER_DESC 6
8284 	int i, j;
8285 
8286 	for (i = 1; i < HCLGE_DESC_NUMBER; i++)
8287 		for (j = 0; j < HCLGE_FUNC_NUMBER_PER_DESC; j++)
8288 			if (desc[i].data[j])
8289 				return false;
8290 
8291 	return true;
8292 }
8293 
8294 static void hclge_prepare_mac_addr(struct hclge_mac_vlan_tbl_entry_cmd *new_req,
8295 				   const u8 *addr, bool is_mc)
8296 {
8297 	const unsigned char *mac_addr = addr;
8298 	u32 high_val = mac_addr[2] << 16 | (mac_addr[3] << 24) |
8299 		       (mac_addr[0]) | (mac_addr[1] << 8);
8300 	u32 low_val  = mac_addr[4] | (mac_addr[5] << 8);
8301 
8302 	hnae3_set_bit(new_req->flags, HCLGE_MAC_VLAN_BIT0_EN_B, 1);
8303 	if (is_mc) {
8304 		hnae3_set_bit(new_req->entry_type, HCLGE_MAC_VLAN_BIT1_EN_B, 1);
8305 		hnae3_set_bit(new_req->mc_mac_en, HCLGE_MAC_VLAN_BIT0_EN_B, 1);
8306 	}
8307 
8308 	new_req->mac_addr_hi32 = cpu_to_le32(high_val);
8309 	new_req->mac_addr_lo16 = cpu_to_le16(low_val & 0xffff);
8310 }
8311 
8312 static int hclge_remove_mac_vlan_tbl(struct hclge_vport *vport,
8313 				     struct hclge_mac_vlan_tbl_entry_cmd *req)
8314 {
8315 	struct hclge_dev *hdev = vport->back;
8316 	struct hclge_desc desc;
8317 	u8 resp_code;
8318 	u16 retval;
8319 	int ret;
8320 
8321 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_REMOVE, false);
8322 
8323 	memcpy(desc.data, req, sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
8324 
8325 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
8326 	if (ret) {
8327 		dev_err(&hdev->pdev->dev,
8328 			"del mac addr failed for cmd_send, ret =%d.\n",
8329 			ret);
8330 		return ret;
8331 	}
8332 	resp_code = (le32_to_cpu(desc.data[0]) >> 8) & 0xff;
8333 	retval = le16_to_cpu(desc.retval);
8334 
8335 	return hclge_get_mac_vlan_cmd_status(vport, retval, resp_code,
8336 					     HCLGE_MAC_VLAN_REMOVE);
8337 }
8338 
8339 static int hclge_lookup_mac_vlan_tbl(struct hclge_vport *vport,
8340 				     struct hclge_mac_vlan_tbl_entry_cmd *req,
8341 				     struct hclge_desc *desc,
8342 				     bool is_mc)
8343 {
8344 	struct hclge_dev *hdev = vport->back;
8345 	u8 resp_code;
8346 	u16 retval;
8347 	int ret;
8348 
8349 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_MAC_VLAN_ADD, true);
8350 	if (is_mc) {
8351 		desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
8352 		memcpy(desc[0].data,
8353 		       req,
8354 		       sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
8355 		hclge_cmd_setup_basic_desc(&desc[1],
8356 					   HCLGE_OPC_MAC_VLAN_ADD,
8357 					   true);
8358 		desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
8359 		hclge_cmd_setup_basic_desc(&desc[2],
8360 					   HCLGE_OPC_MAC_VLAN_ADD,
8361 					   true);
8362 		ret = hclge_cmd_send(&hdev->hw, desc, 3);
8363 	} else {
8364 		memcpy(desc[0].data,
8365 		       req,
8366 		       sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
8367 		ret = hclge_cmd_send(&hdev->hw, desc, 1);
8368 	}
8369 	if (ret) {
8370 		dev_err(&hdev->pdev->dev,
8371 			"lookup mac addr failed for cmd_send, ret =%d.\n",
8372 			ret);
8373 		return ret;
8374 	}
8375 	resp_code = (le32_to_cpu(desc[0].data[0]) >> 8) & 0xff;
8376 	retval = le16_to_cpu(desc[0].retval);
8377 
8378 	return hclge_get_mac_vlan_cmd_status(vport, retval, resp_code,
8379 					     HCLGE_MAC_VLAN_LKUP);
8380 }
8381 
8382 static int hclge_add_mac_vlan_tbl(struct hclge_vport *vport,
8383 				  struct hclge_mac_vlan_tbl_entry_cmd *req,
8384 				  struct hclge_desc *mc_desc)
8385 {
8386 	struct hclge_dev *hdev = vport->back;
8387 	int cfg_status;
8388 	u8 resp_code;
8389 	u16 retval;
8390 	int ret;
8391 
8392 	if (!mc_desc) {
8393 		struct hclge_desc desc;
8394 
8395 		hclge_cmd_setup_basic_desc(&desc,
8396 					   HCLGE_OPC_MAC_VLAN_ADD,
8397 					   false);
8398 		memcpy(desc.data, req,
8399 		       sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
8400 		ret = hclge_cmd_send(&hdev->hw, &desc, 1);
8401 		resp_code = (le32_to_cpu(desc.data[0]) >> 8) & 0xff;
8402 		retval = le16_to_cpu(desc.retval);
8403 
8404 		cfg_status = hclge_get_mac_vlan_cmd_status(vport, retval,
8405 							   resp_code,
8406 							   HCLGE_MAC_VLAN_ADD);
8407 	} else {
8408 		hclge_cmd_reuse_desc(&mc_desc[0], false);
8409 		mc_desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
8410 		hclge_cmd_reuse_desc(&mc_desc[1], false);
8411 		mc_desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
8412 		hclge_cmd_reuse_desc(&mc_desc[2], false);
8413 		mc_desc[2].flag &= cpu_to_le16(~HCLGE_CMD_FLAG_NEXT);
8414 		memcpy(mc_desc[0].data, req,
8415 		       sizeof(struct hclge_mac_vlan_tbl_entry_cmd));
8416 		ret = hclge_cmd_send(&hdev->hw, mc_desc, 3);
8417 		resp_code = (le32_to_cpu(mc_desc[0].data[0]) >> 8) & 0xff;
8418 		retval = le16_to_cpu(mc_desc[0].retval);
8419 
8420 		cfg_status = hclge_get_mac_vlan_cmd_status(vport, retval,
8421 							   resp_code,
8422 							   HCLGE_MAC_VLAN_ADD);
8423 	}
8424 
8425 	if (ret) {
8426 		dev_err(&hdev->pdev->dev,
8427 			"add mac addr failed for cmd_send, ret =%d.\n",
8428 			ret);
8429 		return ret;
8430 	}
8431 
8432 	return cfg_status;
8433 }
8434 
8435 static int hclge_set_umv_space(struct hclge_dev *hdev, u16 space_size,
8436 			       u16 *allocated_size)
8437 {
8438 	struct hclge_umv_spc_alc_cmd *req;
8439 	struct hclge_desc desc;
8440 	int ret;
8441 
8442 	req = (struct hclge_umv_spc_alc_cmd *)desc.data;
8443 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_ALLOCATE, false);
8444 
8445 	req->space_size = cpu_to_le32(space_size);
8446 
8447 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
8448 	if (ret) {
8449 		dev_err(&hdev->pdev->dev, "failed to set umv space, ret = %d\n",
8450 			ret);
8451 		return ret;
8452 	}
8453 
8454 	*allocated_size = le32_to_cpu(desc.data[1]);
8455 
8456 	return 0;
8457 }
8458 
8459 static int hclge_init_umv_space(struct hclge_dev *hdev)
8460 {
8461 	u16 allocated_size = 0;
8462 	int ret;
8463 
8464 	ret = hclge_set_umv_space(hdev, hdev->wanted_umv_size, &allocated_size);
8465 	if (ret)
8466 		return ret;
8467 
8468 	if (allocated_size < hdev->wanted_umv_size)
8469 		dev_warn(&hdev->pdev->dev,
8470 			 "failed to alloc umv space, want %u, get %u\n",
8471 			 hdev->wanted_umv_size, allocated_size);
8472 
8473 	hdev->max_umv_size = allocated_size;
8474 	hdev->priv_umv_size = hdev->max_umv_size / (hdev->num_alloc_vport + 1);
8475 	hdev->share_umv_size = hdev->priv_umv_size +
8476 			hdev->max_umv_size % (hdev->num_alloc_vport + 1);
8477 
8478 	return 0;
8479 }
8480 
8481 static void hclge_reset_umv_space(struct hclge_dev *hdev)
8482 {
8483 	struct hclge_vport *vport;
8484 	int i;
8485 
8486 	for (i = 0; i < hdev->num_alloc_vport; i++) {
8487 		vport = &hdev->vport[i];
8488 		vport->used_umv_num = 0;
8489 	}
8490 
8491 	mutex_lock(&hdev->vport_lock);
8492 	hdev->share_umv_size = hdev->priv_umv_size +
8493 			hdev->max_umv_size % (hdev->num_alloc_vport + 1);
8494 	mutex_unlock(&hdev->vport_lock);
8495 }
8496 
8497 static bool hclge_is_umv_space_full(struct hclge_vport *vport, bool need_lock)
8498 {
8499 	struct hclge_dev *hdev = vport->back;
8500 	bool is_full;
8501 
8502 	if (need_lock)
8503 		mutex_lock(&hdev->vport_lock);
8504 
8505 	is_full = (vport->used_umv_num >= hdev->priv_umv_size &&
8506 		   hdev->share_umv_size == 0);
8507 
8508 	if (need_lock)
8509 		mutex_unlock(&hdev->vport_lock);
8510 
8511 	return is_full;
8512 }
8513 
8514 static void hclge_update_umv_space(struct hclge_vport *vport, bool is_free)
8515 {
8516 	struct hclge_dev *hdev = vport->back;
8517 
8518 	if (is_free) {
8519 		if (vport->used_umv_num > hdev->priv_umv_size)
8520 			hdev->share_umv_size++;
8521 
8522 		if (vport->used_umv_num > 0)
8523 			vport->used_umv_num--;
8524 	} else {
8525 		if (vport->used_umv_num >= hdev->priv_umv_size &&
8526 		    hdev->share_umv_size > 0)
8527 			hdev->share_umv_size--;
8528 		vport->used_umv_num++;
8529 	}
8530 }
8531 
8532 static struct hclge_mac_node *hclge_find_mac_node(struct list_head *list,
8533 						  const u8 *mac_addr)
8534 {
8535 	struct hclge_mac_node *mac_node, *tmp;
8536 
8537 	list_for_each_entry_safe(mac_node, tmp, list, node)
8538 		if (ether_addr_equal(mac_addr, mac_node->mac_addr))
8539 			return mac_node;
8540 
8541 	return NULL;
8542 }
8543 
8544 static void hclge_update_mac_node(struct hclge_mac_node *mac_node,
8545 				  enum HCLGE_MAC_NODE_STATE state)
8546 {
8547 	switch (state) {
8548 	/* from set_rx_mode or tmp_add_list */
8549 	case HCLGE_MAC_TO_ADD:
8550 		if (mac_node->state == HCLGE_MAC_TO_DEL)
8551 			mac_node->state = HCLGE_MAC_ACTIVE;
8552 		break;
8553 	/* only from set_rx_mode */
8554 	case HCLGE_MAC_TO_DEL:
8555 		if (mac_node->state == HCLGE_MAC_TO_ADD) {
8556 			list_del(&mac_node->node);
8557 			kfree(mac_node);
8558 		} else {
8559 			mac_node->state = HCLGE_MAC_TO_DEL;
8560 		}
8561 		break;
8562 	/* only from tmp_add_list, the mac_node->state won't be
8563 	 * ACTIVE.
8564 	 */
8565 	case HCLGE_MAC_ACTIVE:
8566 		if (mac_node->state == HCLGE_MAC_TO_ADD)
8567 			mac_node->state = HCLGE_MAC_ACTIVE;
8568 
8569 		break;
8570 	}
8571 }
8572 
8573 int hclge_update_mac_list(struct hclge_vport *vport,
8574 			  enum HCLGE_MAC_NODE_STATE state,
8575 			  enum HCLGE_MAC_ADDR_TYPE mac_type,
8576 			  const unsigned char *addr)
8577 {
8578 	struct hclge_dev *hdev = vport->back;
8579 	struct hclge_mac_node *mac_node;
8580 	struct list_head *list;
8581 
8582 	list = (mac_type == HCLGE_MAC_ADDR_UC) ?
8583 		&vport->uc_mac_list : &vport->mc_mac_list;
8584 
8585 	spin_lock_bh(&vport->mac_list_lock);
8586 
8587 	/* if the mac addr is already in the mac list, no need to add a new
8588 	 * one into it, just check the mac addr state, convert it to a new
8589 	 * state, or just remove it, or do nothing.
8590 	 */
8591 	mac_node = hclge_find_mac_node(list, addr);
8592 	if (mac_node) {
8593 		hclge_update_mac_node(mac_node, state);
8594 		spin_unlock_bh(&vport->mac_list_lock);
8595 		set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state);
8596 		return 0;
8597 	}
8598 
8599 	/* if this address is never added, unnecessary to delete */
8600 	if (state == HCLGE_MAC_TO_DEL) {
8601 		spin_unlock_bh(&vport->mac_list_lock);
8602 		dev_err(&hdev->pdev->dev,
8603 			"failed to delete address %pM from mac list\n",
8604 			addr);
8605 		return -ENOENT;
8606 	}
8607 
8608 	mac_node = kzalloc(sizeof(*mac_node), GFP_ATOMIC);
8609 	if (!mac_node) {
8610 		spin_unlock_bh(&vport->mac_list_lock);
8611 		return -ENOMEM;
8612 	}
8613 
8614 	set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state);
8615 
8616 	mac_node->state = state;
8617 	ether_addr_copy(mac_node->mac_addr, addr);
8618 	list_add_tail(&mac_node->node, list);
8619 
8620 	spin_unlock_bh(&vport->mac_list_lock);
8621 
8622 	return 0;
8623 }
8624 
8625 static int hclge_add_uc_addr(struct hnae3_handle *handle,
8626 			     const unsigned char *addr)
8627 {
8628 	struct hclge_vport *vport = hclge_get_vport(handle);
8629 
8630 	return hclge_update_mac_list(vport, HCLGE_MAC_TO_ADD, HCLGE_MAC_ADDR_UC,
8631 				     addr);
8632 }
8633 
8634 int hclge_add_uc_addr_common(struct hclge_vport *vport,
8635 			     const unsigned char *addr)
8636 {
8637 	struct hclge_dev *hdev = vport->back;
8638 	struct hclge_mac_vlan_tbl_entry_cmd req;
8639 	struct hclge_desc desc;
8640 	u16 egress_port = 0;
8641 	int ret;
8642 
8643 	/* mac addr check */
8644 	if (is_zero_ether_addr(addr) ||
8645 	    is_broadcast_ether_addr(addr) ||
8646 	    is_multicast_ether_addr(addr)) {
8647 		dev_err(&hdev->pdev->dev,
8648 			"Set_uc mac err! invalid mac:%pM. is_zero:%d,is_br=%d,is_mul=%d\n",
8649 			 addr, is_zero_ether_addr(addr),
8650 			 is_broadcast_ether_addr(addr),
8651 			 is_multicast_ether_addr(addr));
8652 		return -EINVAL;
8653 	}
8654 
8655 	memset(&req, 0, sizeof(req));
8656 
8657 	hnae3_set_field(egress_port, HCLGE_MAC_EPORT_VFID_M,
8658 			HCLGE_MAC_EPORT_VFID_S, vport->vport_id);
8659 
8660 	req.egress_port = cpu_to_le16(egress_port);
8661 
8662 	hclge_prepare_mac_addr(&req, addr, false);
8663 
8664 	/* Lookup the mac address in the mac_vlan table, and add
8665 	 * it if the entry is inexistent. Repeated unicast entry
8666 	 * is not allowed in the mac vlan table.
8667 	 */
8668 	ret = hclge_lookup_mac_vlan_tbl(vport, &req, &desc, false);
8669 	if (ret == -ENOENT) {
8670 		mutex_lock(&hdev->vport_lock);
8671 		if (!hclge_is_umv_space_full(vport, false)) {
8672 			ret = hclge_add_mac_vlan_tbl(vport, &req, NULL);
8673 			if (!ret)
8674 				hclge_update_umv_space(vport, false);
8675 			mutex_unlock(&hdev->vport_lock);
8676 			return ret;
8677 		}
8678 		mutex_unlock(&hdev->vport_lock);
8679 
8680 		if (!(vport->overflow_promisc_flags & HNAE3_OVERFLOW_UPE))
8681 			dev_err(&hdev->pdev->dev, "UC MAC table full(%u)\n",
8682 				hdev->priv_umv_size);
8683 
8684 		return -ENOSPC;
8685 	}
8686 
8687 	/* check if we just hit the duplicate */
8688 	if (!ret) {
8689 		dev_warn(&hdev->pdev->dev, "VF %u mac(%pM) exists\n",
8690 			 vport->vport_id, addr);
8691 		return 0;
8692 	}
8693 
8694 	dev_err(&hdev->pdev->dev,
8695 		"PF failed to add unicast entry(%pM) in the MAC table\n",
8696 		addr);
8697 
8698 	return ret;
8699 }
8700 
8701 static int hclge_rm_uc_addr(struct hnae3_handle *handle,
8702 			    const unsigned char *addr)
8703 {
8704 	struct hclge_vport *vport = hclge_get_vport(handle);
8705 
8706 	return hclge_update_mac_list(vport, HCLGE_MAC_TO_DEL, HCLGE_MAC_ADDR_UC,
8707 				     addr);
8708 }
8709 
8710 int hclge_rm_uc_addr_common(struct hclge_vport *vport,
8711 			    const unsigned char *addr)
8712 {
8713 	struct hclge_dev *hdev = vport->back;
8714 	struct hclge_mac_vlan_tbl_entry_cmd req;
8715 	int ret;
8716 
8717 	/* mac addr check */
8718 	if (is_zero_ether_addr(addr) ||
8719 	    is_broadcast_ether_addr(addr) ||
8720 	    is_multicast_ether_addr(addr)) {
8721 		dev_dbg(&hdev->pdev->dev, "Remove mac err! invalid mac:%pM.\n",
8722 			addr);
8723 		return -EINVAL;
8724 	}
8725 
8726 	memset(&req, 0, sizeof(req));
8727 	hnae3_set_bit(req.entry_type, HCLGE_MAC_VLAN_BIT0_EN_B, 0);
8728 	hclge_prepare_mac_addr(&req, addr, false);
8729 	ret = hclge_remove_mac_vlan_tbl(vport, &req);
8730 	if (!ret) {
8731 		mutex_lock(&hdev->vport_lock);
8732 		hclge_update_umv_space(vport, true);
8733 		mutex_unlock(&hdev->vport_lock);
8734 	} else if (ret == -ENOENT) {
8735 		ret = 0;
8736 	}
8737 
8738 	return ret;
8739 }
8740 
8741 static int hclge_add_mc_addr(struct hnae3_handle *handle,
8742 			     const unsigned char *addr)
8743 {
8744 	struct hclge_vport *vport = hclge_get_vport(handle);
8745 
8746 	return hclge_update_mac_list(vport, HCLGE_MAC_TO_ADD, HCLGE_MAC_ADDR_MC,
8747 				     addr);
8748 }
8749 
8750 int hclge_add_mc_addr_common(struct hclge_vport *vport,
8751 			     const unsigned char *addr)
8752 {
8753 	struct hclge_dev *hdev = vport->back;
8754 	struct hclge_mac_vlan_tbl_entry_cmd req;
8755 	struct hclge_desc desc[3];
8756 	int status;
8757 
8758 	/* mac addr check */
8759 	if (!is_multicast_ether_addr(addr)) {
8760 		dev_err(&hdev->pdev->dev,
8761 			"Add mc mac err! invalid mac:%pM.\n",
8762 			 addr);
8763 		return -EINVAL;
8764 	}
8765 	memset(&req, 0, sizeof(req));
8766 	hclge_prepare_mac_addr(&req, addr, true);
8767 	status = hclge_lookup_mac_vlan_tbl(vport, &req, desc, true);
8768 	if (status) {
8769 		/* This mac addr do not exist, add new entry for it */
8770 		memset(desc[0].data, 0, sizeof(desc[0].data));
8771 		memset(desc[1].data, 0, sizeof(desc[0].data));
8772 		memset(desc[2].data, 0, sizeof(desc[0].data));
8773 	}
8774 	status = hclge_update_desc_vfid(desc, vport->vport_id, false);
8775 	if (status)
8776 		return status;
8777 	status = hclge_add_mac_vlan_tbl(vport, &req, desc);
8778 	/* if already overflow, not to print each time */
8779 	if (status == -ENOSPC &&
8780 	    !(vport->overflow_promisc_flags & HNAE3_OVERFLOW_MPE))
8781 		dev_err(&hdev->pdev->dev, "mc mac vlan table is full\n");
8782 
8783 	return status;
8784 }
8785 
8786 static int hclge_rm_mc_addr(struct hnae3_handle *handle,
8787 			    const unsigned char *addr)
8788 {
8789 	struct hclge_vport *vport = hclge_get_vport(handle);
8790 
8791 	return hclge_update_mac_list(vport, HCLGE_MAC_TO_DEL, HCLGE_MAC_ADDR_MC,
8792 				     addr);
8793 }
8794 
8795 int hclge_rm_mc_addr_common(struct hclge_vport *vport,
8796 			    const unsigned char *addr)
8797 {
8798 	struct hclge_dev *hdev = vport->back;
8799 	struct hclge_mac_vlan_tbl_entry_cmd req;
8800 	enum hclge_cmd_status status;
8801 	struct hclge_desc desc[3];
8802 
8803 	/* mac addr check */
8804 	if (!is_multicast_ether_addr(addr)) {
8805 		dev_dbg(&hdev->pdev->dev,
8806 			"Remove mc mac err! invalid mac:%pM.\n",
8807 			 addr);
8808 		return -EINVAL;
8809 	}
8810 
8811 	memset(&req, 0, sizeof(req));
8812 	hclge_prepare_mac_addr(&req, addr, true);
8813 	status = hclge_lookup_mac_vlan_tbl(vport, &req, desc, true);
8814 	if (!status) {
8815 		/* This mac addr exist, remove this handle's VFID for it */
8816 		status = hclge_update_desc_vfid(desc, vport->vport_id, true);
8817 		if (status)
8818 			return status;
8819 
8820 		if (hclge_is_all_function_id_zero(desc))
8821 			/* All the vfid is zero, so need to delete this entry */
8822 			status = hclge_remove_mac_vlan_tbl(vport, &req);
8823 		else
8824 			/* Not all the vfid is zero, update the vfid */
8825 			status = hclge_add_mac_vlan_tbl(vport, &req, desc);
8826 	} else if (status == -ENOENT) {
8827 		status = 0;
8828 	}
8829 
8830 	return status;
8831 }
8832 
8833 static void hclge_sync_vport_mac_list(struct hclge_vport *vport,
8834 				      struct list_head *list,
8835 				      int (*sync)(struct hclge_vport *,
8836 						  const unsigned char *))
8837 {
8838 	struct hclge_mac_node *mac_node, *tmp;
8839 	int ret;
8840 
8841 	list_for_each_entry_safe(mac_node, tmp, list, node) {
8842 		ret = sync(vport, mac_node->mac_addr);
8843 		if (!ret) {
8844 			mac_node->state = HCLGE_MAC_ACTIVE;
8845 		} else {
8846 			set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE,
8847 				&vport->state);
8848 			break;
8849 		}
8850 	}
8851 }
8852 
8853 static void hclge_unsync_vport_mac_list(struct hclge_vport *vport,
8854 					struct list_head *list,
8855 					int (*unsync)(struct hclge_vport *,
8856 						      const unsigned char *))
8857 {
8858 	struct hclge_mac_node *mac_node, *tmp;
8859 	int ret;
8860 
8861 	list_for_each_entry_safe(mac_node, tmp, list, node) {
8862 		ret = unsync(vport, mac_node->mac_addr);
8863 		if (!ret || ret == -ENOENT) {
8864 			list_del(&mac_node->node);
8865 			kfree(mac_node);
8866 		} else {
8867 			set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE,
8868 				&vport->state);
8869 			break;
8870 		}
8871 	}
8872 }
8873 
8874 static bool hclge_sync_from_add_list(struct list_head *add_list,
8875 				     struct list_head *mac_list)
8876 {
8877 	struct hclge_mac_node *mac_node, *tmp, *new_node;
8878 	bool all_added = true;
8879 
8880 	list_for_each_entry_safe(mac_node, tmp, add_list, node) {
8881 		if (mac_node->state == HCLGE_MAC_TO_ADD)
8882 			all_added = false;
8883 
8884 		/* if the mac address from tmp_add_list is not in the
8885 		 * uc/mc_mac_list, it means have received a TO_DEL request
8886 		 * during the time window of adding the mac address into mac
8887 		 * table. if mac_node state is ACTIVE, then change it to TO_DEL,
8888 		 * then it will be removed at next time. else it must be TO_ADD,
8889 		 * this address hasn't been added into mac table,
8890 		 * so just remove the mac node.
8891 		 */
8892 		new_node = hclge_find_mac_node(mac_list, mac_node->mac_addr);
8893 		if (new_node) {
8894 			hclge_update_mac_node(new_node, mac_node->state);
8895 			list_del(&mac_node->node);
8896 			kfree(mac_node);
8897 		} else if (mac_node->state == HCLGE_MAC_ACTIVE) {
8898 			mac_node->state = HCLGE_MAC_TO_DEL;
8899 			list_move_tail(&mac_node->node, mac_list);
8900 		} else {
8901 			list_del(&mac_node->node);
8902 			kfree(mac_node);
8903 		}
8904 	}
8905 
8906 	return all_added;
8907 }
8908 
8909 static void hclge_sync_from_del_list(struct list_head *del_list,
8910 				     struct list_head *mac_list)
8911 {
8912 	struct hclge_mac_node *mac_node, *tmp, *new_node;
8913 
8914 	list_for_each_entry_safe(mac_node, tmp, del_list, node) {
8915 		new_node = hclge_find_mac_node(mac_list, mac_node->mac_addr);
8916 		if (new_node) {
8917 			/* If the mac addr exists in the mac list, it means
8918 			 * received a new TO_ADD request during the time window
8919 			 * of configuring the mac address. For the mac node
8920 			 * state is TO_ADD, and the address is already in the
8921 			 * in the hardware(due to delete fail), so we just need
8922 			 * to change the mac node state to ACTIVE.
8923 			 */
8924 			new_node->state = HCLGE_MAC_ACTIVE;
8925 			list_del(&mac_node->node);
8926 			kfree(mac_node);
8927 		} else {
8928 			list_move_tail(&mac_node->node, mac_list);
8929 		}
8930 	}
8931 }
8932 
8933 static void hclge_update_overflow_flags(struct hclge_vport *vport,
8934 					enum HCLGE_MAC_ADDR_TYPE mac_type,
8935 					bool is_all_added)
8936 {
8937 	if (mac_type == HCLGE_MAC_ADDR_UC) {
8938 		if (is_all_added)
8939 			vport->overflow_promisc_flags &= ~HNAE3_OVERFLOW_UPE;
8940 		else
8941 			vport->overflow_promisc_flags |= HNAE3_OVERFLOW_UPE;
8942 	} else {
8943 		if (is_all_added)
8944 			vport->overflow_promisc_flags &= ~HNAE3_OVERFLOW_MPE;
8945 		else
8946 			vport->overflow_promisc_flags |= HNAE3_OVERFLOW_MPE;
8947 	}
8948 }
8949 
8950 static void hclge_sync_vport_mac_table(struct hclge_vport *vport,
8951 				       enum HCLGE_MAC_ADDR_TYPE mac_type)
8952 {
8953 	struct hclge_mac_node *mac_node, *tmp, *new_node;
8954 	struct list_head tmp_add_list, tmp_del_list;
8955 	struct list_head *list;
8956 	bool all_added;
8957 
8958 	INIT_LIST_HEAD(&tmp_add_list);
8959 	INIT_LIST_HEAD(&tmp_del_list);
8960 
8961 	/* move the mac addr to the tmp_add_list and tmp_del_list, then
8962 	 * we can add/delete these mac addr outside the spin lock
8963 	 */
8964 	list = (mac_type == HCLGE_MAC_ADDR_UC) ?
8965 		&vport->uc_mac_list : &vport->mc_mac_list;
8966 
8967 	spin_lock_bh(&vport->mac_list_lock);
8968 
8969 	list_for_each_entry_safe(mac_node, tmp, list, node) {
8970 		switch (mac_node->state) {
8971 		case HCLGE_MAC_TO_DEL:
8972 			list_move_tail(&mac_node->node, &tmp_del_list);
8973 			break;
8974 		case HCLGE_MAC_TO_ADD:
8975 			new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC);
8976 			if (!new_node)
8977 				goto stop_traverse;
8978 			ether_addr_copy(new_node->mac_addr, mac_node->mac_addr);
8979 			new_node->state = mac_node->state;
8980 			list_add_tail(&new_node->node, &tmp_add_list);
8981 			break;
8982 		default:
8983 			break;
8984 		}
8985 	}
8986 
8987 stop_traverse:
8988 	spin_unlock_bh(&vport->mac_list_lock);
8989 
8990 	/* delete first, in order to get max mac table space for adding */
8991 	if (mac_type == HCLGE_MAC_ADDR_UC) {
8992 		hclge_unsync_vport_mac_list(vport, &tmp_del_list,
8993 					    hclge_rm_uc_addr_common);
8994 		hclge_sync_vport_mac_list(vport, &tmp_add_list,
8995 					  hclge_add_uc_addr_common);
8996 	} else {
8997 		hclge_unsync_vport_mac_list(vport, &tmp_del_list,
8998 					    hclge_rm_mc_addr_common);
8999 		hclge_sync_vport_mac_list(vport, &tmp_add_list,
9000 					  hclge_add_mc_addr_common);
9001 	}
9002 
9003 	/* if some mac addresses were added/deleted fail, move back to the
9004 	 * mac_list, and retry at next time.
9005 	 */
9006 	spin_lock_bh(&vport->mac_list_lock);
9007 
9008 	hclge_sync_from_del_list(&tmp_del_list, list);
9009 	all_added = hclge_sync_from_add_list(&tmp_add_list, list);
9010 
9011 	spin_unlock_bh(&vport->mac_list_lock);
9012 
9013 	hclge_update_overflow_flags(vport, mac_type, all_added);
9014 }
9015 
9016 static bool hclge_need_sync_mac_table(struct hclge_vport *vport)
9017 {
9018 	struct hclge_dev *hdev = vport->back;
9019 
9020 	if (test_bit(vport->vport_id, hdev->vport_config_block))
9021 		return false;
9022 
9023 	if (test_and_clear_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state))
9024 		return true;
9025 
9026 	return false;
9027 }
9028 
9029 static void hclge_sync_mac_table(struct hclge_dev *hdev)
9030 {
9031 	int i;
9032 
9033 	for (i = 0; i < hdev->num_alloc_vport; i++) {
9034 		struct hclge_vport *vport = &hdev->vport[i];
9035 
9036 		if (!hclge_need_sync_mac_table(vport))
9037 			continue;
9038 
9039 		hclge_sync_vport_mac_table(vport, HCLGE_MAC_ADDR_UC);
9040 		hclge_sync_vport_mac_table(vport, HCLGE_MAC_ADDR_MC);
9041 	}
9042 }
9043 
9044 static void hclge_build_del_list(struct list_head *list,
9045 				 bool is_del_list,
9046 				 struct list_head *tmp_del_list)
9047 {
9048 	struct hclge_mac_node *mac_cfg, *tmp;
9049 
9050 	list_for_each_entry_safe(mac_cfg, tmp, list, node) {
9051 		switch (mac_cfg->state) {
9052 		case HCLGE_MAC_TO_DEL:
9053 		case HCLGE_MAC_ACTIVE:
9054 			list_move_tail(&mac_cfg->node, tmp_del_list);
9055 			break;
9056 		case HCLGE_MAC_TO_ADD:
9057 			if (is_del_list) {
9058 				list_del(&mac_cfg->node);
9059 				kfree(mac_cfg);
9060 			}
9061 			break;
9062 		}
9063 	}
9064 }
9065 
9066 static void hclge_unsync_del_list(struct hclge_vport *vport,
9067 				  int (*unsync)(struct hclge_vport *vport,
9068 						const unsigned char *addr),
9069 				  bool is_del_list,
9070 				  struct list_head *tmp_del_list)
9071 {
9072 	struct hclge_mac_node *mac_cfg, *tmp;
9073 	int ret;
9074 
9075 	list_for_each_entry_safe(mac_cfg, tmp, tmp_del_list, node) {
9076 		ret = unsync(vport, mac_cfg->mac_addr);
9077 		if (!ret || ret == -ENOENT) {
9078 			/* clear all mac addr from hardware, but remain these
9079 			 * mac addr in the mac list, and restore them after
9080 			 * vf reset finished.
9081 			 */
9082 			if (!is_del_list &&
9083 			    mac_cfg->state == HCLGE_MAC_ACTIVE) {
9084 				mac_cfg->state = HCLGE_MAC_TO_ADD;
9085 			} else {
9086 				list_del(&mac_cfg->node);
9087 				kfree(mac_cfg);
9088 			}
9089 		} else if (is_del_list) {
9090 			mac_cfg->state = HCLGE_MAC_TO_DEL;
9091 		}
9092 	}
9093 }
9094 
9095 void hclge_rm_vport_all_mac_table(struct hclge_vport *vport, bool is_del_list,
9096 				  enum HCLGE_MAC_ADDR_TYPE mac_type)
9097 {
9098 	int (*unsync)(struct hclge_vport *vport, const unsigned char *addr);
9099 	struct hclge_dev *hdev = vport->back;
9100 	struct list_head tmp_del_list, *list;
9101 
9102 	if (mac_type == HCLGE_MAC_ADDR_UC) {
9103 		list = &vport->uc_mac_list;
9104 		unsync = hclge_rm_uc_addr_common;
9105 	} else {
9106 		list = &vport->mc_mac_list;
9107 		unsync = hclge_rm_mc_addr_common;
9108 	}
9109 
9110 	INIT_LIST_HEAD(&tmp_del_list);
9111 
9112 	if (!is_del_list)
9113 		set_bit(vport->vport_id, hdev->vport_config_block);
9114 
9115 	spin_lock_bh(&vport->mac_list_lock);
9116 
9117 	hclge_build_del_list(list, is_del_list, &tmp_del_list);
9118 
9119 	spin_unlock_bh(&vport->mac_list_lock);
9120 
9121 	hclge_unsync_del_list(vport, unsync, is_del_list, &tmp_del_list);
9122 
9123 	spin_lock_bh(&vport->mac_list_lock);
9124 
9125 	hclge_sync_from_del_list(&tmp_del_list, list);
9126 
9127 	spin_unlock_bh(&vport->mac_list_lock);
9128 }
9129 
9130 /* remove all mac address when uninitailize */
9131 static void hclge_uninit_vport_mac_list(struct hclge_vport *vport,
9132 					enum HCLGE_MAC_ADDR_TYPE mac_type)
9133 {
9134 	struct hclge_mac_node *mac_node, *tmp;
9135 	struct hclge_dev *hdev = vport->back;
9136 	struct list_head tmp_del_list, *list;
9137 
9138 	INIT_LIST_HEAD(&tmp_del_list);
9139 
9140 	list = (mac_type == HCLGE_MAC_ADDR_UC) ?
9141 		&vport->uc_mac_list : &vport->mc_mac_list;
9142 
9143 	spin_lock_bh(&vport->mac_list_lock);
9144 
9145 	list_for_each_entry_safe(mac_node, tmp, list, node) {
9146 		switch (mac_node->state) {
9147 		case HCLGE_MAC_TO_DEL:
9148 		case HCLGE_MAC_ACTIVE:
9149 			list_move_tail(&mac_node->node, &tmp_del_list);
9150 			break;
9151 		case HCLGE_MAC_TO_ADD:
9152 			list_del(&mac_node->node);
9153 			kfree(mac_node);
9154 			break;
9155 		}
9156 	}
9157 
9158 	spin_unlock_bh(&vport->mac_list_lock);
9159 
9160 	if (mac_type == HCLGE_MAC_ADDR_UC)
9161 		hclge_unsync_vport_mac_list(vport, &tmp_del_list,
9162 					    hclge_rm_uc_addr_common);
9163 	else
9164 		hclge_unsync_vport_mac_list(vport, &tmp_del_list,
9165 					    hclge_rm_mc_addr_common);
9166 
9167 	if (!list_empty(&tmp_del_list))
9168 		dev_warn(&hdev->pdev->dev,
9169 			 "uninit %s mac list for vport %u not completely.\n",
9170 			 mac_type == HCLGE_MAC_ADDR_UC ? "uc" : "mc",
9171 			 vport->vport_id);
9172 
9173 	list_for_each_entry_safe(mac_node, tmp, &tmp_del_list, node) {
9174 		list_del(&mac_node->node);
9175 		kfree(mac_node);
9176 	}
9177 }
9178 
9179 static void hclge_uninit_mac_table(struct hclge_dev *hdev)
9180 {
9181 	struct hclge_vport *vport;
9182 	int i;
9183 
9184 	for (i = 0; i < hdev->num_alloc_vport; i++) {
9185 		vport = &hdev->vport[i];
9186 		hclge_uninit_vport_mac_list(vport, HCLGE_MAC_ADDR_UC);
9187 		hclge_uninit_vport_mac_list(vport, HCLGE_MAC_ADDR_MC);
9188 	}
9189 }
9190 
9191 static int hclge_get_mac_ethertype_cmd_status(struct hclge_dev *hdev,
9192 					      u16 cmdq_resp, u8 resp_code)
9193 {
9194 #define HCLGE_ETHERTYPE_SUCCESS_ADD		0
9195 #define HCLGE_ETHERTYPE_ALREADY_ADD		1
9196 #define HCLGE_ETHERTYPE_MGR_TBL_OVERFLOW	2
9197 #define HCLGE_ETHERTYPE_KEY_CONFLICT		3
9198 
9199 	int return_status;
9200 
9201 	if (cmdq_resp) {
9202 		dev_err(&hdev->pdev->dev,
9203 			"cmdq execute failed for get_mac_ethertype_cmd_status, status=%u.\n",
9204 			cmdq_resp);
9205 		return -EIO;
9206 	}
9207 
9208 	switch (resp_code) {
9209 	case HCLGE_ETHERTYPE_SUCCESS_ADD:
9210 	case HCLGE_ETHERTYPE_ALREADY_ADD:
9211 		return_status = 0;
9212 		break;
9213 	case HCLGE_ETHERTYPE_MGR_TBL_OVERFLOW:
9214 		dev_err(&hdev->pdev->dev,
9215 			"add mac ethertype failed for manager table overflow.\n");
9216 		return_status = -EIO;
9217 		break;
9218 	case HCLGE_ETHERTYPE_KEY_CONFLICT:
9219 		dev_err(&hdev->pdev->dev,
9220 			"add mac ethertype failed for key conflict.\n");
9221 		return_status = -EIO;
9222 		break;
9223 	default:
9224 		dev_err(&hdev->pdev->dev,
9225 			"add mac ethertype failed for undefined, code=%u.\n",
9226 			resp_code);
9227 		return_status = -EIO;
9228 	}
9229 
9230 	return return_status;
9231 }
9232 
9233 static bool hclge_check_vf_mac_exist(struct hclge_vport *vport, int vf_idx,
9234 				     u8 *mac_addr)
9235 {
9236 	struct hclge_mac_vlan_tbl_entry_cmd req;
9237 	struct hclge_dev *hdev = vport->back;
9238 	struct hclge_desc desc;
9239 	u16 egress_port = 0;
9240 	int i;
9241 
9242 	if (is_zero_ether_addr(mac_addr))
9243 		return false;
9244 
9245 	memset(&req, 0, sizeof(req));
9246 	hnae3_set_field(egress_port, HCLGE_MAC_EPORT_VFID_M,
9247 			HCLGE_MAC_EPORT_VFID_S, vport->vport_id);
9248 	req.egress_port = cpu_to_le16(egress_port);
9249 	hclge_prepare_mac_addr(&req, mac_addr, false);
9250 
9251 	if (hclge_lookup_mac_vlan_tbl(vport, &req, &desc, false) != -ENOENT)
9252 		return true;
9253 
9254 	vf_idx += HCLGE_VF_VPORT_START_NUM;
9255 	for (i = HCLGE_VF_VPORT_START_NUM; i < hdev->num_alloc_vport; i++)
9256 		if (i != vf_idx &&
9257 		    ether_addr_equal(mac_addr, hdev->vport[i].vf_info.mac))
9258 			return true;
9259 
9260 	return false;
9261 }
9262 
9263 static int hclge_set_vf_mac(struct hnae3_handle *handle, int vf,
9264 			    u8 *mac_addr)
9265 {
9266 	struct hclge_vport *vport = hclge_get_vport(handle);
9267 	struct hclge_dev *hdev = vport->back;
9268 
9269 	vport = hclge_get_vf_vport(hdev, vf);
9270 	if (!vport)
9271 		return -EINVAL;
9272 
9273 	if (ether_addr_equal(mac_addr, vport->vf_info.mac)) {
9274 		dev_info(&hdev->pdev->dev,
9275 			 "Specified MAC(=%pM) is same as before, no change committed!\n",
9276 			 mac_addr);
9277 		return 0;
9278 	}
9279 
9280 	if (hclge_check_vf_mac_exist(vport, vf, mac_addr)) {
9281 		dev_err(&hdev->pdev->dev, "Specified MAC(=%pM) exists!\n",
9282 			mac_addr);
9283 		return -EEXIST;
9284 	}
9285 
9286 	ether_addr_copy(vport->vf_info.mac, mac_addr);
9287 
9288 	if (test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) {
9289 		dev_info(&hdev->pdev->dev,
9290 			 "MAC of VF %d has been set to %pM, and it will be reinitialized!\n",
9291 			 vf, mac_addr);
9292 		return hclge_inform_reset_assert_to_vf(vport);
9293 	}
9294 
9295 	dev_info(&hdev->pdev->dev, "MAC of VF %d has been set to %pM\n",
9296 		 vf, mac_addr);
9297 	return 0;
9298 }
9299 
9300 static int hclge_add_mgr_tbl(struct hclge_dev *hdev,
9301 			     const struct hclge_mac_mgr_tbl_entry_cmd *req)
9302 {
9303 	struct hclge_desc desc;
9304 	u8 resp_code;
9305 	u16 retval;
9306 	int ret;
9307 
9308 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_ETHTYPE_ADD, false);
9309 	memcpy(desc.data, req, sizeof(struct hclge_mac_mgr_tbl_entry_cmd));
9310 
9311 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
9312 	if (ret) {
9313 		dev_err(&hdev->pdev->dev,
9314 			"add mac ethertype failed for cmd_send, ret =%d.\n",
9315 			ret);
9316 		return ret;
9317 	}
9318 
9319 	resp_code = (le32_to_cpu(desc.data[0]) >> 8) & 0xff;
9320 	retval = le16_to_cpu(desc.retval);
9321 
9322 	return hclge_get_mac_ethertype_cmd_status(hdev, retval, resp_code);
9323 }
9324 
9325 static int init_mgr_tbl(struct hclge_dev *hdev)
9326 {
9327 	int ret;
9328 	int i;
9329 
9330 	for (i = 0; i < ARRAY_SIZE(hclge_mgr_table); i++) {
9331 		ret = hclge_add_mgr_tbl(hdev, &hclge_mgr_table[i]);
9332 		if (ret) {
9333 			dev_err(&hdev->pdev->dev,
9334 				"add mac ethertype failed, ret =%d.\n",
9335 				ret);
9336 			return ret;
9337 		}
9338 	}
9339 
9340 	return 0;
9341 }
9342 
9343 static void hclge_get_mac_addr(struct hnae3_handle *handle, u8 *p)
9344 {
9345 	struct hclge_vport *vport = hclge_get_vport(handle);
9346 	struct hclge_dev *hdev = vport->back;
9347 
9348 	ether_addr_copy(p, hdev->hw.mac.mac_addr);
9349 }
9350 
9351 int hclge_update_mac_node_for_dev_addr(struct hclge_vport *vport,
9352 				       const u8 *old_addr, const u8 *new_addr)
9353 {
9354 	struct list_head *list = &vport->uc_mac_list;
9355 	struct hclge_mac_node *old_node, *new_node;
9356 
9357 	new_node = hclge_find_mac_node(list, new_addr);
9358 	if (!new_node) {
9359 		new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC);
9360 		if (!new_node)
9361 			return -ENOMEM;
9362 
9363 		new_node->state = HCLGE_MAC_TO_ADD;
9364 		ether_addr_copy(new_node->mac_addr, new_addr);
9365 		list_add(&new_node->node, list);
9366 	} else {
9367 		if (new_node->state == HCLGE_MAC_TO_DEL)
9368 			new_node->state = HCLGE_MAC_ACTIVE;
9369 
9370 		/* make sure the new addr is in the list head, avoid dev
9371 		 * addr may be not re-added into mac table for the umv space
9372 		 * limitation after global/imp reset which will clear mac
9373 		 * table by hardware.
9374 		 */
9375 		list_move(&new_node->node, list);
9376 	}
9377 
9378 	if (old_addr && !ether_addr_equal(old_addr, new_addr)) {
9379 		old_node = hclge_find_mac_node(list, old_addr);
9380 		if (old_node) {
9381 			if (old_node->state == HCLGE_MAC_TO_ADD) {
9382 				list_del(&old_node->node);
9383 				kfree(old_node);
9384 			} else {
9385 				old_node->state = HCLGE_MAC_TO_DEL;
9386 			}
9387 		}
9388 	}
9389 
9390 	set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state);
9391 
9392 	return 0;
9393 }
9394 
9395 static int hclge_set_mac_addr(struct hnae3_handle *handle, void *p,
9396 			      bool is_first)
9397 {
9398 	const unsigned char *new_addr = (const unsigned char *)p;
9399 	struct hclge_vport *vport = hclge_get_vport(handle);
9400 	struct hclge_dev *hdev = vport->back;
9401 	unsigned char *old_addr = NULL;
9402 	int ret;
9403 
9404 	/* mac addr check */
9405 	if (is_zero_ether_addr(new_addr) ||
9406 	    is_broadcast_ether_addr(new_addr) ||
9407 	    is_multicast_ether_addr(new_addr)) {
9408 		dev_err(&hdev->pdev->dev,
9409 			"change uc mac err! invalid mac: %pM.\n",
9410 			 new_addr);
9411 		return -EINVAL;
9412 	}
9413 
9414 	ret = hclge_pause_addr_cfg(hdev, new_addr);
9415 	if (ret) {
9416 		dev_err(&hdev->pdev->dev,
9417 			"failed to configure mac pause address, ret = %d\n",
9418 			ret);
9419 		return ret;
9420 	}
9421 
9422 	if (!is_first)
9423 		old_addr = hdev->hw.mac.mac_addr;
9424 
9425 	spin_lock_bh(&vport->mac_list_lock);
9426 	ret = hclge_update_mac_node_for_dev_addr(vport, old_addr, new_addr);
9427 	if (ret) {
9428 		dev_err(&hdev->pdev->dev,
9429 			"failed to change the mac addr:%pM, ret = %d\n",
9430 			new_addr, ret);
9431 		spin_unlock_bh(&vport->mac_list_lock);
9432 
9433 		if (!is_first)
9434 			hclge_pause_addr_cfg(hdev, old_addr);
9435 
9436 		return ret;
9437 	}
9438 	/* we must update dev addr with spin lock protect, preventing dev addr
9439 	 * being removed by set_rx_mode path.
9440 	 */
9441 	ether_addr_copy(hdev->hw.mac.mac_addr, new_addr);
9442 	spin_unlock_bh(&vport->mac_list_lock);
9443 
9444 	hclge_task_schedule(hdev, 0);
9445 
9446 	return 0;
9447 }
9448 
9449 static int hclge_mii_ioctl(struct hclge_dev *hdev, struct ifreq *ifr, int cmd)
9450 {
9451 	struct mii_ioctl_data *data = if_mii(ifr);
9452 
9453 	if (!hnae3_dev_phy_imp_supported(hdev))
9454 		return -EOPNOTSUPP;
9455 
9456 	switch (cmd) {
9457 	case SIOCGMIIPHY:
9458 		data->phy_id = hdev->hw.mac.phy_addr;
9459 		/* this command reads phy id and register at the same time */
9460 		fallthrough;
9461 	case SIOCGMIIREG:
9462 		data->val_out = hclge_read_phy_reg(hdev, data->reg_num);
9463 		return 0;
9464 
9465 	case SIOCSMIIREG:
9466 		return hclge_write_phy_reg(hdev, data->reg_num, data->val_in);
9467 	default:
9468 		return -EOPNOTSUPP;
9469 	}
9470 }
9471 
9472 static int hclge_do_ioctl(struct hnae3_handle *handle, struct ifreq *ifr,
9473 			  int cmd)
9474 {
9475 	struct hclge_vport *vport = hclge_get_vport(handle);
9476 	struct hclge_dev *hdev = vport->back;
9477 
9478 	switch (cmd) {
9479 	case SIOCGHWTSTAMP:
9480 		return hclge_ptp_get_cfg(hdev, ifr);
9481 	case SIOCSHWTSTAMP:
9482 		return hclge_ptp_set_cfg(hdev, ifr);
9483 	default:
9484 		if (!hdev->hw.mac.phydev)
9485 			return hclge_mii_ioctl(hdev, ifr, cmd);
9486 	}
9487 
9488 	return phy_mii_ioctl(hdev->hw.mac.phydev, ifr, cmd);
9489 }
9490 
9491 static int hclge_set_port_vlan_filter_bypass(struct hclge_dev *hdev, u8 vf_id,
9492 					     bool bypass_en)
9493 {
9494 	struct hclge_port_vlan_filter_bypass_cmd *req;
9495 	struct hclge_desc desc;
9496 	int ret;
9497 
9498 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PORT_VLAN_BYPASS, false);
9499 	req = (struct hclge_port_vlan_filter_bypass_cmd *)desc.data;
9500 	req->vf_id = vf_id;
9501 	hnae3_set_bit(req->bypass_state, HCLGE_INGRESS_BYPASS_B,
9502 		      bypass_en ? 1 : 0);
9503 
9504 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
9505 	if (ret)
9506 		dev_err(&hdev->pdev->dev,
9507 			"failed to set vport%u port vlan filter bypass state, ret = %d.\n",
9508 			vf_id, ret);
9509 
9510 	return ret;
9511 }
9512 
9513 static int hclge_set_vlan_filter_ctrl(struct hclge_dev *hdev, u8 vlan_type,
9514 				      u8 fe_type, bool filter_en, u8 vf_id)
9515 {
9516 	struct hclge_vlan_filter_ctrl_cmd *req;
9517 	struct hclge_desc desc;
9518 	int ret;
9519 
9520 	/* read current vlan filter parameter */
9521 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_CTRL, true);
9522 	req = (struct hclge_vlan_filter_ctrl_cmd *)desc.data;
9523 	req->vlan_type = vlan_type;
9524 	req->vf_id = vf_id;
9525 
9526 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
9527 	if (ret) {
9528 		dev_err(&hdev->pdev->dev,
9529 			"failed to get vlan filter config, ret = %d.\n", ret);
9530 		return ret;
9531 	}
9532 
9533 	/* modify and write new config parameter */
9534 	hclge_cmd_reuse_desc(&desc, false);
9535 	req->vlan_fe = filter_en ?
9536 			(req->vlan_fe | fe_type) : (req->vlan_fe & ~fe_type);
9537 
9538 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
9539 	if (ret)
9540 		dev_err(&hdev->pdev->dev, "failed to set vlan filter, ret = %d.\n",
9541 			ret);
9542 
9543 	return ret;
9544 }
9545 
9546 static int hclge_set_vport_vlan_filter(struct hclge_vport *vport, bool enable)
9547 {
9548 	struct hclge_dev *hdev = vport->back;
9549 	struct hnae3_ae_dev *ae_dev = hdev->ae_dev;
9550 	int ret;
9551 
9552 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
9553 		return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
9554 						  HCLGE_FILTER_FE_EGRESS_V1_B,
9555 						  enable, vport->vport_id);
9556 
9557 	ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
9558 					 HCLGE_FILTER_FE_EGRESS, enable,
9559 					 vport->vport_id);
9560 	if (ret)
9561 		return ret;
9562 
9563 	if (test_bit(HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B, ae_dev->caps)) {
9564 		ret = hclge_set_port_vlan_filter_bypass(hdev, vport->vport_id,
9565 							!enable);
9566 	} else if (!vport->vport_id) {
9567 		if (test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps))
9568 			enable = false;
9569 
9570 		ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
9571 						 HCLGE_FILTER_FE_INGRESS,
9572 						 enable, 0);
9573 	}
9574 
9575 	return ret;
9576 }
9577 
9578 static bool hclge_need_enable_vport_vlan_filter(struct hclge_vport *vport)
9579 {
9580 	struct hnae3_handle *handle = &vport->nic;
9581 	struct hclge_vport_vlan_cfg *vlan, *tmp;
9582 	struct hclge_dev *hdev = vport->back;
9583 
9584 	if (vport->vport_id) {
9585 		if (vport->port_base_vlan_cfg.state !=
9586 			HNAE3_PORT_BASE_VLAN_DISABLE)
9587 			return true;
9588 
9589 		if (vport->vf_info.trusted && vport->vf_info.request_uc_en)
9590 			return false;
9591 	} else if (handle->netdev_flags & HNAE3_USER_UPE) {
9592 		return false;
9593 	}
9594 
9595 	if (!vport->req_vlan_fltr_en)
9596 		return false;
9597 
9598 	/* compatible with former device, always enable vlan filter */
9599 	if (!test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, hdev->ae_dev->caps))
9600 		return true;
9601 
9602 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node)
9603 		if (vlan->vlan_id != 0)
9604 			return true;
9605 
9606 	return false;
9607 }
9608 
9609 int hclge_enable_vport_vlan_filter(struct hclge_vport *vport, bool request_en)
9610 {
9611 	struct hclge_dev *hdev = vport->back;
9612 	bool need_en;
9613 	int ret;
9614 
9615 	mutex_lock(&hdev->vport_lock);
9616 
9617 	vport->req_vlan_fltr_en = request_en;
9618 
9619 	need_en = hclge_need_enable_vport_vlan_filter(vport);
9620 	if (need_en == vport->cur_vlan_fltr_en) {
9621 		mutex_unlock(&hdev->vport_lock);
9622 		return 0;
9623 	}
9624 
9625 	ret = hclge_set_vport_vlan_filter(vport, need_en);
9626 	if (ret) {
9627 		mutex_unlock(&hdev->vport_lock);
9628 		return ret;
9629 	}
9630 
9631 	vport->cur_vlan_fltr_en = need_en;
9632 
9633 	mutex_unlock(&hdev->vport_lock);
9634 
9635 	return 0;
9636 }
9637 
9638 static int hclge_enable_vlan_filter(struct hnae3_handle *handle, bool enable)
9639 {
9640 	struct hclge_vport *vport = hclge_get_vport(handle);
9641 
9642 	return hclge_enable_vport_vlan_filter(vport, enable);
9643 }
9644 
9645 static int hclge_set_vf_vlan_filter_cmd(struct hclge_dev *hdev, u16 vfid,
9646 					bool is_kill, u16 vlan,
9647 					struct hclge_desc *desc)
9648 {
9649 	struct hclge_vlan_filter_vf_cfg_cmd *req0;
9650 	struct hclge_vlan_filter_vf_cfg_cmd *req1;
9651 	u8 vf_byte_val;
9652 	u8 vf_byte_off;
9653 	int ret;
9654 
9655 	hclge_cmd_setup_basic_desc(&desc[0],
9656 				   HCLGE_OPC_VLAN_FILTER_VF_CFG, false);
9657 	hclge_cmd_setup_basic_desc(&desc[1],
9658 				   HCLGE_OPC_VLAN_FILTER_VF_CFG, false);
9659 
9660 	desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
9661 
9662 	vf_byte_off = vfid / 8;
9663 	vf_byte_val = 1 << (vfid % 8);
9664 
9665 	req0 = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[0].data;
9666 	req1 = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[1].data;
9667 
9668 	req0->vlan_id  = cpu_to_le16(vlan);
9669 	req0->vlan_cfg = is_kill;
9670 
9671 	if (vf_byte_off < HCLGE_MAX_VF_BYTES)
9672 		req0->vf_bitmap[vf_byte_off] = vf_byte_val;
9673 	else
9674 		req1->vf_bitmap[vf_byte_off - HCLGE_MAX_VF_BYTES] = vf_byte_val;
9675 
9676 	ret = hclge_cmd_send(&hdev->hw, desc, 2);
9677 	if (ret) {
9678 		dev_err(&hdev->pdev->dev,
9679 			"Send vf vlan command fail, ret =%d.\n",
9680 			ret);
9681 		return ret;
9682 	}
9683 
9684 	return 0;
9685 }
9686 
9687 static int hclge_check_vf_vlan_cmd_status(struct hclge_dev *hdev, u16 vfid,
9688 					  bool is_kill, struct hclge_desc *desc)
9689 {
9690 	struct hclge_vlan_filter_vf_cfg_cmd *req;
9691 
9692 	req = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[0].data;
9693 
9694 	if (!is_kill) {
9695 #define HCLGE_VF_VLAN_NO_ENTRY	2
9696 		if (!req->resp_code || req->resp_code == 1)
9697 			return 0;
9698 
9699 		if (req->resp_code == HCLGE_VF_VLAN_NO_ENTRY) {
9700 			set_bit(vfid, hdev->vf_vlan_full);
9701 			dev_warn(&hdev->pdev->dev,
9702 				 "vf vlan table is full, vf vlan filter is disabled\n");
9703 			return 0;
9704 		}
9705 
9706 		dev_err(&hdev->pdev->dev,
9707 			"Add vf vlan filter fail, ret =%u.\n",
9708 			req->resp_code);
9709 	} else {
9710 #define HCLGE_VF_VLAN_DEL_NO_FOUND	1
9711 		if (!req->resp_code)
9712 			return 0;
9713 
9714 		/* vf vlan filter is disabled when vf vlan table is full,
9715 		 * then new vlan id will not be added into vf vlan table.
9716 		 * Just return 0 without warning, avoid massive verbose
9717 		 * print logs when unload.
9718 		 */
9719 		if (req->resp_code == HCLGE_VF_VLAN_DEL_NO_FOUND)
9720 			return 0;
9721 
9722 		dev_err(&hdev->pdev->dev,
9723 			"Kill vf vlan filter fail, ret =%u.\n",
9724 			req->resp_code);
9725 	}
9726 
9727 	return -EIO;
9728 }
9729 
9730 static int hclge_set_vf_vlan_common(struct hclge_dev *hdev, u16 vfid,
9731 				    bool is_kill, u16 vlan)
9732 {
9733 	struct hclge_vport *vport = &hdev->vport[vfid];
9734 	struct hclge_desc desc[2];
9735 	int ret;
9736 
9737 	/* if vf vlan table is full, firmware will close vf vlan filter, it
9738 	 * is unable and unnecessary to add new vlan id to vf vlan filter.
9739 	 * If spoof check is enable, and vf vlan is full, it shouldn't add
9740 	 * new vlan, because tx packets with these vlan id will be dropped.
9741 	 */
9742 	if (test_bit(vfid, hdev->vf_vlan_full) && !is_kill) {
9743 		if (vport->vf_info.spoofchk && vlan) {
9744 			dev_err(&hdev->pdev->dev,
9745 				"Can't add vlan due to spoof check is on and vf vlan table is full\n");
9746 			return -EPERM;
9747 		}
9748 		return 0;
9749 	}
9750 
9751 	ret = hclge_set_vf_vlan_filter_cmd(hdev, vfid, is_kill, vlan, desc);
9752 	if (ret)
9753 		return ret;
9754 
9755 	return hclge_check_vf_vlan_cmd_status(hdev, vfid, is_kill, desc);
9756 }
9757 
9758 static int hclge_set_port_vlan_filter(struct hclge_dev *hdev, __be16 proto,
9759 				      u16 vlan_id, bool is_kill)
9760 {
9761 	struct hclge_vlan_filter_pf_cfg_cmd *req;
9762 	struct hclge_desc desc;
9763 	u8 vlan_offset_byte_val;
9764 	u8 vlan_offset_byte;
9765 	u8 vlan_offset_160;
9766 	int ret;
9767 
9768 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_PF_CFG, false);
9769 
9770 	vlan_offset_160 = vlan_id / HCLGE_VLAN_ID_OFFSET_STEP;
9771 	vlan_offset_byte = (vlan_id % HCLGE_VLAN_ID_OFFSET_STEP) /
9772 			   HCLGE_VLAN_BYTE_SIZE;
9773 	vlan_offset_byte_val = 1 << (vlan_id % HCLGE_VLAN_BYTE_SIZE);
9774 
9775 	req = (struct hclge_vlan_filter_pf_cfg_cmd *)desc.data;
9776 	req->vlan_offset = vlan_offset_160;
9777 	req->vlan_cfg = is_kill;
9778 	req->vlan_offset_bitmap[vlan_offset_byte] = vlan_offset_byte_val;
9779 
9780 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
9781 	if (ret)
9782 		dev_err(&hdev->pdev->dev,
9783 			"port vlan command, send fail, ret =%d.\n", ret);
9784 	return ret;
9785 }
9786 
9787 static int hclge_set_vlan_filter_hw(struct hclge_dev *hdev, __be16 proto,
9788 				    u16 vport_id, u16 vlan_id,
9789 				    bool is_kill)
9790 {
9791 	u16 vport_idx, vport_num = 0;
9792 	int ret;
9793 
9794 	if (is_kill && !vlan_id)
9795 		return 0;
9796 
9797 	ret = hclge_set_vf_vlan_common(hdev, vport_id, is_kill, vlan_id);
9798 	if (ret) {
9799 		dev_err(&hdev->pdev->dev,
9800 			"Set %u vport vlan filter config fail, ret =%d.\n",
9801 			vport_id, ret);
9802 		return ret;
9803 	}
9804 
9805 	/* vlan 0 may be added twice when 8021q module is enabled */
9806 	if (!is_kill && !vlan_id &&
9807 	    test_bit(vport_id, hdev->vlan_table[vlan_id]))
9808 		return 0;
9809 
9810 	if (!is_kill && test_and_set_bit(vport_id, hdev->vlan_table[vlan_id])) {
9811 		dev_err(&hdev->pdev->dev,
9812 			"Add port vlan failed, vport %u is already in vlan %u\n",
9813 			vport_id, vlan_id);
9814 		return -EINVAL;
9815 	}
9816 
9817 	if (is_kill &&
9818 	    !test_and_clear_bit(vport_id, hdev->vlan_table[vlan_id])) {
9819 		dev_err(&hdev->pdev->dev,
9820 			"Delete port vlan failed, vport %u is not in vlan %u\n",
9821 			vport_id, vlan_id);
9822 		return -EINVAL;
9823 	}
9824 
9825 	for_each_set_bit(vport_idx, hdev->vlan_table[vlan_id], HCLGE_VPORT_NUM)
9826 		vport_num++;
9827 
9828 	if ((is_kill && vport_num == 0) || (!is_kill && vport_num == 1))
9829 		ret = hclge_set_port_vlan_filter(hdev, proto, vlan_id,
9830 						 is_kill);
9831 
9832 	return ret;
9833 }
9834 
9835 static int hclge_set_vlan_tx_offload_cfg(struct hclge_vport *vport)
9836 {
9837 	struct hclge_tx_vtag_cfg *vcfg = &vport->txvlan_cfg;
9838 	struct hclge_vport_vtag_tx_cfg_cmd *req;
9839 	struct hclge_dev *hdev = vport->back;
9840 	struct hclge_desc desc;
9841 	u16 bmap_index;
9842 	int status;
9843 
9844 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_PORT_TX_CFG, false);
9845 
9846 	req = (struct hclge_vport_vtag_tx_cfg_cmd *)desc.data;
9847 	req->def_vlan_tag1 = cpu_to_le16(vcfg->default_tag1);
9848 	req->def_vlan_tag2 = cpu_to_le16(vcfg->default_tag2);
9849 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_TAG1_B,
9850 		      vcfg->accept_tag1 ? 1 : 0);
9851 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_UNTAG1_B,
9852 		      vcfg->accept_untag1 ? 1 : 0);
9853 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_TAG2_B,
9854 		      vcfg->accept_tag2 ? 1 : 0);
9855 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_UNTAG2_B,
9856 		      vcfg->accept_untag2 ? 1 : 0);
9857 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_PORT_INS_TAG1_EN_B,
9858 		      vcfg->insert_tag1_en ? 1 : 0);
9859 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_PORT_INS_TAG2_EN_B,
9860 		      vcfg->insert_tag2_en ? 1 : 0);
9861 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_TAG_SHIFT_MODE_EN_B,
9862 		      vcfg->tag_shift_mode_en ? 1 : 0);
9863 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_CFG_NIC_ROCE_SEL_B, 0);
9864 
9865 	req->vf_offset = vport->vport_id / HCLGE_VF_NUM_PER_CMD;
9866 	bmap_index = vport->vport_id % HCLGE_VF_NUM_PER_CMD /
9867 			HCLGE_VF_NUM_PER_BYTE;
9868 	req->vf_bitmap[bmap_index] =
9869 		1U << (vport->vport_id % HCLGE_VF_NUM_PER_BYTE);
9870 
9871 	status = hclge_cmd_send(&hdev->hw, &desc, 1);
9872 	if (status)
9873 		dev_err(&hdev->pdev->dev,
9874 			"Send port txvlan cfg command fail, ret =%d\n",
9875 			status);
9876 
9877 	return status;
9878 }
9879 
9880 static int hclge_set_vlan_rx_offload_cfg(struct hclge_vport *vport)
9881 {
9882 	struct hclge_rx_vtag_cfg *vcfg = &vport->rxvlan_cfg;
9883 	struct hclge_vport_vtag_rx_cfg_cmd *req;
9884 	struct hclge_dev *hdev = vport->back;
9885 	struct hclge_desc desc;
9886 	u16 bmap_index;
9887 	int status;
9888 
9889 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_PORT_RX_CFG, false);
9890 
9891 	req = (struct hclge_vport_vtag_rx_cfg_cmd *)desc.data;
9892 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_REM_TAG1_EN_B,
9893 		      vcfg->strip_tag1_en ? 1 : 0);
9894 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_REM_TAG2_EN_B,
9895 		      vcfg->strip_tag2_en ? 1 : 0);
9896 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_SHOW_TAG1_EN_B,
9897 		      vcfg->vlan1_vlan_prionly ? 1 : 0);
9898 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_SHOW_TAG2_EN_B,
9899 		      vcfg->vlan2_vlan_prionly ? 1 : 0);
9900 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_DISCARD_TAG1_EN_B,
9901 		      vcfg->strip_tag1_discard_en ? 1 : 0);
9902 	hnae3_set_bit(req->vport_vlan_cfg, HCLGE_DISCARD_TAG2_EN_B,
9903 		      vcfg->strip_tag2_discard_en ? 1 : 0);
9904 
9905 	req->vf_offset = vport->vport_id / HCLGE_VF_NUM_PER_CMD;
9906 	bmap_index = vport->vport_id % HCLGE_VF_NUM_PER_CMD /
9907 			HCLGE_VF_NUM_PER_BYTE;
9908 	req->vf_bitmap[bmap_index] =
9909 		1U << (vport->vport_id % HCLGE_VF_NUM_PER_BYTE);
9910 
9911 	status = hclge_cmd_send(&hdev->hw, &desc, 1);
9912 	if (status)
9913 		dev_err(&hdev->pdev->dev,
9914 			"Send port rxvlan cfg command fail, ret =%d\n",
9915 			status);
9916 
9917 	return status;
9918 }
9919 
9920 static int hclge_vlan_offload_cfg(struct hclge_vport *vport,
9921 				  u16 port_base_vlan_state,
9922 				  u16 vlan_tag, u8 qos)
9923 {
9924 	int ret;
9925 
9926 	if (port_base_vlan_state == HNAE3_PORT_BASE_VLAN_DISABLE) {
9927 		vport->txvlan_cfg.accept_tag1 = true;
9928 		vport->txvlan_cfg.insert_tag1_en = false;
9929 		vport->txvlan_cfg.default_tag1 = 0;
9930 	} else {
9931 		struct hnae3_ae_dev *ae_dev = pci_get_drvdata(vport->nic.pdev);
9932 
9933 		vport->txvlan_cfg.accept_tag1 =
9934 			ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V3;
9935 		vport->txvlan_cfg.insert_tag1_en = true;
9936 		vport->txvlan_cfg.default_tag1 = (qos << VLAN_PRIO_SHIFT) |
9937 						 vlan_tag;
9938 	}
9939 
9940 	vport->txvlan_cfg.accept_untag1 = true;
9941 
9942 	/* accept_tag2 and accept_untag2 are not supported on
9943 	 * pdev revision(0x20), new revision support them,
9944 	 * this two fields can not be configured by user.
9945 	 */
9946 	vport->txvlan_cfg.accept_tag2 = true;
9947 	vport->txvlan_cfg.accept_untag2 = true;
9948 	vport->txvlan_cfg.insert_tag2_en = false;
9949 	vport->txvlan_cfg.default_tag2 = 0;
9950 	vport->txvlan_cfg.tag_shift_mode_en = true;
9951 
9952 	if (port_base_vlan_state == HNAE3_PORT_BASE_VLAN_DISABLE) {
9953 		vport->rxvlan_cfg.strip_tag1_en = false;
9954 		vport->rxvlan_cfg.strip_tag2_en =
9955 				vport->rxvlan_cfg.rx_vlan_offload_en;
9956 		vport->rxvlan_cfg.strip_tag2_discard_en = false;
9957 	} else {
9958 		vport->rxvlan_cfg.strip_tag1_en =
9959 				vport->rxvlan_cfg.rx_vlan_offload_en;
9960 		vport->rxvlan_cfg.strip_tag2_en = true;
9961 		vport->rxvlan_cfg.strip_tag2_discard_en = true;
9962 	}
9963 
9964 	vport->rxvlan_cfg.strip_tag1_discard_en = false;
9965 	vport->rxvlan_cfg.vlan1_vlan_prionly = false;
9966 	vport->rxvlan_cfg.vlan2_vlan_prionly = false;
9967 
9968 	ret = hclge_set_vlan_tx_offload_cfg(vport);
9969 	if (ret)
9970 		return ret;
9971 
9972 	return hclge_set_vlan_rx_offload_cfg(vport);
9973 }
9974 
9975 static int hclge_set_vlan_protocol_type(struct hclge_dev *hdev)
9976 {
9977 	struct hclge_rx_vlan_type_cfg_cmd *rx_req;
9978 	struct hclge_tx_vlan_type_cfg_cmd *tx_req;
9979 	struct hclge_desc desc;
9980 	int status;
9981 
9982 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_TYPE_ID, false);
9983 	rx_req = (struct hclge_rx_vlan_type_cfg_cmd *)desc.data;
9984 	rx_req->ot_fst_vlan_type =
9985 		cpu_to_le16(hdev->vlan_type_cfg.rx_ot_fst_vlan_type);
9986 	rx_req->ot_sec_vlan_type =
9987 		cpu_to_le16(hdev->vlan_type_cfg.rx_ot_sec_vlan_type);
9988 	rx_req->in_fst_vlan_type =
9989 		cpu_to_le16(hdev->vlan_type_cfg.rx_in_fst_vlan_type);
9990 	rx_req->in_sec_vlan_type =
9991 		cpu_to_le16(hdev->vlan_type_cfg.rx_in_sec_vlan_type);
9992 
9993 	status = hclge_cmd_send(&hdev->hw, &desc, 1);
9994 	if (status) {
9995 		dev_err(&hdev->pdev->dev,
9996 			"Send rxvlan protocol type command fail, ret =%d\n",
9997 			status);
9998 		return status;
9999 	}
10000 
10001 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_INSERT, false);
10002 
10003 	tx_req = (struct hclge_tx_vlan_type_cfg_cmd *)desc.data;
10004 	tx_req->ot_vlan_type = cpu_to_le16(hdev->vlan_type_cfg.tx_ot_vlan_type);
10005 	tx_req->in_vlan_type = cpu_to_le16(hdev->vlan_type_cfg.tx_in_vlan_type);
10006 
10007 	status = hclge_cmd_send(&hdev->hw, &desc, 1);
10008 	if (status)
10009 		dev_err(&hdev->pdev->dev,
10010 			"Send txvlan protocol type command fail, ret =%d\n",
10011 			status);
10012 
10013 	return status;
10014 }
10015 
10016 static int hclge_init_vlan_config(struct hclge_dev *hdev)
10017 {
10018 #define HCLGE_DEF_VLAN_TYPE		0x8100
10019 
10020 	struct hnae3_handle *handle = &hdev->vport[0].nic;
10021 	struct hclge_vport *vport;
10022 	int ret;
10023 	int i;
10024 
10025 	if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
10026 		/* for revision 0x21, vf vlan filter is per function */
10027 		for (i = 0; i < hdev->num_alloc_vport; i++) {
10028 			vport = &hdev->vport[i];
10029 			ret = hclge_set_vlan_filter_ctrl(hdev,
10030 							 HCLGE_FILTER_TYPE_VF,
10031 							 HCLGE_FILTER_FE_EGRESS,
10032 							 true,
10033 							 vport->vport_id);
10034 			if (ret)
10035 				return ret;
10036 			vport->cur_vlan_fltr_en = true;
10037 		}
10038 
10039 		ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT,
10040 						 HCLGE_FILTER_FE_INGRESS, true,
10041 						 0);
10042 		if (ret)
10043 			return ret;
10044 	} else {
10045 		ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
10046 						 HCLGE_FILTER_FE_EGRESS_V1_B,
10047 						 true, 0);
10048 		if (ret)
10049 			return ret;
10050 	}
10051 
10052 	hdev->vlan_type_cfg.rx_in_fst_vlan_type = HCLGE_DEF_VLAN_TYPE;
10053 	hdev->vlan_type_cfg.rx_in_sec_vlan_type = HCLGE_DEF_VLAN_TYPE;
10054 	hdev->vlan_type_cfg.rx_ot_fst_vlan_type = HCLGE_DEF_VLAN_TYPE;
10055 	hdev->vlan_type_cfg.rx_ot_sec_vlan_type = HCLGE_DEF_VLAN_TYPE;
10056 	hdev->vlan_type_cfg.tx_ot_vlan_type = HCLGE_DEF_VLAN_TYPE;
10057 	hdev->vlan_type_cfg.tx_in_vlan_type = HCLGE_DEF_VLAN_TYPE;
10058 
10059 	ret = hclge_set_vlan_protocol_type(hdev);
10060 	if (ret)
10061 		return ret;
10062 
10063 	for (i = 0; i < hdev->num_alloc_vport; i++) {
10064 		u16 vlan_tag;
10065 		u8 qos;
10066 
10067 		vport = &hdev->vport[i];
10068 		vlan_tag = vport->port_base_vlan_cfg.vlan_info.vlan_tag;
10069 		qos = vport->port_base_vlan_cfg.vlan_info.qos;
10070 
10071 		ret = hclge_vlan_offload_cfg(vport,
10072 					     vport->port_base_vlan_cfg.state,
10073 					     vlan_tag, qos);
10074 		if (ret)
10075 			return ret;
10076 	}
10077 
10078 	return hclge_set_vlan_filter(handle, htons(ETH_P_8021Q), 0, false);
10079 }
10080 
10081 static void hclge_add_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id,
10082 				       bool writen_to_tbl)
10083 {
10084 	struct hclge_vport_vlan_cfg *vlan, *tmp;
10085 
10086 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node)
10087 		if (vlan->vlan_id == vlan_id)
10088 			return;
10089 
10090 	vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);
10091 	if (!vlan)
10092 		return;
10093 
10094 	vlan->hd_tbl_status = writen_to_tbl;
10095 	vlan->vlan_id = vlan_id;
10096 
10097 	list_add_tail(&vlan->node, &vport->vlan_list);
10098 }
10099 
10100 static int hclge_add_vport_all_vlan_table(struct hclge_vport *vport)
10101 {
10102 	struct hclge_vport_vlan_cfg *vlan, *tmp;
10103 	struct hclge_dev *hdev = vport->back;
10104 	int ret;
10105 
10106 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
10107 		if (!vlan->hd_tbl_status) {
10108 			ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
10109 						       vport->vport_id,
10110 						       vlan->vlan_id, false);
10111 			if (ret) {
10112 				dev_err(&hdev->pdev->dev,
10113 					"restore vport vlan list failed, ret=%d\n",
10114 					ret);
10115 				return ret;
10116 			}
10117 		}
10118 		vlan->hd_tbl_status = true;
10119 	}
10120 
10121 	return 0;
10122 }
10123 
10124 static void hclge_rm_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id,
10125 				      bool is_write_tbl)
10126 {
10127 	struct hclge_vport_vlan_cfg *vlan, *tmp;
10128 	struct hclge_dev *hdev = vport->back;
10129 
10130 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
10131 		if (vlan->vlan_id == vlan_id) {
10132 			if (is_write_tbl && vlan->hd_tbl_status)
10133 				hclge_set_vlan_filter_hw(hdev,
10134 							 htons(ETH_P_8021Q),
10135 							 vport->vport_id,
10136 							 vlan_id,
10137 							 true);
10138 
10139 			list_del(&vlan->node);
10140 			kfree(vlan);
10141 			break;
10142 		}
10143 	}
10144 }
10145 
10146 void hclge_rm_vport_all_vlan_table(struct hclge_vport *vport, bool is_del_list)
10147 {
10148 	struct hclge_vport_vlan_cfg *vlan, *tmp;
10149 	struct hclge_dev *hdev = vport->back;
10150 
10151 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
10152 		if (vlan->hd_tbl_status)
10153 			hclge_set_vlan_filter_hw(hdev,
10154 						 htons(ETH_P_8021Q),
10155 						 vport->vport_id,
10156 						 vlan->vlan_id,
10157 						 true);
10158 
10159 		vlan->hd_tbl_status = false;
10160 		if (is_del_list) {
10161 			list_del(&vlan->node);
10162 			kfree(vlan);
10163 		}
10164 	}
10165 	clear_bit(vport->vport_id, hdev->vf_vlan_full);
10166 }
10167 
10168 void hclge_uninit_vport_vlan_table(struct hclge_dev *hdev)
10169 {
10170 	struct hclge_vport_vlan_cfg *vlan, *tmp;
10171 	struct hclge_vport *vport;
10172 	int i;
10173 
10174 	for (i = 0; i < hdev->num_alloc_vport; i++) {
10175 		vport = &hdev->vport[i];
10176 		list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
10177 			list_del(&vlan->node);
10178 			kfree(vlan);
10179 		}
10180 	}
10181 }
10182 
10183 void hclge_restore_vport_vlan_table(struct hclge_vport *vport)
10184 {
10185 	struct hclge_vport_vlan_cfg *vlan, *tmp;
10186 	struct hclge_dev *hdev = vport->back;
10187 	u16 vlan_proto;
10188 	u16 vlan_id;
10189 	u16 state;
10190 	int ret;
10191 
10192 	vlan_proto = vport->port_base_vlan_cfg.vlan_info.vlan_proto;
10193 	vlan_id = vport->port_base_vlan_cfg.vlan_info.vlan_tag;
10194 	state = vport->port_base_vlan_cfg.state;
10195 
10196 	if (state != HNAE3_PORT_BASE_VLAN_DISABLE) {
10197 		clear_bit(vport->vport_id, hdev->vlan_table[vlan_id]);
10198 		hclge_set_vlan_filter_hw(hdev, htons(vlan_proto),
10199 					 vport->vport_id, vlan_id,
10200 					 false);
10201 		return;
10202 	}
10203 
10204 	list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
10205 		ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
10206 					       vport->vport_id,
10207 					       vlan->vlan_id, false);
10208 		if (ret)
10209 			break;
10210 		vlan->hd_tbl_status = true;
10211 	}
10212 }
10213 
10214 /* For global reset and imp reset, hardware will clear the mac table,
10215  * so we change the mac address state from ACTIVE to TO_ADD, then they
10216  * can be restored in the service task after reset complete. Furtherly,
10217  * the mac addresses with state TO_DEL or DEL_FAIL are unnecessary to
10218  * be restored after reset, so just remove these mac nodes from mac_list.
10219  */
10220 static void hclge_mac_node_convert_for_reset(struct list_head *list)
10221 {
10222 	struct hclge_mac_node *mac_node, *tmp;
10223 
10224 	list_for_each_entry_safe(mac_node, tmp, list, node) {
10225 		if (mac_node->state == HCLGE_MAC_ACTIVE) {
10226 			mac_node->state = HCLGE_MAC_TO_ADD;
10227 		} else if (mac_node->state == HCLGE_MAC_TO_DEL) {
10228 			list_del(&mac_node->node);
10229 			kfree(mac_node);
10230 		}
10231 	}
10232 }
10233 
10234 void hclge_restore_mac_table_common(struct hclge_vport *vport)
10235 {
10236 	spin_lock_bh(&vport->mac_list_lock);
10237 
10238 	hclge_mac_node_convert_for_reset(&vport->uc_mac_list);
10239 	hclge_mac_node_convert_for_reset(&vport->mc_mac_list);
10240 	set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state);
10241 
10242 	spin_unlock_bh(&vport->mac_list_lock);
10243 }
10244 
10245 static void hclge_restore_hw_table(struct hclge_dev *hdev)
10246 {
10247 	struct hclge_vport *vport = &hdev->vport[0];
10248 	struct hnae3_handle *handle = &vport->nic;
10249 
10250 	hclge_restore_mac_table_common(vport);
10251 	hclge_restore_vport_vlan_table(vport);
10252 	set_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state);
10253 	hclge_restore_fd_entries(handle);
10254 }
10255 
10256 int hclge_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable)
10257 {
10258 	struct hclge_vport *vport = hclge_get_vport(handle);
10259 
10260 	if (vport->port_base_vlan_cfg.state == HNAE3_PORT_BASE_VLAN_DISABLE) {
10261 		vport->rxvlan_cfg.strip_tag1_en = false;
10262 		vport->rxvlan_cfg.strip_tag2_en = enable;
10263 		vport->rxvlan_cfg.strip_tag2_discard_en = false;
10264 	} else {
10265 		vport->rxvlan_cfg.strip_tag1_en = enable;
10266 		vport->rxvlan_cfg.strip_tag2_en = true;
10267 		vport->rxvlan_cfg.strip_tag2_discard_en = true;
10268 	}
10269 
10270 	vport->rxvlan_cfg.strip_tag1_discard_en = false;
10271 	vport->rxvlan_cfg.vlan1_vlan_prionly = false;
10272 	vport->rxvlan_cfg.vlan2_vlan_prionly = false;
10273 	vport->rxvlan_cfg.rx_vlan_offload_en = enable;
10274 
10275 	return hclge_set_vlan_rx_offload_cfg(vport);
10276 }
10277 
10278 static void hclge_set_vport_vlan_fltr_change(struct hclge_vport *vport)
10279 {
10280 	struct hclge_dev *hdev = vport->back;
10281 
10282 	if (test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, hdev->ae_dev->caps))
10283 		set_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE, &vport->state);
10284 }
10285 
10286 static int hclge_update_vlan_filter_entries(struct hclge_vport *vport,
10287 					    u16 port_base_vlan_state,
10288 					    struct hclge_vlan_info *new_info,
10289 					    struct hclge_vlan_info *old_info)
10290 {
10291 	struct hclge_dev *hdev = vport->back;
10292 	int ret;
10293 
10294 	if (port_base_vlan_state == HNAE3_PORT_BASE_VLAN_ENABLE) {
10295 		hclge_rm_vport_all_vlan_table(vport, false);
10296 		/* force clear VLAN 0 */
10297 		ret = hclge_set_vf_vlan_common(hdev, vport->vport_id, true, 0);
10298 		if (ret)
10299 			return ret;
10300 		return hclge_set_vlan_filter_hw(hdev,
10301 						 htons(new_info->vlan_proto),
10302 						 vport->vport_id,
10303 						 new_info->vlan_tag,
10304 						 false);
10305 	}
10306 
10307 	/* force add VLAN 0 */
10308 	ret = hclge_set_vf_vlan_common(hdev, vport->vport_id, false, 0);
10309 	if (ret)
10310 		return ret;
10311 
10312 	ret = hclge_set_vlan_filter_hw(hdev, htons(old_info->vlan_proto),
10313 				       vport->vport_id, old_info->vlan_tag,
10314 				       true);
10315 	if (ret)
10316 		return ret;
10317 
10318 	return hclge_add_vport_all_vlan_table(vport);
10319 }
10320 
10321 static bool hclge_need_update_vlan_filter(const struct hclge_vlan_info *new_cfg,
10322 					  const struct hclge_vlan_info *old_cfg)
10323 {
10324 	if (new_cfg->vlan_tag != old_cfg->vlan_tag)
10325 		return true;
10326 
10327 	if (new_cfg->vlan_tag == 0 && (new_cfg->qos == 0 || old_cfg->qos == 0))
10328 		return true;
10329 
10330 	return false;
10331 }
10332 
10333 int hclge_update_port_base_vlan_cfg(struct hclge_vport *vport, u16 state,
10334 				    struct hclge_vlan_info *vlan_info)
10335 {
10336 	struct hnae3_handle *nic = &vport->nic;
10337 	struct hclge_vlan_info *old_vlan_info;
10338 	struct hclge_dev *hdev = vport->back;
10339 	int ret;
10340 
10341 	old_vlan_info = &vport->port_base_vlan_cfg.vlan_info;
10342 
10343 	ret = hclge_vlan_offload_cfg(vport, state, vlan_info->vlan_tag,
10344 				     vlan_info->qos);
10345 	if (ret)
10346 		return ret;
10347 
10348 	if (!hclge_need_update_vlan_filter(vlan_info, old_vlan_info))
10349 		goto out;
10350 
10351 	if (state == HNAE3_PORT_BASE_VLAN_MODIFY) {
10352 		/* add new VLAN tag */
10353 		ret = hclge_set_vlan_filter_hw(hdev,
10354 					       htons(vlan_info->vlan_proto),
10355 					       vport->vport_id,
10356 					       vlan_info->vlan_tag,
10357 					       false);
10358 		if (ret)
10359 			return ret;
10360 
10361 		/* remove old VLAN tag */
10362 		if (old_vlan_info->vlan_tag == 0)
10363 			ret = hclge_set_vf_vlan_common(hdev, vport->vport_id,
10364 						       true, 0);
10365 		else
10366 			ret = hclge_set_vlan_filter_hw(hdev,
10367 						       htons(ETH_P_8021Q),
10368 						       vport->vport_id,
10369 						       old_vlan_info->vlan_tag,
10370 						       true);
10371 		if (ret) {
10372 			dev_err(&hdev->pdev->dev,
10373 				"failed to clear vport%u port base vlan %u, ret = %d.\n",
10374 				vport->vport_id, old_vlan_info->vlan_tag, ret);
10375 			return ret;
10376 		}
10377 
10378 		goto out;
10379 	}
10380 
10381 	ret = hclge_update_vlan_filter_entries(vport, state, vlan_info,
10382 					       old_vlan_info);
10383 	if (ret)
10384 		return ret;
10385 
10386 out:
10387 	vport->port_base_vlan_cfg.state = state;
10388 	if (state == HNAE3_PORT_BASE_VLAN_DISABLE)
10389 		nic->port_base_vlan_state = HNAE3_PORT_BASE_VLAN_DISABLE;
10390 	else
10391 		nic->port_base_vlan_state = HNAE3_PORT_BASE_VLAN_ENABLE;
10392 
10393 	vport->port_base_vlan_cfg.vlan_info = *vlan_info;
10394 	hclge_set_vport_vlan_fltr_change(vport);
10395 
10396 	return 0;
10397 }
10398 
10399 static u16 hclge_get_port_base_vlan_state(struct hclge_vport *vport,
10400 					  enum hnae3_port_base_vlan_state state,
10401 					  u16 vlan, u8 qos)
10402 {
10403 	if (state == HNAE3_PORT_BASE_VLAN_DISABLE) {
10404 		if (!vlan && !qos)
10405 			return HNAE3_PORT_BASE_VLAN_NOCHANGE;
10406 
10407 		return HNAE3_PORT_BASE_VLAN_ENABLE;
10408 	}
10409 
10410 	if (!vlan && !qos)
10411 		return HNAE3_PORT_BASE_VLAN_DISABLE;
10412 
10413 	if (vport->port_base_vlan_cfg.vlan_info.vlan_tag == vlan &&
10414 	    vport->port_base_vlan_cfg.vlan_info.qos == qos)
10415 		return HNAE3_PORT_BASE_VLAN_NOCHANGE;
10416 
10417 	return HNAE3_PORT_BASE_VLAN_MODIFY;
10418 }
10419 
10420 static int hclge_set_vf_vlan_filter(struct hnae3_handle *handle, int vfid,
10421 				    u16 vlan, u8 qos, __be16 proto)
10422 {
10423 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev);
10424 	struct hclge_vport *vport = hclge_get_vport(handle);
10425 	struct hclge_dev *hdev = vport->back;
10426 	struct hclge_vlan_info vlan_info;
10427 	u16 state;
10428 	int ret;
10429 
10430 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
10431 		return -EOPNOTSUPP;
10432 
10433 	vport = hclge_get_vf_vport(hdev, vfid);
10434 	if (!vport)
10435 		return -EINVAL;
10436 
10437 	/* qos is a 3 bits value, so can not be bigger than 7 */
10438 	if (vlan > VLAN_N_VID - 1 || qos > 7)
10439 		return -EINVAL;
10440 	if (proto != htons(ETH_P_8021Q))
10441 		return -EPROTONOSUPPORT;
10442 
10443 	state = hclge_get_port_base_vlan_state(vport,
10444 					       vport->port_base_vlan_cfg.state,
10445 					       vlan, qos);
10446 	if (state == HNAE3_PORT_BASE_VLAN_NOCHANGE)
10447 		return 0;
10448 
10449 	vlan_info.vlan_tag = vlan;
10450 	vlan_info.qos = qos;
10451 	vlan_info.vlan_proto = ntohs(proto);
10452 
10453 	ret = hclge_update_port_base_vlan_cfg(vport, state, &vlan_info);
10454 	if (ret) {
10455 		dev_err(&hdev->pdev->dev,
10456 			"failed to update port base vlan for vf %d, ret = %d\n",
10457 			vfid, ret);
10458 		return ret;
10459 	}
10460 
10461 	/* for DEVICE_VERSION_V3, vf doesn't need to know about the port based
10462 	 * VLAN state.
10463 	 */
10464 	if (ae_dev->dev_version < HNAE3_DEVICE_VERSION_V3 &&
10465 	    test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state))
10466 		hclge_push_vf_port_base_vlan_info(&hdev->vport[0],
10467 						  vport->vport_id, state,
10468 						  &vlan_info);
10469 
10470 	return 0;
10471 }
10472 
10473 static void hclge_clear_vf_vlan(struct hclge_dev *hdev)
10474 {
10475 	struct hclge_vlan_info *vlan_info;
10476 	struct hclge_vport *vport;
10477 	int ret;
10478 	int vf;
10479 
10480 	/* clear port base vlan for all vf */
10481 	for (vf = HCLGE_VF_VPORT_START_NUM; vf < hdev->num_alloc_vport; vf++) {
10482 		vport = &hdev->vport[vf];
10483 		vlan_info = &vport->port_base_vlan_cfg.vlan_info;
10484 
10485 		ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
10486 					       vport->vport_id,
10487 					       vlan_info->vlan_tag, true);
10488 		if (ret)
10489 			dev_err(&hdev->pdev->dev,
10490 				"failed to clear vf vlan for vf%d, ret = %d\n",
10491 				vf - HCLGE_VF_VPORT_START_NUM, ret);
10492 	}
10493 }
10494 
10495 int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,
10496 			  u16 vlan_id, bool is_kill)
10497 {
10498 	struct hclge_vport *vport = hclge_get_vport(handle);
10499 	struct hclge_dev *hdev = vport->back;
10500 	bool writen_to_tbl = false;
10501 	int ret = 0;
10502 
10503 	/* When device is resetting or reset failed, firmware is unable to
10504 	 * handle mailbox. Just record the vlan id, and remove it after
10505 	 * reset finished.
10506 	 */
10507 	if ((test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) ||
10508 	     test_bit(HCLGE_STATE_RST_FAIL, &hdev->state)) && is_kill) {
10509 		set_bit(vlan_id, vport->vlan_del_fail_bmap);
10510 		return -EBUSY;
10511 	}
10512 
10513 	/* when port base vlan enabled, we use port base vlan as the vlan
10514 	 * filter entry. In this case, we don't update vlan filter table
10515 	 * when user add new vlan or remove exist vlan, just update the vport
10516 	 * vlan list. The vlan id in vlan list will be writen in vlan filter
10517 	 * table until port base vlan disabled
10518 	 */
10519 	if (handle->port_base_vlan_state == HNAE3_PORT_BASE_VLAN_DISABLE) {
10520 		ret = hclge_set_vlan_filter_hw(hdev, proto, vport->vport_id,
10521 					       vlan_id, is_kill);
10522 		writen_to_tbl = true;
10523 	}
10524 
10525 	if (!ret) {
10526 		if (is_kill)
10527 			hclge_rm_vport_vlan_table(vport, vlan_id, false);
10528 		else
10529 			hclge_add_vport_vlan_table(vport, vlan_id,
10530 						   writen_to_tbl);
10531 	} else if (is_kill) {
10532 		/* when remove hw vlan filter failed, record the vlan id,
10533 		 * and try to remove it from hw later, to be consistence
10534 		 * with stack
10535 		 */
10536 		set_bit(vlan_id, vport->vlan_del_fail_bmap);
10537 	}
10538 
10539 	hclge_set_vport_vlan_fltr_change(vport);
10540 
10541 	return ret;
10542 }
10543 
10544 static void hclge_sync_vlan_fltr_state(struct hclge_dev *hdev)
10545 {
10546 	struct hclge_vport *vport;
10547 	int ret;
10548 	u16 i;
10549 
10550 	for (i = 0; i < hdev->num_alloc_vport; i++) {
10551 		vport = &hdev->vport[i];
10552 		if (!test_and_clear_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE,
10553 					&vport->state))
10554 			continue;
10555 
10556 		ret = hclge_enable_vport_vlan_filter(vport,
10557 						     vport->req_vlan_fltr_en);
10558 		if (ret) {
10559 			dev_err(&hdev->pdev->dev,
10560 				"failed to sync vlan filter state for vport%u, ret = %d\n",
10561 				vport->vport_id, ret);
10562 			set_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE,
10563 				&vport->state);
10564 			return;
10565 		}
10566 	}
10567 }
10568 
10569 static void hclge_sync_vlan_filter(struct hclge_dev *hdev)
10570 {
10571 #define HCLGE_MAX_SYNC_COUNT	60
10572 
10573 	int i, ret, sync_cnt = 0;
10574 	u16 vlan_id;
10575 
10576 	/* start from vport 1 for PF is always alive */
10577 	for (i = 0; i < hdev->num_alloc_vport; i++) {
10578 		struct hclge_vport *vport = &hdev->vport[i];
10579 
10580 		vlan_id = find_first_bit(vport->vlan_del_fail_bmap,
10581 					 VLAN_N_VID);
10582 		while (vlan_id != VLAN_N_VID) {
10583 			ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
10584 						       vport->vport_id, vlan_id,
10585 						       true);
10586 			if (ret && ret != -EINVAL)
10587 				return;
10588 
10589 			clear_bit(vlan_id, vport->vlan_del_fail_bmap);
10590 			hclge_rm_vport_vlan_table(vport, vlan_id, false);
10591 			hclge_set_vport_vlan_fltr_change(vport);
10592 
10593 			sync_cnt++;
10594 			if (sync_cnt >= HCLGE_MAX_SYNC_COUNT)
10595 				return;
10596 
10597 			vlan_id = find_first_bit(vport->vlan_del_fail_bmap,
10598 						 VLAN_N_VID);
10599 		}
10600 	}
10601 
10602 	hclge_sync_vlan_fltr_state(hdev);
10603 }
10604 
10605 static int hclge_set_mac_mtu(struct hclge_dev *hdev, int new_mps)
10606 {
10607 	struct hclge_config_max_frm_size_cmd *req;
10608 	struct hclge_desc desc;
10609 
10610 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_MAX_FRM_SIZE, false);
10611 
10612 	req = (struct hclge_config_max_frm_size_cmd *)desc.data;
10613 	req->max_frm_size = cpu_to_le16(new_mps);
10614 	req->min_frm_size = HCLGE_MAC_MIN_FRAME;
10615 
10616 	return hclge_cmd_send(&hdev->hw, &desc, 1);
10617 }
10618 
10619 static int hclge_set_mtu(struct hnae3_handle *handle, int new_mtu)
10620 {
10621 	struct hclge_vport *vport = hclge_get_vport(handle);
10622 
10623 	return hclge_set_vport_mtu(vport, new_mtu);
10624 }
10625 
10626 int hclge_set_vport_mtu(struct hclge_vport *vport, int new_mtu)
10627 {
10628 	struct hclge_dev *hdev = vport->back;
10629 	int i, max_frm_size, ret;
10630 
10631 	/* HW supprt 2 layer vlan */
10632 	max_frm_size = new_mtu + ETH_HLEN + ETH_FCS_LEN + 2 * VLAN_HLEN;
10633 	if (max_frm_size < HCLGE_MAC_MIN_FRAME ||
10634 	    max_frm_size > hdev->ae_dev->dev_specs.max_frm_size)
10635 		return -EINVAL;
10636 
10637 	max_frm_size = max(max_frm_size, HCLGE_MAC_DEFAULT_FRAME);
10638 	mutex_lock(&hdev->vport_lock);
10639 	/* VF's mps must fit within hdev->mps */
10640 	if (vport->vport_id && max_frm_size > hdev->mps) {
10641 		mutex_unlock(&hdev->vport_lock);
10642 		return -EINVAL;
10643 	} else if (vport->vport_id) {
10644 		vport->mps = max_frm_size;
10645 		mutex_unlock(&hdev->vport_lock);
10646 		return 0;
10647 	}
10648 
10649 	/* PF's mps must be greater then VF's mps */
10650 	for (i = 1; i < hdev->num_alloc_vport; i++)
10651 		if (max_frm_size < hdev->vport[i].mps) {
10652 			mutex_unlock(&hdev->vport_lock);
10653 			return -EINVAL;
10654 		}
10655 
10656 	hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
10657 
10658 	ret = hclge_set_mac_mtu(hdev, max_frm_size);
10659 	if (ret) {
10660 		dev_err(&hdev->pdev->dev,
10661 			"Change mtu fail, ret =%d\n", ret);
10662 		goto out;
10663 	}
10664 
10665 	hdev->mps = max_frm_size;
10666 	vport->mps = max_frm_size;
10667 
10668 	ret = hclge_buffer_alloc(hdev);
10669 	if (ret)
10670 		dev_err(&hdev->pdev->dev,
10671 			"Allocate buffer fail, ret =%d\n", ret);
10672 
10673 out:
10674 	hclge_notify_client(hdev, HNAE3_UP_CLIENT);
10675 	mutex_unlock(&hdev->vport_lock);
10676 	return ret;
10677 }
10678 
10679 static int hclge_reset_tqp_cmd_send(struct hclge_dev *hdev, u16 queue_id,
10680 				    bool enable)
10681 {
10682 	struct hclge_reset_tqp_queue_cmd *req;
10683 	struct hclge_desc desc;
10684 	int ret;
10685 
10686 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RESET_TQP_QUEUE, false);
10687 
10688 	req = (struct hclge_reset_tqp_queue_cmd *)desc.data;
10689 	req->tqp_id = cpu_to_le16(queue_id);
10690 	if (enable)
10691 		hnae3_set_bit(req->reset_req, HCLGE_TQP_RESET_B, 1U);
10692 
10693 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
10694 	if (ret) {
10695 		dev_err(&hdev->pdev->dev,
10696 			"Send tqp reset cmd error, status =%d\n", ret);
10697 		return ret;
10698 	}
10699 
10700 	return 0;
10701 }
10702 
10703 static int hclge_get_reset_status(struct hclge_dev *hdev, u16 queue_id)
10704 {
10705 	struct hclge_reset_tqp_queue_cmd *req;
10706 	struct hclge_desc desc;
10707 	int ret;
10708 
10709 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RESET_TQP_QUEUE, true);
10710 
10711 	req = (struct hclge_reset_tqp_queue_cmd *)desc.data;
10712 	req->tqp_id = cpu_to_le16(queue_id);
10713 
10714 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
10715 	if (ret) {
10716 		dev_err(&hdev->pdev->dev,
10717 			"Get reset status error, status =%d\n", ret);
10718 		return ret;
10719 	}
10720 
10721 	return hnae3_get_bit(req->ready_to_reset, HCLGE_TQP_RESET_B);
10722 }
10723 
10724 u16 hclge_covert_handle_qid_global(struct hnae3_handle *handle, u16 queue_id)
10725 {
10726 	struct hnae3_queue *queue;
10727 	struct hclge_tqp *tqp;
10728 
10729 	queue = handle->kinfo.tqp[queue_id];
10730 	tqp = container_of(queue, struct hclge_tqp, q);
10731 
10732 	return tqp->index;
10733 }
10734 
10735 static int hclge_reset_tqp_cmd(struct hnae3_handle *handle)
10736 {
10737 	struct hclge_vport *vport = hclge_get_vport(handle);
10738 	struct hclge_dev *hdev = vport->back;
10739 	u16 reset_try_times = 0;
10740 	int reset_status;
10741 	u16 queue_gid;
10742 	int ret;
10743 	u16 i;
10744 
10745 	for (i = 0; i < handle->kinfo.num_tqps; i++) {
10746 		queue_gid = hclge_covert_handle_qid_global(handle, i);
10747 		ret = hclge_reset_tqp_cmd_send(hdev, queue_gid, true);
10748 		if (ret) {
10749 			dev_err(&hdev->pdev->dev,
10750 				"failed to send reset tqp cmd, ret = %d\n",
10751 				ret);
10752 			return ret;
10753 		}
10754 
10755 		while (reset_try_times++ < HCLGE_TQP_RESET_TRY_TIMES) {
10756 			reset_status = hclge_get_reset_status(hdev, queue_gid);
10757 			if (reset_status)
10758 				break;
10759 
10760 			/* Wait for tqp hw reset */
10761 			usleep_range(1000, 1200);
10762 		}
10763 
10764 		if (reset_try_times >= HCLGE_TQP_RESET_TRY_TIMES) {
10765 			dev_err(&hdev->pdev->dev,
10766 				"wait for tqp hw reset timeout\n");
10767 			return -ETIME;
10768 		}
10769 
10770 		ret = hclge_reset_tqp_cmd_send(hdev, queue_gid, false);
10771 		if (ret) {
10772 			dev_err(&hdev->pdev->dev,
10773 				"failed to deassert soft reset, ret = %d\n",
10774 				ret);
10775 			return ret;
10776 		}
10777 		reset_try_times = 0;
10778 	}
10779 	return 0;
10780 }
10781 
10782 static int hclge_reset_rcb(struct hnae3_handle *handle)
10783 {
10784 #define HCLGE_RESET_RCB_NOT_SUPPORT	0U
10785 #define HCLGE_RESET_RCB_SUCCESS		1U
10786 
10787 	struct hclge_vport *vport = hclge_get_vport(handle);
10788 	struct hclge_dev *hdev = vport->back;
10789 	struct hclge_reset_cmd *req;
10790 	struct hclge_desc desc;
10791 	u8 return_status;
10792 	u16 queue_gid;
10793 	int ret;
10794 
10795 	queue_gid = hclge_covert_handle_qid_global(handle, 0);
10796 
10797 	req = (struct hclge_reset_cmd *)desc.data;
10798 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_RST_TRIGGER, false);
10799 	hnae3_set_bit(req->fun_reset_rcb, HCLGE_CFG_RESET_RCB_B, 1);
10800 	req->fun_reset_rcb_vqid_start = cpu_to_le16(queue_gid);
10801 	req->fun_reset_rcb_vqid_num = cpu_to_le16(handle->kinfo.num_tqps);
10802 
10803 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
10804 	if (ret) {
10805 		dev_err(&hdev->pdev->dev,
10806 			"failed to send rcb reset cmd, ret = %d\n", ret);
10807 		return ret;
10808 	}
10809 
10810 	return_status = req->fun_reset_rcb_return_status;
10811 	if (return_status == HCLGE_RESET_RCB_SUCCESS)
10812 		return 0;
10813 
10814 	if (return_status != HCLGE_RESET_RCB_NOT_SUPPORT) {
10815 		dev_err(&hdev->pdev->dev, "failed to reset rcb, ret = %u\n",
10816 			return_status);
10817 		return -EIO;
10818 	}
10819 
10820 	/* if reset rcb cmd is unsupported, we need to send reset tqp cmd
10821 	 * again to reset all tqps
10822 	 */
10823 	return hclge_reset_tqp_cmd(handle);
10824 }
10825 
10826 int hclge_reset_tqp(struct hnae3_handle *handle)
10827 {
10828 	struct hclge_vport *vport = hclge_get_vport(handle);
10829 	struct hclge_dev *hdev = vport->back;
10830 	int ret;
10831 
10832 	/* only need to disable PF's tqp */
10833 	if (!vport->vport_id) {
10834 		ret = hclge_tqp_enable(handle, false);
10835 		if (ret) {
10836 			dev_err(&hdev->pdev->dev,
10837 				"failed to disable tqp, ret = %d\n", ret);
10838 			return ret;
10839 		}
10840 	}
10841 
10842 	return hclge_reset_rcb(handle);
10843 }
10844 
10845 static u32 hclge_get_fw_version(struct hnae3_handle *handle)
10846 {
10847 	struct hclge_vport *vport = hclge_get_vport(handle);
10848 	struct hclge_dev *hdev = vport->back;
10849 
10850 	return hdev->fw_version;
10851 }
10852 
10853 static void hclge_set_flowctrl_adv(struct hclge_dev *hdev, u32 rx_en, u32 tx_en)
10854 {
10855 	struct phy_device *phydev = hdev->hw.mac.phydev;
10856 
10857 	if (!phydev)
10858 		return;
10859 
10860 	phy_set_asym_pause(phydev, rx_en, tx_en);
10861 }
10862 
10863 static int hclge_cfg_pauseparam(struct hclge_dev *hdev, u32 rx_en, u32 tx_en)
10864 {
10865 	int ret;
10866 
10867 	if (hdev->tm_info.fc_mode == HCLGE_FC_PFC)
10868 		return 0;
10869 
10870 	ret = hclge_mac_pause_en_cfg(hdev, tx_en, rx_en);
10871 	if (ret)
10872 		dev_err(&hdev->pdev->dev,
10873 			"configure pauseparam error, ret = %d.\n", ret);
10874 
10875 	return ret;
10876 }
10877 
10878 int hclge_cfg_flowctrl(struct hclge_dev *hdev)
10879 {
10880 	struct phy_device *phydev = hdev->hw.mac.phydev;
10881 	u16 remote_advertising = 0;
10882 	u16 local_advertising;
10883 	u32 rx_pause, tx_pause;
10884 	u8 flowctl;
10885 
10886 	if (!phydev->link || !phydev->autoneg)
10887 		return 0;
10888 
10889 	local_advertising = linkmode_adv_to_lcl_adv_t(phydev->advertising);
10890 
10891 	if (phydev->pause)
10892 		remote_advertising = LPA_PAUSE_CAP;
10893 
10894 	if (phydev->asym_pause)
10895 		remote_advertising |= LPA_PAUSE_ASYM;
10896 
10897 	flowctl = mii_resolve_flowctrl_fdx(local_advertising,
10898 					   remote_advertising);
10899 	tx_pause = flowctl & FLOW_CTRL_TX;
10900 	rx_pause = flowctl & FLOW_CTRL_RX;
10901 
10902 	if (phydev->duplex == HCLGE_MAC_HALF) {
10903 		tx_pause = 0;
10904 		rx_pause = 0;
10905 	}
10906 
10907 	return hclge_cfg_pauseparam(hdev, rx_pause, tx_pause);
10908 }
10909 
10910 static void hclge_get_pauseparam(struct hnae3_handle *handle, u32 *auto_neg,
10911 				 u32 *rx_en, u32 *tx_en)
10912 {
10913 	struct hclge_vport *vport = hclge_get_vport(handle);
10914 	struct hclge_dev *hdev = vport->back;
10915 	u8 media_type = hdev->hw.mac.media_type;
10916 
10917 	*auto_neg = (media_type == HNAE3_MEDIA_TYPE_COPPER) ?
10918 		    hclge_get_autoneg(handle) : 0;
10919 
10920 	if (hdev->tm_info.fc_mode == HCLGE_FC_PFC) {
10921 		*rx_en = 0;
10922 		*tx_en = 0;
10923 		return;
10924 	}
10925 
10926 	if (hdev->tm_info.fc_mode == HCLGE_FC_RX_PAUSE) {
10927 		*rx_en = 1;
10928 		*tx_en = 0;
10929 	} else if (hdev->tm_info.fc_mode == HCLGE_FC_TX_PAUSE) {
10930 		*tx_en = 1;
10931 		*rx_en = 0;
10932 	} else if (hdev->tm_info.fc_mode == HCLGE_FC_FULL) {
10933 		*rx_en = 1;
10934 		*tx_en = 1;
10935 	} else {
10936 		*rx_en = 0;
10937 		*tx_en = 0;
10938 	}
10939 }
10940 
10941 static void hclge_record_user_pauseparam(struct hclge_dev *hdev,
10942 					 u32 rx_en, u32 tx_en)
10943 {
10944 	if (rx_en && tx_en)
10945 		hdev->fc_mode_last_time = HCLGE_FC_FULL;
10946 	else if (rx_en && !tx_en)
10947 		hdev->fc_mode_last_time = HCLGE_FC_RX_PAUSE;
10948 	else if (!rx_en && tx_en)
10949 		hdev->fc_mode_last_time = HCLGE_FC_TX_PAUSE;
10950 	else
10951 		hdev->fc_mode_last_time = HCLGE_FC_NONE;
10952 
10953 	hdev->tm_info.fc_mode = hdev->fc_mode_last_time;
10954 }
10955 
10956 static int hclge_set_pauseparam(struct hnae3_handle *handle, u32 auto_neg,
10957 				u32 rx_en, u32 tx_en)
10958 {
10959 	struct hclge_vport *vport = hclge_get_vport(handle);
10960 	struct hclge_dev *hdev = vport->back;
10961 	struct phy_device *phydev = hdev->hw.mac.phydev;
10962 	u32 fc_autoneg;
10963 
10964 	if (phydev || hnae3_dev_phy_imp_supported(hdev)) {
10965 		fc_autoneg = hclge_get_autoneg(handle);
10966 		if (auto_neg != fc_autoneg) {
10967 			dev_info(&hdev->pdev->dev,
10968 				 "To change autoneg please use: ethtool -s <dev> autoneg <on|off>\n");
10969 			return -EOPNOTSUPP;
10970 		}
10971 	}
10972 
10973 	if (hdev->tm_info.fc_mode == HCLGE_FC_PFC) {
10974 		dev_info(&hdev->pdev->dev,
10975 			 "Priority flow control enabled. Cannot set link flow control.\n");
10976 		return -EOPNOTSUPP;
10977 	}
10978 
10979 	hclge_set_flowctrl_adv(hdev, rx_en, tx_en);
10980 
10981 	hclge_record_user_pauseparam(hdev, rx_en, tx_en);
10982 
10983 	if (!auto_neg || hnae3_dev_phy_imp_supported(hdev))
10984 		return hclge_cfg_pauseparam(hdev, rx_en, tx_en);
10985 
10986 	if (phydev)
10987 		return phy_start_aneg(phydev);
10988 
10989 	return -EOPNOTSUPP;
10990 }
10991 
10992 static void hclge_get_ksettings_an_result(struct hnae3_handle *handle,
10993 					  u8 *auto_neg, u32 *speed, u8 *duplex)
10994 {
10995 	struct hclge_vport *vport = hclge_get_vport(handle);
10996 	struct hclge_dev *hdev = vport->back;
10997 
10998 	if (speed)
10999 		*speed = hdev->hw.mac.speed;
11000 	if (duplex)
11001 		*duplex = hdev->hw.mac.duplex;
11002 	if (auto_neg)
11003 		*auto_neg = hdev->hw.mac.autoneg;
11004 }
11005 
11006 static void hclge_get_media_type(struct hnae3_handle *handle, u8 *media_type,
11007 				 u8 *module_type)
11008 {
11009 	struct hclge_vport *vport = hclge_get_vport(handle);
11010 	struct hclge_dev *hdev = vport->back;
11011 
11012 	/* When nic is down, the service task is not running, doesn't update
11013 	 * the port information per second. Query the port information before
11014 	 * return the media type, ensure getting the correct media information.
11015 	 */
11016 	hclge_update_port_info(hdev);
11017 
11018 	if (media_type)
11019 		*media_type = hdev->hw.mac.media_type;
11020 
11021 	if (module_type)
11022 		*module_type = hdev->hw.mac.module_type;
11023 }
11024 
11025 static void hclge_get_mdix_mode(struct hnae3_handle *handle,
11026 				u8 *tp_mdix_ctrl, u8 *tp_mdix)
11027 {
11028 	struct hclge_vport *vport = hclge_get_vport(handle);
11029 	struct hclge_dev *hdev = vport->back;
11030 	struct phy_device *phydev = hdev->hw.mac.phydev;
11031 	int mdix_ctrl, mdix, is_resolved;
11032 	unsigned int retval;
11033 
11034 	if (!phydev) {
11035 		*tp_mdix_ctrl = ETH_TP_MDI_INVALID;
11036 		*tp_mdix = ETH_TP_MDI_INVALID;
11037 		return;
11038 	}
11039 
11040 	phy_write(phydev, HCLGE_PHY_PAGE_REG, HCLGE_PHY_PAGE_MDIX);
11041 
11042 	retval = phy_read(phydev, HCLGE_PHY_CSC_REG);
11043 	mdix_ctrl = hnae3_get_field(retval, HCLGE_PHY_MDIX_CTRL_M,
11044 				    HCLGE_PHY_MDIX_CTRL_S);
11045 
11046 	retval = phy_read(phydev, HCLGE_PHY_CSS_REG);
11047 	mdix = hnae3_get_bit(retval, HCLGE_PHY_MDIX_STATUS_B);
11048 	is_resolved = hnae3_get_bit(retval, HCLGE_PHY_SPEED_DUP_RESOLVE_B);
11049 
11050 	phy_write(phydev, HCLGE_PHY_PAGE_REG, HCLGE_PHY_PAGE_COPPER);
11051 
11052 	switch (mdix_ctrl) {
11053 	case 0x0:
11054 		*tp_mdix_ctrl = ETH_TP_MDI;
11055 		break;
11056 	case 0x1:
11057 		*tp_mdix_ctrl = ETH_TP_MDI_X;
11058 		break;
11059 	case 0x3:
11060 		*tp_mdix_ctrl = ETH_TP_MDI_AUTO;
11061 		break;
11062 	default:
11063 		*tp_mdix_ctrl = ETH_TP_MDI_INVALID;
11064 		break;
11065 	}
11066 
11067 	if (!is_resolved)
11068 		*tp_mdix = ETH_TP_MDI_INVALID;
11069 	else if (mdix)
11070 		*tp_mdix = ETH_TP_MDI_X;
11071 	else
11072 		*tp_mdix = ETH_TP_MDI;
11073 }
11074 
11075 static void hclge_info_show(struct hclge_dev *hdev)
11076 {
11077 	struct device *dev = &hdev->pdev->dev;
11078 
11079 	dev_info(dev, "PF info begin:\n");
11080 
11081 	dev_info(dev, "Task queue pairs numbers: %u\n", hdev->num_tqps);
11082 	dev_info(dev, "Desc num per TX queue: %u\n", hdev->num_tx_desc);
11083 	dev_info(dev, "Desc num per RX queue: %u\n", hdev->num_rx_desc);
11084 	dev_info(dev, "Numbers of vports: %u\n", hdev->num_alloc_vport);
11085 	dev_info(dev, "Numbers of VF for this PF: %u\n", hdev->num_req_vfs);
11086 	dev_info(dev, "HW tc map: 0x%x\n", hdev->hw_tc_map);
11087 	dev_info(dev, "Total buffer size for TX/RX: %u\n", hdev->pkt_buf_size);
11088 	dev_info(dev, "TX buffer size for each TC: %u\n", hdev->tx_buf_size);
11089 	dev_info(dev, "DV buffer size for each TC: %u\n", hdev->dv_buf_size);
11090 	dev_info(dev, "This is %s PF\n",
11091 		 hdev->flag & HCLGE_FLAG_MAIN ? "main" : "not main");
11092 	dev_info(dev, "DCB %s\n",
11093 		 hdev->flag & HCLGE_FLAG_DCB_ENABLE ? "enable" : "disable");
11094 	dev_info(dev, "MQPRIO %s\n",
11095 		 hdev->flag & HCLGE_FLAG_MQPRIO_ENABLE ? "enable" : "disable");
11096 	dev_info(dev, "Default tx spare buffer size: %u\n",
11097 		 hdev->tx_spare_buf_size);
11098 
11099 	dev_info(dev, "PF info end.\n");
11100 }
11101 
11102 static int hclge_init_nic_client_instance(struct hnae3_ae_dev *ae_dev,
11103 					  struct hclge_vport *vport)
11104 {
11105 	struct hnae3_client *client = vport->nic.client;
11106 	struct hclge_dev *hdev = ae_dev->priv;
11107 	int rst_cnt = hdev->rst_stats.reset_cnt;
11108 	int ret;
11109 
11110 	ret = client->ops->init_instance(&vport->nic);
11111 	if (ret)
11112 		return ret;
11113 
11114 	set_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state);
11115 	if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) ||
11116 	    rst_cnt != hdev->rst_stats.reset_cnt) {
11117 		ret = -EBUSY;
11118 		goto init_nic_err;
11119 	}
11120 
11121 	/* Enable nic hw error interrupts */
11122 	ret = hclge_config_nic_hw_error(hdev, true);
11123 	if (ret) {
11124 		dev_err(&ae_dev->pdev->dev,
11125 			"fail(%d) to enable hw error interrupts\n", ret);
11126 		goto init_nic_err;
11127 	}
11128 
11129 	hnae3_set_client_init_flag(client, ae_dev, 1);
11130 
11131 	if (netif_msg_drv(&hdev->vport->nic))
11132 		hclge_info_show(hdev);
11133 
11134 	return ret;
11135 
11136 init_nic_err:
11137 	clear_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state);
11138 	while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
11139 		msleep(HCLGE_WAIT_RESET_DONE);
11140 
11141 	client->ops->uninit_instance(&vport->nic, 0);
11142 
11143 	return ret;
11144 }
11145 
11146 static int hclge_init_roce_client_instance(struct hnae3_ae_dev *ae_dev,
11147 					   struct hclge_vport *vport)
11148 {
11149 	struct hclge_dev *hdev = ae_dev->priv;
11150 	struct hnae3_client *client;
11151 	int rst_cnt;
11152 	int ret;
11153 
11154 	if (!hnae3_dev_roce_supported(hdev) || !hdev->roce_client ||
11155 	    !hdev->nic_client)
11156 		return 0;
11157 
11158 	client = hdev->roce_client;
11159 	ret = hclge_init_roce_base_info(vport);
11160 	if (ret)
11161 		return ret;
11162 
11163 	rst_cnt = hdev->rst_stats.reset_cnt;
11164 	ret = client->ops->init_instance(&vport->roce);
11165 	if (ret)
11166 		return ret;
11167 
11168 	set_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state);
11169 	if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) ||
11170 	    rst_cnt != hdev->rst_stats.reset_cnt) {
11171 		ret = -EBUSY;
11172 		goto init_roce_err;
11173 	}
11174 
11175 	/* Enable roce ras interrupts */
11176 	ret = hclge_config_rocee_ras_interrupt(hdev, true);
11177 	if (ret) {
11178 		dev_err(&ae_dev->pdev->dev,
11179 			"fail(%d) to enable roce ras interrupts\n", ret);
11180 		goto init_roce_err;
11181 	}
11182 
11183 	hnae3_set_client_init_flag(client, ae_dev, 1);
11184 
11185 	return 0;
11186 
11187 init_roce_err:
11188 	clear_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state);
11189 	while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
11190 		msleep(HCLGE_WAIT_RESET_DONE);
11191 
11192 	hdev->roce_client->ops->uninit_instance(&vport->roce, 0);
11193 
11194 	return ret;
11195 }
11196 
11197 static int hclge_init_client_instance(struct hnae3_client *client,
11198 				      struct hnae3_ae_dev *ae_dev)
11199 {
11200 	struct hclge_dev *hdev = ae_dev->priv;
11201 	struct hclge_vport *vport = &hdev->vport[0];
11202 	int ret;
11203 
11204 	switch (client->type) {
11205 	case HNAE3_CLIENT_KNIC:
11206 		hdev->nic_client = client;
11207 		vport->nic.client = client;
11208 		ret = hclge_init_nic_client_instance(ae_dev, vport);
11209 		if (ret)
11210 			goto clear_nic;
11211 
11212 		ret = hclge_init_roce_client_instance(ae_dev, vport);
11213 		if (ret)
11214 			goto clear_roce;
11215 
11216 		break;
11217 	case HNAE3_CLIENT_ROCE:
11218 		if (hnae3_dev_roce_supported(hdev)) {
11219 			hdev->roce_client = client;
11220 			vport->roce.client = client;
11221 		}
11222 
11223 		ret = hclge_init_roce_client_instance(ae_dev, vport);
11224 		if (ret)
11225 			goto clear_roce;
11226 
11227 		break;
11228 	default:
11229 		return -EINVAL;
11230 	}
11231 
11232 	return 0;
11233 
11234 clear_nic:
11235 	hdev->nic_client = NULL;
11236 	vport->nic.client = NULL;
11237 	return ret;
11238 clear_roce:
11239 	hdev->roce_client = NULL;
11240 	vport->roce.client = NULL;
11241 	return ret;
11242 }
11243 
11244 static void hclge_uninit_client_instance(struct hnae3_client *client,
11245 					 struct hnae3_ae_dev *ae_dev)
11246 {
11247 	struct hclge_dev *hdev = ae_dev->priv;
11248 	struct hclge_vport *vport = &hdev->vport[0];
11249 
11250 	if (hdev->roce_client) {
11251 		clear_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state);
11252 		while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
11253 			msleep(HCLGE_WAIT_RESET_DONE);
11254 
11255 		hdev->roce_client->ops->uninit_instance(&vport->roce, 0);
11256 		hdev->roce_client = NULL;
11257 		vport->roce.client = NULL;
11258 	}
11259 	if (client->type == HNAE3_CLIENT_ROCE)
11260 		return;
11261 	if (hdev->nic_client && client->ops->uninit_instance) {
11262 		clear_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state);
11263 		while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
11264 			msleep(HCLGE_WAIT_RESET_DONE);
11265 
11266 		client->ops->uninit_instance(&vport->nic, 0);
11267 		hdev->nic_client = NULL;
11268 		vport->nic.client = NULL;
11269 	}
11270 }
11271 
11272 static int hclge_dev_mem_map(struct hclge_dev *hdev)
11273 {
11274 #define HCLGE_MEM_BAR		4
11275 
11276 	struct pci_dev *pdev = hdev->pdev;
11277 	struct hclge_hw *hw = &hdev->hw;
11278 
11279 	/* for device does not have device memory, return directly */
11280 	if (!(pci_select_bars(pdev, IORESOURCE_MEM) & BIT(HCLGE_MEM_BAR)))
11281 		return 0;
11282 
11283 	hw->mem_base = devm_ioremap_wc(&pdev->dev,
11284 				       pci_resource_start(pdev, HCLGE_MEM_BAR),
11285 				       pci_resource_len(pdev, HCLGE_MEM_BAR));
11286 	if (!hw->mem_base) {
11287 		dev_err(&pdev->dev, "failed to map device memory\n");
11288 		return -EFAULT;
11289 	}
11290 
11291 	return 0;
11292 }
11293 
11294 static int hclge_pci_init(struct hclge_dev *hdev)
11295 {
11296 	struct pci_dev *pdev = hdev->pdev;
11297 	struct hclge_hw *hw;
11298 	int ret;
11299 
11300 	ret = pci_enable_device(pdev);
11301 	if (ret) {
11302 		dev_err(&pdev->dev, "failed to enable PCI device\n");
11303 		return ret;
11304 	}
11305 
11306 	ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
11307 	if (ret) {
11308 		ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
11309 		if (ret) {
11310 			dev_err(&pdev->dev,
11311 				"can't set consistent PCI DMA");
11312 			goto err_disable_device;
11313 		}
11314 		dev_warn(&pdev->dev, "set DMA mask to 32 bits\n");
11315 	}
11316 
11317 	ret = pci_request_regions(pdev, HCLGE_DRIVER_NAME);
11318 	if (ret) {
11319 		dev_err(&pdev->dev, "PCI request regions failed %d\n", ret);
11320 		goto err_disable_device;
11321 	}
11322 
11323 	pci_set_master(pdev);
11324 	hw = &hdev->hw;
11325 	hw->io_base = pcim_iomap(pdev, 2, 0);
11326 	if (!hw->io_base) {
11327 		dev_err(&pdev->dev, "Can't map configuration register space\n");
11328 		ret = -ENOMEM;
11329 		goto err_clr_master;
11330 	}
11331 
11332 	ret = hclge_dev_mem_map(hdev);
11333 	if (ret)
11334 		goto err_unmap_io_base;
11335 
11336 	hdev->num_req_vfs = pci_sriov_get_totalvfs(pdev);
11337 
11338 	return 0;
11339 
11340 err_unmap_io_base:
11341 	pcim_iounmap(pdev, hdev->hw.io_base);
11342 err_clr_master:
11343 	pci_clear_master(pdev);
11344 	pci_release_regions(pdev);
11345 err_disable_device:
11346 	pci_disable_device(pdev);
11347 
11348 	return ret;
11349 }
11350 
11351 static void hclge_pci_uninit(struct hclge_dev *hdev)
11352 {
11353 	struct pci_dev *pdev = hdev->pdev;
11354 
11355 	if (hdev->hw.mem_base)
11356 		devm_iounmap(&pdev->dev, hdev->hw.mem_base);
11357 
11358 	pcim_iounmap(pdev, hdev->hw.io_base);
11359 	pci_free_irq_vectors(pdev);
11360 	pci_clear_master(pdev);
11361 	pci_release_mem_regions(pdev);
11362 	pci_disable_device(pdev);
11363 }
11364 
11365 static void hclge_state_init(struct hclge_dev *hdev)
11366 {
11367 	set_bit(HCLGE_STATE_SERVICE_INITED, &hdev->state);
11368 	set_bit(HCLGE_STATE_DOWN, &hdev->state);
11369 	clear_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state);
11370 	clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
11371 	clear_bit(HCLGE_STATE_RST_FAIL, &hdev->state);
11372 	clear_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state);
11373 	clear_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state);
11374 }
11375 
11376 static void hclge_state_uninit(struct hclge_dev *hdev)
11377 {
11378 	set_bit(HCLGE_STATE_DOWN, &hdev->state);
11379 	set_bit(HCLGE_STATE_REMOVING, &hdev->state);
11380 
11381 	if (hdev->reset_timer.function)
11382 		del_timer_sync(&hdev->reset_timer);
11383 	if (hdev->service_task.work.func)
11384 		cancel_delayed_work_sync(&hdev->service_task);
11385 }
11386 
11387 static void hclge_reset_prepare_general(struct hnae3_ae_dev *ae_dev,
11388 					enum hnae3_reset_type rst_type)
11389 {
11390 #define HCLGE_RESET_RETRY_WAIT_MS	500
11391 #define HCLGE_RESET_RETRY_CNT	5
11392 
11393 	struct hclge_dev *hdev = ae_dev->priv;
11394 	int retry_cnt = 0;
11395 	int ret;
11396 
11397 retry:
11398 	down(&hdev->reset_sem);
11399 	set_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
11400 	hdev->reset_type = rst_type;
11401 	ret = hclge_reset_prepare(hdev);
11402 	if (ret || hdev->reset_pending) {
11403 		dev_err(&hdev->pdev->dev, "fail to prepare to reset, ret=%d\n",
11404 			ret);
11405 		if (hdev->reset_pending ||
11406 		    retry_cnt++ < HCLGE_RESET_RETRY_CNT) {
11407 			dev_err(&hdev->pdev->dev,
11408 				"reset_pending:0x%lx, retry_cnt:%d\n",
11409 				hdev->reset_pending, retry_cnt);
11410 			clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
11411 			up(&hdev->reset_sem);
11412 			msleep(HCLGE_RESET_RETRY_WAIT_MS);
11413 			goto retry;
11414 		}
11415 	}
11416 
11417 	/* disable misc vector before reset done */
11418 	hclge_enable_vector(&hdev->misc_vector, false);
11419 	set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state);
11420 
11421 	if (hdev->reset_type == HNAE3_FLR_RESET)
11422 		hdev->rst_stats.flr_rst_cnt++;
11423 }
11424 
11425 static void hclge_reset_done(struct hnae3_ae_dev *ae_dev)
11426 {
11427 	struct hclge_dev *hdev = ae_dev->priv;
11428 	int ret;
11429 
11430 	hclge_enable_vector(&hdev->misc_vector, true);
11431 
11432 	ret = hclge_reset_rebuild(hdev);
11433 	if (ret)
11434 		dev_err(&hdev->pdev->dev, "fail to rebuild, ret=%d\n", ret);
11435 
11436 	hdev->reset_type = HNAE3_NONE_RESET;
11437 	clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state);
11438 	up(&hdev->reset_sem);
11439 }
11440 
11441 static void hclge_clear_resetting_state(struct hclge_dev *hdev)
11442 {
11443 	u16 i;
11444 
11445 	for (i = 0; i < hdev->num_alloc_vport; i++) {
11446 		struct hclge_vport *vport = &hdev->vport[i];
11447 		int ret;
11448 
11449 		 /* Send cmd to clear VF's FUNC_RST_ING */
11450 		ret = hclge_set_vf_rst(hdev, vport->vport_id, false);
11451 		if (ret)
11452 			dev_warn(&hdev->pdev->dev,
11453 				 "clear vf(%u) rst failed %d!\n",
11454 				 vport->vport_id, ret);
11455 	}
11456 }
11457 
11458 static int hclge_clear_hw_resource(struct hclge_dev *hdev)
11459 {
11460 	struct hclge_desc desc;
11461 	int ret;
11462 
11463 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CLEAR_HW_RESOURCE, false);
11464 
11465 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
11466 	/* This new command is only supported by new firmware, it will
11467 	 * fail with older firmware. Error value -EOPNOSUPP can only be
11468 	 * returned by older firmware running this command, to keep code
11469 	 * backward compatible we will override this value and return
11470 	 * success.
11471 	 */
11472 	if (ret && ret != -EOPNOTSUPP) {
11473 		dev_err(&hdev->pdev->dev,
11474 			"failed to clear hw resource, ret = %d\n", ret);
11475 		return ret;
11476 	}
11477 	return 0;
11478 }
11479 
11480 static void hclge_init_rxd_adv_layout(struct hclge_dev *hdev)
11481 {
11482 	if (hnae3_ae_dev_rxd_adv_layout_supported(hdev->ae_dev))
11483 		hclge_write_dev(&hdev->hw, HCLGE_RXD_ADV_LAYOUT_EN_REG, 1);
11484 }
11485 
11486 static void hclge_uninit_rxd_adv_layout(struct hclge_dev *hdev)
11487 {
11488 	if (hnae3_ae_dev_rxd_adv_layout_supported(hdev->ae_dev))
11489 		hclge_write_dev(&hdev->hw, HCLGE_RXD_ADV_LAYOUT_EN_REG, 0);
11490 }
11491 
11492 static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
11493 {
11494 	struct pci_dev *pdev = ae_dev->pdev;
11495 	struct hclge_dev *hdev;
11496 	int ret;
11497 
11498 	hdev = devm_kzalloc(&pdev->dev, sizeof(*hdev), GFP_KERNEL);
11499 	if (!hdev)
11500 		return -ENOMEM;
11501 
11502 	hdev->pdev = pdev;
11503 	hdev->ae_dev = ae_dev;
11504 	hdev->reset_type = HNAE3_NONE_RESET;
11505 	hdev->reset_level = HNAE3_FUNC_RESET;
11506 	ae_dev->priv = hdev;
11507 
11508 	/* HW supprt 2 layer vlan */
11509 	hdev->mps = ETH_FRAME_LEN + ETH_FCS_LEN + 2 * VLAN_HLEN;
11510 
11511 	mutex_init(&hdev->vport_lock);
11512 	spin_lock_init(&hdev->fd_rule_lock);
11513 	sema_init(&hdev->reset_sem, 1);
11514 
11515 	ret = hclge_pci_init(hdev);
11516 	if (ret)
11517 		goto out;
11518 
11519 	ret = hclge_devlink_init(hdev);
11520 	if (ret)
11521 		goto err_pci_uninit;
11522 
11523 	/* Firmware command queue initialize */
11524 	ret = hclge_cmd_queue_init(hdev);
11525 	if (ret)
11526 		goto err_devlink_uninit;
11527 
11528 	/* Firmware command initialize */
11529 	ret = hclge_cmd_init(hdev);
11530 	if (ret)
11531 		goto err_cmd_uninit;
11532 
11533 	ret  = hclge_clear_hw_resource(hdev);
11534 	if (ret)
11535 		goto err_cmd_uninit;
11536 
11537 	ret = hclge_get_cap(hdev);
11538 	if (ret)
11539 		goto err_cmd_uninit;
11540 
11541 	ret = hclge_query_dev_specs(hdev);
11542 	if (ret) {
11543 		dev_err(&pdev->dev, "failed to query dev specifications, ret = %d.\n",
11544 			ret);
11545 		goto err_cmd_uninit;
11546 	}
11547 
11548 	ret = hclge_configure(hdev);
11549 	if (ret) {
11550 		dev_err(&pdev->dev, "Configure dev error, ret = %d.\n", ret);
11551 		goto err_cmd_uninit;
11552 	}
11553 
11554 	ret = hclge_init_msi(hdev);
11555 	if (ret) {
11556 		dev_err(&pdev->dev, "Init MSI/MSI-X error, ret = %d.\n", ret);
11557 		goto err_cmd_uninit;
11558 	}
11559 
11560 	ret = hclge_misc_irq_init(hdev);
11561 	if (ret)
11562 		goto err_msi_uninit;
11563 
11564 	ret = hclge_alloc_tqps(hdev);
11565 	if (ret) {
11566 		dev_err(&pdev->dev, "Allocate TQPs error, ret = %d.\n", ret);
11567 		goto err_msi_irq_uninit;
11568 	}
11569 
11570 	ret = hclge_alloc_vport(hdev);
11571 	if (ret)
11572 		goto err_msi_irq_uninit;
11573 
11574 	ret = hclge_map_tqp(hdev);
11575 	if (ret)
11576 		goto err_msi_irq_uninit;
11577 
11578 	if (hdev->hw.mac.media_type == HNAE3_MEDIA_TYPE_COPPER &&
11579 	    !hnae3_dev_phy_imp_supported(hdev)) {
11580 		ret = hclge_mac_mdio_config(hdev);
11581 		if (ret)
11582 			goto err_msi_irq_uninit;
11583 	}
11584 
11585 	ret = hclge_init_umv_space(hdev);
11586 	if (ret)
11587 		goto err_mdiobus_unreg;
11588 
11589 	ret = hclge_mac_init(hdev);
11590 	if (ret) {
11591 		dev_err(&pdev->dev, "Mac init error, ret = %d\n", ret);
11592 		goto err_mdiobus_unreg;
11593 	}
11594 
11595 	ret = hclge_config_tso(hdev, HCLGE_TSO_MSS_MIN, HCLGE_TSO_MSS_MAX);
11596 	if (ret) {
11597 		dev_err(&pdev->dev, "Enable tso fail, ret =%d\n", ret);
11598 		goto err_mdiobus_unreg;
11599 	}
11600 
11601 	ret = hclge_config_gro(hdev);
11602 	if (ret)
11603 		goto err_mdiobus_unreg;
11604 
11605 	ret = hclge_init_vlan_config(hdev);
11606 	if (ret) {
11607 		dev_err(&pdev->dev, "VLAN init fail, ret =%d\n", ret);
11608 		goto err_mdiobus_unreg;
11609 	}
11610 
11611 	ret = hclge_tm_schd_init(hdev);
11612 	if (ret) {
11613 		dev_err(&pdev->dev, "tm schd init fail, ret =%d\n", ret);
11614 		goto err_mdiobus_unreg;
11615 	}
11616 
11617 	ret = hclge_rss_init_cfg(hdev);
11618 	if (ret) {
11619 		dev_err(&pdev->dev, "failed to init rss cfg, ret = %d\n", ret);
11620 		goto err_mdiobus_unreg;
11621 	}
11622 
11623 	ret = hclge_rss_init_hw(hdev);
11624 	if (ret) {
11625 		dev_err(&pdev->dev, "Rss init fail, ret =%d\n", ret);
11626 		goto err_mdiobus_unreg;
11627 	}
11628 
11629 	ret = init_mgr_tbl(hdev);
11630 	if (ret) {
11631 		dev_err(&pdev->dev, "manager table init fail, ret =%d\n", ret);
11632 		goto err_mdiobus_unreg;
11633 	}
11634 
11635 	ret = hclge_init_fd_config(hdev);
11636 	if (ret) {
11637 		dev_err(&pdev->dev,
11638 			"fd table init fail, ret=%d\n", ret);
11639 		goto err_mdiobus_unreg;
11640 	}
11641 
11642 	ret = hclge_ptp_init(hdev);
11643 	if (ret)
11644 		goto err_mdiobus_unreg;
11645 
11646 	INIT_KFIFO(hdev->mac_tnl_log);
11647 
11648 	hclge_dcb_ops_set(hdev);
11649 
11650 	timer_setup(&hdev->reset_timer, hclge_reset_timer, 0);
11651 	INIT_DELAYED_WORK(&hdev->service_task, hclge_service_task);
11652 
11653 	/* Setup affinity after service timer setup because add_timer_on
11654 	 * is called in affinity notify.
11655 	 */
11656 	hclge_misc_affinity_setup(hdev);
11657 
11658 	hclge_clear_all_event_cause(hdev);
11659 	hclge_clear_resetting_state(hdev);
11660 
11661 	/* Log and clear the hw errors those already occurred */
11662 	if (hnae3_dev_ras_imp_supported(hdev))
11663 		hclge_handle_occurred_error(hdev);
11664 	else
11665 		hclge_handle_all_hns_hw_errors(ae_dev);
11666 
11667 	/* request delayed reset for the error recovery because an immediate
11668 	 * global reset on a PF affecting pending initialization of other PFs
11669 	 */
11670 	if (ae_dev->hw_err_reset_req) {
11671 		enum hnae3_reset_type reset_level;
11672 
11673 		reset_level = hclge_get_reset_level(ae_dev,
11674 						    &ae_dev->hw_err_reset_req);
11675 		hclge_set_def_reset_request(ae_dev, reset_level);
11676 		mod_timer(&hdev->reset_timer, jiffies + HCLGE_RESET_INTERVAL);
11677 	}
11678 
11679 	hclge_init_rxd_adv_layout(hdev);
11680 
11681 	/* Enable MISC vector(vector0) */
11682 	hclge_enable_vector(&hdev->misc_vector, true);
11683 
11684 	hclge_state_init(hdev);
11685 	hdev->last_reset_time = jiffies;
11686 
11687 	dev_info(&hdev->pdev->dev, "%s driver initialization finished.\n",
11688 		 HCLGE_DRIVER_NAME);
11689 
11690 	hclge_task_schedule(hdev, round_jiffies_relative(HZ));
11691 
11692 	return 0;
11693 
11694 err_mdiobus_unreg:
11695 	if (hdev->hw.mac.phydev)
11696 		mdiobus_unregister(hdev->hw.mac.mdio_bus);
11697 err_msi_irq_uninit:
11698 	hclge_misc_irq_uninit(hdev);
11699 err_msi_uninit:
11700 	pci_free_irq_vectors(pdev);
11701 err_cmd_uninit:
11702 	hclge_cmd_uninit(hdev);
11703 err_devlink_uninit:
11704 	hclge_devlink_uninit(hdev);
11705 err_pci_uninit:
11706 	pcim_iounmap(pdev, hdev->hw.io_base);
11707 	pci_clear_master(pdev);
11708 	pci_release_regions(pdev);
11709 	pci_disable_device(pdev);
11710 out:
11711 	mutex_destroy(&hdev->vport_lock);
11712 	return ret;
11713 }
11714 
11715 static void hclge_stats_clear(struct hclge_dev *hdev)
11716 {
11717 	memset(&hdev->mac_stats, 0, sizeof(hdev->mac_stats));
11718 }
11719 
11720 static int hclge_set_mac_spoofchk(struct hclge_dev *hdev, int vf, bool enable)
11721 {
11722 	return hclge_config_switch_param(hdev, vf, enable,
11723 					 HCLGE_SWITCH_ANTI_SPOOF_MASK);
11724 }
11725 
11726 static int hclge_set_vlan_spoofchk(struct hclge_dev *hdev, int vf, bool enable)
11727 {
11728 	return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF,
11729 					  HCLGE_FILTER_FE_NIC_INGRESS_B,
11730 					  enable, vf);
11731 }
11732 
11733 static int hclge_set_vf_spoofchk_hw(struct hclge_dev *hdev, int vf, bool enable)
11734 {
11735 	int ret;
11736 
11737 	ret = hclge_set_mac_spoofchk(hdev, vf, enable);
11738 	if (ret) {
11739 		dev_err(&hdev->pdev->dev,
11740 			"Set vf %d mac spoof check %s failed, ret=%d\n",
11741 			vf, enable ? "on" : "off", ret);
11742 		return ret;
11743 	}
11744 
11745 	ret = hclge_set_vlan_spoofchk(hdev, vf, enable);
11746 	if (ret)
11747 		dev_err(&hdev->pdev->dev,
11748 			"Set vf %d vlan spoof check %s failed, ret=%d\n",
11749 			vf, enable ? "on" : "off", ret);
11750 
11751 	return ret;
11752 }
11753 
11754 static int hclge_set_vf_spoofchk(struct hnae3_handle *handle, int vf,
11755 				 bool enable)
11756 {
11757 	struct hclge_vport *vport = hclge_get_vport(handle);
11758 	struct hclge_dev *hdev = vport->back;
11759 	u32 new_spoofchk = enable ? 1 : 0;
11760 	int ret;
11761 
11762 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
11763 		return -EOPNOTSUPP;
11764 
11765 	vport = hclge_get_vf_vport(hdev, vf);
11766 	if (!vport)
11767 		return -EINVAL;
11768 
11769 	if (vport->vf_info.spoofchk == new_spoofchk)
11770 		return 0;
11771 
11772 	if (enable && test_bit(vport->vport_id, hdev->vf_vlan_full))
11773 		dev_warn(&hdev->pdev->dev,
11774 			 "vf %d vlan table is full, enable spoof check may cause its packet send fail\n",
11775 			 vf);
11776 	else if (enable && hclge_is_umv_space_full(vport, true))
11777 		dev_warn(&hdev->pdev->dev,
11778 			 "vf %d mac table is full, enable spoof check may cause its packet send fail\n",
11779 			 vf);
11780 
11781 	ret = hclge_set_vf_spoofchk_hw(hdev, vport->vport_id, enable);
11782 	if (ret)
11783 		return ret;
11784 
11785 	vport->vf_info.spoofchk = new_spoofchk;
11786 	return 0;
11787 }
11788 
11789 static int hclge_reset_vport_spoofchk(struct hclge_dev *hdev)
11790 {
11791 	struct hclge_vport *vport = hdev->vport;
11792 	int ret;
11793 	int i;
11794 
11795 	if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
11796 		return 0;
11797 
11798 	/* resume the vf spoof check state after reset */
11799 	for (i = 0; i < hdev->num_alloc_vport; i++) {
11800 		ret = hclge_set_vf_spoofchk_hw(hdev, vport->vport_id,
11801 					       vport->vf_info.spoofchk);
11802 		if (ret)
11803 			return ret;
11804 
11805 		vport++;
11806 	}
11807 
11808 	return 0;
11809 }
11810 
11811 static int hclge_set_vf_trust(struct hnae3_handle *handle, int vf, bool enable)
11812 {
11813 	struct hclge_vport *vport = hclge_get_vport(handle);
11814 	struct hclge_dev *hdev = vport->back;
11815 	u32 new_trusted = enable ? 1 : 0;
11816 
11817 	vport = hclge_get_vf_vport(hdev, vf);
11818 	if (!vport)
11819 		return -EINVAL;
11820 
11821 	if (vport->vf_info.trusted == new_trusted)
11822 		return 0;
11823 
11824 	vport->vf_info.trusted = new_trusted;
11825 	set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state);
11826 	hclge_task_schedule(hdev, 0);
11827 
11828 	return 0;
11829 }
11830 
11831 static void hclge_reset_vf_rate(struct hclge_dev *hdev)
11832 {
11833 	int ret;
11834 	int vf;
11835 
11836 	/* reset vf rate to default value */
11837 	for (vf = HCLGE_VF_VPORT_START_NUM; vf < hdev->num_alloc_vport; vf++) {
11838 		struct hclge_vport *vport = &hdev->vport[vf];
11839 
11840 		vport->vf_info.max_tx_rate = 0;
11841 		ret = hclge_tm_qs_shaper_cfg(vport, vport->vf_info.max_tx_rate);
11842 		if (ret)
11843 			dev_err(&hdev->pdev->dev,
11844 				"vf%d failed to reset to default, ret=%d\n",
11845 				vf - HCLGE_VF_VPORT_START_NUM, ret);
11846 	}
11847 }
11848 
11849 static int hclge_vf_rate_param_check(struct hclge_dev *hdev,
11850 				     int min_tx_rate, int max_tx_rate)
11851 {
11852 	if (min_tx_rate != 0 ||
11853 	    max_tx_rate < 0 || max_tx_rate > hdev->hw.mac.max_speed) {
11854 		dev_err(&hdev->pdev->dev,
11855 			"min_tx_rate:%d [0], max_tx_rate:%d [0, %u]\n",
11856 			min_tx_rate, max_tx_rate, hdev->hw.mac.max_speed);
11857 		return -EINVAL;
11858 	}
11859 
11860 	return 0;
11861 }
11862 
11863 static int hclge_set_vf_rate(struct hnae3_handle *handle, int vf,
11864 			     int min_tx_rate, int max_tx_rate, bool force)
11865 {
11866 	struct hclge_vport *vport = hclge_get_vport(handle);
11867 	struct hclge_dev *hdev = vport->back;
11868 	int ret;
11869 
11870 	ret = hclge_vf_rate_param_check(hdev, min_tx_rate, max_tx_rate);
11871 	if (ret)
11872 		return ret;
11873 
11874 	vport = hclge_get_vf_vport(hdev, vf);
11875 	if (!vport)
11876 		return -EINVAL;
11877 
11878 	if (!force && max_tx_rate == vport->vf_info.max_tx_rate)
11879 		return 0;
11880 
11881 	ret = hclge_tm_qs_shaper_cfg(vport, max_tx_rate);
11882 	if (ret)
11883 		return ret;
11884 
11885 	vport->vf_info.max_tx_rate = max_tx_rate;
11886 
11887 	return 0;
11888 }
11889 
11890 static int hclge_resume_vf_rate(struct hclge_dev *hdev)
11891 {
11892 	struct hnae3_handle *handle = &hdev->vport->nic;
11893 	struct hclge_vport *vport;
11894 	int ret;
11895 	int vf;
11896 
11897 	/* resume the vf max_tx_rate after reset */
11898 	for (vf = 0; vf < pci_num_vf(hdev->pdev); vf++) {
11899 		vport = hclge_get_vf_vport(hdev, vf);
11900 		if (!vport)
11901 			return -EINVAL;
11902 
11903 		/* zero means max rate, after reset, firmware already set it to
11904 		 * max rate, so just continue.
11905 		 */
11906 		if (!vport->vf_info.max_tx_rate)
11907 			continue;
11908 
11909 		ret = hclge_set_vf_rate(handle, vf, 0,
11910 					vport->vf_info.max_tx_rate, true);
11911 		if (ret) {
11912 			dev_err(&hdev->pdev->dev,
11913 				"vf%d failed to resume tx_rate:%u, ret=%d\n",
11914 				vf, vport->vf_info.max_tx_rate, ret);
11915 			return ret;
11916 		}
11917 	}
11918 
11919 	return 0;
11920 }
11921 
11922 static void hclge_reset_vport_state(struct hclge_dev *hdev)
11923 {
11924 	struct hclge_vport *vport = hdev->vport;
11925 	int i;
11926 
11927 	for (i = 0; i < hdev->num_alloc_vport; i++) {
11928 		hclge_vport_stop(vport);
11929 		vport++;
11930 	}
11931 }
11932 
11933 static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev)
11934 {
11935 	struct hclge_dev *hdev = ae_dev->priv;
11936 	struct pci_dev *pdev = ae_dev->pdev;
11937 	int ret;
11938 
11939 	set_bit(HCLGE_STATE_DOWN, &hdev->state);
11940 
11941 	hclge_stats_clear(hdev);
11942 	/* NOTE: pf reset needn't to clear or restore pf and vf table entry.
11943 	 * so here should not clean table in memory.
11944 	 */
11945 	if (hdev->reset_type == HNAE3_IMP_RESET ||
11946 	    hdev->reset_type == HNAE3_GLOBAL_RESET) {
11947 		memset(hdev->vlan_table, 0, sizeof(hdev->vlan_table));
11948 		memset(hdev->vf_vlan_full, 0, sizeof(hdev->vf_vlan_full));
11949 		bitmap_set(hdev->vport_config_block, 0, hdev->num_alloc_vport);
11950 		hclge_reset_umv_space(hdev);
11951 	}
11952 
11953 	ret = hclge_cmd_init(hdev);
11954 	if (ret) {
11955 		dev_err(&pdev->dev, "Cmd queue init failed\n");
11956 		return ret;
11957 	}
11958 
11959 	ret = hclge_map_tqp(hdev);
11960 	if (ret) {
11961 		dev_err(&pdev->dev, "Map tqp error, ret = %d.\n", ret);
11962 		return ret;
11963 	}
11964 
11965 	ret = hclge_mac_init(hdev);
11966 	if (ret) {
11967 		dev_err(&pdev->dev, "Mac init error, ret = %d\n", ret);
11968 		return ret;
11969 	}
11970 
11971 	ret = hclge_tp_port_init(hdev);
11972 	if (ret) {
11973 		dev_err(&pdev->dev, "failed to init tp port, ret = %d\n",
11974 			ret);
11975 		return ret;
11976 	}
11977 
11978 	ret = hclge_config_tso(hdev, HCLGE_TSO_MSS_MIN, HCLGE_TSO_MSS_MAX);
11979 	if (ret) {
11980 		dev_err(&pdev->dev, "Enable tso fail, ret =%d\n", ret);
11981 		return ret;
11982 	}
11983 
11984 	ret = hclge_config_gro(hdev);
11985 	if (ret)
11986 		return ret;
11987 
11988 	ret = hclge_init_vlan_config(hdev);
11989 	if (ret) {
11990 		dev_err(&pdev->dev, "VLAN init fail, ret =%d\n", ret);
11991 		return ret;
11992 	}
11993 
11994 	ret = hclge_tm_init_hw(hdev, true);
11995 	if (ret) {
11996 		dev_err(&pdev->dev, "tm init hw fail, ret =%d\n", ret);
11997 		return ret;
11998 	}
11999 
12000 	ret = hclge_rss_init_hw(hdev);
12001 	if (ret) {
12002 		dev_err(&pdev->dev, "Rss init fail, ret =%d\n", ret);
12003 		return ret;
12004 	}
12005 
12006 	ret = init_mgr_tbl(hdev);
12007 	if (ret) {
12008 		dev_err(&pdev->dev,
12009 			"failed to reinit manager table, ret = %d\n", ret);
12010 		return ret;
12011 	}
12012 
12013 	ret = hclge_init_fd_config(hdev);
12014 	if (ret) {
12015 		dev_err(&pdev->dev, "fd table init fail, ret=%d\n", ret);
12016 		return ret;
12017 	}
12018 
12019 	ret = hclge_ptp_init(hdev);
12020 	if (ret)
12021 		return ret;
12022 
12023 	/* Log and clear the hw errors those already occurred */
12024 	if (hnae3_dev_ras_imp_supported(hdev))
12025 		hclge_handle_occurred_error(hdev);
12026 	else
12027 		hclge_handle_all_hns_hw_errors(ae_dev);
12028 
12029 	/* Re-enable the hw error interrupts because
12030 	 * the interrupts get disabled on global reset.
12031 	 */
12032 	ret = hclge_config_nic_hw_error(hdev, true);
12033 	if (ret) {
12034 		dev_err(&pdev->dev,
12035 			"fail(%d) to re-enable NIC hw error interrupts\n",
12036 			ret);
12037 		return ret;
12038 	}
12039 
12040 	if (hdev->roce_client) {
12041 		ret = hclge_config_rocee_ras_interrupt(hdev, true);
12042 		if (ret) {
12043 			dev_err(&pdev->dev,
12044 				"fail(%d) to re-enable roce ras interrupts\n",
12045 				ret);
12046 			return ret;
12047 		}
12048 	}
12049 
12050 	hclge_reset_vport_state(hdev);
12051 	ret = hclge_reset_vport_spoofchk(hdev);
12052 	if (ret)
12053 		return ret;
12054 
12055 	ret = hclge_resume_vf_rate(hdev);
12056 	if (ret)
12057 		return ret;
12058 
12059 	hclge_init_rxd_adv_layout(hdev);
12060 
12061 	dev_info(&pdev->dev, "Reset done, %s driver initialization finished.\n",
12062 		 HCLGE_DRIVER_NAME);
12063 
12064 	return 0;
12065 }
12066 
12067 static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev)
12068 {
12069 	struct hclge_dev *hdev = ae_dev->priv;
12070 	struct hclge_mac *mac = &hdev->hw.mac;
12071 
12072 	hclge_reset_vf_rate(hdev);
12073 	hclge_clear_vf_vlan(hdev);
12074 	hclge_misc_affinity_teardown(hdev);
12075 	hclge_state_uninit(hdev);
12076 	hclge_ptp_uninit(hdev);
12077 	hclge_uninit_rxd_adv_layout(hdev);
12078 	hclge_uninit_mac_table(hdev);
12079 	hclge_del_all_fd_entries(hdev);
12080 
12081 	if (mac->phydev)
12082 		mdiobus_unregister(mac->mdio_bus);
12083 
12084 	/* Disable MISC vector(vector0) */
12085 	hclge_enable_vector(&hdev->misc_vector, false);
12086 	synchronize_irq(hdev->misc_vector.vector_irq);
12087 
12088 	/* Disable all hw interrupts */
12089 	hclge_config_mac_tnl_int(hdev, false);
12090 	hclge_config_nic_hw_error(hdev, false);
12091 	hclge_config_rocee_ras_interrupt(hdev, false);
12092 
12093 	hclge_cmd_uninit(hdev);
12094 	hclge_misc_irq_uninit(hdev);
12095 	hclge_devlink_uninit(hdev);
12096 	hclge_pci_uninit(hdev);
12097 	mutex_destroy(&hdev->vport_lock);
12098 	hclge_uninit_vport_vlan_table(hdev);
12099 	ae_dev->priv = NULL;
12100 }
12101 
12102 static u32 hclge_get_max_channels(struct hnae3_handle *handle)
12103 {
12104 	struct hclge_vport *vport = hclge_get_vport(handle);
12105 	struct hclge_dev *hdev = vport->back;
12106 
12107 	return min_t(u32, hdev->pf_rss_size_max, vport->alloc_tqps);
12108 }
12109 
12110 static void hclge_get_channels(struct hnae3_handle *handle,
12111 			       struct ethtool_channels *ch)
12112 {
12113 	ch->max_combined = hclge_get_max_channels(handle);
12114 	ch->other_count = 1;
12115 	ch->max_other = 1;
12116 	ch->combined_count = handle->kinfo.rss_size;
12117 }
12118 
12119 static void hclge_get_tqps_and_rss_info(struct hnae3_handle *handle,
12120 					u16 *alloc_tqps, u16 *max_rss_size)
12121 {
12122 	struct hclge_vport *vport = hclge_get_vport(handle);
12123 	struct hclge_dev *hdev = vport->back;
12124 
12125 	*alloc_tqps = vport->alloc_tqps;
12126 	*max_rss_size = hdev->pf_rss_size_max;
12127 }
12128 
12129 static int hclge_set_channels(struct hnae3_handle *handle, u32 new_tqps_num,
12130 			      bool rxfh_configured)
12131 {
12132 	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev);
12133 	struct hclge_vport *vport = hclge_get_vport(handle);
12134 	struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
12135 	u16 tc_offset[HCLGE_MAX_TC_NUM] = {0};
12136 	struct hclge_dev *hdev = vport->back;
12137 	u16 tc_size[HCLGE_MAX_TC_NUM] = {0};
12138 	u16 cur_rss_size = kinfo->rss_size;
12139 	u16 cur_tqps = kinfo->num_tqps;
12140 	u16 tc_valid[HCLGE_MAX_TC_NUM];
12141 	u16 roundup_size;
12142 	u32 *rss_indir;
12143 	unsigned int i;
12144 	int ret;
12145 
12146 	kinfo->req_rss_size = new_tqps_num;
12147 
12148 	ret = hclge_tm_vport_map_update(hdev);
12149 	if (ret) {
12150 		dev_err(&hdev->pdev->dev, "tm vport map fail, ret =%d\n", ret);
12151 		return ret;
12152 	}
12153 
12154 	roundup_size = roundup_pow_of_two(kinfo->rss_size);
12155 	roundup_size = ilog2(roundup_size);
12156 	/* Set the RSS TC mode according to the new RSS size */
12157 	for (i = 0; i < HCLGE_MAX_TC_NUM; i++) {
12158 		tc_valid[i] = 0;
12159 
12160 		if (!(hdev->hw_tc_map & BIT(i)))
12161 			continue;
12162 
12163 		tc_valid[i] = 1;
12164 		tc_size[i] = roundup_size;
12165 		tc_offset[i] = kinfo->rss_size * i;
12166 	}
12167 	ret = hclge_set_rss_tc_mode(hdev, tc_valid, tc_size, tc_offset);
12168 	if (ret)
12169 		return ret;
12170 
12171 	/* RSS indirection table has been configured by user */
12172 	if (rxfh_configured)
12173 		goto out;
12174 
12175 	/* Reinitializes the rss indirect table according to the new RSS size */
12176 	rss_indir = kcalloc(ae_dev->dev_specs.rss_ind_tbl_size, sizeof(u32),
12177 			    GFP_KERNEL);
12178 	if (!rss_indir)
12179 		return -ENOMEM;
12180 
12181 	for (i = 0; i < ae_dev->dev_specs.rss_ind_tbl_size; i++)
12182 		rss_indir[i] = i % kinfo->rss_size;
12183 
12184 	ret = hclge_set_rss(handle, rss_indir, NULL, 0);
12185 	if (ret)
12186 		dev_err(&hdev->pdev->dev, "set rss indir table fail, ret=%d\n",
12187 			ret);
12188 
12189 	kfree(rss_indir);
12190 
12191 out:
12192 	if (!ret)
12193 		dev_info(&hdev->pdev->dev,
12194 			 "Channels changed, rss_size from %u to %u, tqps from %u to %u",
12195 			 cur_rss_size, kinfo->rss_size,
12196 			 cur_tqps, kinfo->rss_size * kinfo->tc_info.num_tc);
12197 
12198 	return ret;
12199 }
12200 
12201 static int hclge_get_regs_num(struct hclge_dev *hdev, u32 *regs_num_32_bit,
12202 			      u32 *regs_num_64_bit)
12203 {
12204 	struct hclge_desc desc;
12205 	u32 total_num;
12206 	int ret;
12207 
12208 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_REG_NUM, true);
12209 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
12210 	if (ret) {
12211 		dev_err(&hdev->pdev->dev,
12212 			"Query register number cmd failed, ret = %d.\n", ret);
12213 		return ret;
12214 	}
12215 
12216 	*regs_num_32_bit = le32_to_cpu(desc.data[0]);
12217 	*regs_num_64_bit = le32_to_cpu(desc.data[1]);
12218 
12219 	total_num = *regs_num_32_bit + *regs_num_64_bit;
12220 	if (!total_num)
12221 		return -EINVAL;
12222 
12223 	return 0;
12224 }
12225 
12226 static int hclge_get_32_bit_regs(struct hclge_dev *hdev, u32 regs_num,
12227 				 void *data)
12228 {
12229 #define HCLGE_32_BIT_REG_RTN_DATANUM 8
12230 #define HCLGE_32_BIT_DESC_NODATA_LEN 2
12231 
12232 	struct hclge_desc *desc;
12233 	u32 *reg_val = data;
12234 	__le32 *desc_data;
12235 	int nodata_num;
12236 	int cmd_num;
12237 	int i, k, n;
12238 	int ret;
12239 
12240 	if (regs_num == 0)
12241 		return 0;
12242 
12243 	nodata_num = HCLGE_32_BIT_DESC_NODATA_LEN;
12244 	cmd_num = DIV_ROUND_UP(regs_num + nodata_num,
12245 			       HCLGE_32_BIT_REG_RTN_DATANUM);
12246 	desc = kcalloc(cmd_num, sizeof(struct hclge_desc), GFP_KERNEL);
12247 	if (!desc)
12248 		return -ENOMEM;
12249 
12250 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_32_BIT_REG, true);
12251 	ret = hclge_cmd_send(&hdev->hw, desc, cmd_num);
12252 	if (ret) {
12253 		dev_err(&hdev->pdev->dev,
12254 			"Query 32 bit register cmd failed, ret = %d.\n", ret);
12255 		kfree(desc);
12256 		return ret;
12257 	}
12258 
12259 	for (i = 0; i < cmd_num; i++) {
12260 		if (i == 0) {
12261 			desc_data = (__le32 *)(&desc[i].data[0]);
12262 			n = HCLGE_32_BIT_REG_RTN_DATANUM - nodata_num;
12263 		} else {
12264 			desc_data = (__le32 *)(&desc[i]);
12265 			n = HCLGE_32_BIT_REG_RTN_DATANUM;
12266 		}
12267 		for (k = 0; k < n; k++) {
12268 			*reg_val++ = le32_to_cpu(*desc_data++);
12269 
12270 			regs_num--;
12271 			if (!regs_num)
12272 				break;
12273 		}
12274 	}
12275 
12276 	kfree(desc);
12277 	return 0;
12278 }
12279 
12280 static int hclge_get_64_bit_regs(struct hclge_dev *hdev, u32 regs_num,
12281 				 void *data)
12282 {
12283 #define HCLGE_64_BIT_REG_RTN_DATANUM 4
12284 #define HCLGE_64_BIT_DESC_NODATA_LEN 1
12285 
12286 	struct hclge_desc *desc;
12287 	u64 *reg_val = data;
12288 	__le64 *desc_data;
12289 	int nodata_len;
12290 	int cmd_num;
12291 	int i, k, n;
12292 	int ret;
12293 
12294 	if (regs_num == 0)
12295 		return 0;
12296 
12297 	nodata_len = HCLGE_64_BIT_DESC_NODATA_LEN;
12298 	cmd_num = DIV_ROUND_UP(regs_num + nodata_len,
12299 			       HCLGE_64_BIT_REG_RTN_DATANUM);
12300 	desc = kcalloc(cmd_num, sizeof(struct hclge_desc), GFP_KERNEL);
12301 	if (!desc)
12302 		return -ENOMEM;
12303 
12304 	hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_64_BIT_REG, true);
12305 	ret = hclge_cmd_send(&hdev->hw, desc, cmd_num);
12306 	if (ret) {
12307 		dev_err(&hdev->pdev->dev,
12308 			"Query 64 bit register cmd failed, ret = %d.\n", ret);
12309 		kfree(desc);
12310 		return ret;
12311 	}
12312 
12313 	for (i = 0; i < cmd_num; i++) {
12314 		if (i == 0) {
12315 			desc_data = (__le64 *)(&desc[i].data[0]);
12316 			n = HCLGE_64_BIT_REG_RTN_DATANUM - nodata_len;
12317 		} else {
12318 			desc_data = (__le64 *)(&desc[i]);
12319 			n = HCLGE_64_BIT_REG_RTN_DATANUM;
12320 		}
12321 		for (k = 0; k < n; k++) {
12322 			*reg_val++ = le64_to_cpu(*desc_data++);
12323 
12324 			regs_num--;
12325 			if (!regs_num)
12326 				break;
12327 		}
12328 	}
12329 
12330 	kfree(desc);
12331 	return 0;
12332 }
12333 
12334 #define MAX_SEPARATE_NUM	4
12335 #define SEPARATOR_VALUE		0xFDFCFBFA
12336 #define REG_NUM_PER_LINE	4
12337 #define REG_LEN_PER_LINE	(REG_NUM_PER_LINE * sizeof(u32))
12338 #define REG_SEPARATOR_LINE	1
12339 #define REG_NUM_REMAIN_MASK	3
12340 
12341 int hclge_query_bd_num_cmd_send(struct hclge_dev *hdev, struct hclge_desc *desc)
12342 {
12343 	int i;
12344 
12345 	/* initialize command BD except the last one */
12346 	for (i = 0; i < HCLGE_GET_DFX_REG_TYPE_CNT - 1; i++) {
12347 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM,
12348 					   true);
12349 		desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
12350 	}
12351 
12352 	/* initialize the last command BD */
12353 	hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM, true);
12354 
12355 	return hclge_cmd_send(&hdev->hw, desc, HCLGE_GET_DFX_REG_TYPE_CNT);
12356 }
12357 
12358 static int hclge_get_dfx_reg_bd_num(struct hclge_dev *hdev,
12359 				    int *bd_num_list,
12360 				    u32 type_num)
12361 {
12362 	u32 entries_per_desc, desc_index, index, offset, i;
12363 	struct hclge_desc desc[HCLGE_GET_DFX_REG_TYPE_CNT];
12364 	int ret;
12365 
12366 	ret = hclge_query_bd_num_cmd_send(hdev, desc);
12367 	if (ret) {
12368 		dev_err(&hdev->pdev->dev,
12369 			"Get dfx bd num fail, status is %d.\n", ret);
12370 		return ret;
12371 	}
12372 
12373 	entries_per_desc = ARRAY_SIZE(desc[0].data);
12374 	for (i = 0; i < type_num; i++) {
12375 		offset = hclge_dfx_bd_offset_list[i];
12376 		index = offset % entries_per_desc;
12377 		desc_index = offset / entries_per_desc;
12378 		bd_num_list[i] = le32_to_cpu(desc[desc_index].data[index]);
12379 	}
12380 
12381 	return ret;
12382 }
12383 
12384 static int hclge_dfx_reg_cmd_send(struct hclge_dev *hdev,
12385 				  struct hclge_desc *desc_src, int bd_num,
12386 				  enum hclge_opcode_type cmd)
12387 {
12388 	struct hclge_desc *desc = desc_src;
12389 	int i, ret;
12390 
12391 	hclge_cmd_setup_basic_desc(desc, cmd, true);
12392 	for (i = 0; i < bd_num - 1; i++) {
12393 		desc->flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
12394 		desc++;
12395 		hclge_cmd_setup_basic_desc(desc, cmd, true);
12396 	}
12397 
12398 	desc = desc_src;
12399 	ret = hclge_cmd_send(&hdev->hw, desc, bd_num);
12400 	if (ret)
12401 		dev_err(&hdev->pdev->dev,
12402 			"Query dfx reg cmd(0x%x) send fail, status is %d.\n",
12403 			cmd, ret);
12404 
12405 	return ret;
12406 }
12407 
12408 static int hclge_dfx_reg_fetch_data(struct hclge_desc *desc_src, int bd_num,
12409 				    void *data)
12410 {
12411 	int entries_per_desc, reg_num, separator_num, desc_index, index, i;
12412 	struct hclge_desc *desc = desc_src;
12413 	u32 *reg = data;
12414 
12415 	entries_per_desc = ARRAY_SIZE(desc->data);
12416 	reg_num = entries_per_desc * bd_num;
12417 	separator_num = REG_NUM_PER_LINE - (reg_num & REG_NUM_REMAIN_MASK);
12418 	for (i = 0; i < reg_num; i++) {
12419 		index = i % entries_per_desc;
12420 		desc_index = i / entries_per_desc;
12421 		*reg++ = le32_to_cpu(desc[desc_index].data[index]);
12422 	}
12423 	for (i = 0; i < separator_num; i++)
12424 		*reg++ = SEPARATOR_VALUE;
12425 
12426 	return reg_num + separator_num;
12427 }
12428 
12429 static int hclge_get_dfx_reg_len(struct hclge_dev *hdev, int *len)
12430 {
12431 	u32 dfx_reg_type_num = ARRAY_SIZE(hclge_dfx_bd_offset_list);
12432 	int data_len_per_desc, bd_num, i;
12433 	int *bd_num_list;
12434 	u32 data_len;
12435 	int ret;
12436 
12437 	bd_num_list = kcalloc(dfx_reg_type_num, sizeof(int), GFP_KERNEL);
12438 	if (!bd_num_list)
12439 		return -ENOMEM;
12440 
12441 	ret = hclge_get_dfx_reg_bd_num(hdev, bd_num_list, dfx_reg_type_num);
12442 	if (ret) {
12443 		dev_err(&hdev->pdev->dev,
12444 			"Get dfx reg bd num fail, status is %d.\n", ret);
12445 		goto out;
12446 	}
12447 
12448 	data_len_per_desc = sizeof_field(struct hclge_desc, data);
12449 	*len = 0;
12450 	for (i = 0; i < dfx_reg_type_num; i++) {
12451 		bd_num = bd_num_list[i];
12452 		data_len = data_len_per_desc * bd_num;
12453 		*len += (data_len / REG_LEN_PER_LINE + 1) * REG_LEN_PER_LINE;
12454 	}
12455 
12456 out:
12457 	kfree(bd_num_list);
12458 	return ret;
12459 }
12460 
12461 static int hclge_get_dfx_reg(struct hclge_dev *hdev, void *data)
12462 {
12463 	u32 dfx_reg_type_num = ARRAY_SIZE(hclge_dfx_bd_offset_list);
12464 	int bd_num, bd_num_max, buf_len, i;
12465 	struct hclge_desc *desc_src;
12466 	int *bd_num_list;
12467 	u32 *reg = data;
12468 	int ret;
12469 
12470 	bd_num_list = kcalloc(dfx_reg_type_num, sizeof(int), GFP_KERNEL);
12471 	if (!bd_num_list)
12472 		return -ENOMEM;
12473 
12474 	ret = hclge_get_dfx_reg_bd_num(hdev, bd_num_list, dfx_reg_type_num);
12475 	if (ret) {
12476 		dev_err(&hdev->pdev->dev,
12477 			"Get dfx reg bd num fail, status is %d.\n", ret);
12478 		goto out;
12479 	}
12480 
12481 	bd_num_max = bd_num_list[0];
12482 	for (i = 1; i < dfx_reg_type_num; i++)
12483 		bd_num_max = max_t(int, bd_num_max, bd_num_list[i]);
12484 
12485 	buf_len = sizeof(*desc_src) * bd_num_max;
12486 	desc_src = kzalloc(buf_len, GFP_KERNEL);
12487 	if (!desc_src) {
12488 		ret = -ENOMEM;
12489 		goto out;
12490 	}
12491 
12492 	for (i = 0; i < dfx_reg_type_num; i++) {
12493 		bd_num = bd_num_list[i];
12494 		ret = hclge_dfx_reg_cmd_send(hdev, desc_src, bd_num,
12495 					     hclge_dfx_reg_opcode_list[i]);
12496 		if (ret) {
12497 			dev_err(&hdev->pdev->dev,
12498 				"Get dfx reg fail, status is %d.\n", ret);
12499 			break;
12500 		}
12501 
12502 		reg += hclge_dfx_reg_fetch_data(desc_src, bd_num, reg);
12503 	}
12504 
12505 	kfree(desc_src);
12506 out:
12507 	kfree(bd_num_list);
12508 	return ret;
12509 }
12510 
12511 static int hclge_fetch_pf_reg(struct hclge_dev *hdev, void *data,
12512 			      struct hnae3_knic_private_info *kinfo)
12513 {
12514 #define HCLGE_RING_REG_OFFSET		0x200
12515 #define HCLGE_RING_INT_REG_OFFSET	0x4
12516 
12517 	int i, j, reg_num, separator_num;
12518 	int data_num_sum;
12519 	u32 *reg = data;
12520 
12521 	/* fetching per-PF registers valus from PF PCIe register space */
12522 	reg_num = ARRAY_SIZE(cmdq_reg_addr_list);
12523 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
12524 	for (i = 0; i < reg_num; i++)
12525 		*reg++ = hclge_read_dev(&hdev->hw, cmdq_reg_addr_list[i]);
12526 	for (i = 0; i < separator_num; i++)
12527 		*reg++ = SEPARATOR_VALUE;
12528 	data_num_sum = reg_num + separator_num;
12529 
12530 	reg_num = ARRAY_SIZE(common_reg_addr_list);
12531 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
12532 	for (i = 0; i < reg_num; i++)
12533 		*reg++ = hclge_read_dev(&hdev->hw, common_reg_addr_list[i]);
12534 	for (i = 0; i < separator_num; i++)
12535 		*reg++ = SEPARATOR_VALUE;
12536 	data_num_sum += reg_num + separator_num;
12537 
12538 	reg_num = ARRAY_SIZE(ring_reg_addr_list);
12539 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
12540 	for (j = 0; j < kinfo->num_tqps; j++) {
12541 		for (i = 0; i < reg_num; i++)
12542 			*reg++ = hclge_read_dev(&hdev->hw,
12543 						ring_reg_addr_list[i] +
12544 						HCLGE_RING_REG_OFFSET * j);
12545 		for (i = 0; i < separator_num; i++)
12546 			*reg++ = SEPARATOR_VALUE;
12547 	}
12548 	data_num_sum += (reg_num + separator_num) * kinfo->num_tqps;
12549 
12550 	reg_num = ARRAY_SIZE(tqp_intr_reg_addr_list);
12551 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
12552 	for (j = 0; j < hdev->num_msi_used - 1; j++) {
12553 		for (i = 0; i < reg_num; i++)
12554 			*reg++ = hclge_read_dev(&hdev->hw,
12555 						tqp_intr_reg_addr_list[i] +
12556 						HCLGE_RING_INT_REG_OFFSET * j);
12557 		for (i = 0; i < separator_num; i++)
12558 			*reg++ = SEPARATOR_VALUE;
12559 	}
12560 	data_num_sum += (reg_num + separator_num) * (hdev->num_msi_used - 1);
12561 
12562 	return data_num_sum;
12563 }
12564 
12565 static int hclge_get_regs_len(struct hnae3_handle *handle)
12566 {
12567 	int cmdq_lines, common_lines, ring_lines, tqp_intr_lines;
12568 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
12569 	struct hclge_vport *vport = hclge_get_vport(handle);
12570 	struct hclge_dev *hdev = vport->back;
12571 	int regs_num_32_bit, regs_num_64_bit, dfx_regs_len;
12572 	int regs_lines_32_bit, regs_lines_64_bit;
12573 	int ret;
12574 
12575 	ret = hclge_get_regs_num(hdev, &regs_num_32_bit, &regs_num_64_bit);
12576 	if (ret) {
12577 		dev_err(&hdev->pdev->dev,
12578 			"Get register number failed, ret = %d.\n", ret);
12579 		return ret;
12580 	}
12581 
12582 	ret = hclge_get_dfx_reg_len(hdev, &dfx_regs_len);
12583 	if (ret) {
12584 		dev_err(&hdev->pdev->dev,
12585 			"Get dfx reg len failed, ret = %d.\n", ret);
12586 		return ret;
12587 	}
12588 
12589 	cmdq_lines = sizeof(cmdq_reg_addr_list) / REG_LEN_PER_LINE +
12590 		REG_SEPARATOR_LINE;
12591 	common_lines = sizeof(common_reg_addr_list) / REG_LEN_PER_LINE +
12592 		REG_SEPARATOR_LINE;
12593 	ring_lines = sizeof(ring_reg_addr_list) / REG_LEN_PER_LINE +
12594 		REG_SEPARATOR_LINE;
12595 	tqp_intr_lines = sizeof(tqp_intr_reg_addr_list) / REG_LEN_PER_LINE +
12596 		REG_SEPARATOR_LINE;
12597 	regs_lines_32_bit = regs_num_32_bit * sizeof(u32) / REG_LEN_PER_LINE +
12598 		REG_SEPARATOR_LINE;
12599 	regs_lines_64_bit = regs_num_64_bit * sizeof(u64) / REG_LEN_PER_LINE +
12600 		REG_SEPARATOR_LINE;
12601 
12602 	return (cmdq_lines + common_lines + ring_lines * kinfo->num_tqps +
12603 		tqp_intr_lines * (hdev->num_msi_used - 1) + regs_lines_32_bit +
12604 		regs_lines_64_bit) * REG_LEN_PER_LINE + dfx_regs_len;
12605 }
12606 
12607 static void hclge_get_regs(struct hnae3_handle *handle, u32 *version,
12608 			   void *data)
12609 {
12610 	struct hnae3_knic_private_info *kinfo = &handle->kinfo;
12611 	struct hclge_vport *vport = hclge_get_vport(handle);
12612 	struct hclge_dev *hdev = vport->back;
12613 	u32 regs_num_32_bit, regs_num_64_bit;
12614 	int i, reg_num, separator_num, ret;
12615 	u32 *reg = data;
12616 
12617 	*version = hdev->fw_version;
12618 
12619 	ret = hclge_get_regs_num(hdev, &regs_num_32_bit, &regs_num_64_bit);
12620 	if (ret) {
12621 		dev_err(&hdev->pdev->dev,
12622 			"Get register number failed, ret = %d.\n", ret);
12623 		return;
12624 	}
12625 
12626 	reg += hclge_fetch_pf_reg(hdev, reg, kinfo);
12627 
12628 	ret = hclge_get_32_bit_regs(hdev, regs_num_32_bit, reg);
12629 	if (ret) {
12630 		dev_err(&hdev->pdev->dev,
12631 			"Get 32 bit register failed, ret = %d.\n", ret);
12632 		return;
12633 	}
12634 	reg_num = regs_num_32_bit;
12635 	reg += reg_num;
12636 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
12637 	for (i = 0; i < separator_num; i++)
12638 		*reg++ = SEPARATOR_VALUE;
12639 
12640 	ret = hclge_get_64_bit_regs(hdev, regs_num_64_bit, reg);
12641 	if (ret) {
12642 		dev_err(&hdev->pdev->dev,
12643 			"Get 64 bit register failed, ret = %d.\n", ret);
12644 		return;
12645 	}
12646 	reg_num = regs_num_64_bit * 2;
12647 	reg += reg_num;
12648 	separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK);
12649 	for (i = 0; i < separator_num; i++)
12650 		*reg++ = SEPARATOR_VALUE;
12651 
12652 	ret = hclge_get_dfx_reg(hdev, reg);
12653 	if (ret)
12654 		dev_err(&hdev->pdev->dev,
12655 			"Get dfx register failed, ret = %d.\n", ret);
12656 }
12657 
12658 static int hclge_set_led_status(struct hclge_dev *hdev, u8 locate_led_status)
12659 {
12660 	struct hclge_set_led_state_cmd *req;
12661 	struct hclge_desc desc;
12662 	int ret;
12663 
12664 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_LED_STATUS_CFG, false);
12665 
12666 	req = (struct hclge_set_led_state_cmd *)desc.data;
12667 	hnae3_set_field(req->locate_led_config, HCLGE_LED_LOCATE_STATE_M,
12668 			HCLGE_LED_LOCATE_STATE_S, locate_led_status);
12669 
12670 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
12671 	if (ret)
12672 		dev_err(&hdev->pdev->dev,
12673 			"Send set led state cmd error, ret =%d\n", ret);
12674 
12675 	return ret;
12676 }
12677 
12678 enum hclge_led_status {
12679 	HCLGE_LED_OFF,
12680 	HCLGE_LED_ON,
12681 	HCLGE_LED_NO_CHANGE = 0xFF,
12682 };
12683 
12684 static int hclge_set_led_id(struct hnae3_handle *handle,
12685 			    enum ethtool_phys_id_state status)
12686 {
12687 	struct hclge_vport *vport = hclge_get_vport(handle);
12688 	struct hclge_dev *hdev = vport->back;
12689 
12690 	switch (status) {
12691 	case ETHTOOL_ID_ACTIVE:
12692 		return hclge_set_led_status(hdev, HCLGE_LED_ON);
12693 	case ETHTOOL_ID_INACTIVE:
12694 		return hclge_set_led_status(hdev, HCLGE_LED_OFF);
12695 	default:
12696 		return -EINVAL;
12697 	}
12698 }
12699 
12700 static void hclge_get_link_mode(struct hnae3_handle *handle,
12701 				unsigned long *supported,
12702 				unsigned long *advertising)
12703 {
12704 	unsigned int size = BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS);
12705 	struct hclge_vport *vport = hclge_get_vport(handle);
12706 	struct hclge_dev *hdev = vport->back;
12707 	unsigned int idx = 0;
12708 
12709 	for (; idx < size; idx++) {
12710 		supported[idx] = hdev->hw.mac.supported[idx];
12711 		advertising[idx] = hdev->hw.mac.advertising[idx];
12712 	}
12713 }
12714 
12715 static int hclge_gro_en(struct hnae3_handle *handle, bool enable)
12716 {
12717 	struct hclge_vport *vport = hclge_get_vport(handle);
12718 	struct hclge_dev *hdev = vport->back;
12719 	bool gro_en_old = hdev->gro_en;
12720 	int ret;
12721 
12722 	hdev->gro_en = enable;
12723 	ret = hclge_config_gro(hdev);
12724 	if (ret)
12725 		hdev->gro_en = gro_en_old;
12726 
12727 	return ret;
12728 }
12729 
12730 static void hclge_sync_promisc_mode(struct hclge_dev *hdev)
12731 {
12732 	struct hclge_vport *vport = &hdev->vport[0];
12733 	struct hnae3_handle *handle = &vport->nic;
12734 	u8 tmp_flags;
12735 	int ret;
12736 	u16 i;
12737 
12738 	if (vport->last_promisc_flags != vport->overflow_promisc_flags) {
12739 		set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state);
12740 		vport->last_promisc_flags = vport->overflow_promisc_flags;
12741 	}
12742 
12743 	if (test_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state)) {
12744 		tmp_flags = handle->netdev_flags | vport->last_promisc_flags;
12745 		ret = hclge_set_promisc_mode(handle, tmp_flags & HNAE3_UPE,
12746 					     tmp_flags & HNAE3_MPE);
12747 		if (!ret) {
12748 			clear_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE,
12749 				  &vport->state);
12750 			set_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE,
12751 				&vport->state);
12752 		}
12753 	}
12754 
12755 	for (i = 1; i < hdev->num_alloc_vport; i++) {
12756 		bool uc_en = false;
12757 		bool mc_en = false;
12758 		bool bc_en;
12759 
12760 		vport = &hdev->vport[i];
12761 
12762 		if (!test_and_clear_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE,
12763 					&vport->state))
12764 			continue;
12765 
12766 		if (vport->vf_info.trusted) {
12767 			uc_en = vport->vf_info.request_uc_en > 0;
12768 			mc_en = vport->vf_info.request_mc_en > 0;
12769 		}
12770 		bc_en = vport->vf_info.request_bc_en > 0;
12771 
12772 		ret = hclge_cmd_set_promisc_mode(hdev, vport->vport_id, uc_en,
12773 						 mc_en, bc_en);
12774 		if (ret) {
12775 			set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE,
12776 				&vport->state);
12777 			return;
12778 		}
12779 		hclge_set_vport_vlan_fltr_change(vport);
12780 	}
12781 }
12782 
12783 static bool hclge_module_existed(struct hclge_dev *hdev)
12784 {
12785 	struct hclge_desc desc;
12786 	u32 existed;
12787 	int ret;
12788 
12789 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GET_SFP_EXIST, true);
12790 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
12791 	if (ret) {
12792 		dev_err(&hdev->pdev->dev,
12793 			"failed to get SFP exist state, ret = %d\n", ret);
12794 		return false;
12795 	}
12796 
12797 	existed = le32_to_cpu(desc.data[0]);
12798 
12799 	return existed != 0;
12800 }
12801 
12802 /* need 6 bds(total 140 bytes) in one reading
12803  * return the number of bytes actually read, 0 means read failed.
12804  */
12805 static u16 hclge_get_sfp_eeprom_info(struct hclge_dev *hdev, u32 offset,
12806 				     u32 len, u8 *data)
12807 {
12808 	struct hclge_desc desc[HCLGE_SFP_INFO_CMD_NUM];
12809 	struct hclge_sfp_info_bd0_cmd *sfp_info_bd0;
12810 	u16 read_len;
12811 	u16 copy_len;
12812 	int ret;
12813 	int i;
12814 
12815 	/* setup all 6 bds to read module eeprom info. */
12816 	for (i = 0; i < HCLGE_SFP_INFO_CMD_NUM; i++) {
12817 		hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_GET_SFP_EEPROM,
12818 					   true);
12819 
12820 		/* bd0~bd4 need next flag */
12821 		if (i < HCLGE_SFP_INFO_CMD_NUM - 1)
12822 			desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
12823 	}
12824 
12825 	/* setup bd0, this bd contains offset and read length. */
12826 	sfp_info_bd0 = (struct hclge_sfp_info_bd0_cmd *)desc[0].data;
12827 	sfp_info_bd0->offset = cpu_to_le16((u16)offset);
12828 	read_len = min_t(u16, len, HCLGE_SFP_INFO_MAX_LEN);
12829 	sfp_info_bd0->read_len = cpu_to_le16(read_len);
12830 
12831 	ret = hclge_cmd_send(&hdev->hw, desc, i);
12832 	if (ret) {
12833 		dev_err(&hdev->pdev->dev,
12834 			"failed to get SFP eeprom info, ret = %d\n", ret);
12835 		return 0;
12836 	}
12837 
12838 	/* copy sfp info from bd0 to out buffer. */
12839 	copy_len = min_t(u16, len, HCLGE_SFP_INFO_BD0_LEN);
12840 	memcpy(data, sfp_info_bd0->data, copy_len);
12841 	read_len = copy_len;
12842 
12843 	/* copy sfp info from bd1~bd5 to out buffer if needed. */
12844 	for (i = 1; i < HCLGE_SFP_INFO_CMD_NUM; i++) {
12845 		if (read_len >= len)
12846 			return read_len;
12847 
12848 		copy_len = min_t(u16, len - read_len, HCLGE_SFP_INFO_BDX_LEN);
12849 		memcpy(data + read_len, desc[i].data, copy_len);
12850 		read_len += copy_len;
12851 	}
12852 
12853 	return read_len;
12854 }
12855 
12856 static int hclge_get_module_eeprom(struct hnae3_handle *handle, u32 offset,
12857 				   u32 len, u8 *data)
12858 {
12859 	struct hclge_vport *vport = hclge_get_vport(handle);
12860 	struct hclge_dev *hdev = vport->back;
12861 	u32 read_len = 0;
12862 	u16 data_len;
12863 
12864 	if (hdev->hw.mac.media_type != HNAE3_MEDIA_TYPE_FIBER)
12865 		return -EOPNOTSUPP;
12866 
12867 	if (!hclge_module_existed(hdev))
12868 		return -ENXIO;
12869 
12870 	while (read_len < len) {
12871 		data_len = hclge_get_sfp_eeprom_info(hdev,
12872 						     offset + read_len,
12873 						     len - read_len,
12874 						     data + read_len);
12875 		if (!data_len)
12876 			return -EIO;
12877 
12878 		read_len += data_len;
12879 	}
12880 
12881 	return 0;
12882 }
12883 
12884 static int hclge_get_link_diagnosis_info(struct hnae3_handle *handle,
12885 					 u32 *status_code)
12886 {
12887 	struct hclge_vport *vport = hclge_get_vport(handle);
12888 	struct hclge_dev *hdev = vport->back;
12889 	struct hclge_desc desc;
12890 	int ret;
12891 
12892 	if (hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2)
12893 		return -EOPNOTSUPP;
12894 
12895 	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_LINK_DIAGNOSIS, true);
12896 	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
12897 	if (ret) {
12898 		dev_err(&hdev->pdev->dev,
12899 			"failed to query link diagnosis info, ret = %d\n", ret);
12900 		return ret;
12901 	}
12902 
12903 	*status_code = le32_to_cpu(desc.data[0]);
12904 	return 0;
12905 }
12906 
12907 static const struct hnae3_ae_ops hclge_ops = {
12908 	.init_ae_dev = hclge_init_ae_dev,
12909 	.uninit_ae_dev = hclge_uninit_ae_dev,
12910 	.reset_prepare = hclge_reset_prepare_general,
12911 	.reset_done = hclge_reset_done,
12912 	.init_client_instance = hclge_init_client_instance,
12913 	.uninit_client_instance = hclge_uninit_client_instance,
12914 	.map_ring_to_vector = hclge_map_ring_to_vector,
12915 	.unmap_ring_from_vector = hclge_unmap_ring_frm_vector,
12916 	.get_vector = hclge_get_vector,
12917 	.put_vector = hclge_put_vector,
12918 	.set_promisc_mode = hclge_set_promisc_mode,
12919 	.request_update_promisc_mode = hclge_request_update_promisc_mode,
12920 	.set_loopback = hclge_set_loopback,
12921 	.start = hclge_ae_start,
12922 	.stop = hclge_ae_stop,
12923 	.client_start = hclge_client_start,
12924 	.client_stop = hclge_client_stop,
12925 	.get_status = hclge_get_status,
12926 	.get_ksettings_an_result = hclge_get_ksettings_an_result,
12927 	.cfg_mac_speed_dup_h = hclge_cfg_mac_speed_dup_h,
12928 	.get_media_type = hclge_get_media_type,
12929 	.check_port_speed = hclge_check_port_speed,
12930 	.get_fec = hclge_get_fec,
12931 	.set_fec = hclge_set_fec,
12932 	.get_rss_key_size = hclge_get_rss_key_size,
12933 	.get_rss = hclge_get_rss,
12934 	.set_rss = hclge_set_rss,
12935 	.set_rss_tuple = hclge_set_rss_tuple,
12936 	.get_rss_tuple = hclge_get_rss_tuple,
12937 	.get_tc_size = hclge_get_tc_size,
12938 	.get_mac_addr = hclge_get_mac_addr,
12939 	.set_mac_addr = hclge_set_mac_addr,
12940 	.do_ioctl = hclge_do_ioctl,
12941 	.add_uc_addr = hclge_add_uc_addr,
12942 	.rm_uc_addr = hclge_rm_uc_addr,
12943 	.add_mc_addr = hclge_add_mc_addr,
12944 	.rm_mc_addr = hclge_rm_mc_addr,
12945 	.set_autoneg = hclge_set_autoneg,
12946 	.get_autoneg = hclge_get_autoneg,
12947 	.restart_autoneg = hclge_restart_autoneg,
12948 	.halt_autoneg = hclge_halt_autoneg,
12949 	.get_pauseparam = hclge_get_pauseparam,
12950 	.set_pauseparam = hclge_set_pauseparam,
12951 	.set_mtu = hclge_set_mtu,
12952 	.reset_queue = hclge_reset_tqp,
12953 	.get_stats = hclge_get_stats,
12954 	.get_mac_stats = hclge_get_mac_stat,
12955 	.update_stats = hclge_update_stats,
12956 	.get_strings = hclge_get_strings,
12957 	.get_sset_count = hclge_get_sset_count,
12958 	.get_fw_version = hclge_get_fw_version,
12959 	.get_mdix_mode = hclge_get_mdix_mode,
12960 	.enable_vlan_filter = hclge_enable_vlan_filter,
12961 	.set_vlan_filter = hclge_set_vlan_filter,
12962 	.set_vf_vlan_filter = hclge_set_vf_vlan_filter,
12963 	.enable_hw_strip_rxvtag = hclge_en_hw_strip_rxvtag,
12964 	.reset_event = hclge_reset_event,
12965 	.get_reset_level = hclge_get_reset_level,
12966 	.set_default_reset_request = hclge_set_def_reset_request,
12967 	.get_tqps_and_rss_info = hclge_get_tqps_and_rss_info,
12968 	.set_channels = hclge_set_channels,
12969 	.get_channels = hclge_get_channels,
12970 	.get_regs_len = hclge_get_regs_len,
12971 	.get_regs = hclge_get_regs,
12972 	.set_led_id = hclge_set_led_id,
12973 	.get_link_mode = hclge_get_link_mode,
12974 	.add_fd_entry = hclge_add_fd_entry,
12975 	.del_fd_entry = hclge_del_fd_entry,
12976 	.get_fd_rule_cnt = hclge_get_fd_rule_cnt,
12977 	.get_fd_rule_info = hclge_get_fd_rule_info,
12978 	.get_fd_all_rules = hclge_get_all_rules,
12979 	.enable_fd = hclge_enable_fd,
12980 	.add_arfs_entry = hclge_add_fd_entry_by_arfs,
12981 	.dbg_read_cmd = hclge_dbg_read_cmd,
12982 	.handle_hw_ras_error = hclge_handle_hw_ras_error,
12983 	.get_hw_reset_stat = hclge_get_hw_reset_stat,
12984 	.ae_dev_resetting = hclge_ae_dev_resetting,
12985 	.ae_dev_reset_cnt = hclge_ae_dev_reset_cnt,
12986 	.set_gro_en = hclge_gro_en,
12987 	.get_global_queue_id = hclge_covert_handle_qid_global,
12988 	.set_timer_task = hclge_set_timer_task,
12989 	.mac_connect_phy = hclge_mac_connect_phy,
12990 	.mac_disconnect_phy = hclge_mac_disconnect_phy,
12991 	.get_vf_config = hclge_get_vf_config,
12992 	.set_vf_link_state = hclge_set_vf_link_state,
12993 	.set_vf_spoofchk = hclge_set_vf_spoofchk,
12994 	.set_vf_trust = hclge_set_vf_trust,
12995 	.set_vf_rate = hclge_set_vf_rate,
12996 	.set_vf_mac = hclge_set_vf_mac,
12997 	.get_module_eeprom = hclge_get_module_eeprom,
12998 	.get_cmdq_stat = hclge_get_cmdq_stat,
12999 	.add_cls_flower = hclge_add_cls_flower,
13000 	.del_cls_flower = hclge_del_cls_flower,
13001 	.cls_flower_active = hclge_is_cls_flower_active,
13002 	.get_phy_link_ksettings = hclge_get_phy_link_ksettings,
13003 	.set_phy_link_ksettings = hclge_set_phy_link_ksettings,
13004 	.set_tx_hwts_info = hclge_ptp_set_tx_info,
13005 	.get_rx_hwts = hclge_ptp_get_rx_hwts,
13006 	.get_ts_info = hclge_ptp_get_ts_info,
13007 	.get_link_diagnosis_info = hclge_get_link_diagnosis_info,
13008 };
13009 
13010 static struct hnae3_ae_algo ae_algo = {
13011 	.ops = &hclge_ops,
13012 	.pdev_id_table = ae_algo_pci_tbl,
13013 };
13014 
13015 static int hclge_init(void)
13016 {
13017 	pr_info("%s is initializing\n", HCLGE_NAME);
13018 
13019 	hclge_wq = alloc_workqueue("%s", 0, 0, HCLGE_NAME);
13020 	if (!hclge_wq) {
13021 		pr_err("%s: failed to create workqueue\n", HCLGE_NAME);
13022 		return -ENOMEM;
13023 	}
13024 
13025 	hnae3_register_ae_algo(&ae_algo);
13026 
13027 	return 0;
13028 }
13029 
13030 static void hclge_exit(void)
13031 {
13032 	hnae3_unregister_ae_algo(&ae_algo);
13033 	destroy_workqueue(hclge_wq);
13034 }
13035 module_init(hclge_init);
13036 module_exit(hclge_exit);
13037 
13038 MODULE_LICENSE("GPL");
13039 MODULE_AUTHOR("Huawei Tech. Co., Ltd.");
13040 MODULE_DESCRIPTION("HCLGE Driver");
13041 MODULE_VERSION(HCLGE_MOD_VERSION);
13042