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