1 /*
2 * Copyright (C) 2005 - 2014 Emulex
3 * All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License version 2
7 * as published by the Free Software Foundation. The full GNU General
8 * Public License is included in this distribution in the file called COPYING.
9 *
10 * Contact Information:
11 * linux-drivers@emulex.com
12 *
13 * Emulex
14 * 3333 Susan Street
15 * Costa Mesa, CA 92626
16 */
17
18 #include <linux/prefetch.h>
19 #include <linux/module.h>
20 #include "be.h"
21 #include "be_cmds.h"
22 #include <asm/div64.h>
23 #include <linux/aer.h>
24 #include <linux/if_bridge.h>
25 #include <net/busy_poll.h>
26 #include <net/vxlan.h>
27
28 MODULE_VERSION(DRV_VER);
29 MODULE_DESCRIPTION(DRV_DESC " " DRV_VER);
30 MODULE_AUTHOR("Emulex Corporation");
31 MODULE_LICENSE("GPL");
32
33 /* num_vfs module param is obsolete.
34 * Use sysfs method to enable/disable VFs.
35 */
36 static unsigned int num_vfs;
37 module_param(num_vfs, uint, S_IRUGO);
38 MODULE_PARM_DESC(num_vfs, "Number of PCI VFs to initialize");
39
40 static ushort rx_frag_size = 2048;
41 module_param(rx_frag_size, ushort, S_IRUGO);
42 MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
43
44 static const struct pci_device_id be_dev_ids[] = {
45 { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) },
46 { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID2) },
47 { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) },
48 { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) },
49 { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID3)},
50 { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID4)},
51 { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID5)},
52 { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID6)},
53 { 0 }
54 };
55 MODULE_DEVICE_TABLE(pci, be_dev_ids);
56 /* UE Status Low CSR */
57 static const char * const ue_status_low_desc[] = {
58 "CEV",
59 "CTX",
60 "DBUF",
61 "ERX",
62 "Host",
63 "MPU",
64 "NDMA",
65 "PTC ",
66 "RDMA ",
67 "RXF ",
68 "RXIPS ",
69 "RXULP0 ",
70 "RXULP1 ",
71 "RXULP2 ",
72 "TIM ",
73 "TPOST ",
74 "TPRE ",
75 "TXIPS ",
76 "TXULP0 ",
77 "TXULP1 ",
78 "UC ",
79 "WDMA ",
80 "TXULP2 ",
81 "HOST1 ",
82 "P0_OB_LINK ",
83 "P1_OB_LINK ",
84 "HOST_GPIO ",
85 "MBOX ",
86 "ERX2 ",
87 "SPARE ",
88 "JTAG ",
89 "MPU_INTPEND "
90 };
91
92 /* UE Status High CSR */
93 static const char * const ue_status_hi_desc[] = {
94 "LPCMEMHOST",
95 "MGMT_MAC",
96 "PCS0ONLINE",
97 "MPU_IRAM",
98 "PCS1ONLINE",
99 "PCTL0",
100 "PCTL1",
101 "PMEM",
102 "RR",
103 "TXPB",
104 "RXPP",
105 "XAUI",
106 "TXP",
107 "ARM",
108 "IPC",
109 "HOST2",
110 "HOST3",
111 "HOST4",
112 "HOST5",
113 "HOST6",
114 "HOST7",
115 "ECRC",
116 "Poison TLP",
117 "NETC",
118 "PERIPH",
119 "LLTXULP",
120 "D2P",
121 "RCON",
122 "LDMA",
123 "LLTXP",
124 "LLTXPB",
125 "Unknown"
126 };
127
be_queue_free(struct be_adapter * adapter,struct be_queue_info * q)128 static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q)
129 {
130 struct be_dma_mem *mem = &q->dma_mem;
131
132 if (mem->va) {
133 dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
134 mem->dma);
135 mem->va = NULL;
136 }
137 }
138
be_queue_alloc(struct be_adapter * adapter,struct be_queue_info * q,u16 len,u16 entry_size)139 static int be_queue_alloc(struct be_adapter *adapter, struct be_queue_info *q,
140 u16 len, u16 entry_size)
141 {
142 struct be_dma_mem *mem = &q->dma_mem;
143
144 memset(q, 0, sizeof(*q));
145 q->len = len;
146 q->entry_size = entry_size;
147 mem->size = len * entry_size;
148 mem->va = dma_zalloc_coherent(&adapter->pdev->dev, mem->size, &mem->dma,
149 GFP_KERNEL);
150 if (!mem->va)
151 return -ENOMEM;
152 return 0;
153 }
154
be_reg_intr_set(struct be_adapter * adapter,bool enable)155 static void be_reg_intr_set(struct be_adapter *adapter, bool enable)
156 {
157 u32 reg, enabled;
158
159 pci_read_config_dword(adapter->pdev, PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET,
160 ®);
161 enabled = reg & MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
162
163 if (!enabled && enable)
164 reg |= MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
165 else if (enabled && !enable)
166 reg &= ~MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
167 else
168 return;
169
170 pci_write_config_dword(adapter->pdev,
171 PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET, reg);
172 }
173
be_intr_set(struct be_adapter * adapter,bool enable)174 static void be_intr_set(struct be_adapter *adapter, bool enable)
175 {
176 int status = 0;
177
178 /* On lancer interrupts can't be controlled via this register */
179 if (lancer_chip(adapter))
180 return;
181
182 if (adapter->eeh_error)
183 return;
184
185 status = be_cmd_intr_set(adapter, enable);
186 if (status)
187 be_reg_intr_set(adapter, enable);
188 }
189
be_rxq_notify(struct be_adapter * adapter,u16 qid,u16 posted)190 static void be_rxq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
191 {
192 u32 val = 0;
193
194 val |= qid & DB_RQ_RING_ID_MASK;
195 val |= posted << DB_RQ_NUM_POSTED_SHIFT;
196
197 wmb();
198 iowrite32(val, adapter->db + DB_RQ_OFFSET);
199 }
200
be_txq_notify(struct be_adapter * adapter,struct be_tx_obj * txo,u16 posted)201 static void be_txq_notify(struct be_adapter *adapter, struct be_tx_obj *txo,
202 u16 posted)
203 {
204 u32 val = 0;
205
206 val |= txo->q.id & DB_TXULP_RING_ID_MASK;
207 val |= (posted & DB_TXULP_NUM_POSTED_MASK) << DB_TXULP_NUM_POSTED_SHIFT;
208
209 wmb();
210 iowrite32(val, adapter->db + txo->db_offset);
211 }
212
be_eq_notify(struct be_adapter * adapter,u16 qid,bool arm,bool clear_int,u16 num_popped)213 static void be_eq_notify(struct be_adapter *adapter, u16 qid,
214 bool arm, bool clear_int, u16 num_popped)
215 {
216 u32 val = 0;
217
218 val |= qid & DB_EQ_RING_ID_MASK;
219 val |= ((qid & DB_EQ_RING_ID_EXT_MASK) << DB_EQ_RING_ID_EXT_MASK_SHIFT);
220
221 if (adapter->eeh_error)
222 return;
223
224 if (arm)
225 val |= 1 << DB_EQ_REARM_SHIFT;
226 if (clear_int)
227 val |= 1 << DB_EQ_CLR_SHIFT;
228 val |= 1 << DB_EQ_EVNT_SHIFT;
229 val |= num_popped << DB_EQ_NUM_POPPED_SHIFT;
230 iowrite32(val, adapter->db + DB_EQ_OFFSET);
231 }
232
be_cq_notify(struct be_adapter * adapter,u16 qid,bool arm,u16 num_popped)233 void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm, u16 num_popped)
234 {
235 u32 val = 0;
236
237 val |= qid & DB_CQ_RING_ID_MASK;
238 val |= ((qid & DB_CQ_RING_ID_EXT_MASK) <<
239 DB_CQ_RING_ID_EXT_MASK_SHIFT);
240
241 if (adapter->eeh_error)
242 return;
243
244 if (arm)
245 val |= 1 << DB_CQ_REARM_SHIFT;
246 val |= num_popped << DB_CQ_NUM_POPPED_SHIFT;
247 iowrite32(val, adapter->db + DB_CQ_OFFSET);
248 }
249
be_mac_addr_set(struct net_device * netdev,void * p)250 static int be_mac_addr_set(struct net_device *netdev, void *p)
251 {
252 struct be_adapter *adapter = netdev_priv(netdev);
253 struct device *dev = &adapter->pdev->dev;
254 struct sockaddr *addr = p;
255 int status;
256 u8 mac[ETH_ALEN];
257 u32 old_pmac_id = adapter->pmac_id[0], curr_pmac_id = 0;
258
259 if (!is_valid_ether_addr(addr->sa_data))
260 return -EADDRNOTAVAIL;
261
262 /* Proceed further only if, User provided MAC is different
263 * from active MAC
264 */
265 if (ether_addr_equal(addr->sa_data, netdev->dev_addr))
266 return 0;
267
268 /* The PMAC_ADD cmd may fail if the VF doesn't have FILTMGMT
269 * privilege or if PF did not provision the new MAC address.
270 * On BE3, this cmd will always fail if the VF doesn't have the
271 * FILTMGMT privilege. This failure is OK, only if the PF programmed
272 * the MAC for the VF.
273 */
274 status = be_cmd_pmac_add(adapter, (u8 *)addr->sa_data,
275 adapter->if_handle, &adapter->pmac_id[0], 0);
276 if (!status) {
277 curr_pmac_id = adapter->pmac_id[0];
278
279 /* Delete the old programmed MAC. This call may fail if the
280 * old MAC was already deleted by the PF driver.
281 */
282 if (adapter->pmac_id[0] != old_pmac_id)
283 be_cmd_pmac_del(adapter, adapter->if_handle,
284 old_pmac_id, 0);
285 }
286
287 /* Decide if the new MAC is successfully activated only after
288 * querying the FW
289 */
290 status = be_cmd_get_active_mac(adapter, curr_pmac_id, mac,
291 adapter->if_handle, true, 0);
292 if (status)
293 goto err;
294
295 /* The MAC change did not happen, either due to lack of privilege
296 * or PF didn't pre-provision.
297 */
298 if (!ether_addr_equal(addr->sa_data, mac)) {
299 status = -EPERM;
300 goto err;
301 }
302
303 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
304 dev_info(dev, "MAC address changed to %pM\n", mac);
305 return 0;
306 err:
307 dev_warn(dev, "MAC address change to %pM failed\n", addr->sa_data);
308 return status;
309 }
310
311 /* BE2 supports only v0 cmd */
hw_stats_from_cmd(struct be_adapter * adapter)312 static void *hw_stats_from_cmd(struct be_adapter *adapter)
313 {
314 if (BE2_chip(adapter)) {
315 struct be_cmd_resp_get_stats_v0 *cmd = adapter->stats_cmd.va;
316
317 return &cmd->hw_stats;
318 } else if (BE3_chip(adapter)) {
319 struct be_cmd_resp_get_stats_v1 *cmd = adapter->stats_cmd.va;
320
321 return &cmd->hw_stats;
322 } else {
323 struct be_cmd_resp_get_stats_v2 *cmd = adapter->stats_cmd.va;
324
325 return &cmd->hw_stats;
326 }
327 }
328
329 /* BE2 supports only v0 cmd */
be_erx_stats_from_cmd(struct be_adapter * adapter)330 static void *be_erx_stats_from_cmd(struct be_adapter *adapter)
331 {
332 if (BE2_chip(adapter)) {
333 struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
334
335 return &hw_stats->erx;
336 } else if (BE3_chip(adapter)) {
337 struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
338
339 return &hw_stats->erx;
340 } else {
341 struct be_hw_stats_v2 *hw_stats = hw_stats_from_cmd(adapter);
342
343 return &hw_stats->erx;
344 }
345 }
346
populate_be_v0_stats(struct be_adapter * adapter)347 static void populate_be_v0_stats(struct be_adapter *adapter)
348 {
349 struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
350 struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
351 struct be_rxf_stats_v0 *rxf_stats = &hw_stats->rxf;
352 struct be_port_rxf_stats_v0 *port_stats =
353 &rxf_stats->port[adapter->port_num];
354 struct be_drv_stats *drvs = &adapter->drv_stats;
355
356 be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
357 drvs->rx_pause_frames = port_stats->rx_pause_frames;
358 drvs->rx_crc_errors = port_stats->rx_crc_errors;
359 drvs->rx_control_frames = port_stats->rx_control_frames;
360 drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
361 drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
362 drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
363 drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
364 drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
365 drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
366 drvs->rxpp_fifo_overflow_drop = port_stats->rx_fifo_overflow;
367 drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
368 drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
369 drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
370 drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
371 drvs->rx_input_fifo_overflow_drop = port_stats->rx_input_fifo_overflow;
372 drvs->rx_dropped_header_too_small =
373 port_stats->rx_dropped_header_too_small;
374 drvs->rx_address_filtered =
375 port_stats->rx_address_filtered +
376 port_stats->rx_vlan_filtered;
377 drvs->rx_alignment_symbol_errors =
378 port_stats->rx_alignment_symbol_errors;
379
380 drvs->tx_pauseframes = port_stats->tx_pauseframes;
381 drvs->tx_controlframes = port_stats->tx_controlframes;
382
383 if (adapter->port_num)
384 drvs->jabber_events = rxf_stats->port1_jabber_events;
385 else
386 drvs->jabber_events = rxf_stats->port0_jabber_events;
387 drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
388 drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
389 drvs->forwarded_packets = rxf_stats->forwarded_packets;
390 drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
391 drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
392 drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
393 adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
394 }
395
populate_be_v1_stats(struct be_adapter * adapter)396 static void populate_be_v1_stats(struct be_adapter *adapter)
397 {
398 struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
399 struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
400 struct be_rxf_stats_v1 *rxf_stats = &hw_stats->rxf;
401 struct be_port_rxf_stats_v1 *port_stats =
402 &rxf_stats->port[adapter->port_num];
403 struct be_drv_stats *drvs = &adapter->drv_stats;
404
405 be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
406 drvs->pmem_fifo_overflow_drop = port_stats->pmem_fifo_overflow_drop;
407 drvs->rx_priority_pause_frames = port_stats->rx_priority_pause_frames;
408 drvs->rx_pause_frames = port_stats->rx_pause_frames;
409 drvs->rx_crc_errors = port_stats->rx_crc_errors;
410 drvs->rx_control_frames = port_stats->rx_control_frames;
411 drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
412 drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
413 drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
414 drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
415 drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
416 drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
417 drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
418 drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
419 drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
420 drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
421 drvs->rx_dropped_header_too_small =
422 port_stats->rx_dropped_header_too_small;
423 drvs->rx_input_fifo_overflow_drop =
424 port_stats->rx_input_fifo_overflow_drop;
425 drvs->rx_address_filtered = port_stats->rx_address_filtered;
426 drvs->rx_alignment_symbol_errors =
427 port_stats->rx_alignment_symbol_errors;
428 drvs->rxpp_fifo_overflow_drop = port_stats->rxpp_fifo_overflow_drop;
429 drvs->tx_pauseframes = port_stats->tx_pauseframes;
430 drvs->tx_controlframes = port_stats->tx_controlframes;
431 drvs->tx_priority_pauseframes = port_stats->tx_priority_pauseframes;
432 drvs->jabber_events = port_stats->jabber_events;
433 drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
434 drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
435 drvs->forwarded_packets = rxf_stats->forwarded_packets;
436 drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
437 drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
438 drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
439 adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
440 }
441
populate_be_v2_stats(struct be_adapter * adapter)442 static void populate_be_v2_stats(struct be_adapter *adapter)
443 {
444 struct be_hw_stats_v2 *hw_stats = hw_stats_from_cmd(adapter);
445 struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
446 struct be_rxf_stats_v2 *rxf_stats = &hw_stats->rxf;
447 struct be_port_rxf_stats_v2 *port_stats =
448 &rxf_stats->port[adapter->port_num];
449 struct be_drv_stats *drvs = &adapter->drv_stats;
450
451 be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
452 drvs->pmem_fifo_overflow_drop = port_stats->pmem_fifo_overflow_drop;
453 drvs->rx_priority_pause_frames = port_stats->rx_priority_pause_frames;
454 drvs->rx_pause_frames = port_stats->rx_pause_frames;
455 drvs->rx_crc_errors = port_stats->rx_crc_errors;
456 drvs->rx_control_frames = port_stats->rx_control_frames;
457 drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
458 drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
459 drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
460 drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
461 drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
462 drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
463 drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
464 drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
465 drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
466 drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
467 drvs->rx_dropped_header_too_small =
468 port_stats->rx_dropped_header_too_small;
469 drvs->rx_input_fifo_overflow_drop =
470 port_stats->rx_input_fifo_overflow_drop;
471 drvs->rx_address_filtered = port_stats->rx_address_filtered;
472 drvs->rx_alignment_symbol_errors =
473 port_stats->rx_alignment_symbol_errors;
474 drvs->rxpp_fifo_overflow_drop = port_stats->rxpp_fifo_overflow_drop;
475 drvs->tx_pauseframes = port_stats->tx_pauseframes;
476 drvs->tx_controlframes = port_stats->tx_controlframes;
477 drvs->tx_priority_pauseframes = port_stats->tx_priority_pauseframes;
478 drvs->jabber_events = port_stats->jabber_events;
479 drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
480 drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
481 drvs->forwarded_packets = rxf_stats->forwarded_packets;
482 drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
483 drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
484 drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
485 adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
486 if (be_roce_supported(adapter)) {
487 drvs->rx_roce_bytes_lsd = port_stats->roce_bytes_received_lsd;
488 drvs->rx_roce_bytes_msd = port_stats->roce_bytes_received_msd;
489 drvs->rx_roce_frames = port_stats->roce_frames_received;
490 drvs->roce_drops_crc = port_stats->roce_drops_crc;
491 drvs->roce_drops_payload_len =
492 port_stats->roce_drops_payload_len;
493 }
494 }
495
populate_lancer_stats(struct be_adapter * adapter)496 static void populate_lancer_stats(struct be_adapter *adapter)
497 {
498 struct be_drv_stats *drvs = &adapter->drv_stats;
499 struct lancer_pport_stats *pport_stats = pport_stats_from_cmd(adapter);
500
501 be_dws_le_to_cpu(pport_stats, sizeof(*pport_stats));
502 drvs->rx_pause_frames = pport_stats->rx_pause_frames_lo;
503 drvs->rx_crc_errors = pport_stats->rx_crc_errors_lo;
504 drvs->rx_control_frames = pport_stats->rx_control_frames_lo;
505 drvs->rx_in_range_errors = pport_stats->rx_in_range_errors;
506 drvs->rx_frame_too_long = pport_stats->rx_frames_too_long_lo;
507 drvs->rx_dropped_runt = pport_stats->rx_dropped_runt;
508 drvs->rx_ip_checksum_errs = pport_stats->rx_ip_checksum_errors;
509 drvs->rx_tcp_checksum_errs = pport_stats->rx_tcp_checksum_errors;
510 drvs->rx_udp_checksum_errs = pport_stats->rx_udp_checksum_errors;
511 drvs->rx_dropped_tcp_length =
512 pport_stats->rx_dropped_invalid_tcp_length;
513 drvs->rx_dropped_too_small = pport_stats->rx_dropped_too_small;
514 drvs->rx_dropped_too_short = pport_stats->rx_dropped_too_short;
515 drvs->rx_out_range_errors = pport_stats->rx_out_of_range_errors;
516 drvs->rx_dropped_header_too_small =
517 pport_stats->rx_dropped_header_too_small;
518 drvs->rx_input_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
519 drvs->rx_address_filtered =
520 pport_stats->rx_address_filtered +
521 pport_stats->rx_vlan_filtered;
522 drvs->rx_alignment_symbol_errors = pport_stats->rx_symbol_errors_lo;
523 drvs->rxpp_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
524 drvs->tx_pauseframes = pport_stats->tx_pause_frames_lo;
525 drvs->tx_controlframes = pport_stats->tx_control_frames_lo;
526 drvs->jabber_events = pport_stats->rx_jabbers;
527 drvs->forwarded_packets = pport_stats->num_forwards_lo;
528 drvs->rx_drops_mtu = pport_stats->rx_drops_mtu_lo;
529 drvs->rx_drops_too_many_frags =
530 pport_stats->rx_drops_too_many_frags_lo;
531 }
532
accumulate_16bit_val(u32 * acc,u16 val)533 static void accumulate_16bit_val(u32 *acc, u16 val)
534 {
535 #define lo(x) (x & 0xFFFF)
536 #define hi(x) (x & 0xFFFF0000)
537 bool wrapped = val < lo(*acc);
538 u32 newacc = hi(*acc) + val;
539
540 if (wrapped)
541 newacc += 65536;
542 ACCESS_ONCE(*acc) = newacc;
543 }
544
populate_erx_stats(struct be_adapter * adapter,struct be_rx_obj * rxo,u32 erx_stat)545 static void populate_erx_stats(struct be_adapter *adapter,
546 struct be_rx_obj *rxo, u32 erx_stat)
547 {
548 if (!BEx_chip(adapter))
549 rx_stats(rxo)->rx_drops_no_frags = erx_stat;
550 else
551 /* below erx HW counter can actually wrap around after
552 * 65535. Driver accumulates a 32-bit value
553 */
554 accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags,
555 (u16)erx_stat);
556 }
557
be_parse_stats(struct be_adapter * adapter)558 void be_parse_stats(struct be_adapter *adapter)
559 {
560 struct be_erx_stats_v2 *erx = be_erx_stats_from_cmd(adapter);
561 struct be_rx_obj *rxo;
562 int i;
563 u32 erx_stat;
564
565 if (lancer_chip(adapter)) {
566 populate_lancer_stats(adapter);
567 } else {
568 if (BE2_chip(adapter))
569 populate_be_v0_stats(adapter);
570 else if (BE3_chip(adapter))
571 /* for BE3 */
572 populate_be_v1_stats(adapter);
573 else
574 populate_be_v2_stats(adapter);
575
576 /* erx_v2 is longer than v0, v1. use v2 for v0, v1 access */
577 for_all_rx_queues(adapter, rxo, i) {
578 erx_stat = erx->rx_drops_no_fragments[rxo->q.id];
579 populate_erx_stats(adapter, rxo, erx_stat);
580 }
581 }
582 }
583
be_get_stats64(struct net_device * netdev,struct rtnl_link_stats64 * stats)584 static struct rtnl_link_stats64 *be_get_stats64(struct net_device *netdev,
585 struct rtnl_link_stats64 *stats)
586 {
587 struct be_adapter *adapter = netdev_priv(netdev);
588 struct be_drv_stats *drvs = &adapter->drv_stats;
589 struct be_rx_obj *rxo;
590 struct be_tx_obj *txo;
591 u64 pkts, bytes;
592 unsigned int start;
593 int i;
594
595 for_all_rx_queues(adapter, rxo, i) {
596 const struct be_rx_stats *rx_stats = rx_stats(rxo);
597
598 do {
599 start = u64_stats_fetch_begin_irq(&rx_stats->sync);
600 pkts = rx_stats(rxo)->rx_pkts;
601 bytes = rx_stats(rxo)->rx_bytes;
602 } while (u64_stats_fetch_retry_irq(&rx_stats->sync, start));
603 stats->rx_packets += pkts;
604 stats->rx_bytes += bytes;
605 stats->multicast += rx_stats(rxo)->rx_mcast_pkts;
606 stats->rx_dropped += rx_stats(rxo)->rx_drops_no_skbs +
607 rx_stats(rxo)->rx_drops_no_frags;
608 }
609
610 for_all_tx_queues(adapter, txo, i) {
611 const struct be_tx_stats *tx_stats = tx_stats(txo);
612
613 do {
614 start = u64_stats_fetch_begin_irq(&tx_stats->sync);
615 pkts = tx_stats(txo)->tx_pkts;
616 bytes = tx_stats(txo)->tx_bytes;
617 } while (u64_stats_fetch_retry_irq(&tx_stats->sync, start));
618 stats->tx_packets += pkts;
619 stats->tx_bytes += bytes;
620 }
621
622 /* bad pkts received */
623 stats->rx_errors = drvs->rx_crc_errors +
624 drvs->rx_alignment_symbol_errors +
625 drvs->rx_in_range_errors +
626 drvs->rx_out_range_errors +
627 drvs->rx_frame_too_long +
628 drvs->rx_dropped_too_small +
629 drvs->rx_dropped_too_short +
630 drvs->rx_dropped_header_too_small +
631 drvs->rx_dropped_tcp_length +
632 drvs->rx_dropped_runt;
633
634 /* detailed rx errors */
635 stats->rx_length_errors = drvs->rx_in_range_errors +
636 drvs->rx_out_range_errors +
637 drvs->rx_frame_too_long;
638
639 stats->rx_crc_errors = drvs->rx_crc_errors;
640
641 /* frame alignment errors */
642 stats->rx_frame_errors = drvs->rx_alignment_symbol_errors;
643
644 /* receiver fifo overrun */
645 /* drops_no_pbuf is no per i/f, it's per BE card */
646 stats->rx_fifo_errors = drvs->rxpp_fifo_overflow_drop +
647 drvs->rx_input_fifo_overflow_drop +
648 drvs->rx_drops_no_pbuf;
649 return stats;
650 }
651
be_link_status_update(struct be_adapter * adapter,u8 link_status)652 void be_link_status_update(struct be_adapter *adapter, u8 link_status)
653 {
654 struct net_device *netdev = adapter->netdev;
655
656 if (!(adapter->flags & BE_FLAGS_LINK_STATUS_INIT)) {
657 netif_carrier_off(netdev);
658 adapter->flags |= BE_FLAGS_LINK_STATUS_INIT;
659 }
660
661 if (link_status)
662 netif_carrier_on(netdev);
663 else
664 netif_carrier_off(netdev);
665 }
666
be_tx_stats_update(struct be_tx_obj * txo,struct sk_buff * skb)667 static void be_tx_stats_update(struct be_tx_obj *txo, struct sk_buff *skb)
668 {
669 struct be_tx_stats *stats = tx_stats(txo);
670
671 u64_stats_update_begin(&stats->sync);
672 stats->tx_reqs++;
673 stats->tx_bytes += skb->len;
674 stats->tx_pkts += (skb_shinfo(skb)->gso_segs ? : 1);
675 u64_stats_update_end(&stats->sync);
676 }
677
678 /* Returns number of WRBs needed for the skb */
skb_wrb_cnt(struct sk_buff * skb)679 static u32 skb_wrb_cnt(struct sk_buff *skb)
680 {
681 /* +1 for the header wrb */
682 return 1 + (skb_headlen(skb) ? 1 : 0) + skb_shinfo(skb)->nr_frags;
683 }
684
wrb_fill(struct be_eth_wrb * wrb,u64 addr,int len)685 static inline void wrb_fill(struct be_eth_wrb *wrb, u64 addr, int len)
686 {
687 wrb->frag_pa_hi = cpu_to_le32(upper_32_bits(addr));
688 wrb->frag_pa_lo = cpu_to_le32(lower_32_bits(addr));
689 wrb->frag_len = cpu_to_le32(len & ETH_WRB_FRAG_LEN_MASK);
690 wrb->rsvd0 = 0;
691 }
692
693 /* A dummy wrb is just all zeros. Using a separate routine for dummy-wrb
694 * to avoid the swap and shift/mask operations in wrb_fill().
695 */
wrb_fill_dummy(struct be_eth_wrb * wrb)696 static inline void wrb_fill_dummy(struct be_eth_wrb *wrb)
697 {
698 wrb->frag_pa_hi = 0;
699 wrb->frag_pa_lo = 0;
700 wrb->frag_len = 0;
701 wrb->rsvd0 = 0;
702 }
703
be_get_tx_vlan_tag(struct be_adapter * adapter,struct sk_buff * skb)704 static inline u16 be_get_tx_vlan_tag(struct be_adapter *adapter,
705 struct sk_buff *skb)
706 {
707 u8 vlan_prio;
708 u16 vlan_tag;
709
710 vlan_tag = skb_vlan_tag_get(skb);
711 vlan_prio = (vlan_tag & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
712 /* If vlan priority provided by OS is NOT in available bmap */
713 if (!(adapter->vlan_prio_bmap & (1 << vlan_prio)))
714 vlan_tag = (vlan_tag & ~VLAN_PRIO_MASK) |
715 adapter->recommended_prio;
716
717 return vlan_tag;
718 }
719
720 /* Used only for IP tunnel packets */
skb_inner_ip_proto(struct sk_buff * skb)721 static u16 skb_inner_ip_proto(struct sk_buff *skb)
722 {
723 return (inner_ip_hdr(skb)->version == 4) ?
724 inner_ip_hdr(skb)->protocol : inner_ipv6_hdr(skb)->nexthdr;
725 }
726
skb_ip_proto(struct sk_buff * skb)727 static u16 skb_ip_proto(struct sk_buff *skb)
728 {
729 return (ip_hdr(skb)->version == 4) ?
730 ip_hdr(skb)->protocol : ipv6_hdr(skb)->nexthdr;
731 }
732
be_is_txq_full(struct be_tx_obj * txo)733 static inline bool be_is_txq_full(struct be_tx_obj *txo)
734 {
735 return atomic_read(&txo->q.used) + BE_MAX_TX_FRAG_COUNT >= txo->q.len;
736 }
737
be_can_txq_wake(struct be_tx_obj * txo)738 static inline bool be_can_txq_wake(struct be_tx_obj *txo)
739 {
740 return atomic_read(&txo->q.used) < txo->q.len / 2;
741 }
742
be_is_tx_compl_pending(struct be_tx_obj * txo)743 static inline bool be_is_tx_compl_pending(struct be_tx_obj *txo)
744 {
745 return atomic_read(&txo->q.used) > txo->pend_wrb_cnt;
746 }
747
be_get_wrb_params_from_skb(struct be_adapter * adapter,struct sk_buff * skb,struct be_wrb_params * wrb_params)748 static void be_get_wrb_params_from_skb(struct be_adapter *adapter,
749 struct sk_buff *skb,
750 struct be_wrb_params *wrb_params)
751 {
752 u16 proto;
753
754 if (skb_is_gso(skb)) {
755 BE_WRB_F_SET(wrb_params->features, LSO, 1);
756 wrb_params->lso_mss = skb_shinfo(skb)->gso_size;
757 if (skb_is_gso_v6(skb) && !lancer_chip(adapter))
758 BE_WRB_F_SET(wrb_params->features, LSO6, 1);
759 } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
760 if (skb->encapsulation) {
761 BE_WRB_F_SET(wrb_params->features, IPCS, 1);
762 proto = skb_inner_ip_proto(skb);
763 } else {
764 proto = skb_ip_proto(skb);
765 }
766 if (proto == IPPROTO_TCP)
767 BE_WRB_F_SET(wrb_params->features, TCPCS, 1);
768 else if (proto == IPPROTO_UDP)
769 BE_WRB_F_SET(wrb_params->features, UDPCS, 1);
770 }
771
772 if (skb_vlan_tag_present(skb)) {
773 BE_WRB_F_SET(wrb_params->features, VLAN, 1);
774 wrb_params->vlan_tag = be_get_tx_vlan_tag(adapter, skb);
775 }
776
777 BE_WRB_F_SET(wrb_params->features, CRC, 1);
778 }
779
wrb_fill_hdr(struct be_adapter * adapter,struct be_eth_hdr_wrb * hdr,struct be_wrb_params * wrb_params,struct sk_buff * skb)780 static void wrb_fill_hdr(struct be_adapter *adapter,
781 struct be_eth_hdr_wrb *hdr,
782 struct be_wrb_params *wrb_params,
783 struct sk_buff *skb)
784 {
785 memset(hdr, 0, sizeof(*hdr));
786
787 SET_TX_WRB_HDR_BITS(crc, hdr,
788 BE_WRB_F_GET(wrb_params->features, CRC));
789 SET_TX_WRB_HDR_BITS(ipcs, hdr,
790 BE_WRB_F_GET(wrb_params->features, IPCS));
791 SET_TX_WRB_HDR_BITS(tcpcs, hdr,
792 BE_WRB_F_GET(wrb_params->features, TCPCS));
793 SET_TX_WRB_HDR_BITS(udpcs, hdr,
794 BE_WRB_F_GET(wrb_params->features, UDPCS));
795
796 SET_TX_WRB_HDR_BITS(lso, hdr,
797 BE_WRB_F_GET(wrb_params->features, LSO));
798 SET_TX_WRB_HDR_BITS(lso6, hdr,
799 BE_WRB_F_GET(wrb_params->features, LSO6));
800 SET_TX_WRB_HDR_BITS(lso_mss, hdr, wrb_params->lso_mss);
801
802 /* Hack to skip HW VLAN tagging needs evt = 1, compl = 0. When this
803 * hack is not needed, the evt bit is set while ringing DB.
804 */
805 SET_TX_WRB_HDR_BITS(event, hdr,
806 BE_WRB_F_GET(wrb_params->features, VLAN_SKIP_HW));
807 SET_TX_WRB_HDR_BITS(vlan, hdr,
808 BE_WRB_F_GET(wrb_params->features, VLAN));
809 SET_TX_WRB_HDR_BITS(vlan_tag, hdr, wrb_params->vlan_tag);
810
811 SET_TX_WRB_HDR_BITS(num_wrb, hdr, skb_wrb_cnt(skb));
812 SET_TX_WRB_HDR_BITS(len, hdr, skb->len);
813 }
814
unmap_tx_frag(struct device * dev,struct be_eth_wrb * wrb,bool unmap_single)815 static void unmap_tx_frag(struct device *dev, struct be_eth_wrb *wrb,
816 bool unmap_single)
817 {
818 dma_addr_t dma;
819 u32 frag_len = le32_to_cpu(wrb->frag_len);
820
821
822 dma = (u64)le32_to_cpu(wrb->frag_pa_hi) << 32 |
823 (u64)le32_to_cpu(wrb->frag_pa_lo);
824 if (frag_len) {
825 if (unmap_single)
826 dma_unmap_single(dev, dma, frag_len, DMA_TO_DEVICE);
827 else
828 dma_unmap_page(dev, dma, frag_len, DMA_TO_DEVICE);
829 }
830 }
831
832 /* Grab a WRB header for xmit */
be_tx_get_wrb_hdr(struct be_tx_obj * txo)833 static u16 be_tx_get_wrb_hdr(struct be_tx_obj *txo)
834 {
835 u16 head = txo->q.head;
836
837 queue_head_inc(&txo->q);
838 return head;
839 }
840
841 /* Set up the WRB header for xmit */
be_tx_setup_wrb_hdr(struct be_adapter * adapter,struct be_tx_obj * txo,struct be_wrb_params * wrb_params,struct sk_buff * skb,u16 head)842 static void be_tx_setup_wrb_hdr(struct be_adapter *adapter,
843 struct be_tx_obj *txo,
844 struct be_wrb_params *wrb_params,
845 struct sk_buff *skb, u16 head)
846 {
847 u32 num_frags = skb_wrb_cnt(skb);
848 struct be_queue_info *txq = &txo->q;
849 struct be_eth_hdr_wrb *hdr = queue_index_node(txq, head);
850
851 wrb_fill_hdr(adapter, hdr, wrb_params, skb);
852 be_dws_cpu_to_le(hdr, sizeof(*hdr));
853
854 BUG_ON(txo->sent_skb_list[head]);
855 txo->sent_skb_list[head] = skb;
856 txo->last_req_hdr = head;
857 atomic_add(num_frags, &txq->used);
858 txo->last_req_wrb_cnt = num_frags;
859 txo->pend_wrb_cnt += num_frags;
860 }
861
862 /* Setup a WRB fragment (buffer descriptor) for xmit */
be_tx_setup_wrb_frag(struct be_tx_obj * txo,dma_addr_t busaddr,int len)863 static void be_tx_setup_wrb_frag(struct be_tx_obj *txo, dma_addr_t busaddr,
864 int len)
865 {
866 struct be_eth_wrb *wrb;
867 struct be_queue_info *txq = &txo->q;
868
869 wrb = queue_head_node(txq);
870 wrb_fill(wrb, busaddr, len);
871 queue_head_inc(txq);
872 }
873
874 /* Bring the queue back to the state it was in before be_xmit_enqueue() routine
875 * was invoked. The producer index is restored to the previous packet and the
876 * WRBs of the current packet are unmapped. Invoked to handle tx setup errors.
877 */
be_xmit_restore(struct be_adapter * adapter,struct be_tx_obj * txo,u16 head,bool map_single,u32 copied)878 static void be_xmit_restore(struct be_adapter *adapter,
879 struct be_tx_obj *txo, u16 head, bool map_single,
880 u32 copied)
881 {
882 struct device *dev;
883 struct be_eth_wrb *wrb;
884 struct be_queue_info *txq = &txo->q;
885
886 dev = &adapter->pdev->dev;
887 txq->head = head;
888
889 /* skip the first wrb (hdr); it's not mapped */
890 queue_head_inc(txq);
891 while (copied) {
892 wrb = queue_head_node(txq);
893 unmap_tx_frag(dev, wrb, map_single);
894 map_single = false;
895 copied -= le32_to_cpu(wrb->frag_len);
896 queue_head_inc(txq);
897 }
898
899 txq->head = head;
900 }
901
902 /* Enqueue the given packet for transmit. This routine allocates WRBs for the
903 * packet, dma maps the packet buffers and sets up the WRBs. Returns the number
904 * of WRBs used up by the packet.
905 */
be_xmit_enqueue(struct be_adapter * adapter,struct be_tx_obj * txo,struct sk_buff * skb,struct be_wrb_params * wrb_params)906 static u32 be_xmit_enqueue(struct be_adapter *adapter, struct be_tx_obj *txo,
907 struct sk_buff *skb,
908 struct be_wrb_params *wrb_params)
909 {
910 u32 i, copied = 0, wrb_cnt = skb_wrb_cnt(skb);
911 struct device *dev = &adapter->pdev->dev;
912 struct be_queue_info *txq = &txo->q;
913 bool map_single = false;
914 u16 head = txq->head;
915 dma_addr_t busaddr;
916 int len;
917
918 head = be_tx_get_wrb_hdr(txo);
919
920 if (skb->len > skb->data_len) {
921 len = skb_headlen(skb);
922
923 busaddr = dma_map_single(dev, skb->data, len, DMA_TO_DEVICE);
924 if (dma_mapping_error(dev, busaddr))
925 goto dma_err;
926 map_single = true;
927 be_tx_setup_wrb_frag(txo, busaddr, len);
928 copied += len;
929 }
930
931 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
932 const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
933 len = skb_frag_size(frag);
934
935 busaddr = skb_frag_dma_map(dev, frag, 0, len, DMA_TO_DEVICE);
936 if (dma_mapping_error(dev, busaddr))
937 goto dma_err;
938 be_tx_setup_wrb_frag(txo, busaddr, len);
939 copied += len;
940 }
941
942 be_tx_setup_wrb_hdr(adapter, txo, wrb_params, skb, head);
943
944 be_tx_stats_update(txo, skb);
945 return wrb_cnt;
946
947 dma_err:
948 adapter->drv_stats.dma_map_errors++;
949 be_xmit_restore(adapter, txo, head, map_single, copied);
950 return 0;
951 }
952
qnq_async_evt_rcvd(struct be_adapter * adapter)953 static inline int qnq_async_evt_rcvd(struct be_adapter *adapter)
954 {
955 return adapter->flags & BE_FLAGS_QNQ_ASYNC_EVT_RCVD;
956 }
957
be_insert_vlan_in_pkt(struct be_adapter * adapter,struct sk_buff * skb,struct be_wrb_params * wrb_params)958 static struct sk_buff *be_insert_vlan_in_pkt(struct be_adapter *adapter,
959 struct sk_buff *skb,
960 struct be_wrb_params
961 *wrb_params)
962 {
963 u16 vlan_tag = 0;
964
965 skb = skb_share_check(skb, GFP_ATOMIC);
966 if (unlikely(!skb))
967 return skb;
968
969 if (skb_vlan_tag_present(skb))
970 vlan_tag = be_get_tx_vlan_tag(adapter, skb);
971
972 if (qnq_async_evt_rcvd(adapter) && adapter->pvid) {
973 if (!vlan_tag)
974 vlan_tag = adapter->pvid;
975 /* f/w workaround to set skip_hw_vlan = 1, informs the F/W to
976 * skip VLAN insertion
977 */
978 BE_WRB_F_SET(wrb_params->features, VLAN_SKIP_HW, 1);
979 }
980
981 if (vlan_tag) {
982 skb = vlan_insert_tag_set_proto(skb, htons(ETH_P_8021Q),
983 vlan_tag);
984 if (unlikely(!skb))
985 return skb;
986 skb->vlan_tci = 0;
987 }
988
989 /* Insert the outer VLAN, if any */
990 if (adapter->qnq_vid) {
991 vlan_tag = adapter->qnq_vid;
992 skb = vlan_insert_tag_set_proto(skb, htons(ETH_P_8021Q),
993 vlan_tag);
994 if (unlikely(!skb))
995 return skb;
996 BE_WRB_F_SET(wrb_params->features, VLAN_SKIP_HW, 1);
997 }
998
999 return skb;
1000 }
1001
be_ipv6_exthdr_check(struct sk_buff * skb)1002 static bool be_ipv6_exthdr_check(struct sk_buff *skb)
1003 {
1004 struct ethhdr *eh = (struct ethhdr *)skb->data;
1005 u16 offset = ETH_HLEN;
1006
1007 if (eh->h_proto == htons(ETH_P_IPV6)) {
1008 struct ipv6hdr *ip6h = (struct ipv6hdr *)(skb->data + offset);
1009
1010 offset += sizeof(struct ipv6hdr);
1011 if (ip6h->nexthdr != NEXTHDR_TCP &&
1012 ip6h->nexthdr != NEXTHDR_UDP) {
1013 struct ipv6_opt_hdr *ehdr =
1014 (struct ipv6_opt_hdr *)(skb->data + offset);
1015
1016 /* offending pkt: 2nd byte following IPv6 hdr is 0xff */
1017 if (ehdr->hdrlen == 0xff)
1018 return true;
1019 }
1020 }
1021 return false;
1022 }
1023
be_vlan_tag_tx_chk(struct be_adapter * adapter,struct sk_buff * skb)1024 static int be_vlan_tag_tx_chk(struct be_adapter *adapter, struct sk_buff *skb)
1025 {
1026 return skb_vlan_tag_present(skb) || adapter->pvid || adapter->qnq_vid;
1027 }
1028
be_ipv6_tx_stall_chk(struct be_adapter * adapter,struct sk_buff * skb)1029 static int be_ipv6_tx_stall_chk(struct be_adapter *adapter, struct sk_buff *skb)
1030 {
1031 return BE3_chip(adapter) && be_ipv6_exthdr_check(skb);
1032 }
1033
be_lancer_xmit_workarounds(struct be_adapter * adapter,struct sk_buff * skb,struct be_wrb_params * wrb_params)1034 static struct sk_buff *be_lancer_xmit_workarounds(struct be_adapter *adapter,
1035 struct sk_buff *skb,
1036 struct be_wrb_params
1037 *wrb_params)
1038 {
1039 struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data;
1040 unsigned int eth_hdr_len;
1041 struct iphdr *ip;
1042
1043 /* For padded packets, BE HW modifies tot_len field in IP header
1044 * incorrecly when VLAN tag is inserted by HW.
1045 * For padded packets, Lancer computes incorrect checksum.
1046 */
1047 eth_hdr_len = ntohs(skb->protocol) == ETH_P_8021Q ?
1048 VLAN_ETH_HLEN : ETH_HLEN;
1049 if (skb->len <= 60 &&
1050 (lancer_chip(adapter) || skb_vlan_tag_present(skb)) &&
1051 is_ipv4_pkt(skb)) {
1052 ip = (struct iphdr *)ip_hdr(skb);
1053 pskb_trim(skb, eth_hdr_len + ntohs(ip->tot_len));
1054 }
1055
1056 /* If vlan tag is already inlined in the packet, skip HW VLAN
1057 * tagging in pvid-tagging mode
1058 */
1059 if (be_pvid_tagging_enabled(adapter) &&
1060 veh->h_vlan_proto == htons(ETH_P_8021Q))
1061 BE_WRB_F_SET(wrb_params->features, VLAN_SKIP_HW, 1);
1062
1063 /* HW has a bug wherein it will calculate CSUM for VLAN
1064 * pkts even though it is disabled.
1065 * Manually insert VLAN in pkt.
1066 */
1067 if (skb->ip_summed != CHECKSUM_PARTIAL &&
1068 skb_vlan_tag_present(skb)) {
1069 skb = be_insert_vlan_in_pkt(adapter, skb, wrb_params);
1070 if (unlikely(!skb))
1071 goto err;
1072 }
1073
1074 /* HW may lockup when VLAN HW tagging is requested on
1075 * certain ipv6 packets. Drop such pkts if the HW workaround to
1076 * skip HW tagging is not enabled by FW.
1077 */
1078 if (unlikely(be_ipv6_tx_stall_chk(adapter, skb) &&
1079 (adapter->pvid || adapter->qnq_vid) &&
1080 !qnq_async_evt_rcvd(adapter)))
1081 goto tx_drop;
1082
1083 /* Manual VLAN tag insertion to prevent:
1084 * ASIC lockup when the ASIC inserts VLAN tag into
1085 * certain ipv6 packets. Insert VLAN tags in driver,
1086 * and set event, completion, vlan bits accordingly
1087 * in the Tx WRB.
1088 */
1089 if (be_ipv6_tx_stall_chk(adapter, skb) &&
1090 be_vlan_tag_tx_chk(adapter, skb)) {
1091 skb = be_insert_vlan_in_pkt(adapter, skb, wrb_params);
1092 if (unlikely(!skb))
1093 goto err;
1094 }
1095
1096 return skb;
1097 tx_drop:
1098 dev_kfree_skb_any(skb);
1099 err:
1100 return NULL;
1101 }
1102
be_xmit_workarounds(struct be_adapter * adapter,struct sk_buff * skb,struct be_wrb_params * wrb_params)1103 static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
1104 struct sk_buff *skb,
1105 struct be_wrb_params *wrb_params)
1106 {
1107 /* Lancer, SH-R ASICs have a bug wherein Packets that are 32 bytes or
1108 * less may cause a transmit stall on that port. So the work-around is
1109 * to pad short packets (<= 32 bytes) to a 36-byte length.
1110 */
1111 if (unlikely(!BEx_chip(adapter) && skb->len <= 32)) {
1112 if (skb_put_padto(skb, 36))
1113 return NULL;
1114 }
1115
1116 if (BEx_chip(adapter) || lancer_chip(adapter)) {
1117 skb = be_lancer_xmit_workarounds(adapter, skb, wrb_params);
1118 if (!skb)
1119 return NULL;
1120 }
1121
1122 return skb;
1123 }
1124
be_xmit_flush(struct be_adapter * adapter,struct be_tx_obj * txo)1125 static void be_xmit_flush(struct be_adapter *adapter, struct be_tx_obj *txo)
1126 {
1127 struct be_queue_info *txq = &txo->q;
1128 struct be_eth_hdr_wrb *hdr = queue_index_node(txq, txo->last_req_hdr);
1129
1130 /* Mark the last request eventable if it hasn't been marked already */
1131 if (!(hdr->dw[2] & cpu_to_le32(TX_HDR_WRB_EVT)))
1132 hdr->dw[2] |= cpu_to_le32(TX_HDR_WRB_EVT | TX_HDR_WRB_COMPL);
1133
1134 /* compose a dummy wrb if there are odd set of wrbs to notify */
1135 if (!lancer_chip(adapter) && (txo->pend_wrb_cnt & 1)) {
1136 wrb_fill_dummy(queue_head_node(txq));
1137 queue_head_inc(txq);
1138 atomic_inc(&txq->used);
1139 txo->pend_wrb_cnt++;
1140 hdr->dw[2] &= ~cpu_to_le32(TX_HDR_WRB_NUM_MASK <<
1141 TX_HDR_WRB_NUM_SHIFT);
1142 hdr->dw[2] |= cpu_to_le32((txo->last_req_wrb_cnt + 1) <<
1143 TX_HDR_WRB_NUM_SHIFT);
1144 }
1145 be_txq_notify(adapter, txo, txo->pend_wrb_cnt);
1146 txo->pend_wrb_cnt = 0;
1147 }
1148
be_xmit(struct sk_buff * skb,struct net_device * netdev)1149 static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)
1150 {
1151 struct be_adapter *adapter = netdev_priv(netdev);
1152 u16 q_idx = skb_get_queue_mapping(skb);
1153 struct be_tx_obj *txo = &adapter->tx_obj[q_idx];
1154 struct be_wrb_params wrb_params = { 0 };
1155 bool flush = !skb->xmit_more;
1156 u16 wrb_cnt;
1157
1158 skb = be_xmit_workarounds(adapter, skb, &wrb_params);
1159 if (unlikely(!skb))
1160 goto drop;
1161
1162 be_get_wrb_params_from_skb(adapter, skb, &wrb_params);
1163
1164 wrb_cnt = be_xmit_enqueue(adapter, txo, skb, &wrb_params);
1165 if (unlikely(!wrb_cnt)) {
1166 dev_kfree_skb_any(skb);
1167 goto drop;
1168 }
1169
1170 if (be_is_txq_full(txo)) {
1171 netif_stop_subqueue(netdev, q_idx);
1172 tx_stats(txo)->tx_stops++;
1173 }
1174
1175 if (flush || __netif_subqueue_stopped(netdev, q_idx))
1176 be_xmit_flush(adapter, txo);
1177
1178 return NETDEV_TX_OK;
1179 drop:
1180 tx_stats(txo)->tx_drv_drops++;
1181 /* Flush the already enqueued tx requests */
1182 if (flush && txo->pend_wrb_cnt)
1183 be_xmit_flush(adapter, txo);
1184
1185 return NETDEV_TX_OK;
1186 }
1187
be_change_mtu(struct net_device * netdev,int new_mtu)1188 static int be_change_mtu(struct net_device *netdev, int new_mtu)
1189 {
1190 struct be_adapter *adapter = netdev_priv(netdev);
1191 struct device *dev = &adapter->pdev->dev;
1192
1193 if (new_mtu < BE_MIN_MTU || new_mtu > BE_MAX_MTU) {
1194 dev_info(dev, "MTU must be between %d and %d bytes\n",
1195 BE_MIN_MTU, BE_MAX_MTU);
1196 return -EINVAL;
1197 }
1198
1199 dev_info(dev, "MTU changed from %d to %d bytes\n",
1200 netdev->mtu, new_mtu);
1201 netdev->mtu = new_mtu;
1202 return 0;
1203 }
1204
be_in_all_promisc(struct be_adapter * adapter)1205 static inline bool be_in_all_promisc(struct be_adapter *adapter)
1206 {
1207 return (adapter->if_flags & BE_IF_FLAGS_ALL_PROMISCUOUS) ==
1208 BE_IF_FLAGS_ALL_PROMISCUOUS;
1209 }
1210
be_set_vlan_promisc(struct be_adapter * adapter)1211 static int be_set_vlan_promisc(struct be_adapter *adapter)
1212 {
1213 struct device *dev = &adapter->pdev->dev;
1214 int status;
1215
1216 if (adapter->if_flags & BE_IF_FLAGS_VLAN_PROMISCUOUS)
1217 return 0;
1218
1219 status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_VLAN_PROMISCUOUS, ON);
1220 if (!status) {
1221 dev_info(dev, "Enabled VLAN promiscuous mode\n");
1222 adapter->if_flags |= BE_IF_FLAGS_VLAN_PROMISCUOUS;
1223 } else {
1224 dev_err(dev, "Failed to enable VLAN promiscuous mode\n");
1225 }
1226 return status;
1227 }
1228
be_clear_vlan_promisc(struct be_adapter * adapter)1229 static int be_clear_vlan_promisc(struct be_adapter *adapter)
1230 {
1231 struct device *dev = &adapter->pdev->dev;
1232 int status;
1233
1234 status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_VLAN_PROMISCUOUS, OFF);
1235 if (!status) {
1236 dev_info(dev, "Disabling VLAN promiscuous mode\n");
1237 adapter->if_flags &= ~BE_IF_FLAGS_VLAN_PROMISCUOUS;
1238 }
1239 return status;
1240 }
1241
1242 /*
1243 * A max of 64 (BE_NUM_VLANS_SUPPORTED) vlans can be configured in BE.
1244 * If the user configures more, place BE in vlan promiscuous mode.
1245 */
be_vid_config(struct be_adapter * adapter)1246 static int be_vid_config(struct be_adapter *adapter)
1247 {
1248 struct device *dev = &adapter->pdev->dev;
1249 u16 vids[BE_NUM_VLANS_SUPPORTED];
1250 u16 num = 0, i = 0;
1251 int status = 0;
1252
1253 /* No need to further configure vids if in promiscuous mode */
1254 if (be_in_all_promisc(adapter))
1255 return 0;
1256
1257 if (adapter->vlans_added > be_max_vlans(adapter))
1258 return be_set_vlan_promisc(adapter);
1259
1260 /* Construct VLAN Table to give to HW */
1261 for_each_set_bit(i, adapter->vids, VLAN_N_VID)
1262 vids[num++] = cpu_to_le16(i);
1263
1264 status = be_cmd_vlan_config(adapter, adapter->if_handle, vids, num, 0);
1265 if (status) {
1266 dev_err(dev, "Setting HW VLAN filtering failed\n");
1267 /* Set to VLAN promisc mode as setting VLAN filter failed */
1268 if (addl_status(status) ==
1269 MCC_ADDL_STATUS_INSUFFICIENT_RESOURCES)
1270 return be_set_vlan_promisc(adapter);
1271 } else if (adapter->if_flags & BE_IF_FLAGS_VLAN_PROMISCUOUS) {
1272 status = be_clear_vlan_promisc(adapter);
1273 }
1274 return status;
1275 }
1276
be_vlan_add_vid(struct net_device * netdev,__be16 proto,u16 vid)1277 static int be_vlan_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
1278 {
1279 struct be_adapter *adapter = netdev_priv(netdev);
1280 int status = 0;
1281
1282 /* Packets with VID 0 are always received by Lancer by default */
1283 if (lancer_chip(adapter) && vid == 0)
1284 return status;
1285
1286 if (test_bit(vid, adapter->vids))
1287 return status;
1288
1289 set_bit(vid, adapter->vids);
1290 adapter->vlans_added++;
1291
1292 status = be_vid_config(adapter);
1293 if (status) {
1294 adapter->vlans_added--;
1295 clear_bit(vid, adapter->vids);
1296 }
1297
1298 return status;
1299 }
1300
be_vlan_rem_vid(struct net_device * netdev,__be16 proto,u16 vid)1301 static int be_vlan_rem_vid(struct net_device *netdev, __be16 proto, u16 vid)
1302 {
1303 struct be_adapter *adapter = netdev_priv(netdev);
1304
1305 /* Packets with VID 0 are always received by Lancer by default */
1306 if (lancer_chip(adapter) && vid == 0)
1307 return 0;
1308
1309 clear_bit(vid, adapter->vids);
1310 adapter->vlans_added--;
1311
1312 return be_vid_config(adapter);
1313 }
1314
be_clear_all_promisc(struct be_adapter * adapter)1315 static void be_clear_all_promisc(struct be_adapter *adapter)
1316 {
1317 be_cmd_rx_filter(adapter, BE_IF_FLAGS_ALL_PROMISCUOUS, OFF);
1318 adapter->if_flags &= ~BE_IF_FLAGS_ALL_PROMISCUOUS;
1319 }
1320
be_set_all_promisc(struct be_adapter * adapter)1321 static void be_set_all_promisc(struct be_adapter *adapter)
1322 {
1323 be_cmd_rx_filter(adapter, BE_IF_FLAGS_ALL_PROMISCUOUS, ON);
1324 adapter->if_flags |= BE_IF_FLAGS_ALL_PROMISCUOUS;
1325 }
1326
be_set_mc_promisc(struct be_adapter * adapter)1327 static void be_set_mc_promisc(struct be_adapter *adapter)
1328 {
1329 int status;
1330
1331 if (adapter->if_flags & BE_IF_FLAGS_MCAST_PROMISCUOUS)
1332 return;
1333
1334 status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_MCAST_PROMISCUOUS, ON);
1335 if (!status)
1336 adapter->if_flags |= BE_IF_FLAGS_MCAST_PROMISCUOUS;
1337 }
1338
be_set_mc_list(struct be_adapter * adapter)1339 static void be_set_mc_list(struct be_adapter *adapter)
1340 {
1341 int status;
1342
1343 status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_MULTICAST, ON);
1344 if (!status)
1345 adapter->if_flags &= ~BE_IF_FLAGS_MCAST_PROMISCUOUS;
1346 else
1347 be_set_mc_promisc(adapter);
1348 }
1349
be_set_uc_list(struct be_adapter * adapter)1350 static void be_set_uc_list(struct be_adapter *adapter)
1351 {
1352 struct netdev_hw_addr *ha;
1353 int i = 1; /* First slot is claimed by the Primary MAC */
1354
1355 for (; adapter->uc_macs > 0; adapter->uc_macs--, i++)
1356 be_cmd_pmac_del(adapter, adapter->if_handle,
1357 adapter->pmac_id[i], 0);
1358
1359 if (netdev_uc_count(adapter->netdev) > be_max_uc(adapter)) {
1360 be_set_all_promisc(adapter);
1361 return;
1362 }
1363
1364 netdev_for_each_uc_addr(ha, adapter->netdev) {
1365 adapter->uc_macs++; /* First slot is for Primary MAC */
1366 be_cmd_pmac_add(adapter, (u8 *)ha->addr, adapter->if_handle,
1367 &adapter->pmac_id[adapter->uc_macs], 0);
1368 }
1369 }
1370
be_clear_uc_list(struct be_adapter * adapter)1371 static void be_clear_uc_list(struct be_adapter *adapter)
1372 {
1373 int i;
1374
1375 for (i = 1; i < (adapter->uc_macs + 1); i++)
1376 be_cmd_pmac_del(adapter, adapter->if_handle,
1377 adapter->pmac_id[i], 0);
1378 adapter->uc_macs = 0;
1379 }
1380
be_set_rx_mode(struct net_device * netdev)1381 static void be_set_rx_mode(struct net_device *netdev)
1382 {
1383 struct be_adapter *adapter = netdev_priv(netdev);
1384
1385 if (netdev->flags & IFF_PROMISC) {
1386 be_set_all_promisc(adapter);
1387 return;
1388 }
1389
1390 /* Interface was previously in promiscuous mode; disable it */
1391 if (be_in_all_promisc(adapter)) {
1392 be_clear_all_promisc(adapter);
1393 if (adapter->vlans_added)
1394 be_vid_config(adapter);
1395 }
1396
1397 /* Enable multicast promisc if num configured exceeds what we support */
1398 if (netdev->flags & IFF_ALLMULTI ||
1399 netdev_mc_count(netdev) > be_max_mc(adapter)) {
1400 be_set_mc_promisc(adapter);
1401 return;
1402 }
1403
1404 if (netdev_uc_count(netdev) != adapter->uc_macs)
1405 be_set_uc_list(adapter);
1406
1407 be_set_mc_list(adapter);
1408 }
1409
be_set_vf_mac(struct net_device * netdev,int vf,u8 * mac)1410 static int be_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
1411 {
1412 struct be_adapter *adapter = netdev_priv(netdev);
1413 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1414 int status;
1415
1416 if (!sriov_enabled(adapter))
1417 return -EPERM;
1418
1419 if (!is_valid_ether_addr(mac) || vf >= adapter->num_vfs)
1420 return -EINVAL;
1421
1422 /* Proceed further only if user provided MAC is different
1423 * from active MAC
1424 */
1425 if (ether_addr_equal(mac, vf_cfg->mac_addr))
1426 return 0;
1427
1428 if (BEx_chip(adapter)) {
1429 be_cmd_pmac_del(adapter, vf_cfg->if_handle, vf_cfg->pmac_id,
1430 vf + 1);
1431
1432 status = be_cmd_pmac_add(adapter, mac, vf_cfg->if_handle,
1433 &vf_cfg->pmac_id, vf + 1);
1434 } else {
1435 status = be_cmd_set_mac(adapter, mac, vf_cfg->if_handle,
1436 vf + 1);
1437 }
1438
1439 if (status) {
1440 dev_err(&adapter->pdev->dev, "MAC %pM set on VF %d Failed: %#x",
1441 mac, vf, status);
1442 return be_cmd_status(status);
1443 }
1444
1445 ether_addr_copy(vf_cfg->mac_addr, mac);
1446
1447 return 0;
1448 }
1449
be_get_vf_config(struct net_device * netdev,int vf,struct ifla_vf_info * vi)1450 static int be_get_vf_config(struct net_device *netdev, int vf,
1451 struct ifla_vf_info *vi)
1452 {
1453 struct be_adapter *adapter = netdev_priv(netdev);
1454 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1455
1456 if (!sriov_enabled(adapter))
1457 return -EPERM;
1458
1459 if (vf >= adapter->num_vfs)
1460 return -EINVAL;
1461
1462 vi->vf = vf;
1463 vi->max_tx_rate = vf_cfg->tx_rate;
1464 vi->min_tx_rate = 0;
1465 vi->vlan = vf_cfg->vlan_tag & VLAN_VID_MASK;
1466 vi->qos = vf_cfg->vlan_tag >> VLAN_PRIO_SHIFT;
1467 memcpy(&vi->mac, vf_cfg->mac_addr, ETH_ALEN);
1468 vi->linkstate = adapter->vf_cfg[vf].plink_tracking;
1469
1470 return 0;
1471 }
1472
be_set_vf_tvt(struct be_adapter * adapter,int vf,u16 vlan)1473 static int be_set_vf_tvt(struct be_adapter *adapter, int vf, u16 vlan)
1474 {
1475 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1476 u16 vids[BE_NUM_VLANS_SUPPORTED];
1477 int vf_if_id = vf_cfg->if_handle;
1478 int status;
1479
1480 /* Enable Transparent VLAN Tagging */
1481 status = be_cmd_set_hsw_config(adapter, vlan, vf + 1, vf_if_id, 0);
1482 if (status)
1483 return status;
1484
1485 /* Clear pre-programmed VLAN filters on VF if any, if TVT is enabled */
1486 vids[0] = 0;
1487 status = be_cmd_vlan_config(adapter, vf_if_id, vids, 1, vf + 1);
1488 if (!status)
1489 dev_info(&adapter->pdev->dev,
1490 "Cleared guest VLANs on VF%d", vf);
1491
1492 /* After TVT is enabled, disallow VFs to program VLAN filters */
1493 if (vf_cfg->privileges & BE_PRIV_FILTMGMT) {
1494 status = be_cmd_set_fn_privileges(adapter, vf_cfg->privileges &
1495 ~BE_PRIV_FILTMGMT, vf + 1);
1496 if (!status)
1497 vf_cfg->privileges &= ~BE_PRIV_FILTMGMT;
1498 }
1499 return 0;
1500 }
1501
be_clear_vf_tvt(struct be_adapter * adapter,int vf)1502 static int be_clear_vf_tvt(struct be_adapter *adapter, int vf)
1503 {
1504 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1505 struct device *dev = &adapter->pdev->dev;
1506 int status;
1507
1508 /* Reset Transparent VLAN Tagging. */
1509 status = be_cmd_set_hsw_config(adapter, BE_RESET_VLAN_TAG_ID, vf + 1,
1510 vf_cfg->if_handle, 0);
1511 if (status)
1512 return status;
1513
1514 /* Allow VFs to program VLAN filtering */
1515 if (!(vf_cfg->privileges & BE_PRIV_FILTMGMT)) {
1516 status = be_cmd_set_fn_privileges(adapter, vf_cfg->privileges |
1517 BE_PRIV_FILTMGMT, vf + 1);
1518 if (!status) {
1519 vf_cfg->privileges |= BE_PRIV_FILTMGMT;
1520 dev_info(dev, "VF%d: FILTMGMT priv enabled", vf);
1521 }
1522 }
1523
1524 dev_info(dev,
1525 "Disable/re-enable i/f in VM to clear Transparent VLAN tag");
1526 return 0;
1527 }
1528
be_set_vf_vlan(struct net_device * netdev,int vf,u16 vlan,u8 qos)1529 static int be_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos)
1530 {
1531 struct be_adapter *adapter = netdev_priv(netdev);
1532 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1533 int status;
1534
1535 if (!sriov_enabled(adapter))
1536 return -EPERM;
1537
1538 if (vf >= adapter->num_vfs || vlan > 4095 || qos > 7)
1539 return -EINVAL;
1540
1541 if (vlan || qos) {
1542 vlan |= qos << VLAN_PRIO_SHIFT;
1543 status = be_set_vf_tvt(adapter, vf, vlan);
1544 } else {
1545 status = be_clear_vf_tvt(adapter, vf);
1546 }
1547
1548 if (status) {
1549 dev_err(&adapter->pdev->dev,
1550 "VLAN %d config on VF %d failed : %#x\n", vlan, vf,
1551 status);
1552 return be_cmd_status(status);
1553 }
1554
1555 vf_cfg->vlan_tag = vlan;
1556 return 0;
1557 }
1558
be_set_vf_tx_rate(struct net_device * netdev,int vf,int min_tx_rate,int max_tx_rate)1559 static int be_set_vf_tx_rate(struct net_device *netdev, int vf,
1560 int min_tx_rate, int max_tx_rate)
1561 {
1562 struct be_adapter *adapter = netdev_priv(netdev);
1563 struct device *dev = &adapter->pdev->dev;
1564 int percent_rate, status = 0;
1565 u16 link_speed = 0;
1566 u8 link_status;
1567
1568 if (!sriov_enabled(adapter))
1569 return -EPERM;
1570
1571 if (vf >= adapter->num_vfs)
1572 return -EINVAL;
1573
1574 if (min_tx_rate)
1575 return -EINVAL;
1576
1577 if (!max_tx_rate)
1578 goto config_qos;
1579
1580 status = be_cmd_link_status_query(adapter, &link_speed,
1581 &link_status, 0);
1582 if (status)
1583 goto err;
1584
1585 if (!link_status) {
1586 dev_err(dev, "TX-rate setting not allowed when link is down\n");
1587 status = -ENETDOWN;
1588 goto err;
1589 }
1590
1591 if (max_tx_rate < 100 || max_tx_rate > link_speed) {
1592 dev_err(dev, "TX-rate must be between 100 and %d Mbps\n",
1593 link_speed);
1594 status = -EINVAL;
1595 goto err;
1596 }
1597
1598 /* On Skyhawk the QOS setting must be done only as a % value */
1599 percent_rate = link_speed / 100;
1600 if (skyhawk_chip(adapter) && (max_tx_rate % percent_rate)) {
1601 dev_err(dev, "TX-rate must be a multiple of %d Mbps\n",
1602 percent_rate);
1603 status = -EINVAL;
1604 goto err;
1605 }
1606
1607 config_qos:
1608 status = be_cmd_config_qos(adapter, max_tx_rate, link_speed, vf + 1);
1609 if (status)
1610 goto err;
1611
1612 adapter->vf_cfg[vf].tx_rate = max_tx_rate;
1613 return 0;
1614
1615 err:
1616 dev_err(dev, "TX-rate setting of %dMbps on VF%d failed\n",
1617 max_tx_rate, vf);
1618 return be_cmd_status(status);
1619 }
1620
be_set_vf_link_state(struct net_device * netdev,int vf,int link_state)1621 static int be_set_vf_link_state(struct net_device *netdev, int vf,
1622 int link_state)
1623 {
1624 struct be_adapter *adapter = netdev_priv(netdev);
1625 int status;
1626
1627 if (!sriov_enabled(adapter))
1628 return -EPERM;
1629
1630 if (vf >= adapter->num_vfs)
1631 return -EINVAL;
1632
1633 status = be_cmd_set_logical_link_config(adapter, link_state, vf+1);
1634 if (status) {
1635 dev_err(&adapter->pdev->dev,
1636 "Link state change on VF %d failed: %#x\n", vf, status);
1637 return be_cmd_status(status);
1638 }
1639
1640 adapter->vf_cfg[vf].plink_tracking = link_state;
1641
1642 return 0;
1643 }
1644
be_aic_update(struct be_aic_obj * aic,u64 rx_pkts,u64 tx_pkts,ulong now)1645 static void be_aic_update(struct be_aic_obj *aic, u64 rx_pkts, u64 tx_pkts,
1646 ulong now)
1647 {
1648 aic->rx_pkts_prev = rx_pkts;
1649 aic->tx_reqs_prev = tx_pkts;
1650 aic->jiffies = now;
1651 }
1652
be_eqd_update(struct be_adapter * adapter)1653 static void be_eqd_update(struct be_adapter *adapter)
1654 {
1655 struct be_set_eqd set_eqd[MAX_EVT_QS];
1656 int eqd, i, num = 0, start;
1657 struct be_aic_obj *aic;
1658 struct be_eq_obj *eqo;
1659 struct be_rx_obj *rxo;
1660 struct be_tx_obj *txo;
1661 u64 rx_pkts, tx_pkts;
1662 ulong now;
1663 u32 pps, delta;
1664
1665 for_all_evt_queues(adapter, eqo, i) {
1666 aic = &adapter->aic_obj[eqo->idx];
1667 if (!aic->enable) {
1668 if (aic->jiffies)
1669 aic->jiffies = 0;
1670 eqd = aic->et_eqd;
1671 goto modify_eqd;
1672 }
1673
1674 rxo = &adapter->rx_obj[eqo->idx];
1675 do {
1676 start = u64_stats_fetch_begin_irq(&rxo->stats.sync);
1677 rx_pkts = rxo->stats.rx_pkts;
1678 } while (u64_stats_fetch_retry_irq(&rxo->stats.sync, start));
1679
1680 txo = &adapter->tx_obj[eqo->idx];
1681 do {
1682 start = u64_stats_fetch_begin_irq(&txo->stats.sync);
1683 tx_pkts = txo->stats.tx_reqs;
1684 } while (u64_stats_fetch_retry_irq(&txo->stats.sync, start));
1685
1686 /* Skip, if wrapped around or first calculation */
1687 now = jiffies;
1688 if (!aic->jiffies || time_before(now, aic->jiffies) ||
1689 rx_pkts < aic->rx_pkts_prev ||
1690 tx_pkts < aic->tx_reqs_prev) {
1691 be_aic_update(aic, rx_pkts, tx_pkts, now);
1692 continue;
1693 }
1694
1695 delta = jiffies_to_msecs(now - aic->jiffies);
1696 pps = (((u32)(rx_pkts - aic->rx_pkts_prev) * 1000) / delta) +
1697 (((u32)(tx_pkts - aic->tx_reqs_prev) * 1000) / delta);
1698 eqd = (pps / 15000) << 2;
1699
1700 if (eqd < 8)
1701 eqd = 0;
1702 eqd = min_t(u32, eqd, aic->max_eqd);
1703 eqd = max_t(u32, eqd, aic->min_eqd);
1704
1705 be_aic_update(aic, rx_pkts, tx_pkts, now);
1706 modify_eqd:
1707 if (eqd != aic->prev_eqd) {
1708 set_eqd[num].delay_multiplier = (eqd * 65)/100;
1709 set_eqd[num].eq_id = eqo->q.id;
1710 aic->prev_eqd = eqd;
1711 num++;
1712 }
1713 }
1714
1715 if (num)
1716 be_cmd_modify_eqd(adapter, set_eqd, num);
1717 }
1718
be_rx_stats_update(struct be_rx_obj * rxo,struct be_rx_compl_info * rxcp)1719 static void be_rx_stats_update(struct be_rx_obj *rxo,
1720 struct be_rx_compl_info *rxcp)
1721 {
1722 struct be_rx_stats *stats = rx_stats(rxo);
1723
1724 u64_stats_update_begin(&stats->sync);
1725 stats->rx_compl++;
1726 stats->rx_bytes += rxcp->pkt_size;
1727 stats->rx_pkts++;
1728 if (rxcp->pkt_type == BE_MULTICAST_PACKET)
1729 stats->rx_mcast_pkts++;
1730 if (rxcp->err)
1731 stats->rx_compl_err++;
1732 u64_stats_update_end(&stats->sync);
1733 }
1734
csum_passed(struct be_rx_compl_info * rxcp)1735 static inline bool csum_passed(struct be_rx_compl_info *rxcp)
1736 {
1737 /* L4 checksum is not reliable for non TCP/UDP packets.
1738 * Also ignore ipcksm for ipv6 pkts
1739 */
1740 return (rxcp->tcpf || rxcp->udpf) && rxcp->l4_csum &&
1741 (rxcp->ip_csum || rxcp->ipv6) && !rxcp->err;
1742 }
1743
get_rx_page_info(struct be_rx_obj * rxo)1744 static struct be_rx_page_info *get_rx_page_info(struct be_rx_obj *rxo)
1745 {
1746 struct be_adapter *adapter = rxo->adapter;
1747 struct be_rx_page_info *rx_page_info;
1748 struct be_queue_info *rxq = &rxo->q;
1749 u16 frag_idx = rxq->tail;
1750
1751 rx_page_info = &rxo->page_info_tbl[frag_idx];
1752 BUG_ON(!rx_page_info->page);
1753
1754 if (rx_page_info->last_frag) {
1755 dma_unmap_page(&adapter->pdev->dev,
1756 dma_unmap_addr(rx_page_info, bus),
1757 adapter->big_page_size, DMA_FROM_DEVICE);
1758 rx_page_info->last_frag = false;
1759 } else {
1760 dma_sync_single_for_cpu(&adapter->pdev->dev,
1761 dma_unmap_addr(rx_page_info, bus),
1762 rx_frag_size, DMA_FROM_DEVICE);
1763 }
1764
1765 queue_tail_inc(rxq);
1766 atomic_dec(&rxq->used);
1767 return rx_page_info;
1768 }
1769
1770 /* Throwaway the data in the Rx completion */
be_rx_compl_discard(struct be_rx_obj * rxo,struct be_rx_compl_info * rxcp)1771 static void be_rx_compl_discard(struct be_rx_obj *rxo,
1772 struct be_rx_compl_info *rxcp)
1773 {
1774 struct be_rx_page_info *page_info;
1775 u16 i, num_rcvd = rxcp->num_rcvd;
1776
1777 for (i = 0; i < num_rcvd; i++) {
1778 page_info = get_rx_page_info(rxo);
1779 put_page(page_info->page);
1780 memset(page_info, 0, sizeof(*page_info));
1781 }
1782 }
1783
1784 /*
1785 * skb_fill_rx_data forms a complete skb for an ether frame
1786 * indicated by rxcp.
1787 */
skb_fill_rx_data(struct be_rx_obj * rxo,struct sk_buff * skb,struct be_rx_compl_info * rxcp)1788 static void skb_fill_rx_data(struct be_rx_obj *rxo, struct sk_buff *skb,
1789 struct be_rx_compl_info *rxcp)
1790 {
1791 struct be_rx_page_info *page_info;
1792 u16 i, j;
1793 u16 hdr_len, curr_frag_len, remaining;
1794 u8 *start;
1795
1796 page_info = get_rx_page_info(rxo);
1797 start = page_address(page_info->page) + page_info->page_offset;
1798 prefetch(start);
1799
1800 /* Copy data in the first descriptor of this completion */
1801 curr_frag_len = min(rxcp->pkt_size, rx_frag_size);
1802
1803 skb->len = curr_frag_len;
1804 if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
1805 memcpy(skb->data, start, curr_frag_len);
1806 /* Complete packet has now been moved to data */
1807 put_page(page_info->page);
1808 skb->data_len = 0;
1809 skb->tail += curr_frag_len;
1810 } else {
1811 hdr_len = ETH_HLEN;
1812 memcpy(skb->data, start, hdr_len);
1813 skb_shinfo(skb)->nr_frags = 1;
1814 skb_frag_set_page(skb, 0, page_info->page);
1815 skb_shinfo(skb)->frags[0].page_offset =
1816 page_info->page_offset + hdr_len;
1817 skb_frag_size_set(&skb_shinfo(skb)->frags[0],
1818 curr_frag_len - hdr_len);
1819 skb->data_len = curr_frag_len - hdr_len;
1820 skb->truesize += rx_frag_size;
1821 skb->tail += hdr_len;
1822 }
1823 page_info->page = NULL;
1824
1825 if (rxcp->pkt_size <= rx_frag_size) {
1826 BUG_ON(rxcp->num_rcvd != 1);
1827 return;
1828 }
1829
1830 /* More frags present for this completion */
1831 remaining = rxcp->pkt_size - curr_frag_len;
1832 for (i = 1, j = 0; i < rxcp->num_rcvd; i++) {
1833 page_info = get_rx_page_info(rxo);
1834 curr_frag_len = min(remaining, rx_frag_size);
1835
1836 /* Coalesce all frags from the same physical page in one slot */
1837 if (page_info->page_offset == 0) {
1838 /* Fresh page */
1839 j++;
1840 skb_frag_set_page(skb, j, page_info->page);
1841 skb_shinfo(skb)->frags[j].page_offset =
1842 page_info->page_offset;
1843 skb_frag_size_set(&skb_shinfo(skb)->frags[j], 0);
1844 skb_shinfo(skb)->nr_frags++;
1845 } else {
1846 put_page(page_info->page);
1847 }
1848
1849 skb_frag_size_add(&skb_shinfo(skb)->frags[j], curr_frag_len);
1850 skb->len += curr_frag_len;
1851 skb->data_len += curr_frag_len;
1852 skb->truesize += rx_frag_size;
1853 remaining -= curr_frag_len;
1854 page_info->page = NULL;
1855 }
1856 BUG_ON(j > MAX_SKB_FRAGS);
1857 }
1858
1859 /* Process the RX completion indicated by rxcp when GRO is disabled */
be_rx_compl_process(struct be_rx_obj * rxo,struct napi_struct * napi,struct be_rx_compl_info * rxcp)1860 static void be_rx_compl_process(struct be_rx_obj *rxo, struct napi_struct *napi,
1861 struct be_rx_compl_info *rxcp)
1862 {
1863 struct be_adapter *adapter = rxo->adapter;
1864 struct net_device *netdev = adapter->netdev;
1865 struct sk_buff *skb;
1866
1867 skb = netdev_alloc_skb_ip_align(netdev, BE_RX_SKB_ALLOC_SIZE);
1868 if (unlikely(!skb)) {
1869 rx_stats(rxo)->rx_drops_no_skbs++;
1870 be_rx_compl_discard(rxo, rxcp);
1871 return;
1872 }
1873
1874 skb_fill_rx_data(rxo, skb, rxcp);
1875
1876 if (likely((netdev->features & NETIF_F_RXCSUM) && csum_passed(rxcp)))
1877 skb->ip_summed = CHECKSUM_UNNECESSARY;
1878 else
1879 skb_checksum_none_assert(skb);
1880
1881 skb->protocol = eth_type_trans(skb, netdev);
1882 skb_record_rx_queue(skb, rxo - &adapter->rx_obj[0]);
1883 if (netdev->features & NETIF_F_RXHASH)
1884 skb_set_hash(skb, rxcp->rss_hash, PKT_HASH_TYPE_L3);
1885
1886 skb->csum_level = rxcp->tunneled;
1887 skb_mark_napi_id(skb, napi);
1888
1889 if (rxcp->vlanf)
1890 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag);
1891
1892 netif_receive_skb(skb);
1893 }
1894
1895 /* Process the RX completion indicated by rxcp when GRO is enabled */
be_rx_compl_process_gro(struct be_rx_obj * rxo,struct napi_struct * napi,struct be_rx_compl_info * rxcp)1896 static void be_rx_compl_process_gro(struct be_rx_obj *rxo,
1897 struct napi_struct *napi,
1898 struct be_rx_compl_info *rxcp)
1899 {
1900 struct be_adapter *adapter = rxo->adapter;
1901 struct be_rx_page_info *page_info;
1902 struct sk_buff *skb = NULL;
1903 u16 remaining, curr_frag_len;
1904 u16 i, j;
1905
1906 skb = napi_get_frags(napi);
1907 if (!skb) {
1908 be_rx_compl_discard(rxo, rxcp);
1909 return;
1910 }
1911
1912 remaining = rxcp->pkt_size;
1913 for (i = 0, j = -1; i < rxcp->num_rcvd; i++) {
1914 page_info = get_rx_page_info(rxo);
1915
1916 curr_frag_len = min(remaining, rx_frag_size);
1917
1918 /* Coalesce all frags from the same physical page in one slot */
1919 if (i == 0 || page_info->page_offset == 0) {
1920 /* First frag or Fresh page */
1921 j++;
1922 skb_frag_set_page(skb, j, page_info->page);
1923 skb_shinfo(skb)->frags[j].page_offset =
1924 page_info->page_offset;
1925 skb_frag_size_set(&skb_shinfo(skb)->frags[j], 0);
1926 } else {
1927 put_page(page_info->page);
1928 }
1929 skb_frag_size_add(&skb_shinfo(skb)->frags[j], curr_frag_len);
1930 skb->truesize += rx_frag_size;
1931 remaining -= curr_frag_len;
1932 memset(page_info, 0, sizeof(*page_info));
1933 }
1934 BUG_ON(j > MAX_SKB_FRAGS);
1935
1936 skb_shinfo(skb)->nr_frags = j + 1;
1937 skb->len = rxcp->pkt_size;
1938 skb->data_len = rxcp->pkt_size;
1939 skb->ip_summed = CHECKSUM_UNNECESSARY;
1940 skb_record_rx_queue(skb, rxo - &adapter->rx_obj[0]);
1941 if (adapter->netdev->features & NETIF_F_RXHASH)
1942 skb_set_hash(skb, rxcp->rss_hash, PKT_HASH_TYPE_L3);
1943
1944 skb->csum_level = rxcp->tunneled;
1945 skb_mark_napi_id(skb, napi);
1946
1947 if (rxcp->vlanf)
1948 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag);
1949
1950 napi_gro_frags(napi);
1951 }
1952
be_parse_rx_compl_v1(struct be_eth_rx_compl * compl,struct be_rx_compl_info * rxcp)1953 static void be_parse_rx_compl_v1(struct be_eth_rx_compl *compl,
1954 struct be_rx_compl_info *rxcp)
1955 {
1956 rxcp->pkt_size = GET_RX_COMPL_V1_BITS(pktsize, compl);
1957 rxcp->vlanf = GET_RX_COMPL_V1_BITS(vtp, compl);
1958 rxcp->err = GET_RX_COMPL_V1_BITS(err, compl);
1959 rxcp->tcpf = GET_RX_COMPL_V1_BITS(tcpf, compl);
1960 rxcp->udpf = GET_RX_COMPL_V1_BITS(udpf, compl);
1961 rxcp->ip_csum = GET_RX_COMPL_V1_BITS(ipcksm, compl);
1962 rxcp->l4_csum = GET_RX_COMPL_V1_BITS(l4_cksm, compl);
1963 rxcp->ipv6 = GET_RX_COMPL_V1_BITS(ip_version, compl);
1964 rxcp->num_rcvd = GET_RX_COMPL_V1_BITS(numfrags, compl);
1965 rxcp->pkt_type = GET_RX_COMPL_V1_BITS(cast_enc, compl);
1966 rxcp->rss_hash = GET_RX_COMPL_V1_BITS(rsshash, compl);
1967 if (rxcp->vlanf) {
1968 rxcp->qnq = GET_RX_COMPL_V1_BITS(qnq, compl);
1969 rxcp->vlan_tag = GET_RX_COMPL_V1_BITS(vlan_tag, compl);
1970 }
1971 rxcp->port = GET_RX_COMPL_V1_BITS(port, compl);
1972 rxcp->tunneled =
1973 GET_RX_COMPL_V1_BITS(tunneled, compl);
1974 }
1975
be_parse_rx_compl_v0(struct be_eth_rx_compl * compl,struct be_rx_compl_info * rxcp)1976 static void be_parse_rx_compl_v0(struct be_eth_rx_compl *compl,
1977 struct be_rx_compl_info *rxcp)
1978 {
1979 rxcp->pkt_size = GET_RX_COMPL_V0_BITS(pktsize, compl);
1980 rxcp->vlanf = GET_RX_COMPL_V0_BITS(vtp, compl);
1981 rxcp->err = GET_RX_COMPL_V0_BITS(err, compl);
1982 rxcp->tcpf = GET_RX_COMPL_V0_BITS(tcpf, compl);
1983 rxcp->udpf = GET_RX_COMPL_V0_BITS(udpf, compl);
1984 rxcp->ip_csum = GET_RX_COMPL_V0_BITS(ipcksm, compl);
1985 rxcp->l4_csum = GET_RX_COMPL_V0_BITS(l4_cksm, compl);
1986 rxcp->ipv6 = GET_RX_COMPL_V0_BITS(ip_version, compl);
1987 rxcp->num_rcvd = GET_RX_COMPL_V0_BITS(numfrags, compl);
1988 rxcp->pkt_type = GET_RX_COMPL_V0_BITS(cast_enc, compl);
1989 rxcp->rss_hash = GET_RX_COMPL_V0_BITS(rsshash, compl);
1990 if (rxcp->vlanf) {
1991 rxcp->qnq = GET_RX_COMPL_V0_BITS(qnq, compl);
1992 rxcp->vlan_tag = GET_RX_COMPL_V0_BITS(vlan_tag, compl);
1993 }
1994 rxcp->port = GET_RX_COMPL_V0_BITS(port, compl);
1995 rxcp->ip_frag = GET_RX_COMPL_V0_BITS(ip_frag, compl);
1996 }
1997
be_rx_compl_get(struct be_rx_obj * rxo)1998 static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo)
1999 {
2000 struct be_eth_rx_compl *compl = queue_tail_node(&rxo->cq);
2001 struct be_rx_compl_info *rxcp = &rxo->rxcp;
2002 struct be_adapter *adapter = rxo->adapter;
2003
2004 /* For checking the valid bit it is Ok to use either definition as the
2005 * valid bit is at the same position in both v0 and v1 Rx compl */
2006 if (compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] == 0)
2007 return NULL;
2008
2009 rmb();
2010 be_dws_le_to_cpu(compl, sizeof(*compl));
2011
2012 if (adapter->be3_native)
2013 be_parse_rx_compl_v1(compl, rxcp);
2014 else
2015 be_parse_rx_compl_v0(compl, rxcp);
2016
2017 if (rxcp->ip_frag)
2018 rxcp->l4_csum = 0;
2019
2020 if (rxcp->vlanf) {
2021 /* In QNQ modes, if qnq bit is not set, then the packet was
2022 * tagged only with the transparent outer vlan-tag and must
2023 * not be treated as a vlan packet by host
2024 */
2025 if (be_is_qnq_mode(adapter) && !rxcp->qnq)
2026 rxcp->vlanf = 0;
2027
2028 if (!lancer_chip(adapter))
2029 rxcp->vlan_tag = swab16(rxcp->vlan_tag);
2030
2031 if (adapter->pvid == (rxcp->vlan_tag & VLAN_VID_MASK) &&
2032 !test_bit(rxcp->vlan_tag, adapter->vids))
2033 rxcp->vlanf = 0;
2034 }
2035
2036 /* As the compl has been parsed, reset it; we wont touch it again */
2037 compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] = 0;
2038
2039 queue_tail_inc(&rxo->cq);
2040 return rxcp;
2041 }
2042
be_alloc_pages(u32 size,gfp_t gfp)2043 static inline struct page *be_alloc_pages(u32 size, gfp_t gfp)
2044 {
2045 u32 order = get_order(size);
2046
2047 if (order > 0)
2048 gfp |= __GFP_COMP;
2049 return alloc_pages(gfp, order);
2050 }
2051
2052 /*
2053 * Allocate a page, split it to fragments of size rx_frag_size and post as
2054 * receive buffers to BE
2055 */
be_post_rx_frags(struct be_rx_obj * rxo,gfp_t gfp,u32 frags_needed)2056 static void be_post_rx_frags(struct be_rx_obj *rxo, gfp_t gfp, u32 frags_needed)
2057 {
2058 struct be_adapter *adapter = rxo->adapter;
2059 struct be_rx_page_info *page_info = NULL, *prev_page_info = NULL;
2060 struct be_queue_info *rxq = &rxo->q;
2061 struct page *pagep = NULL;
2062 struct device *dev = &adapter->pdev->dev;
2063 struct be_eth_rx_d *rxd;
2064 u64 page_dmaaddr = 0, frag_dmaaddr;
2065 u32 posted, page_offset = 0, notify = 0;
2066
2067 page_info = &rxo->page_info_tbl[rxq->head];
2068 for (posted = 0; posted < frags_needed && !page_info->page; posted++) {
2069 if (!pagep) {
2070 pagep = be_alloc_pages(adapter->big_page_size, gfp);
2071 if (unlikely(!pagep)) {
2072 rx_stats(rxo)->rx_post_fail++;
2073 break;
2074 }
2075 page_dmaaddr = dma_map_page(dev, pagep, 0,
2076 adapter->big_page_size,
2077 DMA_FROM_DEVICE);
2078 if (dma_mapping_error(dev, page_dmaaddr)) {
2079 put_page(pagep);
2080 pagep = NULL;
2081 adapter->drv_stats.dma_map_errors++;
2082 break;
2083 }
2084 page_offset = 0;
2085 } else {
2086 get_page(pagep);
2087 page_offset += rx_frag_size;
2088 }
2089 page_info->page_offset = page_offset;
2090 page_info->page = pagep;
2091
2092 rxd = queue_head_node(rxq);
2093 frag_dmaaddr = page_dmaaddr + page_info->page_offset;
2094 rxd->fragpa_lo = cpu_to_le32(frag_dmaaddr & 0xFFFFFFFF);
2095 rxd->fragpa_hi = cpu_to_le32(upper_32_bits(frag_dmaaddr));
2096
2097 /* Any space left in the current big page for another frag? */
2098 if ((page_offset + rx_frag_size + rx_frag_size) >
2099 adapter->big_page_size) {
2100 pagep = NULL;
2101 page_info->last_frag = true;
2102 dma_unmap_addr_set(page_info, bus, page_dmaaddr);
2103 } else {
2104 dma_unmap_addr_set(page_info, bus, frag_dmaaddr);
2105 }
2106
2107 prev_page_info = page_info;
2108 queue_head_inc(rxq);
2109 page_info = &rxo->page_info_tbl[rxq->head];
2110 }
2111
2112 /* Mark the last frag of a page when we break out of the above loop
2113 * with no more slots available in the RXQ
2114 */
2115 if (pagep) {
2116 prev_page_info->last_frag = true;
2117 dma_unmap_addr_set(prev_page_info, bus, page_dmaaddr);
2118 }
2119
2120 if (posted) {
2121 atomic_add(posted, &rxq->used);
2122 if (rxo->rx_post_starved)
2123 rxo->rx_post_starved = false;
2124 do {
2125 notify = min(MAX_NUM_POST_ERX_DB, posted);
2126 be_rxq_notify(adapter, rxq->id, notify);
2127 posted -= notify;
2128 } while (posted);
2129 } else if (atomic_read(&rxq->used) == 0) {
2130 /* Let be_worker replenish when memory is available */
2131 rxo->rx_post_starved = true;
2132 }
2133 }
2134
be_tx_compl_get(struct be_tx_obj * txo)2135 static struct be_tx_compl_info *be_tx_compl_get(struct be_tx_obj *txo)
2136 {
2137 struct be_queue_info *tx_cq = &txo->cq;
2138 struct be_tx_compl_info *txcp = &txo->txcp;
2139 struct be_eth_tx_compl *compl = queue_tail_node(tx_cq);
2140
2141 if (compl->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] == 0)
2142 return NULL;
2143
2144 /* Ensure load ordering of valid bit dword and other dwords below */
2145 rmb();
2146 be_dws_le_to_cpu(compl, sizeof(*compl));
2147
2148 txcp->status = GET_TX_COMPL_BITS(status, compl);
2149 txcp->end_index = GET_TX_COMPL_BITS(wrb_index, compl);
2150
2151 compl->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] = 0;
2152 queue_tail_inc(tx_cq);
2153 return txcp;
2154 }
2155
be_tx_compl_process(struct be_adapter * adapter,struct be_tx_obj * txo,u16 last_index)2156 static u16 be_tx_compl_process(struct be_adapter *adapter,
2157 struct be_tx_obj *txo, u16 last_index)
2158 {
2159 struct sk_buff **sent_skbs = txo->sent_skb_list;
2160 struct be_queue_info *txq = &txo->q;
2161 u16 frag_index, num_wrbs = 0;
2162 struct sk_buff *skb = NULL;
2163 bool unmap_skb_hdr = false;
2164 struct be_eth_wrb *wrb;
2165
2166 do {
2167 if (sent_skbs[txq->tail]) {
2168 /* Free skb from prev req */
2169 if (skb)
2170 dev_consume_skb_any(skb);
2171 skb = sent_skbs[txq->tail];
2172 sent_skbs[txq->tail] = NULL;
2173 queue_tail_inc(txq); /* skip hdr wrb */
2174 num_wrbs++;
2175 unmap_skb_hdr = true;
2176 }
2177 wrb = queue_tail_node(txq);
2178 frag_index = txq->tail;
2179 unmap_tx_frag(&adapter->pdev->dev, wrb,
2180 (unmap_skb_hdr && skb_headlen(skb)));
2181 unmap_skb_hdr = false;
2182 queue_tail_inc(txq);
2183 num_wrbs++;
2184 } while (frag_index != last_index);
2185 dev_consume_skb_any(skb);
2186
2187 return num_wrbs;
2188 }
2189
2190 /* Return the number of events in the event queue */
events_get(struct be_eq_obj * eqo)2191 static inline int events_get(struct be_eq_obj *eqo)
2192 {
2193 struct be_eq_entry *eqe;
2194 int num = 0;
2195
2196 do {
2197 eqe = queue_tail_node(&eqo->q);
2198 if (eqe->evt == 0)
2199 break;
2200
2201 rmb();
2202 eqe->evt = 0;
2203 num++;
2204 queue_tail_inc(&eqo->q);
2205 } while (true);
2206
2207 return num;
2208 }
2209
2210 /* Leaves the EQ is disarmed state */
be_eq_clean(struct be_eq_obj * eqo)2211 static void be_eq_clean(struct be_eq_obj *eqo)
2212 {
2213 int num = events_get(eqo);
2214
2215 be_eq_notify(eqo->adapter, eqo->q.id, false, true, num);
2216 }
2217
be_rx_cq_clean(struct be_rx_obj * rxo)2218 static void be_rx_cq_clean(struct be_rx_obj *rxo)
2219 {
2220 struct be_rx_page_info *page_info;
2221 struct be_queue_info *rxq = &rxo->q;
2222 struct be_queue_info *rx_cq = &rxo->cq;
2223 struct be_rx_compl_info *rxcp;
2224 struct be_adapter *adapter = rxo->adapter;
2225 int flush_wait = 0;
2226
2227 /* Consume pending rx completions.
2228 * Wait for the flush completion (identified by zero num_rcvd)
2229 * to arrive. Notify CQ even when there are no more CQ entries
2230 * for HW to flush partially coalesced CQ entries.
2231 * In Lancer, there is no need to wait for flush compl.
2232 */
2233 for (;;) {
2234 rxcp = be_rx_compl_get(rxo);
2235 if (!rxcp) {
2236 if (lancer_chip(adapter))
2237 break;
2238
2239 if (flush_wait++ > 10 || be_hw_error(adapter)) {
2240 dev_warn(&adapter->pdev->dev,
2241 "did not receive flush compl\n");
2242 break;
2243 }
2244 be_cq_notify(adapter, rx_cq->id, true, 0);
2245 mdelay(1);
2246 } else {
2247 be_rx_compl_discard(rxo, rxcp);
2248 be_cq_notify(adapter, rx_cq->id, false, 1);
2249 if (rxcp->num_rcvd == 0)
2250 break;
2251 }
2252 }
2253
2254 /* After cleanup, leave the CQ in unarmed state */
2255 be_cq_notify(adapter, rx_cq->id, false, 0);
2256
2257 /* Then free posted rx buffers that were not used */
2258 while (atomic_read(&rxq->used) > 0) {
2259 page_info = get_rx_page_info(rxo);
2260 put_page(page_info->page);
2261 memset(page_info, 0, sizeof(*page_info));
2262 }
2263 BUG_ON(atomic_read(&rxq->used));
2264 rxq->tail = 0;
2265 rxq->head = 0;
2266 }
2267
be_tx_compl_clean(struct be_adapter * adapter)2268 static void be_tx_compl_clean(struct be_adapter *adapter)
2269 {
2270 u16 end_idx, notified_idx, cmpl = 0, timeo = 0, num_wrbs = 0;
2271 struct device *dev = &adapter->pdev->dev;
2272 struct be_tx_compl_info *txcp;
2273 struct be_queue_info *txq;
2274 struct be_tx_obj *txo;
2275 int i, pending_txqs;
2276
2277 /* Stop polling for compls when HW has been silent for 10ms */
2278 do {
2279 pending_txqs = adapter->num_tx_qs;
2280
2281 for_all_tx_queues(adapter, txo, i) {
2282 cmpl = 0;
2283 num_wrbs = 0;
2284 txq = &txo->q;
2285 while ((txcp = be_tx_compl_get(txo))) {
2286 num_wrbs +=
2287 be_tx_compl_process(adapter, txo,
2288 txcp->end_index);
2289 cmpl++;
2290 }
2291 if (cmpl) {
2292 be_cq_notify(adapter, txo->cq.id, false, cmpl);
2293 atomic_sub(num_wrbs, &txq->used);
2294 timeo = 0;
2295 }
2296 if (!be_is_tx_compl_pending(txo))
2297 pending_txqs--;
2298 }
2299
2300 if (pending_txqs == 0 || ++timeo > 10 || be_hw_error(adapter))
2301 break;
2302
2303 mdelay(1);
2304 } while (true);
2305
2306 /* Free enqueued TX that was never notified to HW */
2307 for_all_tx_queues(adapter, txo, i) {
2308 txq = &txo->q;
2309
2310 if (atomic_read(&txq->used)) {
2311 dev_info(dev, "txq%d: cleaning %d pending tx-wrbs\n",
2312 i, atomic_read(&txq->used));
2313 notified_idx = txq->tail;
2314 end_idx = txq->tail;
2315 index_adv(&end_idx, atomic_read(&txq->used) - 1,
2316 txq->len);
2317 /* Use the tx-compl process logic to handle requests
2318 * that were not sent to the HW.
2319 */
2320 num_wrbs = be_tx_compl_process(adapter, txo, end_idx);
2321 atomic_sub(num_wrbs, &txq->used);
2322 BUG_ON(atomic_read(&txq->used));
2323 txo->pend_wrb_cnt = 0;
2324 /* Since hw was never notified of these requests,
2325 * reset TXQ indices
2326 */
2327 txq->head = notified_idx;
2328 txq->tail = notified_idx;
2329 }
2330 }
2331 }
2332
be_evt_queues_destroy(struct be_adapter * adapter)2333 static void be_evt_queues_destroy(struct be_adapter *adapter)
2334 {
2335 struct be_eq_obj *eqo;
2336 int i;
2337
2338 for_all_evt_queues(adapter, eqo, i) {
2339 if (eqo->q.created) {
2340 be_eq_clean(eqo);
2341 be_cmd_q_destroy(adapter, &eqo->q, QTYPE_EQ);
2342 napi_hash_del(&eqo->napi);
2343 netif_napi_del(&eqo->napi);
2344 }
2345 free_cpumask_var(eqo->affinity_mask);
2346 be_queue_free(adapter, &eqo->q);
2347 }
2348 }
2349
be_evt_queues_create(struct be_adapter * adapter)2350 static int be_evt_queues_create(struct be_adapter *adapter)
2351 {
2352 struct be_queue_info *eq;
2353 struct be_eq_obj *eqo;
2354 struct be_aic_obj *aic;
2355 int i, rc;
2356
2357 adapter->num_evt_qs = min_t(u16, num_irqs(adapter),
2358 adapter->cfg_num_qs);
2359
2360 for_all_evt_queues(adapter, eqo, i) {
2361 int numa_node = dev_to_node(&adapter->pdev->dev);
2362 if (!zalloc_cpumask_var(&eqo->affinity_mask, GFP_KERNEL))
2363 return -ENOMEM;
2364 cpumask_set_cpu(cpumask_local_spread(i, numa_node),
2365 eqo->affinity_mask);
2366 netif_napi_add(adapter->netdev, &eqo->napi, be_poll,
2367 BE_NAPI_WEIGHT);
2368 napi_hash_add(&eqo->napi);
2369 aic = &adapter->aic_obj[i];
2370 eqo->adapter = adapter;
2371 eqo->idx = i;
2372 aic->max_eqd = BE_MAX_EQD;
2373 aic->enable = true;
2374
2375 eq = &eqo->q;
2376 rc = be_queue_alloc(adapter, eq, EVNT_Q_LEN,
2377 sizeof(struct be_eq_entry));
2378 if (rc)
2379 return rc;
2380
2381 rc = be_cmd_eq_create(adapter, eqo);
2382 if (rc)
2383 return rc;
2384 }
2385 return 0;
2386 }
2387
be_mcc_queues_destroy(struct be_adapter * adapter)2388 static void be_mcc_queues_destroy(struct be_adapter *adapter)
2389 {
2390 struct be_queue_info *q;
2391
2392 q = &adapter->mcc_obj.q;
2393 if (q->created)
2394 be_cmd_q_destroy(adapter, q, QTYPE_MCCQ);
2395 be_queue_free(adapter, q);
2396
2397 q = &adapter->mcc_obj.cq;
2398 if (q->created)
2399 be_cmd_q_destroy(adapter, q, QTYPE_CQ);
2400 be_queue_free(adapter, q);
2401 }
2402
2403 /* Must be called only after TX qs are created as MCC shares TX EQ */
be_mcc_queues_create(struct be_adapter * adapter)2404 static int be_mcc_queues_create(struct be_adapter *adapter)
2405 {
2406 struct be_queue_info *q, *cq;
2407
2408 cq = &adapter->mcc_obj.cq;
2409 if (be_queue_alloc(adapter, cq, MCC_CQ_LEN,
2410 sizeof(struct be_mcc_compl)))
2411 goto err;
2412
2413 /* Use the default EQ for MCC completions */
2414 if (be_cmd_cq_create(adapter, cq, &mcc_eqo(adapter)->q, true, 0))
2415 goto mcc_cq_free;
2416
2417 q = &adapter->mcc_obj.q;
2418 if (be_queue_alloc(adapter, q, MCC_Q_LEN, sizeof(struct be_mcc_wrb)))
2419 goto mcc_cq_destroy;
2420
2421 if (be_cmd_mccq_create(adapter, q, cq))
2422 goto mcc_q_free;
2423
2424 return 0;
2425
2426 mcc_q_free:
2427 be_queue_free(adapter, q);
2428 mcc_cq_destroy:
2429 be_cmd_q_destroy(adapter, cq, QTYPE_CQ);
2430 mcc_cq_free:
2431 be_queue_free(adapter, cq);
2432 err:
2433 return -1;
2434 }
2435
be_tx_queues_destroy(struct be_adapter * adapter)2436 static void be_tx_queues_destroy(struct be_adapter *adapter)
2437 {
2438 struct be_queue_info *q;
2439 struct be_tx_obj *txo;
2440 u8 i;
2441
2442 for_all_tx_queues(adapter, txo, i) {
2443 q = &txo->q;
2444 if (q->created)
2445 be_cmd_q_destroy(adapter, q, QTYPE_TXQ);
2446 be_queue_free(adapter, q);
2447
2448 q = &txo->cq;
2449 if (q->created)
2450 be_cmd_q_destroy(adapter, q, QTYPE_CQ);
2451 be_queue_free(adapter, q);
2452 }
2453 }
2454
be_tx_qs_create(struct be_adapter * adapter)2455 static int be_tx_qs_create(struct be_adapter *adapter)
2456 {
2457 struct be_queue_info *cq;
2458 struct be_tx_obj *txo;
2459 struct be_eq_obj *eqo;
2460 int status, i;
2461
2462 adapter->num_tx_qs = min(adapter->num_evt_qs, be_max_txqs(adapter));
2463
2464 for_all_tx_queues(adapter, txo, i) {
2465 cq = &txo->cq;
2466 status = be_queue_alloc(adapter, cq, TX_CQ_LEN,
2467 sizeof(struct be_eth_tx_compl));
2468 if (status)
2469 return status;
2470
2471 u64_stats_init(&txo->stats.sync);
2472 u64_stats_init(&txo->stats.sync_compl);
2473
2474 /* If num_evt_qs is less than num_tx_qs, then more than
2475 * one txq share an eq
2476 */
2477 eqo = &adapter->eq_obj[i % adapter->num_evt_qs];
2478 status = be_cmd_cq_create(adapter, cq, &eqo->q, false, 3);
2479 if (status)
2480 return status;
2481
2482 status = be_queue_alloc(adapter, &txo->q, TX_Q_LEN,
2483 sizeof(struct be_eth_wrb));
2484 if (status)
2485 return status;
2486
2487 status = be_cmd_txq_create(adapter, txo);
2488 if (status)
2489 return status;
2490
2491 netif_set_xps_queue(adapter->netdev, eqo->affinity_mask,
2492 eqo->idx);
2493 }
2494
2495 dev_info(&adapter->pdev->dev, "created %d TX queue(s)\n",
2496 adapter->num_tx_qs);
2497 return 0;
2498 }
2499
be_rx_cqs_destroy(struct be_adapter * adapter)2500 static void be_rx_cqs_destroy(struct be_adapter *adapter)
2501 {
2502 struct be_queue_info *q;
2503 struct be_rx_obj *rxo;
2504 int i;
2505
2506 for_all_rx_queues(adapter, rxo, i) {
2507 q = &rxo->cq;
2508 if (q->created)
2509 be_cmd_q_destroy(adapter, q, QTYPE_CQ);
2510 be_queue_free(adapter, q);
2511 }
2512 }
2513
be_rx_cqs_create(struct be_adapter * adapter)2514 static int be_rx_cqs_create(struct be_adapter *adapter)
2515 {
2516 struct be_queue_info *eq, *cq;
2517 struct be_rx_obj *rxo;
2518 int rc, i;
2519
2520 /* We can create as many RSS rings as there are EQs. */
2521 adapter->num_rss_qs = adapter->num_evt_qs;
2522
2523 /* We'll use RSS only if atleast 2 RSS rings are supported. */
2524 if (adapter->num_rss_qs <= 1)
2525 adapter->num_rss_qs = 0;
2526
2527 adapter->num_rx_qs = adapter->num_rss_qs + adapter->need_def_rxq;
2528
2529 /* When the interface is not capable of RSS rings (and there is no
2530 * need to create a default RXQ) we'll still need one RXQ
2531 */
2532 if (adapter->num_rx_qs == 0)
2533 adapter->num_rx_qs = 1;
2534
2535 adapter->big_page_size = (1 << get_order(rx_frag_size)) * PAGE_SIZE;
2536 for_all_rx_queues(adapter, rxo, i) {
2537 rxo->adapter = adapter;
2538 cq = &rxo->cq;
2539 rc = be_queue_alloc(adapter, cq, RX_CQ_LEN,
2540 sizeof(struct be_eth_rx_compl));
2541 if (rc)
2542 return rc;
2543
2544 u64_stats_init(&rxo->stats.sync);
2545 eq = &adapter->eq_obj[i % adapter->num_evt_qs].q;
2546 rc = be_cmd_cq_create(adapter, cq, eq, false, 3);
2547 if (rc)
2548 return rc;
2549 }
2550
2551 dev_info(&adapter->pdev->dev,
2552 "created %d RX queue(s)\n", adapter->num_rx_qs);
2553 return 0;
2554 }
2555
be_intx(int irq,void * dev)2556 static irqreturn_t be_intx(int irq, void *dev)
2557 {
2558 struct be_eq_obj *eqo = dev;
2559 struct be_adapter *adapter = eqo->adapter;
2560 int num_evts = 0;
2561
2562 /* IRQ is not expected when NAPI is scheduled as the EQ
2563 * will not be armed.
2564 * But, this can happen on Lancer INTx where it takes
2565 * a while to de-assert INTx or in BE2 where occasionaly
2566 * an interrupt may be raised even when EQ is unarmed.
2567 * If NAPI is already scheduled, then counting & notifying
2568 * events will orphan them.
2569 */
2570 if (napi_schedule_prep(&eqo->napi)) {
2571 num_evts = events_get(eqo);
2572 __napi_schedule(&eqo->napi);
2573 if (num_evts)
2574 eqo->spurious_intr = 0;
2575 }
2576 be_eq_notify(adapter, eqo->q.id, false, true, num_evts);
2577
2578 /* Return IRQ_HANDLED only for the the first spurious intr
2579 * after a valid intr to stop the kernel from branding
2580 * this irq as a bad one!
2581 */
2582 if (num_evts || eqo->spurious_intr++ == 0)
2583 return IRQ_HANDLED;
2584 else
2585 return IRQ_NONE;
2586 }
2587
be_msix(int irq,void * dev)2588 static irqreturn_t be_msix(int irq, void *dev)
2589 {
2590 struct be_eq_obj *eqo = dev;
2591
2592 be_eq_notify(eqo->adapter, eqo->q.id, false, true, 0);
2593 napi_schedule(&eqo->napi);
2594 return IRQ_HANDLED;
2595 }
2596
do_gro(struct be_rx_compl_info * rxcp)2597 static inline bool do_gro(struct be_rx_compl_info *rxcp)
2598 {
2599 return (rxcp->tcpf && !rxcp->err && rxcp->l4_csum) ? true : false;
2600 }
2601
be_process_rx(struct be_rx_obj * rxo,struct napi_struct * napi,int budget,int polling)2602 static int be_process_rx(struct be_rx_obj *rxo, struct napi_struct *napi,
2603 int budget, int polling)
2604 {
2605 struct be_adapter *adapter = rxo->adapter;
2606 struct be_queue_info *rx_cq = &rxo->cq;
2607 struct be_rx_compl_info *rxcp;
2608 u32 work_done;
2609 u32 frags_consumed = 0;
2610
2611 for (work_done = 0; work_done < budget; work_done++) {
2612 rxcp = be_rx_compl_get(rxo);
2613 if (!rxcp)
2614 break;
2615
2616 /* Is it a flush compl that has no data */
2617 if (unlikely(rxcp->num_rcvd == 0))
2618 goto loop_continue;
2619
2620 /* Discard compl with partial DMA Lancer B0 */
2621 if (unlikely(!rxcp->pkt_size)) {
2622 be_rx_compl_discard(rxo, rxcp);
2623 goto loop_continue;
2624 }
2625
2626 /* On BE drop pkts that arrive due to imperfect filtering in
2627 * promiscuous mode on some skews
2628 */
2629 if (unlikely(rxcp->port != adapter->port_num &&
2630 !lancer_chip(adapter))) {
2631 be_rx_compl_discard(rxo, rxcp);
2632 goto loop_continue;
2633 }
2634
2635 /* Don't do gro when we're busy_polling */
2636 if (do_gro(rxcp) && polling != BUSY_POLLING)
2637 be_rx_compl_process_gro(rxo, napi, rxcp);
2638 else
2639 be_rx_compl_process(rxo, napi, rxcp);
2640
2641 loop_continue:
2642 frags_consumed += rxcp->num_rcvd;
2643 be_rx_stats_update(rxo, rxcp);
2644 }
2645
2646 if (work_done) {
2647 be_cq_notify(adapter, rx_cq->id, true, work_done);
2648
2649 /* When an rx-obj gets into post_starved state, just
2650 * let be_worker do the posting.
2651 */
2652 if (atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM &&
2653 !rxo->rx_post_starved)
2654 be_post_rx_frags(rxo, GFP_ATOMIC,
2655 max_t(u32, MAX_RX_POST,
2656 frags_consumed));
2657 }
2658
2659 return work_done;
2660 }
2661
be_update_tx_err(struct be_tx_obj * txo,u8 status)2662 static inline void be_update_tx_err(struct be_tx_obj *txo, u8 status)
2663 {
2664 switch (status) {
2665 case BE_TX_COMP_HDR_PARSE_ERR:
2666 tx_stats(txo)->tx_hdr_parse_err++;
2667 break;
2668 case BE_TX_COMP_NDMA_ERR:
2669 tx_stats(txo)->tx_dma_err++;
2670 break;
2671 case BE_TX_COMP_ACL_ERR:
2672 tx_stats(txo)->tx_spoof_check_err++;
2673 break;
2674 }
2675 }
2676
lancer_update_tx_err(struct be_tx_obj * txo,u8 status)2677 static inline void lancer_update_tx_err(struct be_tx_obj *txo, u8 status)
2678 {
2679 switch (status) {
2680 case LANCER_TX_COMP_LSO_ERR:
2681 tx_stats(txo)->tx_tso_err++;
2682 break;
2683 case LANCER_TX_COMP_HSW_DROP_MAC_ERR:
2684 case LANCER_TX_COMP_HSW_DROP_VLAN_ERR:
2685 tx_stats(txo)->tx_spoof_check_err++;
2686 break;
2687 case LANCER_TX_COMP_QINQ_ERR:
2688 tx_stats(txo)->tx_qinq_err++;
2689 break;
2690 case LANCER_TX_COMP_PARITY_ERR:
2691 tx_stats(txo)->tx_internal_parity_err++;
2692 break;
2693 case LANCER_TX_COMP_DMA_ERR:
2694 tx_stats(txo)->tx_dma_err++;
2695 break;
2696 }
2697 }
2698
be_process_tx(struct be_adapter * adapter,struct be_tx_obj * txo,int idx)2699 static void be_process_tx(struct be_adapter *adapter, struct be_tx_obj *txo,
2700 int idx)
2701 {
2702 int num_wrbs = 0, work_done = 0;
2703 struct be_tx_compl_info *txcp;
2704
2705 while ((txcp = be_tx_compl_get(txo))) {
2706 num_wrbs += be_tx_compl_process(adapter, txo, txcp->end_index);
2707 work_done++;
2708
2709 if (txcp->status) {
2710 if (lancer_chip(adapter))
2711 lancer_update_tx_err(txo, txcp->status);
2712 else
2713 be_update_tx_err(txo, txcp->status);
2714 }
2715 }
2716
2717 if (work_done) {
2718 be_cq_notify(adapter, txo->cq.id, true, work_done);
2719 atomic_sub(num_wrbs, &txo->q.used);
2720
2721 /* As Tx wrbs have been freed up, wake up netdev queue
2722 * if it was stopped due to lack of tx wrbs. */
2723 if (__netif_subqueue_stopped(adapter->netdev, idx) &&
2724 be_can_txq_wake(txo)) {
2725 netif_wake_subqueue(adapter->netdev, idx);
2726 }
2727
2728 u64_stats_update_begin(&tx_stats(txo)->sync_compl);
2729 tx_stats(txo)->tx_compl += work_done;
2730 u64_stats_update_end(&tx_stats(txo)->sync_compl);
2731 }
2732 }
2733
2734 #ifdef CONFIG_NET_RX_BUSY_POLL
be_lock_napi(struct be_eq_obj * eqo)2735 static inline bool be_lock_napi(struct be_eq_obj *eqo)
2736 {
2737 bool status = true;
2738
2739 spin_lock(&eqo->lock); /* BH is already disabled */
2740 if (eqo->state & BE_EQ_LOCKED) {
2741 WARN_ON(eqo->state & BE_EQ_NAPI);
2742 eqo->state |= BE_EQ_NAPI_YIELD;
2743 status = false;
2744 } else {
2745 eqo->state = BE_EQ_NAPI;
2746 }
2747 spin_unlock(&eqo->lock);
2748 return status;
2749 }
2750
be_unlock_napi(struct be_eq_obj * eqo)2751 static inline void be_unlock_napi(struct be_eq_obj *eqo)
2752 {
2753 spin_lock(&eqo->lock); /* BH is already disabled */
2754
2755 WARN_ON(eqo->state & (BE_EQ_POLL | BE_EQ_NAPI_YIELD));
2756 eqo->state = BE_EQ_IDLE;
2757
2758 spin_unlock(&eqo->lock);
2759 }
2760
be_lock_busy_poll(struct be_eq_obj * eqo)2761 static inline bool be_lock_busy_poll(struct be_eq_obj *eqo)
2762 {
2763 bool status = true;
2764
2765 spin_lock_bh(&eqo->lock);
2766 if (eqo->state & BE_EQ_LOCKED) {
2767 eqo->state |= BE_EQ_POLL_YIELD;
2768 status = false;
2769 } else {
2770 eqo->state |= BE_EQ_POLL;
2771 }
2772 spin_unlock_bh(&eqo->lock);
2773 return status;
2774 }
2775
be_unlock_busy_poll(struct be_eq_obj * eqo)2776 static inline void be_unlock_busy_poll(struct be_eq_obj *eqo)
2777 {
2778 spin_lock_bh(&eqo->lock);
2779
2780 WARN_ON(eqo->state & (BE_EQ_NAPI));
2781 eqo->state = BE_EQ_IDLE;
2782
2783 spin_unlock_bh(&eqo->lock);
2784 }
2785
be_enable_busy_poll(struct be_eq_obj * eqo)2786 static inline void be_enable_busy_poll(struct be_eq_obj *eqo)
2787 {
2788 spin_lock_init(&eqo->lock);
2789 eqo->state = BE_EQ_IDLE;
2790 }
2791
be_disable_busy_poll(struct be_eq_obj * eqo)2792 static inline void be_disable_busy_poll(struct be_eq_obj *eqo)
2793 {
2794 local_bh_disable();
2795
2796 /* It's enough to just acquire napi lock on the eqo to stop
2797 * be_busy_poll() from processing any queueus.
2798 */
2799 while (!be_lock_napi(eqo))
2800 mdelay(1);
2801
2802 local_bh_enable();
2803 }
2804
2805 #else /* CONFIG_NET_RX_BUSY_POLL */
2806
be_lock_napi(struct be_eq_obj * eqo)2807 static inline bool be_lock_napi(struct be_eq_obj *eqo)
2808 {
2809 return true;
2810 }
2811
be_unlock_napi(struct be_eq_obj * eqo)2812 static inline void be_unlock_napi(struct be_eq_obj *eqo)
2813 {
2814 }
2815
be_lock_busy_poll(struct be_eq_obj * eqo)2816 static inline bool be_lock_busy_poll(struct be_eq_obj *eqo)
2817 {
2818 return false;
2819 }
2820
be_unlock_busy_poll(struct be_eq_obj * eqo)2821 static inline void be_unlock_busy_poll(struct be_eq_obj *eqo)
2822 {
2823 }
2824
be_enable_busy_poll(struct be_eq_obj * eqo)2825 static inline void be_enable_busy_poll(struct be_eq_obj *eqo)
2826 {
2827 }
2828
be_disable_busy_poll(struct be_eq_obj * eqo)2829 static inline void be_disable_busy_poll(struct be_eq_obj *eqo)
2830 {
2831 }
2832 #endif /* CONFIG_NET_RX_BUSY_POLL */
2833
be_poll(struct napi_struct * napi,int budget)2834 int be_poll(struct napi_struct *napi, int budget)
2835 {
2836 struct be_eq_obj *eqo = container_of(napi, struct be_eq_obj, napi);
2837 struct be_adapter *adapter = eqo->adapter;
2838 int max_work = 0, work, i, num_evts;
2839 struct be_rx_obj *rxo;
2840 struct be_tx_obj *txo;
2841
2842 num_evts = events_get(eqo);
2843
2844 for_all_tx_queues_on_eq(adapter, eqo, txo, i)
2845 be_process_tx(adapter, txo, i);
2846
2847 if (be_lock_napi(eqo)) {
2848 /* This loop will iterate twice for EQ0 in which
2849 * completions of the last RXQ (default one) are also processed
2850 * For other EQs the loop iterates only once
2851 */
2852 for_all_rx_queues_on_eq(adapter, eqo, rxo, i) {
2853 work = be_process_rx(rxo, napi, budget, NAPI_POLLING);
2854 max_work = max(work, max_work);
2855 }
2856 be_unlock_napi(eqo);
2857 } else {
2858 max_work = budget;
2859 }
2860
2861 if (is_mcc_eqo(eqo))
2862 be_process_mcc(adapter);
2863
2864 if (max_work < budget) {
2865 napi_complete(napi);
2866 be_eq_notify(adapter, eqo->q.id, true, false, num_evts);
2867 } else {
2868 /* As we'll continue in polling mode, count and clear events */
2869 be_eq_notify(adapter, eqo->q.id, false, false, num_evts);
2870 }
2871 return max_work;
2872 }
2873
2874 #ifdef CONFIG_NET_RX_BUSY_POLL
be_busy_poll(struct napi_struct * napi)2875 static int be_busy_poll(struct napi_struct *napi)
2876 {
2877 struct be_eq_obj *eqo = container_of(napi, struct be_eq_obj, napi);
2878 struct be_adapter *adapter = eqo->adapter;
2879 struct be_rx_obj *rxo;
2880 int i, work = 0;
2881
2882 if (!be_lock_busy_poll(eqo))
2883 return LL_FLUSH_BUSY;
2884
2885 for_all_rx_queues_on_eq(adapter, eqo, rxo, i) {
2886 work = be_process_rx(rxo, napi, 4, BUSY_POLLING);
2887 if (work)
2888 break;
2889 }
2890
2891 be_unlock_busy_poll(eqo);
2892 return work;
2893 }
2894 #endif
2895
be_detect_error(struct be_adapter * adapter)2896 void be_detect_error(struct be_adapter *adapter)
2897 {
2898 u32 ue_lo = 0, ue_hi = 0, ue_lo_mask = 0, ue_hi_mask = 0;
2899 u32 sliport_status = 0, sliport_err1 = 0, sliport_err2 = 0;
2900 u32 i;
2901 bool error_detected = false;
2902 struct device *dev = &adapter->pdev->dev;
2903 struct net_device *netdev = adapter->netdev;
2904
2905 if (be_hw_error(adapter))
2906 return;
2907
2908 if (lancer_chip(adapter)) {
2909 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
2910 if (sliport_status & SLIPORT_STATUS_ERR_MASK) {
2911 sliport_err1 = ioread32(adapter->db +
2912 SLIPORT_ERROR1_OFFSET);
2913 sliport_err2 = ioread32(adapter->db +
2914 SLIPORT_ERROR2_OFFSET);
2915 adapter->hw_error = true;
2916 error_detected = true;
2917 /* Do not log error messages if its a FW reset */
2918 if (sliport_err1 == SLIPORT_ERROR_FW_RESET1 &&
2919 sliport_err2 == SLIPORT_ERROR_FW_RESET2) {
2920 dev_info(dev, "Firmware update in progress\n");
2921 } else {
2922 dev_err(dev, "Error detected in the card\n");
2923 dev_err(dev, "ERR: sliport status 0x%x\n",
2924 sliport_status);
2925 dev_err(dev, "ERR: sliport error1 0x%x\n",
2926 sliport_err1);
2927 dev_err(dev, "ERR: sliport error2 0x%x\n",
2928 sliport_err2);
2929 }
2930 }
2931 } else {
2932 ue_lo = ioread32(adapter->pcicfg + PCICFG_UE_STATUS_LOW);
2933 ue_hi = ioread32(adapter->pcicfg + PCICFG_UE_STATUS_HIGH);
2934 ue_lo_mask = ioread32(adapter->pcicfg +
2935 PCICFG_UE_STATUS_LOW_MASK);
2936 ue_hi_mask = ioread32(adapter->pcicfg +
2937 PCICFG_UE_STATUS_HI_MASK);
2938
2939 ue_lo = (ue_lo & ~ue_lo_mask);
2940 ue_hi = (ue_hi & ~ue_hi_mask);
2941
2942 /* On certain platforms BE hardware can indicate spurious UEs.
2943 * Allow HW to stop working completely in case of a real UE.
2944 * Hence not setting the hw_error for UE detection.
2945 */
2946
2947 if (ue_lo || ue_hi) {
2948 error_detected = true;
2949 dev_err(dev,
2950 "Unrecoverable Error detected in the adapter");
2951 dev_err(dev, "Please reboot server to recover");
2952 if (skyhawk_chip(adapter))
2953 adapter->hw_error = true;
2954 for (i = 0; ue_lo; ue_lo >>= 1, i++) {
2955 if (ue_lo & 1)
2956 dev_err(dev, "UE: %s bit set\n",
2957 ue_status_low_desc[i]);
2958 }
2959 for (i = 0; ue_hi; ue_hi >>= 1, i++) {
2960 if (ue_hi & 1)
2961 dev_err(dev, "UE: %s bit set\n",
2962 ue_status_hi_desc[i]);
2963 }
2964 }
2965 }
2966 if (error_detected)
2967 netif_carrier_off(netdev);
2968 }
2969
be_msix_disable(struct be_adapter * adapter)2970 static void be_msix_disable(struct be_adapter *adapter)
2971 {
2972 if (msix_enabled(adapter)) {
2973 pci_disable_msix(adapter->pdev);
2974 adapter->num_msix_vec = 0;
2975 adapter->num_msix_roce_vec = 0;
2976 }
2977 }
2978
be_msix_enable(struct be_adapter * adapter)2979 static int be_msix_enable(struct be_adapter *adapter)
2980 {
2981 int i, num_vec;
2982 struct device *dev = &adapter->pdev->dev;
2983
2984 /* If RoCE is supported, program the max number of NIC vectors that
2985 * may be configured via set-channels, along with vectors needed for
2986 * RoCe. Else, just program the number we'll use initially.
2987 */
2988 if (be_roce_supported(adapter))
2989 num_vec = min_t(int, 2 * be_max_eqs(adapter),
2990 2 * num_online_cpus());
2991 else
2992 num_vec = adapter->cfg_num_qs;
2993
2994 for (i = 0; i < num_vec; i++)
2995 adapter->msix_entries[i].entry = i;
2996
2997 num_vec = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
2998 MIN_MSIX_VECTORS, num_vec);
2999 if (num_vec < 0)
3000 goto fail;
3001
3002 if (be_roce_supported(adapter) && num_vec > MIN_MSIX_VECTORS) {
3003 adapter->num_msix_roce_vec = num_vec / 2;
3004 dev_info(dev, "enabled %d MSI-x vector(s) for RoCE\n",
3005 adapter->num_msix_roce_vec);
3006 }
3007
3008 adapter->num_msix_vec = num_vec - adapter->num_msix_roce_vec;
3009
3010 dev_info(dev, "enabled %d MSI-x vector(s) for NIC\n",
3011 adapter->num_msix_vec);
3012 return 0;
3013
3014 fail:
3015 dev_warn(dev, "MSIx enable failed\n");
3016
3017 /* INTx is not supported in VFs, so fail probe if enable_msix fails */
3018 if (!be_physfn(adapter))
3019 return num_vec;
3020 return 0;
3021 }
3022
be_msix_vec_get(struct be_adapter * adapter,struct be_eq_obj * eqo)3023 static inline int be_msix_vec_get(struct be_adapter *adapter,
3024 struct be_eq_obj *eqo)
3025 {
3026 return adapter->msix_entries[eqo->msix_idx].vector;
3027 }
3028
be_msix_register(struct be_adapter * adapter)3029 static int be_msix_register(struct be_adapter *adapter)
3030 {
3031 struct net_device *netdev = adapter->netdev;
3032 struct be_eq_obj *eqo;
3033 int status, i, vec;
3034
3035 for_all_evt_queues(adapter, eqo, i) {
3036 sprintf(eqo->desc, "%s-q%d", netdev->name, i);
3037 vec = be_msix_vec_get(adapter, eqo);
3038 status = request_irq(vec, be_msix, 0, eqo->desc, eqo);
3039 if (status)
3040 goto err_msix;
3041
3042 irq_set_affinity_hint(vec, eqo->affinity_mask);
3043 }
3044
3045 return 0;
3046 err_msix:
3047 for (i--, eqo = &adapter->eq_obj[i]; i >= 0; i--, eqo--)
3048 free_irq(be_msix_vec_get(adapter, eqo), eqo);
3049 dev_warn(&adapter->pdev->dev, "MSIX Request IRQ failed - err %d\n",
3050 status);
3051 be_msix_disable(adapter);
3052 return status;
3053 }
3054
be_irq_register(struct be_adapter * adapter)3055 static int be_irq_register(struct be_adapter *adapter)
3056 {
3057 struct net_device *netdev = adapter->netdev;
3058 int status;
3059
3060 if (msix_enabled(adapter)) {
3061 status = be_msix_register(adapter);
3062 if (status == 0)
3063 goto done;
3064 /* INTx is not supported for VF */
3065 if (!be_physfn(adapter))
3066 return status;
3067 }
3068
3069 /* INTx: only the first EQ is used */
3070 netdev->irq = adapter->pdev->irq;
3071 status = request_irq(netdev->irq, be_intx, IRQF_SHARED, netdev->name,
3072 &adapter->eq_obj[0]);
3073 if (status) {
3074 dev_err(&adapter->pdev->dev,
3075 "INTx request IRQ failed - err %d\n", status);
3076 return status;
3077 }
3078 done:
3079 adapter->isr_registered = true;
3080 return 0;
3081 }
3082
be_irq_unregister(struct be_adapter * adapter)3083 static void be_irq_unregister(struct be_adapter *adapter)
3084 {
3085 struct net_device *netdev = adapter->netdev;
3086 struct be_eq_obj *eqo;
3087 int i, vec;
3088
3089 if (!adapter->isr_registered)
3090 return;
3091
3092 /* INTx */
3093 if (!msix_enabled(adapter)) {
3094 free_irq(netdev->irq, &adapter->eq_obj[0]);
3095 goto done;
3096 }
3097
3098 /* MSIx */
3099 for_all_evt_queues(adapter, eqo, i) {
3100 vec = be_msix_vec_get(adapter, eqo);
3101 irq_set_affinity_hint(vec, NULL);
3102 free_irq(vec, eqo);
3103 }
3104
3105 done:
3106 adapter->isr_registered = false;
3107 }
3108
be_rx_qs_destroy(struct be_adapter * adapter)3109 static void be_rx_qs_destroy(struct be_adapter *adapter)
3110 {
3111 struct be_queue_info *q;
3112 struct be_rx_obj *rxo;
3113 int i;
3114
3115 for_all_rx_queues(adapter, rxo, i) {
3116 q = &rxo->q;
3117 if (q->created) {
3118 be_cmd_rxq_destroy(adapter, q);
3119 be_rx_cq_clean(rxo);
3120 }
3121 be_queue_free(adapter, q);
3122 }
3123 }
3124
be_close(struct net_device * netdev)3125 static int be_close(struct net_device *netdev)
3126 {
3127 struct be_adapter *adapter = netdev_priv(netdev);
3128 struct be_eq_obj *eqo;
3129 int i;
3130
3131 /* This protection is needed as be_close() may be called even when the
3132 * adapter is in cleared state (after eeh perm failure)
3133 */
3134 if (!(adapter->flags & BE_FLAGS_SETUP_DONE))
3135 return 0;
3136
3137 be_roce_dev_close(adapter);
3138
3139 if (adapter->flags & BE_FLAGS_NAPI_ENABLED) {
3140 for_all_evt_queues(adapter, eqo, i) {
3141 napi_disable(&eqo->napi);
3142 be_disable_busy_poll(eqo);
3143 }
3144 adapter->flags &= ~BE_FLAGS_NAPI_ENABLED;
3145 }
3146
3147 be_async_mcc_disable(adapter);
3148
3149 /* Wait for all pending tx completions to arrive so that
3150 * all tx skbs are freed.
3151 */
3152 netif_tx_disable(netdev);
3153 be_tx_compl_clean(adapter);
3154
3155 be_rx_qs_destroy(adapter);
3156 be_clear_uc_list(adapter);
3157
3158 for_all_evt_queues(adapter, eqo, i) {
3159 if (msix_enabled(adapter))
3160 synchronize_irq(be_msix_vec_get(adapter, eqo));
3161 else
3162 synchronize_irq(netdev->irq);
3163 be_eq_clean(eqo);
3164 }
3165
3166 be_irq_unregister(adapter);
3167
3168 return 0;
3169 }
3170
be_rx_qs_create(struct be_adapter * adapter)3171 static int be_rx_qs_create(struct be_adapter *adapter)
3172 {
3173 struct rss_info *rss = &adapter->rss_info;
3174 u8 rss_key[RSS_HASH_KEY_LEN];
3175 struct be_rx_obj *rxo;
3176 int rc, i, j;
3177
3178 for_all_rx_queues(adapter, rxo, i) {
3179 rc = be_queue_alloc(adapter, &rxo->q, RX_Q_LEN,
3180 sizeof(struct be_eth_rx_d));
3181 if (rc)
3182 return rc;
3183 }
3184
3185 if (adapter->need_def_rxq || !adapter->num_rss_qs) {
3186 rxo = default_rxo(adapter);
3187 rc = be_cmd_rxq_create(adapter, &rxo->q, rxo->cq.id,
3188 rx_frag_size, adapter->if_handle,
3189 false, &rxo->rss_id);
3190 if (rc)
3191 return rc;
3192 }
3193
3194 for_all_rss_queues(adapter, rxo, i) {
3195 rc = be_cmd_rxq_create(adapter, &rxo->q, rxo->cq.id,
3196 rx_frag_size, adapter->if_handle,
3197 true, &rxo->rss_id);
3198 if (rc)
3199 return rc;
3200 }
3201
3202 if (be_multi_rxq(adapter)) {
3203 for (j = 0; j < RSS_INDIR_TABLE_LEN; j += adapter->num_rss_qs) {
3204 for_all_rss_queues(adapter, rxo, i) {
3205 if ((j + i) >= RSS_INDIR_TABLE_LEN)
3206 break;
3207 rss->rsstable[j + i] = rxo->rss_id;
3208 rss->rss_queue[j + i] = i;
3209 }
3210 }
3211 rss->rss_flags = RSS_ENABLE_TCP_IPV4 | RSS_ENABLE_IPV4 |
3212 RSS_ENABLE_TCP_IPV6 | RSS_ENABLE_IPV6;
3213
3214 if (!BEx_chip(adapter))
3215 rss->rss_flags |= RSS_ENABLE_UDP_IPV4 |
3216 RSS_ENABLE_UDP_IPV6;
3217 } else {
3218 /* Disable RSS, if only default RX Q is created */
3219 rss->rss_flags = RSS_ENABLE_NONE;
3220 }
3221
3222 netdev_rss_key_fill(rss_key, RSS_HASH_KEY_LEN);
3223 rc = be_cmd_rss_config(adapter, rss->rsstable, rss->rss_flags,
3224 128, rss_key);
3225 if (rc) {
3226 rss->rss_flags = RSS_ENABLE_NONE;
3227 return rc;
3228 }
3229
3230 memcpy(rss->rss_hkey, rss_key, RSS_HASH_KEY_LEN);
3231
3232 /* First time posting */
3233 for_all_rx_queues(adapter, rxo, i)
3234 be_post_rx_frags(rxo, GFP_KERNEL, MAX_RX_POST);
3235 return 0;
3236 }
3237
be_open(struct net_device * netdev)3238 static int be_open(struct net_device *netdev)
3239 {
3240 struct be_adapter *adapter = netdev_priv(netdev);
3241 struct be_eq_obj *eqo;
3242 struct be_rx_obj *rxo;
3243 struct be_tx_obj *txo;
3244 u8 link_status;
3245 int status, i;
3246
3247 status = be_rx_qs_create(adapter);
3248 if (status)
3249 goto err;
3250
3251 status = be_irq_register(adapter);
3252 if (status)
3253 goto err;
3254
3255 for_all_rx_queues(adapter, rxo, i)
3256 be_cq_notify(adapter, rxo->cq.id, true, 0);
3257
3258 for_all_tx_queues(adapter, txo, i)
3259 be_cq_notify(adapter, txo->cq.id, true, 0);
3260
3261 be_async_mcc_enable(adapter);
3262
3263 for_all_evt_queues(adapter, eqo, i) {
3264 napi_enable(&eqo->napi);
3265 be_enable_busy_poll(eqo);
3266 be_eq_notify(adapter, eqo->q.id, true, true, 0);
3267 }
3268 adapter->flags |= BE_FLAGS_NAPI_ENABLED;
3269
3270 status = be_cmd_link_status_query(adapter, NULL, &link_status, 0);
3271 if (!status)
3272 be_link_status_update(adapter, link_status);
3273
3274 netif_tx_start_all_queues(netdev);
3275 be_roce_dev_open(adapter);
3276
3277 #ifdef CONFIG_BE2NET_VXLAN
3278 if (skyhawk_chip(adapter))
3279 vxlan_get_rx_port(netdev);
3280 #endif
3281
3282 return 0;
3283 err:
3284 be_close(adapter->netdev);
3285 return -EIO;
3286 }
3287
be_setup_wol(struct be_adapter * adapter,bool enable)3288 static int be_setup_wol(struct be_adapter *adapter, bool enable)
3289 {
3290 struct be_dma_mem cmd;
3291 int status = 0;
3292 u8 mac[ETH_ALEN];
3293
3294 eth_zero_addr(mac);
3295
3296 cmd.size = sizeof(struct be_cmd_req_acpi_wol_magic_config);
3297 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
3298 GFP_KERNEL);
3299 if (!cmd.va)
3300 return -ENOMEM;
3301
3302 if (enable) {
3303 status = pci_write_config_dword(adapter->pdev,
3304 PCICFG_PM_CONTROL_OFFSET,
3305 PCICFG_PM_CONTROL_MASK);
3306 if (status) {
3307 dev_err(&adapter->pdev->dev,
3308 "Could not enable Wake-on-lan\n");
3309 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va,
3310 cmd.dma);
3311 return status;
3312 }
3313 status = be_cmd_enable_magic_wol(adapter,
3314 adapter->netdev->dev_addr,
3315 &cmd);
3316 pci_enable_wake(adapter->pdev, PCI_D3hot, 1);
3317 pci_enable_wake(adapter->pdev, PCI_D3cold, 1);
3318 } else {
3319 status = be_cmd_enable_magic_wol(adapter, mac, &cmd);
3320 pci_enable_wake(adapter->pdev, PCI_D3hot, 0);
3321 pci_enable_wake(adapter->pdev, PCI_D3cold, 0);
3322 }
3323
3324 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma);
3325 return status;
3326 }
3327
be_vf_eth_addr_generate(struct be_adapter * adapter,u8 * mac)3328 static void be_vf_eth_addr_generate(struct be_adapter *adapter, u8 *mac)
3329 {
3330 u32 addr;
3331
3332 addr = jhash(adapter->netdev->dev_addr, ETH_ALEN, 0);
3333
3334 mac[5] = (u8)(addr & 0xFF);
3335 mac[4] = (u8)((addr >> 8) & 0xFF);
3336 mac[3] = (u8)((addr >> 16) & 0xFF);
3337 /* Use the OUI from the current MAC address */
3338 memcpy(mac, adapter->netdev->dev_addr, 3);
3339 }
3340
3341 /*
3342 * Generate a seed MAC address from the PF MAC Address using jhash.
3343 * MAC Address for VFs are assigned incrementally starting from the seed.
3344 * These addresses are programmed in the ASIC by the PF and the VF driver
3345 * queries for the MAC address during its probe.
3346 */
be_vf_eth_addr_config(struct be_adapter * adapter)3347 static int be_vf_eth_addr_config(struct be_adapter *adapter)
3348 {
3349 u32 vf;
3350 int status = 0;
3351 u8 mac[ETH_ALEN];
3352 struct be_vf_cfg *vf_cfg;
3353
3354 be_vf_eth_addr_generate(adapter, mac);
3355
3356 for_all_vfs(adapter, vf_cfg, vf) {
3357 if (BEx_chip(adapter))
3358 status = be_cmd_pmac_add(adapter, mac,
3359 vf_cfg->if_handle,
3360 &vf_cfg->pmac_id, vf + 1);
3361 else
3362 status = be_cmd_set_mac(adapter, mac, vf_cfg->if_handle,
3363 vf + 1);
3364
3365 if (status)
3366 dev_err(&adapter->pdev->dev,
3367 "Mac address assignment failed for VF %d\n",
3368 vf);
3369 else
3370 memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
3371
3372 mac[5] += 1;
3373 }
3374 return status;
3375 }
3376
be_vfs_mac_query(struct be_adapter * adapter)3377 static int be_vfs_mac_query(struct be_adapter *adapter)
3378 {
3379 int status, vf;
3380 u8 mac[ETH_ALEN];
3381 struct be_vf_cfg *vf_cfg;
3382
3383 for_all_vfs(adapter, vf_cfg, vf) {
3384 status = be_cmd_get_active_mac(adapter, vf_cfg->pmac_id,
3385 mac, vf_cfg->if_handle,
3386 false, vf+1);
3387 if (status)
3388 return status;
3389 memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
3390 }
3391 return 0;
3392 }
3393
be_vf_clear(struct be_adapter * adapter)3394 static void be_vf_clear(struct be_adapter *adapter)
3395 {
3396 struct be_vf_cfg *vf_cfg;
3397 u32 vf;
3398
3399 if (pci_vfs_assigned(adapter->pdev)) {
3400 dev_warn(&adapter->pdev->dev,
3401 "VFs are assigned to VMs: not disabling VFs\n");
3402 goto done;
3403 }
3404
3405 pci_disable_sriov(adapter->pdev);
3406
3407 for_all_vfs(adapter, vf_cfg, vf) {
3408 if (BEx_chip(adapter))
3409 be_cmd_pmac_del(adapter, vf_cfg->if_handle,
3410 vf_cfg->pmac_id, vf + 1);
3411 else
3412 be_cmd_set_mac(adapter, NULL, vf_cfg->if_handle,
3413 vf + 1);
3414
3415 be_cmd_if_destroy(adapter, vf_cfg->if_handle, vf + 1);
3416 }
3417 done:
3418 kfree(adapter->vf_cfg);
3419 adapter->num_vfs = 0;
3420 adapter->flags &= ~BE_FLAGS_SRIOV_ENABLED;
3421 }
3422
be_clear_queues(struct be_adapter * adapter)3423 static void be_clear_queues(struct be_adapter *adapter)
3424 {
3425 be_mcc_queues_destroy(adapter);
3426 be_rx_cqs_destroy(adapter);
3427 be_tx_queues_destroy(adapter);
3428 be_evt_queues_destroy(adapter);
3429 }
3430
be_cancel_worker(struct be_adapter * adapter)3431 static void be_cancel_worker(struct be_adapter *adapter)
3432 {
3433 if (adapter->flags & BE_FLAGS_WORKER_SCHEDULED) {
3434 cancel_delayed_work_sync(&adapter->work);
3435 adapter->flags &= ~BE_FLAGS_WORKER_SCHEDULED;
3436 }
3437 }
3438
be_cancel_err_detection(struct be_adapter * adapter)3439 static void be_cancel_err_detection(struct be_adapter *adapter)
3440 {
3441 if (adapter->flags & BE_FLAGS_ERR_DETECTION_SCHEDULED) {
3442 cancel_delayed_work_sync(&adapter->be_err_detection_work);
3443 adapter->flags &= ~BE_FLAGS_ERR_DETECTION_SCHEDULED;
3444 }
3445 }
3446
be_mac_clear(struct be_adapter * adapter)3447 static void be_mac_clear(struct be_adapter *adapter)
3448 {
3449 if (adapter->pmac_id) {
3450 be_cmd_pmac_del(adapter, adapter->if_handle,
3451 adapter->pmac_id[0], 0);
3452 kfree(adapter->pmac_id);
3453 adapter->pmac_id = NULL;
3454 }
3455 }
3456
3457 #ifdef CONFIG_BE2NET_VXLAN
be_disable_vxlan_offloads(struct be_adapter * adapter)3458 static void be_disable_vxlan_offloads(struct be_adapter *adapter)
3459 {
3460 struct net_device *netdev = adapter->netdev;
3461
3462 if (adapter->flags & BE_FLAGS_VXLAN_OFFLOADS)
3463 be_cmd_manage_iface(adapter, adapter->if_handle,
3464 OP_CONVERT_TUNNEL_TO_NORMAL);
3465
3466 if (adapter->vxlan_port)
3467 be_cmd_set_vxlan_port(adapter, 0);
3468
3469 adapter->flags &= ~BE_FLAGS_VXLAN_OFFLOADS;
3470 adapter->vxlan_port = 0;
3471
3472 netdev->hw_enc_features = 0;
3473 netdev->hw_features &= ~(NETIF_F_GSO_UDP_TUNNEL);
3474 netdev->features &= ~(NETIF_F_GSO_UDP_TUNNEL);
3475 }
3476 #endif
3477
be_calculate_vf_qs(struct be_adapter * adapter,u16 num_vfs)3478 static u16 be_calculate_vf_qs(struct be_adapter *adapter, u16 num_vfs)
3479 {
3480 struct be_resources res = adapter->pool_res;
3481 u16 num_vf_qs = 1;
3482
3483 /* Distribute the queue resources equally among the PF and it's VFs
3484 * Do not distribute queue resources in multi-channel configuration.
3485 */
3486 if (num_vfs && !be_is_mc(adapter)) {
3487 /* If number of VFs requested is 8 less than max supported,
3488 * assign 8 queue pairs to the PF and divide the remaining
3489 * resources evenly among the VFs
3490 */
3491 if (num_vfs < (be_max_vfs(adapter) - 8))
3492 num_vf_qs = (res.max_rss_qs - 8) / num_vfs;
3493 else
3494 num_vf_qs = res.max_rss_qs / num_vfs;
3495
3496 /* Skyhawk-R chip supports only MAX_RSS_IFACES RSS capable
3497 * interfaces per port. Provide RSS on VFs, only if number
3498 * of VFs requested is less than MAX_RSS_IFACES limit.
3499 */
3500 if (num_vfs >= MAX_RSS_IFACES)
3501 num_vf_qs = 1;
3502 }
3503 return num_vf_qs;
3504 }
3505
be_clear(struct be_adapter * adapter)3506 static int be_clear(struct be_adapter *adapter)
3507 {
3508 struct pci_dev *pdev = adapter->pdev;
3509 u16 num_vf_qs;
3510
3511 be_cancel_worker(adapter);
3512
3513 if (sriov_enabled(adapter))
3514 be_vf_clear(adapter);
3515
3516 /* Re-configure FW to distribute resources evenly across max-supported
3517 * number of VFs, only when VFs are not already enabled.
3518 */
3519 if (skyhawk_chip(adapter) && be_physfn(adapter) &&
3520 !pci_vfs_assigned(pdev)) {
3521 num_vf_qs = be_calculate_vf_qs(adapter,
3522 pci_sriov_get_totalvfs(pdev));
3523 be_cmd_set_sriov_config(adapter, adapter->pool_res,
3524 pci_sriov_get_totalvfs(pdev),
3525 num_vf_qs);
3526 }
3527
3528 #ifdef CONFIG_BE2NET_VXLAN
3529 be_disable_vxlan_offloads(adapter);
3530 #endif
3531 /* delete the primary mac along with the uc-mac list */
3532 be_mac_clear(adapter);
3533
3534 be_cmd_if_destroy(adapter, adapter->if_handle, 0);
3535
3536 be_clear_queues(adapter);
3537
3538 be_msix_disable(adapter);
3539 adapter->flags &= ~BE_FLAGS_SETUP_DONE;
3540 return 0;
3541 }
3542
be_if_create(struct be_adapter * adapter,u32 * if_handle,u32 cap_flags,u32 vf)3543 static int be_if_create(struct be_adapter *adapter, u32 *if_handle,
3544 u32 cap_flags, u32 vf)
3545 {
3546 u32 en_flags;
3547
3548 en_flags = BE_IF_FLAGS_UNTAGGED | BE_IF_FLAGS_BROADCAST |
3549 BE_IF_FLAGS_MULTICAST | BE_IF_FLAGS_PASS_L3L4_ERRORS |
3550 BE_IF_FLAGS_RSS | BE_IF_FLAGS_DEFQ_RSS;
3551
3552 en_flags &= cap_flags;
3553
3554 return be_cmd_if_create(adapter, cap_flags, en_flags, if_handle, vf);
3555 }
3556
be_vfs_if_create(struct be_adapter * adapter)3557 static int be_vfs_if_create(struct be_adapter *adapter)
3558 {
3559 struct be_resources res = {0};
3560 struct be_vf_cfg *vf_cfg;
3561 u32 cap_flags, vf;
3562 int status;
3563
3564 /* If a FW profile exists, then cap_flags are updated */
3565 cap_flags = BE_IF_FLAGS_UNTAGGED | BE_IF_FLAGS_BROADCAST |
3566 BE_IF_FLAGS_MULTICAST;
3567
3568 for_all_vfs(adapter, vf_cfg, vf) {
3569 if (!BE3_chip(adapter)) {
3570 status = be_cmd_get_profile_config(adapter, &res,
3571 RESOURCE_LIMITS,
3572 vf + 1);
3573 if (!status) {
3574 cap_flags = res.if_cap_flags;
3575 /* Prevent VFs from enabling VLAN promiscuous
3576 * mode
3577 */
3578 cap_flags &= ~BE_IF_FLAGS_VLAN_PROMISCUOUS;
3579 }
3580 }
3581
3582 status = be_if_create(adapter, &vf_cfg->if_handle,
3583 cap_flags, vf + 1);
3584 if (status)
3585 return status;
3586 }
3587
3588 return 0;
3589 }
3590
be_vf_setup_init(struct be_adapter * adapter)3591 static int be_vf_setup_init(struct be_adapter *adapter)
3592 {
3593 struct be_vf_cfg *vf_cfg;
3594 int vf;
3595
3596 adapter->vf_cfg = kcalloc(adapter->num_vfs, sizeof(*vf_cfg),
3597 GFP_KERNEL);
3598 if (!adapter->vf_cfg)
3599 return -ENOMEM;
3600
3601 for_all_vfs(adapter, vf_cfg, vf) {
3602 vf_cfg->if_handle = -1;
3603 vf_cfg->pmac_id = -1;
3604 }
3605 return 0;
3606 }
3607
be_vf_setup(struct be_adapter * adapter)3608 static int be_vf_setup(struct be_adapter *adapter)
3609 {
3610 struct device *dev = &adapter->pdev->dev;
3611 struct be_vf_cfg *vf_cfg;
3612 int status, old_vfs, vf;
3613
3614 old_vfs = pci_num_vf(adapter->pdev);
3615
3616 status = be_vf_setup_init(adapter);
3617 if (status)
3618 goto err;
3619
3620 if (old_vfs) {
3621 for_all_vfs(adapter, vf_cfg, vf) {
3622 status = be_cmd_get_if_id(adapter, vf_cfg, vf);
3623 if (status)
3624 goto err;
3625 }
3626
3627 status = be_vfs_mac_query(adapter);
3628 if (status)
3629 goto err;
3630 } else {
3631 status = be_vfs_if_create(adapter);
3632 if (status)
3633 goto err;
3634
3635 status = be_vf_eth_addr_config(adapter);
3636 if (status)
3637 goto err;
3638 }
3639
3640 for_all_vfs(adapter, vf_cfg, vf) {
3641 /* Allow VFs to programs MAC/VLAN filters */
3642 status = be_cmd_get_fn_privileges(adapter, &vf_cfg->privileges,
3643 vf + 1);
3644 if (!status && !(vf_cfg->privileges & BE_PRIV_FILTMGMT)) {
3645 status = be_cmd_set_fn_privileges(adapter,
3646 vf_cfg->privileges |
3647 BE_PRIV_FILTMGMT,
3648 vf + 1);
3649 if (!status) {
3650 vf_cfg->privileges |= BE_PRIV_FILTMGMT;
3651 dev_info(dev, "VF%d has FILTMGMT privilege\n",
3652 vf);
3653 }
3654 }
3655
3656 /* Allow full available bandwidth */
3657 if (!old_vfs)
3658 be_cmd_config_qos(adapter, 0, 0, vf + 1);
3659
3660 if (!old_vfs) {
3661 be_cmd_enable_vf(adapter, vf + 1);
3662 be_cmd_set_logical_link_config(adapter,
3663 IFLA_VF_LINK_STATE_AUTO,
3664 vf+1);
3665 }
3666 }
3667
3668 if (!old_vfs) {
3669 status = pci_enable_sriov(adapter->pdev, adapter->num_vfs);
3670 if (status) {
3671 dev_err(dev, "SRIOV enable failed\n");
3672 adapter->num_vfs = 0;
3673 goto err;
3674 }
3675 }
3676
3677 adapter->flags |= BE_FLAGS_SRIOV_ENABLED;
3678 return 0;
3679 err:
3680 dev_err(dev, "VF setup failed\n");
3681 be_vf_clear(adapter);
3682 return status;
3683 }
3684
3685 /* Converting function_mode bits on BE3 to SH mc_type enums */
3686
be_convert_mc_type(u32 function_mode)3687 static u8 be_convert_mc_type(u32 function_mode)
3688 {
3689 if (function_mode & VNIC_MODE && function_mode & QNQ_MODE)
3690 return vNIC1;
3691 else if (function_mode & QNQ_MODE)
3692 return FLEX10;
3693 else if (function_mode & VNIC_MODE)
3694 return vNIC2;
3695 else if (function_mode & UMC_ENABLED)
3696 return UMC;
3697 else
3698 return MC_NONE;
3699 }
3700
3701 /* On BE2/BE3 FW does not suggest the supported limits */
BEx_get_resources(struct be_adapter * adapter,struct be_resources * res)3702 static void BEx_get_resources(struct be_adapter *adapter,
3703 struct be_resources *res)
3704 {
3705 bool use_sriov = adapter->num_vfs ? 1 : 0;
3706
3707 if (be_physfn(adapter))
3708 res->max_uc_mac = BE_UC_PMAC_COUNT;
3709 else
3710 res->max_uc_mac = BE_VF_UC_PMAC_COUNT;
3711
3712 adapter->mc_type = be_convert_mc_type(adapter->function_mode);
3713
3714 if (be_is_mc(adapter)) {
3715 /* Assuming that there are 4 channels per port,
3716 * when multi-channel is enabled
3717 */
3718 if (be_is_qnq_mode(adapter))
3719 res->max_vlans = BE_NUM_VLANS_SUPPORTED/8;
3720 else
3721 /* In a non-qnq multichannel mode, the pvid
3722 * takes up one vlan entry
3723 */
3724 res->max_vlans = (BE_NUM_VLANS_SUPPORTED / 4) - 1;
3725 } else {
3726 res->max_vlans = BE_NUM_VLANS_SUPPORTED;
3727 }
3728
3729 res->max_mcast_mac = BE_MAX_MC;
3730
3731 /* 1) For BE3 1Gb ports, FW does not support multiple TXQs
3732 * 2) Create multiple TX rings on a BE3-R multi-channel interface
3733 * *only* if it is RSS-capable.
3734 */
3735 if (BE2_chip(adapter) || use_sriov || (adapter->port_num > 1) ||
3736 !be_physfn(adapter) || (be_is_mc(adapter) &&
3737 !(adapter->function_caps & BE_FUNCTION_CAPS_RSS))) {
3738 res->max_tx_qs = 1;
3739 } else if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) {
3740 struct be_resources super_nic_res = {0};
3741
3742 /* On a SuperNIC profile, the driver needs to use the
3743 * GET_PROFILE_CONFIG cmd to query the per-function TXQ limits
3744 */
3745 be_cmd_get_profile_config(adapter, &super_nic_res,
3746 RESOURCE_LIMITS, 0);
3747 /* Some old versions of BE3 FW don't report max_tx_qs value */
3748 res->max_tx_qs = super_nic_res.max_tx_qs ? : BE3_MAX_TX_QS;
3749 } else {
3750 res->max_tx_qs = BE3_MAX_TX_QS;
3751 }
3752
3753 if ((adapter->function_caps & BE_FUNCTION_CAPS_RSS) &&
3754 !use_sriov && be_physfn(adapter))
3755 res->max_rss_qs = (adapter->be3_native) ?
3756 BE3_MAX_RSS_QS : BE2_MAX_RSS_QS;
3757 res->max_rx_qs = res->max_rss_qs + 1;
3758
3759 if (be_physfn(adapter))
3760 res->max_evt_qs = (be_max_vfs(adapter) > 0) ?
3761 BE3_SRIOV_MAX_EVT_QS : BE3_MAX_EVT_QS;
3762 else
3763 res->max_evt_qs = 1;
3764
3765 res->if_cap_flags = BE_IF_CAP_FLAGS_WANT;
3766 res->if_cap_flags &= ~BE_IF_FLAGS_DEFQ_RSS;
3767 if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS))
3768 res->if_cap_flags &= ~BE_IF_FLAGS_RSS;
3769 }
3770
be_setup_init(struct be_adapter * adapter)3771 static void be_setup_init(struct be_adapter *adapter)
3772 {
3773 adapter->vlan_prio_bmap = 0xff;
3774 adapter->phy.link_speed = -1;
3775 adapter->if_handle = -1;
3776 adapter->be3_native = false;
3777 adapter->if_flags = 0;
3778 if (be_physfn(adapter))
3779 adapter->cmd_privileges = MAX_PRIVILEGES;
3780 else
3781 adapter->cmd_privileges = MIN_PRIVILEGES;
3782 }
3783
be_get_sriov_config(struct be_adapter * adapter)3784 static int be_get_sriov_config(struct be_adapter *adapter)
3785 {
3786 struct be_resources res = {0};
3787 int max_vfs, old_vfs;
3788
3789 be_cmd_get_profile_config(adapter, &res, RESOURCE_LIMITS, 0);
3790
3791 /* Some old versions of BE3 FW don't report max_vfs value */
3792 if (BE3_chip(adapter) && !res.max_vfs) {
3793 max_vfs = pci_sriov_get_totalvfs(adapter->pdev);
3794 res.max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0;
3795 }
3796
3797 adapter->pool_res = res;
3798
3799 /* If during previous unload of the driver, the VFs were not disabled,
3800 * then we cannot rely on the PF POOL limits for the TotalVFs value.
3801 * Instead use the TotalVFs value stored in the pci-dev struct.
3802 */
3803 old_vfs = pci_num_vf(adapter->pdev);
3804 if (old_vfs) {
3805 dev_info(&adapter->pdev->dev, "%d VFs are already enabled\n",
3806 old_vfs);
3807
3808 adapter->pool_res.max_vfs =
3809 pci_sriov_get_totalvfs(adapter->pdev);
3810 adapter->num_vfs = old_vfs;
3811 }
3812
3813 return 0;
3814 }
3815
be_alloc_sriov_res(struct be_adapter * adapter)3816 static void be_alloc_sriov_res(struct be_adapter *adapter)
3817 {
3818 int old_vfs = pci_num_vf(adapter->pdev);
3819 u16 num_vf_qs;
3820 int status;
3821
3822 be_get_sriov_config(adapter);
3823
3824 if (!old_vfs)
3825 pci_sriov_set_totalvfs(adapter->pdev, be_max_vfs(adapter));
3826
3827 /* When the HW is in SRIOV capable configuration, the PF-pool
3828 * resources are given to PF during driver load, if there are no
3829 * old VFs. This facility is not available in BE3 FW.
3830 * Also, this is done by FW in Lancer chip.
3831 */
3832 if (skyhawk_chip(adapter) && be_max_vfs(adapter) && !old_vfs) {
3833 num_vf_qs = be_calculate_vf_qs(adapter, 0);
3834 status = be_cmd_set_sriov_config(adapter, adapter->pool_res, 0,
3835 num_vf_qs);
3836 if (status)
3837 dev_err(&adapter->pdev->dev,
3838 "Failed to optimize SRIOV resources\n");
3839 }
3840 }
3841
be_get_resources(struct be_adapter * adapter)3842 static int be_get_resources(struct be_adapter *adapter)
3843 {
3844 struct device *dev = &adapter->pdev->dev;
3845 struct be_resources res = {0};
3846 int status;
3847
3848 if (BEx_chip(adapter)) {
3849 BEx_get_resources(adapter, &res);
3850 adapter->res = res;
3851 }
3852
3853 /* For Lancer, SH etc read per-function resource limits from FW.
3854 * GET_FUNC_CONFIG returns per function guaranteed limits.
3855 * GET_PROFILE_CONFIG returns PCI-E related limits PF-pool limits
3856 */
3857 if (!BEx_chip(adapter)) {
3858 status = be_cmd_get_func_config(adapter, &res);
3859 if (status)
3860 return status;
3861
3862 /* If a deafault RXQ must be created, we'll use up one RSSQ*/
3863 if (res.max_rss_qs && res.max_rss_qs == res.max_rx_qs &&
3864 !(res.if_cap_flags & BE_IF_FLAGS_DEFQ_RSS))
3865 res.max_rss_qs -= 1;
3866
3867 /* If RoCE may be enabled stash away half the EQs for RoCE */
3868 if (be_roce_supported(adapter))
3869 res.max_evt_qs /= 2;
3870 adapter->res = res;
3871 }
3872
3873 /* If FW supports RSS default queue, then skip creating non-RSS
3874 * queue for non-IP traffic.
3875 */
3876 adapter->need_def_rxq = (be_if_cap_flags(adapter) &
3877 BE_IF_FLAGS_DEFQ_RSS) ? 0 : 1;
3878
3879 dev_info(dev, "Max: txqs %d, rxqs %d, rss %d, eqs %d, vfs %d\n",
3880 be_max_txqs(adapter), be_max_rxqs(adapter),
3881 be_max_rss(adapter), be_max_eqs(adapter),
3882 be_max_vfs(adapter));
3883 dev_info(dev, "Max: uc-macs %d, mc-macs %d, vlans %d\n",
3884 be_max_uc(adapter), be_max_mc(adapter),
3885 be_max_vlans(adapter));
3886
3887 /* Sanitize cfg_num_qs based on HW and platform limits */
3888 adapter->cfg_num_qs = min_t(u16, netif_get_num_default_rss_queues(),
3889 be_max_qs(adapter));
3890 return 0;
3891 }
3892
be_get_config(struct be_adapter * adapter)3893 static int be_get_config(struct be_adapter *adapter)
3894 {
3895 int status, level;
3896 u16 profile_id;
3897
3898 status = be_cmd_get_cntl_attributes(adapter);
3899 if (status)
3900 return status;
3901
3902 status = be_cmd_query_fw_cfg(adapter);
3903 if (status)
3904 return status;
3905
3906 if (BEx_chip(adapter)) {
3907 level = be_cmd_get_fw_log_level(adapter);
3908 adapter->msg_enable =
3909 level <= FW_LOG_LEVEL_DEFAULT ? NETIF_MSG_HW : 0;
3910 }
3911
3912 be_cmd_get_acpi_wol_cap(adapter);
3913
3914 be_cmd_query_port_name(adapter);
3915
3916 if (be_physfn(adapter)) {
3917 status = be_cmd_get_active_profile(adapter, &profile_id);
3918 if (!status)
3919 dev_info(&adapter->pdev->dev,
3920 "Using profile 0x%x\n", profile_id);
3921 }
3922
3923 status = be_get_resources(adapter);
3924 if (status)
3925 return status;
3926
3927 adapter->pmac_id = kcalloc(be_max_uc(adapter),
3928 sizeof(*adapter->pmac_id), GFP_KERNEL);
3929 if (!adapter->pmac_id)
3930 return -ENOMEM;
3931
3932 return 0;
3933 }
3934
be_mac_setup(struct be_adapter * adapter)3935 static int be_mac_setup(struct be_adapter *adapter)
3936 {
3937 u8 mac[ETH_ALEN];
3938 int status;
3939
3940 if (is_zero_ether_addr(adapter->netdev->dev_addr)) {
3941 status = be_cmd_get_perm_mac(adapter, mac);
3942 if (status)
3943 return status;
3944
3945 memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);
3946 memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);
3947 } else {
3948 /* Maybe the HW was reset; dev_addr must be re-programmed */
3949 memcpy(mac, adapter->netdev->dev_addr, ETH_ALEN);
3950 }
3951
3952 /* For BE3-R VFs, the PF programs the initial MAC address */
3953 if (!(BEx_chip(adapter) && be_virtfn(adapter)))
3954 be_cmd_pmac_add(adapter, mac, adapter->if_handle,
3955 &adapter->pmac_id[0], 0);
3956 return 0;
3957 }
3958
be_schedule_worker(struct be_adapter * adapter)3959 static void be_schedule_worker(struct be_adapter *adapter)
3960 {
3961 schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
3962 adapter->flags |= BE_FLAGS_WORKER_SCHEDULED;
3963 }
3964
be_schedule_err_detection(struct be_adapter * adapter)3965 static void be_schedule_err_detection(struct be_adapter *adapter)
3966 {
3967 schedule_delayed_work(&adapter->be_err_detection_work,
3968 msecs_to_jiffies(1000));
3969 adapter->flags |= BE_FLAGS_ERR_DETECTION_SCHEDULED;
3970 }
3971
be_setup_queues(struct be_adapter * adapter)3972 static int be_setup_queues(struct be_adapter *adapter)
3973 {
3974 struct net_device *netdev = adapter->netdev;
3975 int status;
3976
3977 status = be_evt_queues_create(adapter);
3978 if (status)
3979 goto err;
3980
3981 status = be_tx_qs_create(adapter);
3982 if (status)
3983 goto err;
3984
3985 status = be_rx_cqs_create(adapter);
3986 if (status)
3987 goto err;
3988
3989 status = be_mcc_queues_create(adapter);
3990 if (status)
3991 goto err;
3992
3993 status = netif_set_real_num_rx_queues(netdev, adapter->num_rx_qs);
3994 if (status)
3995 goto err;
3996
3997 status = netif_set_real_num_tx_queues(netdev, adapter->num_tx_qs);
3998 if (status)
3999 goto err;
4000
4001 return 0;
4002 err:
4003 dev_err(&adapter->pdev->dev, "queue_setup failed\n");
4004 return status;
4005 }
4006
be_update_queues(struct be_adapter * adapter)4007 int be_update_queues(struct be_adapter *adapter)
4008 {
4009 struct net_device *netdev = adapter->netdev;
4010 int status;
4011
4012 if (netif_running(netdev))
4013 be_close(netdev);
4014
4015 be_cancel_worker(adapter);
4016
4017 /* If any vectors have been shared with RoCE we cannot re-program
4018 * the MSIx table.
4019 */
4020 if (!adapter->num_msix_roce_vec)
4021 be_msix_disable(adapter);
4022
4023 be_clear_queues(adapter);
4024
4025 if (!msix_enabled(adapter)) {
4026 status = be_msix_enable(adapter);
4027 if (status)
4028 return status;
4029 }
4030
4031 status = be_setup_queues(adapter);
4032 if (status)
4033 return status;
4034
4035 be_schedule_worker(adapter);
4036
4037 if (netif_running(netdev))
4038 status = be_open(netdev);
4039
4040 return status;
4041 }
4042
fw_major_num(const char * fw_ver)4043 static inline int fw_major_num(const char *fw_ver)
4044 {
4045 int fw_major = 0, i;
4046
4047 i = sscanf(fw_ver, "%d.", &fw_major);
4048 if (i != 1)
4049 return 0;
4050
4051 return fw_major;
4052 }
4053
4054 /* If any VFs are already enabled don't FLR the PF */
be_reset_required(struct be_adapter * adapter)4055 static bool be_reset_required(struct be_adapter *adapter)
4056 {
4057 return pci_num_vf(adapter->pdev) ? false : true;
4058 }
4059
4060 /* Wait for the FW to be ready and perform the required initialization */
be_func_init(struct be_adapter * adapter)4061 static int be_func_init(struct be_adapter *adapter)
4062 {
4063 int status;
4064
4065 status = be_fw_wait_ready(adapter);
4066 if (status)
4067 return status;
4068
4069 if (be_reset_required(adapter)) {
4070 status = be_cmd_reset_function(adapter);
4071 if (status)
4072 return status;
4073
4074 /* Wait for interrupts to quiesce after an FLR */
4075 msleep(100);
4076
4077 /* We can clear all errors when function reset succeeds */
4078 be_clear_all_error(adapter);
4079 }
4080
4081 /* Tell FW we're ready to fire cmds */
4082 status = be_cmd_fw_init(adapter);
4083 if (status)
4084 return status;
4085
4086 /* Allow interrupts for other ULPs running on NIC function */
4087 be_intr_set(adapter, true);
4088
4089 return 0;
4090 }
4091
be_setup(struct be_adapter * adapter)4092 static int be_setup(struct be_adapter *adapter)
4093 {
4094 struct device *dev = &adapter->pdev->dev;
4095 int status;
4096
4097 status = be_func_init(adapter);
4098 if (status)
4099 return status;
4100
4101 be_setup_init(adapter);
4102
4103 if (!lancer_chip(adapter))
4104 be_cmd_req_native_mode(adapter);
4105
4106 if (!BE2_chip(adapter) && be_physfn(adapter))
4107 be_alloc_sriov_res(adapter);
4108
4109 status = be_get_config(adapter);
4110 if (status)
4111 goto err;
4112
4113 status = be_msix_enable(adapter);
4114 if (status)
4115 goto err;
4116
4117 status = be_if_create(adapter, &adapter->if_handle,
4118 be_if_cap_flags(adapter), 0);
4119 if (status)
4120 goto err;
4121
4122 /* Updating real_num_tx/rx_queues() requires rtnl_lock() */
4123 rtnl_lock();
4124 status = be_setup_queues(adapter);
4125 rtnl_unlock();
4126 if (status)
4127 goto err;
4128
4129 be_cmd_get_fn_privileges(adapter, &adapter->cmd_privileges, 0);
4130
4131 status = be_mac_setup(adapter);
4132 if (status)
4133 goto err;
4134
4135 be_cmd_get_fw_ver(adapter);
4136 dev_info(dev, "FW version is %s\n", adapter->fw_ver);
4137
4138 if (BE2_chip(adapter) && fw_major_num(adapter->fw_ver) < 4) {
4139 dev_err(dev, "Firmware on card is old(%s), IRQs may not work",
4140 adapter->fw_ver);
4141 dev_err(dev, "Please upgrade firmware to version >= 4.0\n");
4142 }
4143
4144 if (adapter->vlans_added)
4145 be_vid_config(adapter);
4146
4147 be_set_rx_mode(adapter->netdev);
4148
4149 status = be_cmd_set_flow_control(adapter, adapter->tx_fc,
4150 adapter->rx_fc);
4151 if (status)
4152 be_cmd_get_flow_control(adapter, &adapter->tx_fc,
4153 &adapter->rx_fc);
4154
4155 dev_info(&adapter->pdev->dev, "HW Flow control - TX:%d RX:%d\n",
4156 adapter->tx_fc, adapter->rx_fc);
4157
4158 if (be_physfn(adapter))
4159 be_cmd_set_logical_link_config(adapter,
4160 IFLA_VF_LINK_STATE_AUTO, 0);
4161
4162 if (adapter->num_vfs)
4163 be_vf_setup(adapter);
4164
4165 status = be_cmd_get_phy_info(adapter);
4166 if (!status && be_pause_supported(adapter))
4167 adapter->phy.fc_autoneg = 1;
4168
4169 be_schedule_worker(adapter);
4170 adapter->flags |= BE_FLAGS_SETUP_DONE;
4171 return 0;
4172 err:
4173 be_clear(adapter);
4174 return status;
4175 }
4176
4177 #ifdef CONFIG_NET_POLL_CONTROLLER
be_netpoll(struct net_device * netdev)4178 static void be_netpoll(struct net_device *netdev)
4179 {
4180 struct be_adapter *adapter = netdev_priv(netdev);
4181 struct be_eq_obj *eqo;
4182 int i;
4183
4184 for_all_evt_queues(adapter, eqo, i) {
4185 be_eq_notify(eqo->adapter, eqo->q.id, false, true, 0);
4186 napi_schedule(&eqo->napi);
4187 }
4188 }
4189 #endif
4190
4191 static char flash_cookie[2][16] = {"*** SE FLAS", "H DIRECTORY *** "};
4192
phy_flashing_required(struct be_adapter * adapter)4193 static bool phy_flashing_required(struct be_adapter *adapter)
4194 {
4195 return (adapter->phy.phy_type == PHY_TYPE_TN_8022 &&
4196 adapter->phy.interface_type == PHY_TYPE_BASET_10GB);
4197 }
4198
is_comp_in_ufi(struct be_adapter * adapter,struct flash_section_info * fsec,int type)4199 static bool is_comp_in_ufi(struct be_adapter *adapter,
4200 struct flash_section_info *fsec, int type)
4201 {
4202 int i = 0, img_type = 0;
4203 struct flash_section_info_g2 *fsec_g2 = NULL;
4204
4205 if (BE2_chip(adapter))
4206 fsec_g2 = (struct flash_section_info_g2 *)fsec;
4207
4208 for (i = 0; i < MAX_FLASH_COMP; i++) {
4209 if (fsec_g2)
4210 img_type = le32_to_cpu(fsec_g2->fsec_entry[i].type);
4211 else
4212 img_type = le32_to_cpu(fsec->fsec_entry[i].type);
4213
4214 if (img_type == type)
4215 return true;
4216 }
4217 return false;
4218
4219 }
4220
get_fsec_info(struct be_adapter * adapter,int header_size,const struct firmware * fw)4221 static struct flash_section_info *get_fsec_info(struct be_adapter *adapter,
4222 int header_size,
4223 const struct firmware *fw)
4224 {
4225 struct flash_section_info *fsec = NULL;
4226 const u8 *p = fw->data;
4227
4228 p += header_size;
4229 while (p < (fw->data + fw->size)) {
4230 fsec = (struct flash_section_info *)p;
4231 if (!memcmp(flash_cookie, fsec->cookie, sizeof(flash_cookie)))
4232 return fsec;
4233 p += 32;
4234 }
4235 return NULL;
4236 }
4237
be_check_flash_crc(struct be_adapter * adapter,const u8 * p,u32 img_offset,u32 img_size,int hdr_size,u16 img_optype,bool * crc_match)4238 static int be_check_flash_crc(struct be_adapter *adapter, const u8 *p,
4239 u32 img_offset, u32 img_size, int hdr_size,
4240 u16 img_optype, bool *crc_match)
4241 {
4242 u32 crc_offset;
4243 int status;
4244 u8 crc[4];
4245
4246 status = be_cmd_get_flash_crc(adapter, crc, img_optype, img_offset,
4247 img_size - 4);
4248 if (status)
4249 return status;
4250
4251 crc_offset = hdr_size + img_offset + img_size - 4;
4252
4253 /* Skip flashing, if crc of flashed region matches */
4254 if (!memcmp(crc, p + crc_offset, 4))
4255 *crc_match = true;
4256 else
4257 *crc_match = false;
4258
4259 return status;
4260 }
4261
be_flash(struct be_adapter * adapter,const u8 * img,struct be_dma_mem * flash_cmd,int optype,int img_size,u32 img_offset)4262 static int be_flash(struct be_adapter *adapter, const u8 *img,
4263 struct be_dma_mem *flash_cmd, int optype, int img_size,
4264 u32 img_offset)
4265 {
4266 u32 flash_op, num_bytes, total_bytes = img_size, bytes_sent = 0;
4267 struct be_cmd_write_flashrom *req = flash_cmd->va;
4268 int status;
4269
4270 while (total_bytes) {
4271 num_bytes = min_t(u32, 32*1024, total_bytes);
4272
4273 total_bytes -= num_bytes;
4274
4275 if (!total_bytes) {
4276 if (optype == OPTYPE_PHY_FW)
4277 flash_op = FLASHROM_OPER_PHY_FLASH;
4278 else
4279 flash_op = FLASHROM_OPER_FLASH;
4280 } else {
4281 if (optype == OPTYPE_PHY_FW)
4282 flash_op = FLASHROM_OPER_PHY_SAVE;
4283 else
4284 flash_op = FLASHROM_OPER_SAVE;
4285 }
4286
4287 memcpy(req->data_buf, img, num_bytes);
4288 img += num_bytes;
4289 status = be_cmd_write_flashrom(adapter, flash_cmd, optype,
4290 flash_op, img_offset +
4291 bytes_sent, num_bytes);
4292 if (base_status(status) == MCC_STATUS_ILLEGAL_REQUEST &&
4293 optype == OPTYPE_PHY_FW)
4294 break;
4295 else if (status)
4296 return status;
4297
4298 bytes_sent += num_bytes;
4299 }
4300 return 0;
4301 }
4302
4303 /* For BE2, BE3 and BE3-R */
be_flash_BEx(struct be_adapter * adapter,const struct firmware * fw,struct be_dma_mem * flash_cmd,int num_of_images)4304 static int be_flash_BEx(struct be_adapter *adapter,
4305 const struct firmware *fw,
4306 struct be_dma_mem *flash_cmd, int num_of_images)
4307 {
4308 int img_hdrs_size = (num_of_images * sizeof(struct image_hdr));
4309 struct device *dev = &adapter->pdev->dev;
4310 struct flash_section_info *fsec = NULL;
4311 int status, i, filehdr_size, num_comp;
4312 const struct flash_comp *pflashcomp;
4313 bool crc_match;
4314 const u8 *p;
4315
4316 struct flash_comp gen3_flash_types[] = {
4317 { FLASH_iSCSI_PRIMARY_IMAGE_START_g3, OPTYPE_ISCSI_ACTIVE,
4318 FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_iSCSI},
4319 { FLASH_REDBOOT_START_g3, OPTYPE_REDBOOT,
4320 FLASH_REDBOOT_IMAGE_MAX_SIZE_g3, IMAGE_BOOT_CODE},
4321 { FLASH_iSCSI_BIOS_START_g3, OPTYPE_BIOS,
4322 FLASH_BIOS_IMAGE_MAX_SIZE_g3, IMAGE_OPTION_ROM_ISCSI},
4323 { FLASH_PXE_BIOS_START_g3, OPTYPE_PXE_BIOS,
4324 FLASH_BIOS_IMAGE_MAX_SIZE_g3, IMAGE_OPTION_ROM_PXE},
4325 { FLASH_FCoE_BIOS_START_g3, OPTYPE_FCOE_BIOS,
4326 FLASH_BIOS_IMAGE_MAX_SIZE_g3, IMAGE_OPTION_ROM_FCoE},
4327 { FLASH_iSCSI_BACKUP_IMAGE_START_g3, OPTYPE_ISCSI_BACKUP,
4328 FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_BACKUP_iSCSI},
4329 { FLASH_FCoE_PRIMARY_IMAGE_START_g3, OPTYPE_FCOE_FW_ACTIVE,
4330 FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_FCoE},
4331 { FLASH_FCoE_BACKUP_IMAGE_START_g3, OPTYPE_FCOE_FW_BACKUP,
4332 FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_BACKUP_FCoE},
4333 { FLASH_NCSI_START_g3, OPTYPE_NCSI_FW,
4334 FLASH_NCSI_IMAGE_MAX_SIZE_g3, IMAGE_NCSI},
4335 { FLASH_PHY_FW_START_g3, OPTYPE_PHY_FW,
4336 FLASH_PHY_FW_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_PHY}
4337 };
4338
4339 struct flash_comp gen2_flash_types[] = {
4340 { FLASH_iSCSI_PRIMARY_IMAGE_START_g2, OPTYPE_ISCSI_ACTIVE,
4341 FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_iSCSI},
4342 { FLASH_REDBOOT_START_g2, OPTYPE_REDBOOT,
4343 FLASH_REDBOOT_IMAGE_MAX_SIZE_g2, IMAGE_BOOT_CODE},
4344 { FLASH_iSCSI_BIOS_START_g2, OPTYPE_BIOS,
4345 FLASH_BIOS_IMAGE_MAX_SIZE_g2, IMAGE_OPTION_ROM_ISCSI},
4346 { FLASH_PXE_BIOS_START_g2, OPTYPE_PXE_BIOS,
4347 FLASH_BIOS_IMAGE_MAX_SIZE_g2, IMAGE_OPTION_ROM_PXE},
4348 { FLASH_FCoE_BIOS_START_g2, OPTYPE_FCOE_BIOS,
4349 FLASH_BIOS_IMAGE_MAX_SIZE_g2, IMAGE_OPTION_ROM_FCoE},
4350 { FLASH_iSCSI_BACKUP_IMAGE_START_g2, OPTYPE_ISCSI_BACKUP,
4351 FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_BACKUP_iSCSI},
4352 { FLASH_FCoE_PRIMARY_IMAGE_START_g2, OPTYPE_FCOE_FW_ACTIVE,
4353 FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_FCoE},
4354 { FLASH_FCoE_BACKUP_IMAGE_START_g2, OPTYPE_FCOE_FW_BACKUP,
4355 FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_BACKUP_FCoE}
4356 };
4357
4358 if (BE3_chip(adapter)) {
4359 pflashcomp = gen3_flash_types;
4360 filehdr_size = sizeof(struct flash_file_hdr_g3);
4361 num_comp = ARRAY_SIZE(gen3_flash_types);
4362 } else {
4363 pflashcomp = gen2_flash_types;
4364 filehdr_size = sizeof(struct flash_file_hdr_g2);
4365 num_comp = ARRAY_SIZE(gen2_flash_types);
4366 img_hdrs_size = 0;
4367 }
4368
4369 /* Get flash section info*/
4370 fsec = get_fsec_info(adapter, filehdr_size + img_hdrs_size, fw);
4371 if (!fsec) {
4372 dev_err(dev, "Invalid Cookie. FW image may be corrupted\n");
4373 return -1;
4374 }
4375 for (i = 0; i < num_comp; i++) {
4376 if (!is_comp_in_ufi(adapter, fsec, pflashcomp[i].img_type))
4377 continue;
4378
4379 if ((pflashcomp[i].optype == OPTYPE_NCSI_FW) &&
4380 memcmp(adapter->fw_ver, "3.102.148.0", 11) < 0)
4381 continue;
4382
4383 if (pflashcomp[i].optype == OPTYPE_PHY_FW &&
4384 !phy_flashing_required(adapter))
4385 continue;
4386
4387 if (pflashcomp[i].optype == OPTYPE_REDBOOT) {
4388 status = be_check_flash_crc(adapter, fw->data,
4389 pflashcomp[i].offset,
4390 pflashcomp[i].size,
4391 filehdr_size +
4392 img_hdrs_size,
4393 OPTYPE_REDBOOT, &crc_match);
4394 if (status) {
4395 dev_err(dev,
4396 "Could not get CRC for 0x%x region\n",
4397 pflashcomp[i].optype);
4398 continue;
4399 }
4400
4401 if (crc_match)
4402 continue;
4403 }
4404
4405 p = fw->data + filehdr_size + pflashcomp[i].offset +
4406 img_hdrs_size;
4407 if (p + pflashcomp[i].size > fw->data + fw->size)
4408 return -1;
4409
4410 status = be_flash(adapter, p, flash_cmd, pflashcomp[i].optype,
4411 pflashcomp[i].size, 0);
4412 if (status) {
4413 dev_err(dev, "Flashing section type 0x%x failed\n",
4414 pflashcomp[i].img_type);
4415 return status;
4416 }
4417 }
4418 return 0;
4419 }
4420
be_get_img_optype(struct flash_section_entry fsec_entry)4421 static u16 be_get_img_optype(struct flash_section_entry fsec_entry)
4422 {
4423 u32 img_type = le32_to_cpu(fsec_entry.type);
4424 u16 img_optype = le16_to_cpu(fsec_entry.optype);
4425
4426 if (img_optype != 0xFFFF)
4427 return img_optype;
4428
4429 switch (img_type) {
4430 case IMAGE_FIRMWARE_iSCSI:
4431 img_optype = OPTYPE_ISCSI_ACTIVE;
4432 break;
4433 case IMAGE_BOOT_CODE:
4434 img_optype = OPTYPE_REDBOOT;
4435 break;
4436 case IMAGE_OPTION_ROM_ISCSI:
4437 img_optype = OPTYPE_BIOS;
4438 break;
4439 case IMAGE_OPTION_ROM_PXE:
4440 img_optype = OPTYPE_PXE_BIOS;
4441 break;
4442 case IMAGE_OPTION_ROM_FCoE:
4443 img_optype = OPTYPE_FCOE_BIOS;
4444 break;
4445 case IMAGE_FIRMWARE_BACKUP_iSCSI:
4446 img_optype = OPTYPE_ISCSI_BACKUP;
4447 break;
4448 case IMAGE_NCSI:
4449 img_optype = OPTYPE_NCSI_FW;
4450 break;
4451 case IMAGE_FLASHISM_JUMPVECTOR:
4452 img_optype = OPTYPE_FLASHISM_JUMPVECTOR;
4453 break;
4454 case IMAGE_FIRMWARE_PHY:
4455 img_optype = OPTYPE_SH_PHY_FW;
4456 break;
4457 case IMAGE_REDBOOT_DIR:
4458 img_optype = OPTYPE_REDBOOT_DIR;
4459 break;
4460 case IMAGE_REDBOOT_CONFIG:
4461 img_optype = OPTYPE_REDBOOT_CONFIG;
4462 break;
4463 case IMAGE_UFI_DIR:
4464 img_optype = OPTYPE_UFI_DIR;
4465 break;
4466 default:
4467 break;
4468 }
4469
4470 return img_optype;
4471 }
4472
be_flash_skyhawk(struct be_adapter * adapter,const struct firmware * fw,struct be_dma_mem * flash_cmd,int num_of_images)4473 static int be_flash_skyhawk(struct be_adapter *adapter,
4474 const struct firmware *fw,
4475 struct be_dma_mem *flash_cmd, int num_of_images)
4476 {
4477 int img_hdrs_size = num_of_images * sizeof(struct image_hdr);
4478 bool crc_match, old_fw_img, flash_offset_support = true;
4479 struct device *dev = &adapter->pdev->dev;
4480 struct flash_section_info *fsec = NULL;
4481 u32 img_offset, img_size, img_type;
4482 u16 img_optype, flash_optype;
4483 int status, i, filehdr_size;
4484 const u8 *p;
4485
4486 filehdr_size = sizeof(struct flash_file_hdr_g3);
4487 fsec = get_fsec_info(adapter, filehdr_size + img_hdrs_size, fw);
4488 if (!fsec) {
4489 dev_err(dev, "Invalid Cookie. FW image may be corrupted\n");
4490 return -EINVAL;
4491 }
4492
4493 retry_flash:
4494 for (i = 0; i < le32_to_cpu(fsec->fsec_hdr.num_images); i++) {
4495 img_offset = le32_to_cpu(fsec->fsec_entry[i].offset);
4496 img_size = le32_to_cpu(fsec->fsec_entry[i].pad_size);
4497 img_type = le32_to_cpu(fsec->fsec_entry[i].type);
4498 img_optype = be_get_img_optype(fsec->fsec_entry[i]);
4499 old_fw_img = fsec->fsec_entry[i].optype == 0xFFFF;
4500
4501 if (img_optype == 0xFFFF)
4502 continue;
4503
4504 if (flash_offset_support)
4505 flash_optype = OPTYPE_OFFSET_SPECIFIED;
4506 else
4507 flash_optype = img_optype;
4508
4509 /* Don't bother verifying CRC if an old FW image is being
4510 * flashed
4511 */
4512 if (old_fw_img)
4513 goto flash;
4514
4515 status = be_check_flash_crc(adapter, fw->data, img_offset,
4516 img_size, filehdr_size +
4517 img_hdrs_size, flash_optype,
4518 &crc_match);
4519 if (base_status(status) == MCC_STATUS_ILLEGAL_REQUEST ||
4520 base_status(status) == MCC_STATUS_ILLEGAL_FIELD) {
4521 /* The current FW image on the card does not support
4522 * OFFSET based flashing. Retry using older mechanism
4523 * of OPTYPE based flashing
4524 */
4525 if (flash_optype == OPTYPE_OFFSET_SPECIFIED) {
4526 flash_offset_support = false;
4527 goto retry_flash;
4528 }
4529
4530 /* The current FW image on the card does not recognize
4531 * the new FLASH op_type. The FW download is partially
4532 * complete. Reboot the server now to enable FW image
4533 * to recognize the new FLASH op_type. To complete the
4534 * remaining process, download the same FW again after
4535 * the reboot.
4536 */
4537 dev_err(dev, "Flash incomplete. Reset the server\n");
4538 dev_err(dev, "Download FW image again after reset\n");
4539 return -EAGAIN;
4540 } else if (status) {
4541 dev_err(dev, "Could not get CRC for 0x%x region\n",
4542 img_optype);
4543 return -EFAULT;
4544 }
4545
4546 if (crc_match)
4547 continue;
4548
4549 flash:
4550 p = fw->data + filehdr_size + img_offset + img_hdrs_size;
4551 if (p + img_size > fw->data + fw->size)
4552 return -1;
4553
4554 status = be_flash(adapter, p, flash_cmd, flash_optype, img_size,
4555 img_offset);
4556
4557 /* The current FW image on the card does not support OFFSET
4558 * based flashing. Retry using older mechanism of OPTYPE based
4559 * flashing
4560 */
4561 if (base_status(status) == MCC_STATUS_ILLEGAL_FIELD &&
4562 flash_optype == OPTYPE_OFFSET_SPECIFIED) {
4563 flash_offset_support = false;
4564 goto retry_flash;
4565 }
4566
4567 /* For old FW images ignore ILLEGAL_FIELD error or errors on
4568 * UFI_DIR region
4569 */
4570 if (old_fw_img &&
4571 (base_status(status) == MCC_STATUS_ILLEGAL_FIELD ||
4572 (img_optype == OPTYPE_UFI_DIR &&
4573 base_status(status) == MCC_STATUS_FAILED))) {
4574 continue;
4575 } else if (status) {
4576 dev_err(dev, "Flashing section type 0x%x failed\n",
4577 img_type);
4578 return -EFAULT;
4579 }
4580 }
4581 return 0;
4582 }
4583
lancer_fw_download(struct be_adapter * adapter,const struct firmware * fw)4584 static int lancer_fw_download(struct be_adapter *adapter,
4585 const struct firmware *fw)
4586 {
4587 #define LANCER_FW_DOWNLOAD_CHUNK (32 * 1024)
4588 #define LANCER_FW_DOWNLOAD_LOCATION "/prg"
4589 struct device *dev = &adapter->pdev->dev;
4590 struct be_dma_mem flash_cmd;
4591 const u8 *data_ptr = NULL;
4592 u8 *dest_image_ptr = NULL;
4593 size_t image_size = 0;
4594 u32 chunk_size = 0;
4595 u32 data_written = 0;
4596 u32 offset = 0;
4597 int status = 0;
4598 u8 add_status = 0;
4599 u8 change_status;
4600
4601 if (!IS_ALIGNED(fw->size, sizeof(u32))) {
4602 dev_err(dev, "FW image size should be multiple of 4\n");
4603 return -EINVAL;
4604 }
4605
4606 flash_cmd.size = sizeof(struct lancer_cmd_req_write_object)
4607 + LANCER_FW_DOWNLOAD_CHUNK;
4608 flash_cmd.va = dma_zalloc_coherent(dev, flash_cmd.size,
4609 &flash_cmd.dma, GFP_KERNEL);
4610 if (!flash_cmd.va)
4611 return -ENOMEM;
4612
4613 dest_image_ptr = flash_cmd.va +
4614 sizeof(struct lancer_cmd_req_write_object);
4615 image_size = fw->size;
4616 data_ptr = fw->data;
4617
4618 while (image_size) {
4619 chunk_size = min_t(u32, image_size, LANCER_FW_DOWNLOAD_CHUNK);
4620
4621 /* Copy the image chunk content. */
4622 memcpy(dest_image_ptr, data_ptr, chunk_size);
4623
4624 status = lancer_cmd_write_object(adapter, &flash_cmd,
4625 chunk_size, offset,
4626 LANCER_FW_DOWNLOAD_LOCATION,
4627 &data_written, &change_status,
4628 &add_status);
4629 if (status)
4630 break;
4631
4632 offset += data_written;
4633 data_ptr += data_written;
4634 image_size -= data_written;
4635 }
4636
4637 if (!status) {
4638 /* Commit the FW written */
4639 status = lancer_cmd_write_object(adapter, &flash_cmd,
4640 0, offset,
4641 LANCER_FW_DOWNLOAD_LOCATION,
4642 &data_written, &change_status,
4643 &add_status);
4644 }
4645
4646 dma_free_coherent(dev, flash_cmd.size, flash_cmd.va, flash_cmd.dma);
4647 if (status) {
4648 dev_err(dev, "Firmware load error\n");
4649 return be_cmd_status(status);
4650 }
4651
4652 dev_info(dev, "Firmware flashed successfully\n");
4653
4654 if (change_status == LANCER_FW_RESET_NEEDED) {
4655 dev_info(dev, "Resetting adapter to activate new FW\n");
4656 status = lancer_physdev_ctrl(adapter,
4657 PHYSDEV_CONTROL_FW_RESET_MASK);
4658 if (status) {
4659 dev_err(dev, "Adapter busy, could not reset FW\n");
4660 dev_err(dev, "Reboot server to activate new FW\n");
4661 }
4662 } else if (change_status != LANCER_NO_RESET_NEEDED) {
4663 dev_info(dev, "Reboot server to activate new FW\n");
4664 }
4665
4666 return 0;
4667 }
4668
4669 #define BE2_UFI 2
4670 #define BE3_UFI 3
4671 #define BE3R_UFI 10
4672 #define SH_UFI 4
4673 #define SH_P2_UFI 11
4674
be_get_ufi_type(struct be_adapter * adapter,struct flash_file_hdr_g3 * fhdr)4675 static int be_get_ufi_type(struct be_adapter *adapter,
4676 struct flash_file_hdr_g3 *fhdr)
4677 {
4678 if (!fhdr) {
4679 dev_err(&adapter->pdev->dev, "Invalid FW UFI file");
4680 return -1;
4681 }
4682
4683 /* First letter of the build version is used to identify
4684 * which chip this image file is meant for.
4685 */
4686 switch (fhdr->build[0]) {
4687 case BLD_STR_UFI_TYPE_SH:
4688 return (fhdr->asic_type_rev == ASIC_REV_P2) ? SH_P2_UFI :
4689 SH_UFI;
4690 case BLD_STR_UFI_TYPE_BE3:
4691 return (fhdr->asic_type_rev == ASIC_REV_B0) ? BE3R_UFI :
4692 BE3_UFI;
4693 case BLD_STR_UFI_TYPE_BE2:
4694 return BE2_UFI;
4695 default:
4696 return -1;
4697 }
4698 }
4699
4700 /* Check if the flash image file is compatible with the adapter that
4701 * is being flashed.
4702 * BE3 chips with asic-rev B0 must be flashed only with BE3R_UFI type.
4703 * Skyhawk chips with asic-rev P2 must be flashed only with SH_P2_UFI type.
4704 */
be_check_ufi_compatibility(struct be_adapter * adapter,struct flash_file_hdr_g3 * fhdr)4705 static bool be_check_ufi_compatibility(struct be_adapter *adapter,
4706 struct flash_file_hdr_g3 *fhdr)
4707 {
4708 int ufi_type = be_get_ufi_type(adapter, fhdr);
4709
4710 switch (ufi_type) {
4711 case SH_P2_UFI:
4712 return skyhawk_chip(adapter);
4713 case SH_UFI:
4714 return (skyhawk_chip(adapter) &&
4715 adapter->asic_rev < ASIC_REV_P2);
4716 case BE3R_UFI:
4717 return BE3_chip(adapter);
4718 case BE3_UFI:
4719 return (BE3_chip(adapter) && adapter->asic_rev < ASIC_REV_B0);
4720 case BE2_UFI:
4721 return BE2_chip(adapter);
4722 default:
4723 return false;
4724 }
4725 }
4726
be_fw_download(struct be_adapter * adapter,const struct firmware * fw)4727 static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
4728 {
4729 struct device *dev = &adapter->pdev->dev;
4730 struct flash_file_hdr_g3 *fhdr3;
4731 struct image_hdr *img_hdr_ptr;
4732 int status = 0, i, num_imgs;
4733 struct be_dma_mem flash_cmd;
4734
4735 fhdr3 = (struct flash_file_hdr_g3 *)fw->data;
4736 if (!be_check_ufi_compatibility(adapter, fhdr3)) {
4737 dev_err(dev, "Flash image is not compatible with adapter\n");
4738 return -EINVAL;
4739 }
4740
4741 flash_cmd.size = sizeof(struct be_cmd_write_flashrom);
4742 flash_cmd.va = dma_zalloc_coherent(dev, flash_cmd.size, &flash_cmd.dma,
4743 GFP_KERNEL);
4744 if (!flash_cmd.va)
4745 return -ENOMEM;
4746
4747 num_imgs = le32_to_cpu(fhdr3->num_imgs);
4748 for (i = 0; i < num_imgs; i++) {
4749 img_hdr_ptr = (struct image_hdr *)(fw->data +
4750 (sizeof(struct flash_file_hdr_g3) +
4751 i * sizeof(struct image_hdr)));
4752 if (!BE2_chip(adapter) &&
4753 le32_to_cpu(img_hdr_ptr->imageid) != 1)
4754 continue;
4755
4756 if (skyhawk_chip(adapter))
4757 status = be_flash_skyhawk(adapter, fw, &flash_cmd,
4758 num_imgs);
4759 else
4760 status = be_flash_BEx(adapter, fw, &flash_cmd,
4761 num_imgs);
4762 }
4763
4764 dma_free_coherent(dev, flash_cmd.size, flash_cmd.va, flash_cmd.dma);
4765 if (!status)
4766 dev_info(dev, "Firmware flashed successfully\n");
4767
4768 return status;
4769 }
4770
be_load_fw(struct be_adapter * adapter,u8 * fw_file)4771 int be_load_fw(struct be_adapter *adapter, u8 *fw_file)
4772 {
4773 const struct firmware *fw;
4774 int status;
4775
4776 if (!netif_running(adapter->netdev)) {
4777 dev_err(&adapter->pdev->dev,
4778 "Firmware load not allowed (interface is down)\n");
4779 return -ENETDOWN;
4780 }
4781
4782 status = request_firmware(&fw, fw_file, &adapter->pdev->dev);
4783 if (status)
4784 goto fw_exit;
4785
4786 dev_info(&adapter->pdev->dev, "Flashing firmware file %s\n", fw_file);
4787
4788 if (lancer_chip(adapter))
4789 status = lancer_fw_download(adapter, fw);
4790 else
4791 status = be_fw_download(adapter, fw);
4792
4793 if (!status)
4794 be_cmd_get_fw_ver(adapter);
4795
4796 fw_exit:
4797 release_firmware(fw);
4798 return status;
4799 }
4800
be_ndo_bridge_setlink(struct net_device * dev,struct nlmsghdr * nlh,u16 flags)4801 static int be_ndo_bridge_setlink(struct net_device *dev, struct nlmsghdr *nlh,
4802 u16 flags)
4803 {
4804 struct be_adapter *adapter = netdev_priv(dev);
4805 struct nlattr *attr, *br_spec;
4806 int rem;
4807 int status = 0;
4808 u16 mode = 0;
4809
4810 if (!sriov_enabled(adapter))
4811 return -EOPNOTSUPP;
4812
4813 br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
4814 if (!br_spec)
4815 return -EINVAL;
4816
4817 nla_for_each_nested(attr, br_spec, rem) {
4818 if (nla_type(attr) != IFLA_BRIDGE_MODE)
4819 continue;
4820
4821 if (nla_len(attr) < sizeof(mode))
4822 return -EINVAL;
4823
4824 mode = nla_get_u16(attr);
4825 if (mode != BRIDGE_MODE_VEPA && mode != BRIDGE_MODE_VEB)
4826 return -EINVAL;
4827
4828 status = be_cmd_set_hsw_config(adapter, 0, 0,
4829 adapter->if_handle,
4830 mode == BRIDGE_MODE_VEPA ?
4831 PORT_FWD_TYPE_VEPA :
4832 PORT_FWD_TYPE_VEB);
4833 if (status)
4834 goto err;
4835
4836 dev_info(&adapter->pdev->dev, "enabled switch mode: %s\n",
4837 mode == BRIDGE_MODE_VEPA ? "VEPA" : "VEB");
4838
4839 return status;
4840 }
4841 err:
4842 dev_err(&adapter->pdev->dev, "Failed to set switch mode %s\n",
4843 mode == BRIDGE_MODE_VEPA ? "VEPA" : "VEB");
4844
4845 return status;
4846 }
4847
be_ndo_bridge_getlink(struct sk_buff * skb,u32 pid,u32 seq,struct net_device * dev,u32 filter_mask,int nlflags)4848 static int be_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
4849 struct net_device *dev, u32 filter_mask,
4850 int nlflags)
4851 {
4852 struct be_adapter *adapter = netdev_priv(dev);
4853 int status = 0;
4854 u8 hsw_mode;
4855
4856 if (!sriov_enabled(adapter))
4857 return 0;
4858
4859 /* BE and Lancer chips support VEB mode only */
4860 if (BEx_chip(adapter) || lancer_chip(adapter)) {
4861 hsw_mode = PORT_FWD_TYPE_VEB;
4862 } else {
4863 status = be_cmd_get_hsw_config(adapter, NULL, 0,
4864 adapter->if_handle, &hsw_mode);
4865 if (status)
4866 return 0;
4867 }
4868
4869 return ndo_dflt_bridge_getlink(skb, pid, seq, dev,
4870 hsw_mode == PORT_FWD_TYPE_VEPA ?
4871 BRIDGE_MODE_VEPA : BRIDGE_MODE_VEB,
4872 0, 0, nlflags);
4873 }
4874
4875 #ifdef CONFIG_BE2NET_VXLAN
4876 /* VxLAN offload Notes:
4877 *
4878 * The stack defines tunnel offload flags (hw_enc_features) for IP and doesn't
4879 * distinguish various types of transports (VxLAN, GRE, NVGRE ..). So, offload
4880 * is expected to work across all types of IP tunnels once exported. Skyhawk
4881 * supports offloads for either VxLAN or NVGRE, exclusively. So we export VxLAN
4882 * offloads in hw_enc_features only when a VxLAN port is added. If other (non
4883 * VxLAN) tunnels are configured while VxLAN offloads are enabled, offloads for
4884 * those other tunnels are unexported on the fly through ndo_features_check().
4885 *
4886 * Skyhawk supports VxLAN offloads only for one UDP dport. So, if the stack
4887 * adds more than one port, disable offloads and don't re-enable them again
4888 * until after all the tunnels are removed.
4889 */
be_add_vxlan_port(struct net_device * netdev,sa_family_t sa_family,__be16 port)4890 static void be_add_vxlan_port(struct net_device *netdev, sa_family_t sa_family,
4891 __be16 port)
4892 {
4893 struct be_adapter *adapter = netdev_priv(netdev);
4894 struct device *dev = &adapter->pdev->dev;
4895 int status;
4896
4897 if (lancer_chip(adapter) || BEx_chip(adapter))
4898 return;
4899
4900 if (adapter->flags & BE_FLAGS_VXLAN_OFFLOADS) {
4901 dev_info(dev,
4902 "Only one UDP port supported for VxLAN offloads\n");
4903 dev_info(dev, "Disabling VxLAN offloads\n");
4904 adapter->vxlan_port_count++;
4905 goto err;
4906 }
4907
4908 if (adapter->vxlan_port_count++ >= 1)
4909 return;
4910
4911 status = be_cmd_manage_iface(adapter, adapter->if_handle,
4912 OP_CONVERT_NORMAL_TO_TUNNEL);
4913 if (status) {
4914 dev_warn(dev, "Failed to convert normal interface to tunnel\n");
4915 goto err;
4916 }
4917
4918 status = be_cmd_set_vxlan_port(adapter, port);
4919 if (status) {
4920 dev_warn(dev, "Failed to add VxLAN port\n");
4921 goto err;
4922 }
4923 adapter->flags |= BE_FLAGS_VXLAN_OFFLOADS;
4924 adapter->vxlan_port = port;
4925
4926 netdev->hw_enc_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
4927 NETIF_F_TSO | NETIF_F_TSO6 |
4928 NETIF_F_GSO_UDP_TUNNEL;
4929 netdev->hw_features |= NETIF_F_GSO_UDP_TUNNEL;
4930 netdev->features |= NETIF_F_GSO_UDP_TUNNEL;
4931
4932 dev_info(dev, "Enabled VxLAN offloads for UDP port %d\n",
4933 be16_to_cpu(port));
4934 return;
4935 err:
4936 be_disable_vxlan_offloads(adapter);
4937 }
4938
be_del_vxlan_port(struct net_device * netdev,sa_family_t sa_family,__be16 port)4939 static void be_del_vxlan_port(struct net_device *netdev, sa_family_t sa_family,
4940 __be16 port)
4941 {
4942 struct be_adapter *adapter = netdev_priv(netdev);
4943
4944 if (lancer_chip(adapter) || BEx_chip(adapter))
4945 return;
4946
4947 if (adapter->vxlan_port != port)
4948 goto done;
4949
4950 be_disable_vxlan_offloads(adapter);
4951
4952 dev_info(&adapter->pdev->dev,
4953 "Disabled VxLAN offloads for UDP port %d\n",
4954 be16_to_cpu(port));
4955 done:
4956 adapter->vxlan_port_count--;
4957 }
4958
be_features_check(struct sk_buff * skb,struct net_device * dev,netdev_features_t features)4959 static netdev_features_t be_features_check(struct sk_buff *skb,
4960 struct net_device *dev,
4961 netdev_features_t features)
4962 {
4963 struct be_adapter *adapter = netdev_priv(dev);
4964 u8 l4_hdr = 0;
4965
4966 /* The code below restricts offload features for some tunneled packets.
4967 * Offload features for normal (non tunnel) packets are unchanged.
4968 */
4969 if (!skb->encapsulation ||
4970 !(adapter->flags & BE_FLAGS_VXLAN_OFFLOADS))
4971 return features;
4972
4973 /* It's an encapsulated packet and VxLAN offloads are enabled. We
4974 * should disable tunnel offload features if it's not a VxLAN packet,
4975 * as tunnel offloads have been enabled only for VxLAN. This is done to
4976 * allow other tunneled traffic like GRE work fine while VxLAN
4977 * offloads are configured in Skyhawk-R.
4978 */
4979 switch (vlan_get_protocol(skb)) {
4980 case htons(ETH_P_IP):
4981 l4_hdr = ip_hdr(skb)->protocol;
4982 break;
4983 case htons(ETH_P_IPV6):
4984 l4_hdr = ipv6_hdr(skb)->nexthdr;
4985 break;
4986 default:
4987 return features;
4988 }
4989
4990 if (l4_hdr != IPPROTO_UDP ||
4991 skb->inner_protocol_type != ENCAP_TYPE_ETHER ||
4992 skb->inner_protocol != htons(ETH_P_TEB) ||
4993 skb_inner_mac_header(skb) - skb_transport_header(skb) !=
4994 sizeof(struct udphdr) + sizeof(struct vxlanhdr))
4995 return features & ~(NETIF_F_ALL_CSUM | NETIF_F_GSO_MASK);
4996
4997 return features;
4998 }
4999 #endif
5000
5001 static const struct net_device_ops be_netdev_ops = {
5002 .ndo_open = be_open,
5003 .ndo_stop = be_close,
5004 .ndo_start_xmit = be_xmit,
5005 .ndo_set_rx_mode = be_set_rx_mode,
5006 .ndo_set_mac_address = be_mac_addr_set,
5007 .ndo_change_mtu = be_change_mtu,
5008 .ndo_get_stats64 = be_get_stats64,
5009 .ndo_validate_addr = eth_validate_addr,
5010 .ndo_vlan_rx_add_vid = be_vlan_add_vid,
5011 .ndo_vlan_rx_kill_vid = be_vlan_rem_vid,
5012 .ndo_set_vf_mac = be_set_vf_mac,
5013 .ndo_set_vf_vlan = be_set_vf_vlan,
5014 .ndo_set_vf_rate = be_set_vf_tx_rate,
5015 .ndo_get_vf_config = be_get_vf_config,
5016 .ndo_set_vf_link_state = be_set_vf_link_state,
5017 #ifdef CONFIG_NET_POLL_CONTROLLER
5018 .ndo_poll_controller = be_netpoll,
5019 #endif
5020 .ndo_bridge_setlink = be_ndo_bridge_setlink,
5021 .ndo_bridge_getlink = be_ndo_bridge_getlink,
5022 #ifdef CONFIG_NET_RX_BUSY_POLL
5023 .ndo_busy_poll = be_busy_poll,
5024 #endif
5025 #ifdef CONFIG_BE2NET_VXLAN
5026 .ndo_add_vxlan_port = be_add_vxlan_port,
5027 .ndo_del_vxlan_port = be_del_vxlan_port,
5028 .ndo_features_check = be_features_check,
5029 #endif
5030 };
5031
be_netdev_init(struct net_device * netdev)5032 static void be_netdev_init(struct net_device *netdev)
5033 {
5034 struct be_adapter *adapter = netdev_priv(netdev);
5035
5036 netdev->hw_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
5037 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |
5038 NETIF_F_HW_VLAN_CTAG_TX;
5039 if (be_multi_rxq(adapter))
5040 netdev->hw_features |= NETIF_F_RXHASH;
5041
5042 netdev->features |= netdev->hw_features |
5043 NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_FILTER;
5044
5045 netdev->vlan_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
5046 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
5047
5048 netdev->priv_flags |= IFF_UNICAST_FLT;
5049
5050 netdev->flags |= IFF_MULTICAST;
5051
5052 netif_set_gso_max_size(netdev, 65535 - ETH_HLEN);
5053
5054 netdev->netdev_ops = &be_netdev_ops;
5055
5056 netdev->ethtool_ops = &be_ethtool_ops;
5057 }
5058
be_cleanup(struct be_adapter * adapter)5059 static void be_cleanup(struct be_adapter *adapter)
5060 {
5061 struct net_device *netdev = adapter->netdev;
5062
5063 rtnl_lock();
5064 netif_device_detach(netdev);
5065 if (netif_running(netdev))
5066 be_close(netdev);
5067 rtnl_unlock();
5068
5069 be_clear(adapter);
5070 }
5071
be_resume(struct be_adapter * adapter)5072 static int be_resume(struct be_adapter *adapter)
5073 {
5074 struct net_device *netdev = adapter->netdev;
5075 int status;
5076
5077 status = be_setup(adapter);
5078 if (status)
5079 return status;
5080
5081 if (netif_running(netdev)) {
5082 status = be_open(netdev);
5083 if (status)
5084 return status;
5085 }
5086
5087 netif_device_attach(netdev);
5088
5089 return 0;
5090 }
5091
be_err_recover(struct be_adapter * adapter)5092 static int be_err_recover(struct be_adapter *adapter)
5093 {
5094 struct device *dev = &adapter->pdev->dev;
5095 int status;
5096
5097 status = be_resume(adapter);
5098 if (status)
5099 goto err;
5100
5101 dev_info(dev, "Adapter recovery successful\n");
5102 return 0;
5103 err:
5104 if (be_physfn(adapter))
5105 dev_err(dev, "Adapter recovery failed\n");
5106 else
5107 dev_err(dev, "Re-trying adapter recovery\n");
5108
5109 return status;
5110 }
5111
be_err_detection_task(struct work_struct * work)5112 static void be_err_detection_task(struct work_struct *work)
5113 {
5114 struct be_adapter *adapter =
5115 container_of(work, struct be_adapter,
5116 be_err_detection_work.work);
5117 int status = 0;
5118
5119 be_detect_error(adapter);
5120
5121 if (adapter->hw_error) {
5122 be_cleanup(adapter);
5123
5124 /* As of now error recovery support is in Lancer only */
5125 if (lancer_chip(adapter))
5126 status = be_err_recover(adapter);
5127 }
5128
5129 /* Always attempt recovery on VFs */
5130 if (!status || be_virtfn(adapter))
5131 be_schedule_err_detection(adapter);
5132 }
5133
be_log_sfp_info(struct be_adapter * adapter)5134 static void be_log_sfp_info(struct be_adapter *adapter)
5135 {
5136 int status;
5137
5138 status = be_cmd_query_sfp_info(adapter);
5139 if (!status) {
5140 dev_err(&adapter->pdev->dev,
5141 "Unqualified SFP+ detected on %c from %s part no: %s",
5142 adapter->port_name, adapter->phy.vendor_name,
5143 adapter->phy.vendor_pn);
5144 }
5145 adapter->flags &= ~BE_FLAGS_EVT_INCOMPATIBLE_SFP;
5146 }
5147
be_worker(struct work_struct * work)5148 static void be_worker(struct work_struct *work)
5149 {
5150 struct be_adapter *adapter =
5151 container_of(work, struct be_adapter, work.work);
5152 struct be_rx_obj *rxo;
5153 int i;
5154
5155 /* when interrupts are not yet enabled, just reap any pending
5156 * mcc completions
5157 */
5158 if (!netif_running(adapter->netdev)) {
5159 local_bh_disable();
5160 be_process_mcc(adapter);
5161 local_bh_enable();
5162 goto reschedule;
5163 }
5164
5165 if (!adapter->stats_cmd_sent) {
5166 if (lancer_chip(adapter))
5167 lancer_cmd_get_pport_stats(adapter,
5168 &adapter->stats_cmd);
5169 else
5170 be_cmd_get_stats(adapter, &adapter->stats_cmd);
5171 }
5172
5173 if (be_physfn(adapter) &&
5174 MODULO(adapter->work_counter, adapter->be_get_temp_freq) == 0)
5175 be_cmd_get_die_temperature(adapter);
5176
5177 for_all_rx_queues(adapter, rxo, i) {
5178 /* Replenish RX-queues starved due to memory
5179 * allocation failures.
5180 */
5181 if (rxo->rx_post_starved)
5182 be_post_rx_frags(rxo, GFP_KERNEL, MAX_RX_POST);
5183 }
5184
5185 be_eqd_update(adapter);
5186
5187 if (adapter->flags & BE_FLAGS_EVT_INCOMPATIBLE_SFP)
5188 be_log_sfp_info(adapter);
5189
5190 reschedule:
5191 adapter->work_counter++;
5192 schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
5193 }
5194
be_unmap_pci_bars(struct be_adapter * adapter)5195 static void be_unmap_pci_bars(struct be_adapter *adapter)
5196 {
5197 if (adapter->csr)
5198 pci_iounmap(adapter->pdev, adapter->csr);
5199 if (adapter->db)
5200 pci_iounmap(adapter->pdev, adapter->db);
5201 }
5202
db_bar(struct be_adapter * adapter)5203 static int db_bar(struct be_adapter *adapter)
5204 {
5205 if (lancer_chip(adapter) || !be_physfn(adapter))
5206 return 0;
5207 else
5208 return 4;
5209 }
5210
be_roce_map_pci_bars(struct be_adapter * adapter)5211 static int be_roce_map_pci_bars(struct be_adapter *adapter)
5212 {
5213 if (skyhawk_chip(adapter)) {
5214 adapter->roce_db.size = 4096;
5215 adapter->roce_db.io_addr = pci_resource_start(adapter->pdev,
5216 db_bar(adapter));
5217 adapter->roce_db.total_size = pci_resource_len(adapter->pdev,
5218 db_bar(adapter));
5219 }
5220 return 0;
5221 }
5222
be_map_pci_bars(struct be_adapter * adapter)5223 static int be_map_pci_bars(struct be_adapter *adapter)
5224 {
5225 struct pci_dev *pdev = adapter->pdev;
5226 u8 __iomem *addr;
5227 u32 sli_intf;
5228
5229 pci_read_config_dword(adapter->pdev, SLI_INTF_REG_OFFSET, &sli_intf);
5230 adapter->sli_family = (sli_intf & SLI_INTF_FAMILY_MASK) >>
5231 SLI_INTF_FAMILY_SHIFT;
5232 adapter->virtfn = (sli_intf & SLI_INTF_FT_MASK) ? 1 : 0;
5233
5234 if (BEx_chip(adapter) && be_physfn(adapter)) {
5235 adapter->csr = pci_iomap(pdev, 2, 0);
5236 if (!adapter->csr)
5237 return -ENOMEM;
5238 }
5239
5240 addr = pci_iomap(pdev, db_bar(adapter), 0);
5241 if (!addr)
5242 goto pci_map_err;
5243 adapter->db = addr;
5244
5245 if (skyhawk_chip(adapter) || BEx_chip(adapter)) {
5246 if (be_physfn(adapter)) {
5247 /* PCICFG is the 2nd BAR in BE2 */
5248 addr = pci_iomap(pdev, BE2_chip(adapter) ? 1 : 0, 0);
5249 if (!addr)
5250 goto pci_map_err;
5251 adapter->pcicfg = addr;
5252 } else {
5253 adapter->pcicfg = adapter->db + SRIOV_VF_PCICFG_OFFSET;
5254 }
5255 }
5256
5257 be_roce_map_pci_bars(adapter);
5258 return 0;
5259
5260 pci_map_err:
5261 dev_err(&pdev->dev, "Error in mapping PCI BARs\n");
5262 be_unmap_pci_bars(adapter);
5263 return -ENOMEM;
5264 }
5265
be_drv_cleanup(struct be_adapter * adapter)5266 static void be_drv_cleanup(struct be_adapter *adapter)
5267 {
5268 struct be_dma_mem *mem = &adapter->mbox_mem_alloced;
5269 struct device *dev = &adapter->pdev->dev;
5270
5271 if (mem->va)
5272 dma_free_coherent(dev, mem->size, mem->va, mem->dma);
5273
5274 mem = &adapter->rx_filter;
5275 if (mem->va)
5276 dma_free_coherent(dev, mem->size, mem->va, mem->dma);
5277
5278 mem = &adapter->stats_cmd;
5279 if (mem->va)
5280 dma_free_coherent(dev, mem->size, mem->va, mem->dma);
5281 }
5282
5283 /* Allocate and initialize various fields in be_adapter struct */
be_drv_init(struct be_adapter * adapter)5284 static int be_drv_init(struct be_adapter *adapter)
5285 {
5286 struct be_dma_mem *mbox_mem_alloc = &adapter->mbox_mem_alloced;
5287 struct be_dma_mem *mbox_mem_align = &adapter->mbox_mem;
5288 struct be_dma_mem *rx_filter = &adapter->rx_filter;
5289 struct be_dma_mem *stats_cmd = &adapter->stats_cmd;
5290 struct device *dev = &adapter->pdev->dev;
5291 int status = 0;
5292
5293 mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16;
5294 mbox_mem_alloc->va = dma_zalloc_coherent(dev, mbox_mem_alloc->size,
5295 &mbox_mem_alloc->dma,
5296 GFP_KERNEL);
5297 if (!mbox_mem_alloc->va)
5298 return -ENOMEM;
5299
5300 mbox_mem_align->size = sizeof(struct be_mcc_mailbox);
5301 mbox_mem_align->va = PTR_ALIGN(mbox_mem_alloc->va, 16);
5302 mbox_mem_align->dma = PTR_ALIGN(mbox_mem_alloc->dma, 16);
5303
5304 rx_filter->size = sizeof(struct be_cmd_req_rx_filter);
5305 rx_filter->va = dma_zalloc_coherent(dev, rx_filter->size,
5306 &rx_filter->dma, GFP_KERNEL);
5307 if (!rx_filter->va) {
5308 status = -ENOMEM;
5309 goto free_mbox;
5310 }
5311
5312 if (lancer_chip(adapter))
5313 stats_cmd->size = sizeof(struct lancer_cmd_req_pport_stats);
5314 else if (BE2_chip(adapter))
5315 stats_cmd->size = sizeof(struct be_cmd_req_get_stats_v0);
5316 else if (BE3_chip(adapter))
5317 stats_cmd->size = sizeof(struct be_cmd_req_get_stats_v1);
5318 else
5319 stats_cmd->size = sizeof(struct be_cmd_req_get_stats_v2);
5320 stats_cmd->va = dma_zalloc_coherent(dev, stats_cmd->size,
5321 &stats_cmd->dma, GFP_KERNEL);
5322 if (!stats_cmd->va) {
5323 status = -ENOMEM;
5324 goto free_rx_filter;
5325 }
5326
5327 mutex_init(&adapter->mbox_lock);
5328 spin_lock_init(&adapter->mcc_lock);
5329 spin_lock_init(&adapter->mcc_cq_lock);
5330 init_completion(&adapter->et_cmd_compl);
5331
5332 pci_save_state(adapter->pdev);
5333
5334 INIT_DELAYED_WORK(&adapter->work, be_worker);
5335 INIT_DELAYED_WORK(&adapter->be_err_detection_work,
5336 be_err_detection_task);
5337
5338 adapter->rx_fc = true;
5339 adapter->tx_fc = true;
5340
5341 /* Must be a power of 2 or else MODULO will BUG_ON */
5342 adapter->be_get_temp_freq = 64;
5343
5344 return 0;
5345
5346 free_rx_filter:
5347 dma_free_coherent(dev, rx_filter->size, rx_filter->va, rx_filter->dma);
5348 free_mbox:
5349 dma_free_coherent(dev, mbox_mem_alloc->size, mbox_mem_alloc->va,
5350 mbox_mem_alloc->dma);
5351 return status;
5352 }
5353
be_remove(struct pci_dev * pdev)5354 static void be_remove(struct pci_dev *pdev)
5355 {
5356 struct be_adapter *adapter = pci_get_drvdata(pdev);
5357
5358 if (!adapter)
5359 return;
5360
5361 be_roce_dev_remove(adapter);
5362 be_intr_set(adapter, false);
5363
5364 be_cancel_err_detection(adapter);
5365
5366 unregister_netdev(adapter->netdev);
5367
5368 be_clear(adapter);
5369
5370 /* tell fw we're done with firing cmds */
5371 be_cmd_fw_clean(adapter);
5372
5373 be_unmap_pci_bars(adapter);
5374 be_drv_cleanup(adapter);
5375
5376 pci_disable_pcie_error_reporting(pdev);
5377
5378 pci_release_regions(pdev);
5379 pci_disable_device(pdev);
5380
5381 free_netdev(adapter->netdev);
5382 }
5383
mc_name(struct be_adapter * adapter)5384 static char *mc_name(struct be_adapter *adapter)
5385 {
5386 char *str = ""; /* default */
5387
5388 switch (adapter->mc_type) {
5389 case UMC:
5390 str = "UMC";
5391 break;
5392 case FLEX10:
5393 str = "FLEX10";
5394 break;
5395 case vNIC1:
5396 str = "vNIC-1";
5397 break;
5398 case nPAR:
5399 str = "nPAR";
5400 break;
5401 case UFP:
5402 str = "UFP";
5403 break;
5404 case vNIC2:
5405 str = "vNIC-2";
5406 break;
5407 default:
5408 str = "";
5409 }
5410
5411 return str;
5412 }
5413
func_name(struct be_adapter * adapter)5414 static inline char *func_name(struct be_adapter *adapter)
5415 {
5416 return be_physfn(adapter) ? "PF" : "VF";
5417 }
5418
nic_name(struct pci_dev * pdev)5419 static inline char *nic_name(struct pci_dev *pdev)
5420 {
5421 switch (pdev->device) {
5422 case OC_DEVICE_ID1:
5423 return OC_NAME;
5424 case OC_DEVICE_ID2:
5425 return OC_NAME_BE;
5426 case OC_DEVICE_ID3:
5427 case OC_DEVICE_ID4:
5428 return OC_NAME_LANCER;
5429 case BE_DEVICE_ID2:
5430 return BE3_NAME;
5431 case OC_DEVICE_ID5:
5432 case OC_DEVICE_ID6:
5433 return OC_NAME_SH;
5434 default:
5435 return BE_NAME;
5436 }
5437 }
5438
be_probe(struct pci_dev * pdev,const struct pci_device_id * pdev_id)5439 static int be_probe(struct pci_dev *pdev, const struct pci_device_id *pdev_id)
5440 {
5441 struct be_adapter *adapter;
5442 struct net_device *netdev;
5443 int status = 0;
5444
5445 dev_info(&pdev->dev, "%s version is %s\n", DRV_NAME, DRV_VER);
5446
5447 status = pci_enable_device(pdev);
5448 if (status)
5449 goto do_none;
5450
5451 status = pci_request_regions(pdev, DRV_NAME);
5452 if (status)
5453 goto disable_dev;
5454 pci_set_master(pdev);
5455
5456 netdev = alloc_etherdev_mqs(sizeof(*adapter), MAX_TX_QS, MAX_RX_QS);
5457 if (!netdev) {
5458 status = -ENOMEM;
5459 goto rel_reg;
5460 }
5461 adapter = netdev_priv(netdev);
5462 adapter->pdev = pdev;
5463 pci_set_drvdata(pdev, adapter);
5464 adapter->netdev = netdev;
5465 SET_NETDEV_DEV(netdev, &pdev->dev);
5466
5467 status = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
5468 if (!status) {
5469 netdev->features |= NETIF_F_HIGHDMA;
5470 } else {
5471 status = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
5472 if (status) {
5473 dev_err(&pdev->dev, "Could not set PCI DMA Mask\n");
5474 goto free_netdev;
5475 }
5476 }
5477
5478 status = pci_enable_pcie_error_reporting(pdev);
5479 if (!status)
5480 dev_info(&pdev->dev, "PCIe error reporting enabled\n");
5481
5482 status = be_map_pci_bars(adapter);
5483 if (status)
5484 goto free_netdev;
5485
5486 status = be_drv_init(adapter);
5487 if (status)
5488 goto unmap_bars;
5489
5490 status = be_setup(adapter);
5491 if (status)
5492 goto drv_cleanup;
5493
5494 be_netdev_init(netdev);
5495 status = register_netdev(netdev);
5496 if (status != 0)
5497 goto unsetup;
5498
5499 be_roce_dev_add(adapter);
5500
5501 be_schedule_err_detection(adapter);
5502
5503 dev_info(&pdev->dev, "%s: %s %s port %c\n", nic_name(pdev),
5504 func_name(adapter), mc_name(adapter), adapter->port_name);
5505
5506 return 0;
5507
5508 unsetup:
5509 be_clear(adapter);
5510 drv_cleanup:
5511 be_drv_cleanup(adapter);
5512 unmap_bars:
5513 be_unmap_pci_bars(adapter);
5514 free_netdev:
5515 free_netdev(netdev);
5516 rel_reg:
5517 pci_release_regions(pdev);
5518 disable_dev:
5519 pci_disable_device(pdev);
5520 do_none:
5521 dev_err(&pdev->dev, "%s initialization failed\n", nic_name(pdev));
5522 return status;
5523 }
5524
be_suspend(struct pci_dev * pdev,pm_message_t state)5525 static int be_suspend(struct pci_dev *pdev, pm_message_t state)
5526 {
5527 struct be_adapter *adapter = pci_get_drvdata(pdev);
5528
5529 if (adapter->wol_en)
5530 be_setup_wol(adapter, true);
5531
5532 be_intr_set(adapter, false);
5533 be_cancel_err_detection(adapter);
5534
5535 be_cleanup(adapter);
5536
5537 pci_save_state(pdev);
5538 pci_disable_device(pdev);
5539 pci_set_power_state(pdev, pci_choose_state(pdev, state));
5540 return 0;
5541 }
5542
be_pci_resume(struct pci_dev * pdev)5543 static int be_pci_resume(struct pci_dev *pdev)
5544 {
5545 struct be_adapter *adapter = pci_get_drvdata(pdev);
5546 int status = 0;
5547
5548 status = pci_enable_device(pdev);
5549 if (status)
5550 return status;
5551
5552 pci_set_power_state(pdev, PCI_D0);
5553 pci_restore_state(pdev);
5554
5555 status = be_resume(adapter);
5556 if (status)
5557 return status;
5558
5559 be_schedule_err_detection(adapter);
5560
5561 if (adapter->wol_en)
5562 be_setup_wol(adapter, false);
5563
5564 return 0;
5565 }
5566
5567 /*
5568 * An FLR will stop BE from DMAing any data.
5569 */
be_shutdown(struct pci_dev * pdev)5570 static void be_shutdown(struct pci_dev *pdev)
5571 {
5572 struct be_adapter *adapter = pci_get_drvdata(pdev);
5573
5574 if (!adapter)
5575 return;
5576
5577 be_roce_dev_shutdown(adapter);
5578 cancel_delayed_work_sync(&adapter->work);
5579 be_cancel_err_detection(adapter);
5580
5581 netif_device_detach(adapter->netdev);
5582
5583 be_cmd_reset_function(adapter);
5584
5585 pci_disable_device(pdev);
5586 }
5587
be_eeh_err_detected(struct pci_dev * pdev,pci_channel_state_t state)5588 static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev,
5589 pci_channel_state_t state)
5590 {
5591 struct be_adapter *adapter = pci_get_drvdata(pdev);
5592
5593 dev_err(&adapter->pdev->dev, "EEH error detected\n");
5594
5595 if (!adapter->eeh_error) {
5596 adapter->eeh_error = true;
5597
5598 be_cancel_err_detection(adapter);
5599
5600 be_cleanup(adapter);
5601 }
5602
5603 if (state == pci_channel_io_perm_failure)
5604 return PCI_ERS_RESULT_DISCONNECT;
5605
5606 pci_disable_device(pdev);
5607
5608 /* The error could cause the FW to trigger a flash debug dump.
5609 * Resetting the card while flash dump is in progress
5610 * can cause it not to recover; wait for it to finish.
5611 * Wait only for first function as it is needed only once per
5612 * adapter.
5613 */
5614 if (pdev->devfn == 0)
5615 ssleep(30);
5616
5617 return PCI_ERS_RESULT_NEED_RESET;
5618 }
5619
be_eeh_reset(struct pci_dev * pdev)5620 static pci_ers_result_t be_eeh_reset(struct pci_dev *pdev)
5621 {
5622 struct be_adapter *adapter = pci_get_drvdata(pdev);
5623 int status;
5624
5625 dev_info(&adapter->pdev->dev, "EEH reset\n");
5626
5627 status = pci_enable_device(pdev);
5628 if (status)
5629 return PCI_ERS_RESULT_DISCONNECT;
5630
5631 pci_set_master(pdev);
5632 pci_set_power_state(pdev, PCI_D0);
5633 pci_restore_state(pdev);
5634
5635 /* Check if card is ok and fw is ready */
5636 dev_info(&adapter->pdev->dev,
5637 "Waiting for FW to be ready after EEH reset\n");
5638 status = be_fw_wait_ready(adapter);
5639 if (status)
5640 return PCI_ERS_RESULT_DISCONNECT;
5641
5642 pci_cleanup_aer_uncorrect_error_status(pdev);
5643 be_clear_all_error(adapter);
5644 return PCI_ERS_RESULT_RECOVERED;
5645 }
5646
be_eeh_resume(struct pci_dev * pdev)5647 static void be_eeh_resume(struct pci_dev *pdev)
5648 {
5649 int status = 0;
5650 struct be_adapter *adapter = pci_get_drvdata(pdev);
5651
5652 dev_info(&adapter->pdev->dev, "EEH resume\n");
5653
5654 pci_save_state(pdev);
5655
5656 status = be_resume(adapter);
5657 if (status)
5658 goto err;
5659
5660 be_schedule_err_detection(adapter);
5661 return;
5662 err:
5663 dev_err(&adapter->pdev->dev, "EEH resume failed\n");
5664 }
5665
be_pci_sriov_configure(struct pci_dev * pdev,int num_vfs)5666 static int be_pci_sriov_configure(struct pci_dev *pdev, int num_vfs)
5667 {
5668 struct be_adapter *adapter = pci_get_drvdata(pdev);
5669 u16 num_vf_qs;
5670 int status;
5671
5672 if (!num_vfs)
5673 be_vf_clear(adapter);
5674
5675 adapter->num_vfs = num_vfs;
5676
5677 if (adapter->num_vfs == 0 && pci_vfs_assigned(pdev)) {
5678 dev_warn(&pdev->dev,
5679 "Cannot disable VFs while they are assigned\n");
5680 return -EBUSY;
5681 }
5682
5683 /* When the HW is in SRIOV capable configuration, the PF-pool resources
5684 * are equally distributed across the max-number of VFs. The user may
5685 * request only a subset of the max-vfs to be enabled.
5686 * Based on num_vfs, redistribute the resources across num_vfs so that
5687 * each VF will have access to more number of resources.
5688 * This facility is not available in BE3 FW.
5689 * Also, this is done by FW in Lancer chip.
5690 */
5691 if (skyhawk_chip(adapter) && !pci_num_vf(pdev)) {
5692 num_vf_qs = be_calculate_vf_qs(adapter, adapter->num_vfs);
5693 status = be_cmd_set_sriov_config(adapter, adapter->pool_res,
5694 adapter->num_vfs, num_vf_qs);
5695 if (status)
5696 dev_err(&pdev->dev,
5697 "Failed to optimize SR-IOV resources\n");
5698 }
5699
5700 status = be_get_resources(adapter);
5701 if (status)
5702 return be_cmd_status(status);
5703
5704 /* Updating real_num_tx/rx_queues() requires rtnl_lock() */
5705 rtnl_lock();
5706 status = be_update_queues(adapter);
5707 rtnl_unlock();
5708 if (status)
5709 return be_cmd_status(status);
5710
5711 if (adapter->num_vfs)
5712 status = be_vf_setup(adapter);
5713
5714 if (!status)
5715 return adapter->num_vfs;
5716
5717 return 0;
5718 }
5719
5720 static const struct pci_error_handlers be_eeh_handlers = {
5721 .error_detected = be_eeh_err_detected,
5722 .slot_reset = be_eeh_reset,
5723 .resume = be_eeh_resume,
5724 };
5725
5726 static struct pci_driver be_driver = {
5727 .name = DRV_NAME,
5728 .id_table = be_dev_ids,
5729 .probe = be_probe,
5730 .remove = be_remove,
5731 .suspend = be_suspend,
5732 .resume = be_pci_resume,
5733 .shutdown = be_shutdown,
5734 .sriov_configure = be_pci_sriov_configure,
5735 .err_handler = &be_eeh_handlers
5736 };
5737
be_init_module(void)5738 static int __init be_init_module(void)
5739 {
5740 if (rx_frag_size != 8192 && rx_frag_size != 4096 &&
5741 rx_frag_size != 2048) {
5742 printk(KERN_WARNING DRV_NAME
5743 " : Module param rx_frag_size must be 2048/4096/8192."
5744 " Using 2048\n");
5745 rx_frag_size = 2048;
5746 }
5747
5748 if (num_vfs > 0) {
5749 pr_info(DRV_NAME " : Module param num_vfs is obsolete.");
5750 pr_info(DRV_NAME " : Use sysfs method to enable VFs\n");
5751 }
5752
5753 return pci_register_driver(&be_driver);
5754 }
5755 module_init(be_init_module);
5756
be_exit_module(void)5757 static void __exit be_exit_module(void)
5758 {
5759 pci_unregister_driver(&be_driver);
5760 }
5761 module_exit(be_exit_module);
5762