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