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