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