xref: /openbmc/linux/drivers/net/ethernet/intel/fm10k/fm10k_pci.c (revision 4f139972b489f8bc2c821aa25ac65018d92af3f7)
1 /* Intel(R) Ethernet Switch Host Interface Driver
2  * Copyright(c) 2013 - 2016 Intel Corporation.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms and conditions of the GNU General Public License,
6  * version 2, as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11  * more details.
12  *
13  * The full GNU General Public License is included in this distribution in
14  * the file called "COPYING".
15  *
16  * Contact Information:
17  * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
18  * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
19  */
20 
21 #include <linux/module.h>
22 #include <linux/interrupt.h>
23 #include <linux/aer.h>
24 
25 #include "fm10k.h"
26 
27 static const struct fm10k_info *fm10k_info_tbl[] = {
28 	[fm10k_device_pf] = &fm10k_pf_info,
29 	[fm10k_device_vf] = &fm10k_vf_info,
30 };
31 
32 /**
33  * fm10k_pci_tbl - PCI Device ID Table
34  *
35  * Wildcard entries (PCI_ANY_ID) should come last
36  * Last entry must be all 0s
37  *
38  * { Vendor ID, Device ID, SubVendor ID, SubDevice ID,
39  *   Class, Class Mask, private data (not used) }
40  */
41 static const struct pci_device_id fm10k_pci_tbl[] = {
42 	{ PCI_VDEVICE(INTEL, FM10K_DEV_ID_PF), fm10k_device_pf },
43 	{ PCI_VDEVICE(INTEL, FM10K_DEV_ID_VF), fm10k_device_vf },
44 	/* required last entry */
45 	{ 0, }
46 };
47 MODULE_DEVICE_TABLE(pci, fm10k_pci_tbl);
48 
49 u16 fm10k_read_pci_cfg_word(struct fm10k_hw *hw, u32 reg)
50 {
51 	struct fm10k_intfc *interface = hw->back;
52 	u16 value = 0;
53 
54 	if (FM10K_REMOVED(hw->hw_addr))
55 		return ~value;
56 
57 	pci_read_config_word(interface->pdev, reg, &value);
58 	if (value == 0xFFFF)
59 		fm10k_write_flush(hw);
60 
61 	return value;
62 }
63 
64 u32 fm10k_read_reg(struct fm10k_hw *hw, int reg)
65 {
66 	u32 __iomem *hw_addr = READ_ONCE(hw->hw_addr);
67 	u32 value = 0;
68 
69 	if (FM10K_REMOVED(hw_addr))
70 		return ~value;
71 
72 	value = readl(&hw_addr[reg]);
73 	if (!(~value) && (!reg || !(~readl(hw_addr)))) {
74 		struct fm10k_intfc *interface = hw->back;
75 		struct net_device *netdev = interface->netdev;
76 
77 		hw->hw_addr = NULL;
78 		netif_device_detach(netdev);
79 		netdev_err(netdev, "PCIe link lost, device now detached\n");
80 	}
81 
82 	return value;
83 }
84 
85 static int fm10k_hw_ready(struct fm10k_intfc *interface)
86 {
87 	struct fm10k_hw *hw = &interface->hw;
88 
89 	fm10k_write_flush(hw);
90 
91 	return FM10K_REMOVED(hw->hw_addr) ? -ENODEV : 0;
92 }
93 
94 void fm10k_service_event_schedule(struct fm10k_intfc *interface)
95 {
96 	if (!test_bit(__FM10K_SERVICE_DISABLE, &interface->state) &&
97 	    !test_and_set_bit(__FM10K_SERVICE_SCHED, &interface->state))
98 		queue_work(fm10k_workqueue, &interface->service_task);
99 }
100 
101 static void fm10k_service_event_complete(struct fm10k_intfc *interface)
102 {
103 	WARN_ON(!test_bit(__FM10K_SERVICE_SCHED, &interface->state));
104 
105 	/* flush memory to make sure state is correct before next watchog */
106 	smp_mb__before_atomic();
107 	clear_bit(__FM10K_SERVICE_SCHED, &interface->state);
108 }
109 
110 /**
111  * fm10k_service_timer - Timer Call-back
112  * @data: pointer to interface cast into an unsigned long
113  **/
114 static void fm10k_service_timer(unsigned long data)
115 {
116 	struct fm10k_intfc *interface = (struct fm10k_intfc *)data;
117 
118 	/* Reset the timer */
119 	mod_timer(&interface->service_timer, (HZ * 2) + jiffies);
120 
121 	fm10k_service_event_schedule(interface);
122 }
123 
124 static void fm10k_detach_subtask(struct fm10k_intfc *interface)
125 {
126 	struct net_device *netdev = interface->netdev;
127 	u32 __iomem *hw_addr;
128 	u32 value;
129 
130 	/* do nothing if device is still present or hw_addr is set */
131 	if (netif_device_present(netdev) || interface->hw.hw_addr)
132 		return;
133 
134 	/* check the real address space to see if we've recovered */
135 	hw_addr = READ_ONCE(interface->uc_addr);
136 	value = readl(hw_addr);
137 	if (~value) {
138 		interface->hw.hw_addr = interface->uc_addr;
139 		netif_device_attach(netdev);
140 		interface->flags |= FM10K_FLAG_RESET_REQUESTED;
141 		netdev_warn(netdev, "PCIe link restored, device now attached\n");
142 		return;
143 	}
144 
145 	rtnl_lock();
146 
147 	if (netif_running(netdev))
148 		dev_close(netdev);
149 
150 	rtnl_unlock();
151 }
152 
153 static void fm10k_prepare_for_reset(struct fm10k_intfc *interface)
154 {
155 	struct net_device *netdev = interface->netdev;
156 
157 	WARN_ON(in_interrupt());
158 
159 	/* put off any impending NetWatchDogTimeout */
160 	netif_trans_update(netdev);
161 
162 	while (test_and_set_bit(__FM10K_RESETTING, &interface->state))
163 		usleep_range(1000, 2000);
164 
165 	rtnl_lock();
166 
167 	fm10k_iov_suspend(interface->pdev);
168 
169 	if (netif_running(netdev))
170 		fm10k_close(netdev);
171 
172 	fm10k_mbx_free_irq(interface);
173 
174 	/* free interrupts */
175 	fm10k_clear_queueing_scheme(interface);
176 
177 	/* delay any future reset requests */
178 	interface->last_reset = jiffies + (10 * HZ);
179 
180 	rtnl_unlock();
181 }
182 
183 static int fm10k_handle_reset(struct fm10k_intfc *interface)
184 {
185 	struct net_device *netdev = interface->netdev;
186 	struct fm10k_hw *hw = &interface->hw;
187 	int err;
188 
189 	rtnl_lock();
190 
191 	pci_set_master(interface->pdev);
192 
193 	/* reset and initialize the hardware so it is in a known state */
194 	err = hw->mac.ops.reset_hw(hw);
195 	if (err) {
196 		dev_err(&interface->pdev->dev, "reset_hw failed: %d\n", err);
197 		goto reinit_err;
198 	}
199 
200 	err = hw->mac.ops.init_hw(hw);
201 	if (err) {
202 		dev_err(&interface->pdev->dev, "init_hw failed: %d\n", err);
203 		goto reinit_err;
204 	}
205 
206 	err = fm10k_init_queueing_scheme(interface);
207 	if (err) {
208 		dev_err(&interface->pdev->dev,
209 			"init_queueing_scheme failed: %d\n", err);
210 		goto reinit_err;
211 	}
212 
213 	/* re-associate interrupts */
214 	err = fm10k_mbx_request_irq(interface);
215 	if (err)
216 		goto err_mbx_irq;
217 
218 	err = fm10k_hw_ready(interface);
219 	if (err)
220 		goto err_open;
221 
222 	/* update hardware address for VFs if perm_addr has changed */
223 	if (hw->mac.type == fm10k_mac_vf) {
224 		if (is_valid_ether_addr(hw->mac.perm_addr)) {
225 			ether_addr_copy(hw->mac.addr, hw->mac.perm_addr);
226 			ether_addr_copy(netdev->perm_addr, hw->mac.perm_addr);
227 			ether_addr_copy(netdev->dev_addr, hw->mac.perm_addr);
228 			netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
229 		}
230 
231 		if (hw->mac.vlan_override)
232 			netdev->features &= ~NETIF_F_HW_VLAN_CTAG_RX;
233 		else
234 			netdev->features |= NETIF_F_HW_VLAN_CTAG_RX;
235 	}
236 
237 	err = netif_running(netdev) ? fm10k_open(netdev) : 0;
238 	if (err)
239 		goto err_open;
240 
241 	fm10k_iov_resume(interface->pdev);
242 
243 	rtnl_unlock();
244 
245 	clear_bit(__FM10K_RESETTING, &interface->state);
246 
247 	return err;
248 err_open:
249 	fm10k_mbx_free_irq(interface);
250 err_mbx_irq:
251 	fm10k_clear_queueing_scheme(interface);
252 reinit_err:
253 	netif_device_detach(netdev);
254 
255 	rtnl_unlock();
256 
257 	clear_bit(__FM10K_RESETTING, &interface->state);
258 
259 	return err;
260 }
261 
262 static void fm10k_reinit(struct fm10k_intfc *interface)
263 {
264 	int err;
265 
266 	fm10k_prepare_for_reset(interface);
267 
268 	err = fm10k_handle_reset(interface);
269 	if (err)
270 		dev_err(&interface->pdev->dev,
271 			"fm10k_handle_reset failed: %d\n", err);
272 }
273 
274 static void fm10k_reset_subtask(struct fm10k_intfc *interface)
275 {
276 	if (!(interface->flags & FM10K_FLAG_RESET_REQUESTED))
277 		return;
278 
279 	interface->flags &= ~FM10K_FLAG_RESET_REQUESTED;
280 
281 	netdev_err(interface->netdev, "Reset interface\n");
282 
283 	fm10k_reinit(interface);
284 }
285 
286 /**
287  * fm10k_configure_swpri_map - Configure Receive SWPRI to PC mapping
288  * @interface: board private structure
289  *
290  * Configure the SWPRI to PC mapping for the port.
291  **/
292 static void fm10k_configure_swpri_map(struct fm10k_intfc *interface)
293 {
294 	struct net_device *netdev = interface->netdev;
295 	struct fm10k_hw *hw = &interface->hw;
296 	int i;
297 
298 	/* clear flag indicating update is needed */
299 	interface->flags &= ~FM10K_FLAG_SWPRI_CONFIG;
300 
301 	/* these registers are only available on the PF */
302 	if (hw->mac.type != fm10k_mac_pf)
303 		return;
304 
305 	/* configure SWPRI to PC map */
306 	for (i = 0; i < FM10K_SWPRI_MAX; i++)
307 		fm10k_write_reg(hw, FM10K_SWPRI_MAP(i),
308 				netdev_get_prio_tc_map(netdev, i));
309 }
310 
311 /**
312  * fm10k_watchdog_update_host_state - Update the link status based on host.
313  * @interface: board private structure
314  **/
315 static void fm10k_watchdog_update_host_state(struct fm10k_intfc *interface)
316 {
317 	struct fm10k_hw *hw = &interface->hw;
318 	s32 err;
319 
320 	if (test_bit(__FM10K_LINK_DOWN, &interface->state)) {
321 		interface->host_ready = false;
322 		if (time_is_after_jiffies(interface->link_down_event))
323 			return;
324 		clear_bit(__FM10K_LINK_DOWN, &interface->state);
325 	}
326 
327 	if (interface->flags & FM10K_FLAG_SWPRI_CONFIG) {
328 		if (rtnl_trylock()) {
329 			fm10k_configure_swpri_map(interface);
330 			rtnl_unlock();
331 		}
332 	}
333 
334 	/* lock the mailbox for transmit and receive */
335 	fm10k_mbx_lock(interface);
336 
337 	err = hw->mac.ops.get_host_state(hw, &interface->host_ready);
338 	if (err && time_is_before_jiffies(interface->last_reset))
339 		interface->flags |= FM10K_FLAG_RESET_REQUESTED;
340 
341 	/* free the lock */
342 	fm10k_mbx_unlock(interface);
343 }
344 
345 /**
346  * fm10k_mbx_subtask - Process upstream and downstream mailboxes
347  * @interface: board private structure
348  *
349  * This function will process both the upstream and downstream mailboxes.
350  **/
351 static void fm10k_mbx_subtask(struct fm10k_intfc *interface)
352 {
353 	/* process upstream mailbox and update device state */
354 	fm10k_watchdog_update_host_state(interface);
355 
356 	/* process downstream mailboxes */
357 	fm10k_iov_mbx(interface);
358 }
359 
360 /**
361  * fm10k_watchdog_host_is_ready - Update netdev status based on host ready
362  * @interface: board private structure
363  **/
364 static void fm10k_watchdog_host_is_ready(struct fm10k_intfc *interface)
365 {
366 	struct net_device *netdev = interface->netdev;
367 
368 	/* only continue if link state is currently down */
369 	if (netif_carrier_ok(netdev))
370 		return;
371 
372 	netif_info(interface, drv, netdev, "NIC Link is up\n");
373 
374 	netif_carrier_on(netdev);
375 	netif_tx_wake_all_queues(netdev);
376 }
377 
378 /**
379  * fm10k_watchdog_host_not_ready - Update netdev status based on host not ready
380  * @interface: board private structure
381  **/
382 static void fm10k_watchdog_host_not_ready(struct fm10k_intfc *interface)
383 {
384 	struct net_device *netdev = interface->netdev;
385 
386 	/* only continue if link state is currently up */
387 	if (!netif_carrier_ok(netdev))
388 		return;
389 
390 	netif_info(interface, drv, netdev, "NIC Link is down\n");
391 
392 	netif_carrier_off(netdev);
393 	netif_tx_stop_all_queues(netdev);
394 }
395 
396 /**
397  * fm10k_update_stats - Update the board statistics counters.
398  * @interface: board private structure
399  **/
400 void fm10k_update_stats(struct fm10k_intfc *interface)
401 {
402 	struct net_device_stats *net_stats = &interface->netdev->stats;
403 	struct fm10k_hw *hw = &interface->hw;
404 	u64 hw_csum_tx_good = 0, hw_csum_rx_good = 0, rx_length_errors = 0;
405 	u64 rx_switch_errors = 0, rx_drops = 0, rx_pp_errors = 0;
406 	u64 rx_link_errors = 0;
407 	u64 rx_errors = 0, rx_csum_errors = 0, tx_csum_errors = 0;
408 	u64 restart_queue = 0, tx_busy = 0, alloc_failed = 0;
409 	u64 rx_bytes_nic = 0, rx_pkts_nic = 0, rx_drops_nic = 0;
410 	u64 tx_bytes_nic = 0, tx_pkts_nic = 0;
411 	u64 bytes, pkts;
412 	int i;
413 
414 	/* ensure only one thread updates stats at a time */
415 	if (test_and_set_bit(__FM10K_UPDATING_STATS, &interface->state))
416 		return;
417 
418 	/* do not allow stats update via service task for next second */
419 	interface->next_stats_update = jiffies + HZ;
420 
421 	/* gather some stats to the interface struct that are per queue */
422 	for (bytes = 0, pkts = 0, i = 0; i < interface->num_tx_queues; i++) {
423 		struct fm10k_ring *tx_ring = READ_ONCE(interface->tx_ring[i]);
424 
425 		if (!tx_ring)
426 			continue;
427 
428 		restart_queue += tx_ring->tx_stats.restart_queue;
429 		tx_busy += tx_ring->tx_stats.tx_busy;
430 		tx_csum_errors += tx_ring->tx_stats.csum_err;
431 		bytes += tx_ring->stats.bytes;
432 		pkts += tx_ring->stats.packets;
433 		hw_csum_tx_good += tx_ring->tx_stats.csum_good;
434 	}
435 
436 	interface->restart_queue = restart_queue;
437 	interface->tx_busy = tx_busy;
438 	net_stats->tx_bytes = bytes;
439 	net_stats->tx_packets = pkts;
440 	interface->tx_csum_errors = tx_csum_errors;
441 	interface->hw_csum_tx_good = hw_csum_tx_good;
442 
443 	/* gather some stats to the interface struct that are per queue */
444 	for (bytes = 0, pkts = 0, i = 0; i < interface->num_rx_queues; i++) {
445 		struct fm10k_ring *rx_ring = READ_ONCE(interface->rx_ring[i]);
446 
447 		if (!rx_ring)
448 			continue;
449 
450 		bytes += rx_ring->stats.bytes;
451 		pkts += rx_ring->stats.packets;
452 		alloc_failed += rx_ring->rx_stats.alloc_failed;
453 		rx_csum_errors += rx_ring->rx_stats.csum_err;
454 		rx_errors += rx_ring->rx_stats.errors;
455 		hw_csum_rx_good += rx_ring->rx_stats.csum_good;
456 		rx_switch_errors += rx_ring->rx_stats.switch_errors;
457 		rx_drops += rx_ring->rx_stats.drops;
458 		rx_pp_errors += rx_ring->rx_stats.pp_errors;
459 		rx_link_errors += rx_ring->rx_stats.link_errors;
460 		rx_length_errors += rx_ring->rx_stats.length_errors;
461 	}
462 
463 	net_stats->rx_bytes = bytes;
464 	net_stats->rx_packets = pkts;
465 	interface->alloc_failed = alloc_failed;
466 	interface->rx_csum_errors = rx_csum_errors;
467 	interface->hw_csum_rx_good = hw_csum_rx_good;
468 	interface->rx_switch_errors = rx_switch_errors;
469 	interface->rx_drops = rx_drops;
470 	interface->rx_pp_errors = rx_pp_errors;
471 	interface->rx_link_errors = rx_link_errors;
472 	interface->rx_length_errors = rx_length_errors;
473 
474 	hw->mac.ops.update_hw_stats(hw, &interface->stats);
475 
476 	for (i = 0; i < hw->mac.max_queues; i++) {
477 		struct fm10k_hw_stats_q *q = &interface->stats.q[i];
478 
479 		tx_bytes_nic += q->tx_bytes.count;
480 		tx_pkts_nic += q->tx_packets.count;
481 		rx_bytes_nic += q->rx_bytes.count;
482 		rx_pkts_nic += q->rx_packets.count;
483 		rx_drops_nic += q->rx_drops.count;
484 	}
485 
486 	interface->tx_bytes_nic = tx_bytes_nic;
487 	interface->tx_packets_nic = tx_pkts_nic;
488 	interface->rx_bytes_nic = rx_bytes_nic;
489 	interface->rx_packets_nic = rx_pkts_nic;
490 	interface->rx_drops_nic = rx_drops_nic;
491 
492 	/* Fill out the OS statistics structure */
493 	net_stats->rx_errors = rx_errors;
494 	net_stats->rx_dropped = interface->stats.nodesc_drop.count;
495 
496 	clear_bit(__FM10K_UPDATING_STATS, &interface->state);
497 }
498 
499 /**
500  * fm10k_watchdog_flush_tx - flush queues on host not ready
501  * @interface - pointer to the device interface structure
502  **/
503 static void fm10k_watchdog_flush_tx(struct fm10k_intfc *interface)
504 {
505 	int some_tx_pending = 0;
506 	int i;
507 
508 	/* nothing to do if carrier is up */
509 	if (netif_carrier_ok(interface->netdev))
510 		return;
511 
512 	for (i = 0; i < interface->num_tx_queues; i++) {
513 		struct fm10k_ring *tx_ring = interface->tx_ring[i];
514 
515 		if (tx_ring->next_to_use != tx_ring->next_to_clean) {
516 			some_tx_pending = 1;
517 			break;
518 		}
519 	}
520 
521 	/* We've lost link, so the controller stops DMA, but we've got
522 	 * queued Tx work that's never going to get done, so reset
523 	 * controller to flush Tx.
524 	 */
525 	if (some_tx_pending)
526 		interface->flags |= FM10K_FLAG_RESET_REQUESTED;
527 }
528 
529 /**
530  * fm10k_watchdog_subtask - check and bring link up
531  * @interface - pointer to the device interface structure
532  **/
533 static void fm10k_watchdog_subtask(struct fm10k_intfc *interface)
534 {
535 	/* if interface is down do nothing */
536 	if (test_bit(__FM10K_DOWN, &interface->state) ||
537 	    test_bit(__FM10K_RESETTING, &interface->state))
538 		return;
539 
540 	if (interface->host_ready)
541 		fm10k_watchdog_host_is_ready(interface);
542 	else
543 		fm10k_watchdog_host_not_ready(interface);
544 
545 	/* update stats only once every second */
546 	if (time_is_before_jiffies(interface->next_stats_update))
547 		fm10k_update_stats(interface);
548 
549 	/* flush any uncompleted work */
550 	fm10k_watchdog_flush_tx(interface);
551 }
552 
553 /**
554  * fm10k_check_hang_subtask - check for hung queues and dropped interrupts
555  * @interface - pointer to the device interface structure
556  *
557  * This function serves two purposes.  First it strobes the interrupt lines
558  * in order to make certain interrupts are occurring.  Secondly it sets the
559  * bits needed to check for TX hangs.  As a result we should immediately
560  * determine if a hang has occurred.
561  */
562 static void fm10k_check_hang_subtask(struct fm10k_intfc *interface)
563 {
564 	int i;
565 
566 	/* If we're down or resetting, just bail */
567 	if (test_bit(__FM10K_DOWN, &interface->state) ||
568 	    test_bit(__FM10K_RESETTING, &interface->state))
569 		return;
570 
571 	/* rate limit tx hang checks to only once every 2 seconds */
572 	if (time_is_after_eq_jiffies(interface->next_tx_hang_check))
573 		return;
574 	interface->next_tx_hang_check = jiffies + (2 * HZ);
575 
576 	if (netif_carrier_ok(interface->netdev)) {
577 		/* Force detection of hung controller */
578 		for (i = 0; i < interface->num_tx_queues; i++)
579 			set_check_for_tx_hang(interface->tx_ring[i]);
580 
581 		/* Rearm all in-use q_vectors for immediate firing */
582 		for (i = 0; i < interface->num_q_vectors; i++) {
583 			struct fm10k_q_vector *qv = interface->q_vector[i];
584 
585 			if (!qv->tx.count && !qv->rx.count)
586 				continue;
587 			writel(FM10K_ITR_ENABLE | FM10K_ITR_PENDING2, qv->itr);
588 		}
589 	}
590 }
591 
592 /**
593  * fm10k_service_task - manages and runs subtasks
594  * @work: pointer to work_struct containing our data
595  **/
596 static void fm10k_service_task(struct work_struct *work)
597 {
598 	struct fm10k_intfc *interface;
599 
600 	interface = container_of(work, struct fm10k_intfc, service_task);
601 
602 	/* tasks run even when interface is down */
603 	fm10k_mbx_subtask(interface);
604 	fm10k_detach_subtask(interface);
605 	fm10k_reset_subtask(interface);
606 
607 	/* tasks only run when interface is up */
608 	fm10k_watchdog_subtask(interface);
609 	fm10k_check_hang_subtask(interface);
610 
611 	/* release lock on service events to allow scheduling next event */
612 	fm10k_service_event_complete(interface);
613 }
614 
615 /**
616  * fm10k_configure_tx_ring - Configure Tx ring after Reset
617  * @interface: board private structure
618  * @ring: structure containing ring specific data
619  *
620  * Configure the Tx descriptor ring after a reset.
621  **/
622 static void fm10k_configure_tx_ring(struct fm10k_intfc *interface,
623 				    struct fm10k_ring *ring)
624 {
625 	struct fm10k_hw *hw = &interface->hw;
626 	u64 tdba = ring->dma;
627 	u32 size = ring->count * sizeof(struct fm10k_tx_desc);
628 	u32 txint = FM10K_INT_MAP_DISABLE;
629 	u32 txdctl = BIT(FM10K_TXDCTL_MAX_TIME_SHIFT) | FM10K_TXDCTL_ENABLE;
630 	u8 reg_idx = ring->reg_idx;
631 
632 	/* disable queue to avoid issues while updating state */
633 	fm10k_write_reg(hw, FM10K_TXDCTL(reg_idx), 0);
634 	fm10k_write_flush(hw);
635 
636 	/* possible poll here to verify ring resources have been cleaned */
637 
638 	/* set location and size for descriptor ring */
639 	fm10k_write_reg(hw, FM10K_TDBAL(reg_idx), tdba & DMA_BIT_MASK(32));
640 	fm10k_write_reg(hw, FM10K_TDBAH(reg_idx), tdba >> 32);
641 	fm10k_write_reg(hw, FM10K_TDLEN(reg_idx), size);
642 
643 	/* reset head and tail pointers */
644 	fm10k_write_reg(hw, FM10K_TDH(reg_idx), 0);
645 	fm10k_write_reg(hw, FM10K_TDT(reg_idx), 0);
646 
647 	/* store tail pointer */
648 	ring->tail = &interface->uc_addr[FM10K_TDT(reg_idx)];
649 
650 	/* reset ntu and ntc to place SW in sync with hardware */
651 	ring->next_to_clean = 0;
652 	ring->next_to_use = 0;
653 
654 	/* Map interrupt */
655 	if (ring->q_vector) {
656 		txint = ring->q_vector->v_idx + NON_Q_VECTORS(hw);
657 		txint |= FM10K_INT_MAP_TIMER0;
658 	}
659 
660 	fm10k_write_reg(hw, FM10K_TXINT(reg_idx), txint);
661 
662 	/* enable use of FTAG bit in Tx descriptor, register is RO for VF */
663 	fm10k_write_reg(hw, FM10K_PFVTCTL(reg_idx),
664 			FM10K_PFVTCTL_FTAG_DESC_ENABLE);
665 
666 	/* Initialize XPS */
667 	if (!test_and_set_bit(__FM10K_TX_XPS_INIT_DONE, &ring->state) &&
668 	    ring->q_vector)
669 		netif_set_xps_queue(ring->netdev,
670 				    &ring->q_vector->affinity_mask,
671 				    ring->queue_index);
672 
673 	/* enable queue */
674 	fm10k_write_reg(hw, FM10K_TXDCTL(reg_idx), txdctl);
675 }
676 
677 /**
678  * fm10k_enable_tx_ring - Verify Tx ring is enabled after configuration
679  * @interface: board private structure
680  * @ring: structure containing ring specific data
681  *
682  * Verify the Tx descriptor ring is ready for transmit.
683  **/
684 static void fm10k_enable_tx_ring(struct fm10k_intfc *interface,
685 				 struct fm10k_ring *ring)
686 {
687 	struct fm10k_hw *hw = &interface->hw;
688 	int wait_loop = 10;
689 	u32 txdctl;
690 	u8 reg_idx = ring->reg_idx;
691 
692 	/* if we are already enabled just exit */
693 	if (fm10k_read_reg(hw, FM10K_TXDCTL(reg_idx)) & FM10K_TXDCTL_ENABLE)
694 		return;
695 
696 	/* poll to verify queue is enabled */
697 	do {
698 		usleep_range(1000, 2000);
699 		txdctl = fm10k_read_reg(hw, FM10K_TXDCTL(reg_idx));
700 	} while (!(txdctl & FM10K_TXDCTL_ENABLE) && --wait_loop);
701 	if (!wait_loop)
702 		netif_err(interface, drv, interface->netdev,
703 			  "Could not enable Tx Queue %d\n", reg_idx);
704 }
705 
706 /**
707  * fm10k_configure_tx - Configure Transmit Unit after Reset
708  * @interface: board private structure
709  *
710  * Configure the Tx unit of the MAC after a reset.
711  **/
712 static void fm10k_configure_tx(struct fm10k_intfc *interface)
713 {
714 	int i;
715 
716 	/* Setup the HW Tx Head and Tail descriptor pointers */
717 	for (i = 0; i < interface->num_tx_queues; i++)
718 		fm10k_configure_tx_ring(interface, interface->tx_ring[i]);
719 
720 	/* poll here to verify that Tx rings are now enabled */
721 	for (i = 0; i < interface->num_tx_queues; i++)
722 		fm10k_enable_tx_ring(interface, interface->tx_ring[i]);
723 }
724 
725 /**
726  * fm10k_configure_rx_ring - Configure Rx ring after Reset
727  * @interface: board private structure
728  * @ring: structure containing ring specific data
729  *
730  * Configure the Rx descriptor ring after a reset.
731  **/
732 static void fm10k_configure_rx_ring(struct fm10k_intfc *interface,
733 				    struct fm10k_ring *ring)
734 {
735 	u64 rdba = ring->dma;
736 	struct fm10k_hw *hw = &interface->hw;
737 	u32 size = ring->count * sizeof(union fm10k_rx_desc);
738 	u32 rxqctl, rxdctl = FM10K_RXDCTL_WRITE_BACK_MIN_DELAY;
739 	u32 srrctl = FM10K_SRRCTL_BUFFER_CHAINING_EN;
740 	u32 rxint = FM10K_INT_MAP_DISABLE;
741 	u8 rx_pause = interface->rx_pause;
742 	u8 reg_idx = ring->reg_idx;
743 
744 	/* disable queue to avoid issues while updating state */
745 	rxqctl = fm10k_read_reg(hw, FM10K_RXQCTL(reg_idx));
746 	rxqctl &= ~FM10K_RXQCTL_ENABLE;
747 	fm10k_write_flush(hw);
748 
749 	/* possible poll here to verify ring resources have been cleaned */
750 
751 	/* set location and size for descriptor ring */
752 	fm10k_write_reg(hw, FM10K_RDBAL(reg_idx), rdba & DMA_BIT_MASK(32));
753 	fm10k_write_reg(hw, FM10K_RDBAH(reg_idx), rdba >> 32);
754 	fm10k_write_reg(hw, FM10K_RDLEN(reg_idx), size);
755 
756 	/* reset head and tail pointers */
757 	fm10k_write_reg(hw, FM10K_RDH(reg_idx), 0);
758 	fm10k_write_reg(hw, FM10K_RDT(reg_idx), 0);
759 
760 	/* store tail pointer */
761 	ring->tail = &interface->uc_addr[FM10K_RDT(reg_idx)];
762 
763 	/* reset ntu and ntc to place SW in sync with hardware */
764 	ring->next_to_clean = 0;
765 	ring->next_to_use = 0;
766 	ring->next_to_alloc = 0;
767 
768 	/* Configure the Rx buffer size for one buff without split */
769 	srrctl |= FM10K_RX_BUFSZ >> FM10K_SRRCTL_BSIZEPKT_SHIFT;
770 
771 	/* Configure the Rx ring to suppress loopback packets */
772 	srrctl |= FM10K_SRRCTL_LOOPBACK_SUPPRESS;
773 	fm10k_write_reg(hw, FM10K_SRRCTL(reg_idx), srrctl);
774 
775 	/* Enable drop on empty */
776 #ifdef CONFIG_DCB
777 	if (interface->pfc_en)
778 		rx_pause = interface->pfc_en;
779 #endif
780 	if (!(rx_pause & BIT(ring->qos_pc)))
781 		rxdctl |= FM10K_RXDCTL_DROP_ON_EMPTY;
782 
783 	fm10k_write_reg(hw, FM10K_RXDCTL(reg_idx), rxdctl);
784 
785 	/* assign default VLAN to queue */
786 	ring->vid = hw->mac.default_vid;
787 
788 	/* if we have an active VLAN, disable default VLAN ID */
789 	if (test_bit(hw->mac.default_vid, interface->active_vlans))
790 		ring->vid |= FM10K_VLAN_CLEAR;
791 
792 	/* Map interrupt */
793 	if (ring->q_vector) {
794 		rxint = ring->q_vector->v_idx + NON_Q_VECTORS(hw);
795 		rxint |= FM10K_INT_MAP_TIMER1;
796 	}
797 
798 	fm10k_write_reg(hw, FM10K_RXINT(reg_idx), rxint);
799 
800 	/* enable queue */
801 	rxqctl = fm10k_read_reg(hw, FM10K_RXQCTL(reg_idx));
802 	rxqctl |= FM10K_RXQCTL_ENABLE;
803 	fm10k_write_reg(hw, FM10K_RXQCTL(reg_idx), rxqctl);
804 
805 	/* place buffers on ring for receive data */
806 	fm10k_alloc_rx_buffers(ring, fm10k_desc_unused(ring));
807 }
808 
809 /**
810  * fm10k_update_rx_drop_en - Configures the drop enable bits for Rx rings
811  * @interface: board private structure
812  *
813  * Configure the drop enable bits for the Rx rings.
814  **/
815 void fm10k_update_rx_drop_en(struct fm10k_intfc *interface)
816 {
817 	struct fm10k_hw *hw = &interface->hw;
818 	u8 rx_pause = interface->rx_pause;
819 	int i;
820 
821 #ifdef CONFIG_DCB
822 	if (interface->pfc_en)
823 		rx_pause = interface->pfc_en;
824 
825 #endif
826 	for (i = 0; i < interface->num_rx_queues; i++) {
827 		struct fm10k_ring *ring = interface->rx_ring[i];
828 		u32 rxdctl = FM10K_RXDCTL_WRITE_BACK_MIN_DELAY;
829 		u8 reg_idx = ring->reg_idx;
830 
831 		if (!(rx_pause & BIT(ring->qos_pc)))
832 			rxdctl |= FM10K_RXDCTL_DROP_ON_EMPTY;
833 
834 		fm10k_write_reg(hw, FM10K_RXDCTL(reg_idx), rxdctl);
835 	}
836 }
837 
838 /**
839  * fm10k_configure_dglort - Configure Receive DGLORT after reset
840  * @interface: board private structure
841  *
842  * Configure the DGLORT description and RSS tables.
843  **/
844 static void fm10k_configure_dglort(struct fm10k_intfc *interface)
845 {
846 	struct fm10k_dglort_cfg dglort = { 0 };
847 	struct fm10k_hw *hw = &interface->hw;
848 	int i;
849 	u32 mrqc;
850 
851 	/* Fill out hash function seeds */
852 	for (i = 0; i < FM10K_RSSRK_SIZE; i++)
853 		fm10k_write_reg(hw, FM10K_RSSRK(0, i), interface->rssrk[i]);
854 
855 	/* Write RETA table to hardware */
856 	for (i = 0; i < FM10K_RETA_SIZE; i++)
857 		fm10k_write_reg(hw, FM10K_RETA(0, i), interface->reta[i]);
858 
859 	/* Generate RSS hash based on packet types, TCP/UDP
860 	 * port numbers and/or IPv4/v6 src and dst addresses
861 	 */
862 	mrqc = FM10K_MRQC_IPV4 |
863 	       FM10K_MRQC_TCP_IPV4 |
864 	       FM10K_MRQC_IPV6 |
865 	       FM10K_MRQC_TCP_IPV6;
866 
867 	if (interface->flags & FM10K_FLAG_RSS_FIELD_IPV4_UDP)
868 		mrqc |= FM10K_MRQC_UDP_IPV4;
869 	if (interface->flags & FM10K_FLAG_RSS_FIELD_IPV6_UDP)
870 		mrqc |= FM10K_MRQC_UDP_IPV6;
871 
872 	fm10k_write_reg(hw, FM10K_MRQC(0), mrqc);
873 
874 	/* configure default DGLORT mapping for RSS/DCB */
875 	dglort.inner_rss = 1;
876 	dglort.rss_l = fls(interface->ring_feature[RING_F_RSS].mask);
877 	dglort.pc_l = fls(interface->ring_feature[RING_F_QOS].mask);
878 	hw->mac.ops.configure_dglort_map(hw, &dglort);
879 
880 	/* assign GLORT per queue for queue mapped testing */
881 	if (interface->glort_count > 64) {
882 		memset(&dglort, 0, sizeof(dglort));
883 		dglort.inner_rss = 1;
884 		dglort.glort = interface->glort + 64;
885 		dglort.idx = fm10k_dglort_pf_queue;
886 		dglort.queue_l = fls(interface->num_rx_queues - 1);
887 		hw->mac.ops.configure_dglort_map(hw, &dglort);
888 	}
889 
890 	/* assign glort value for RSS/DCB specific to this interface */
891 	memset(&dglort, 0, sizeof(dglort));
892 	dglort.inner_rss = 1;
893 	dglort.glort = interface->glort;
894 	dglort.rss_l = fls(interface->ring_feature[RING_F_RSS].mask);
895 	dglort.pc_l = fls(interface->ring_feature[RING_F_QOS].mask);
896 	/* configure DGLORT mapping for RSS/DCB */
897 	dglort.idx = fm10k_dglort_pf_rss;
898 	if (interface->l2_accel)
899 		dglort.shared_l = fls(interface->l2_accel->size);
900 	hw->mac.ops.configure_dglort_map(hw, &dglort);
901 }
902 
903 /**
904  * fm10k_configure_rx - Configure Receive Unit after Reset
905  * @interface: board private structure
906  *
907  * Configure the Rx unit of the MAC after a reset.
908  **/
909 static void fm10k_configure_rx(struct fm10k_intfc *interface)
910 {
911 	int i;
912 
913 	/* Configure SWPRI to PC map */
914 	fm10k_configure_swpri_map(interface);
915 
916 	/* Configure RSS and DGLORT map */
917 	fm10k_configure_dglort(interface);
918 
919 	/* Setup the HW Rx Head and Tail descriptor pointers */
920 	for (i = 0; i < interface->num_rx_queues; i++)
921 		fm10k_configure_rx_ring(interface, interface->rx_ring[i]);
922 
923 	/* possible poll here to verify that Rx rings are now enabled */
924 }
925 
926 static void fm10k_napi_enable_all(struct fm10k_intfc *interface)
927 {
928 	struct fm10k_q_vector *q_vector;
929 	int q_idx;
930 
931 	for (q_idx = 0; q_idx < interface->num_q_vectors; q_idx++) {
932 		q_vector = interface->q_vector[q_idx];
933 		napi_enable(&q_vector->napi);
934 	}
935 }
936 
937 static irqreturn_t fm10k_msix_clean_rings(int __always_unused irq, void *data)
938 {
939 	struct fm10k_q_vector *q_vector = data;
940 
941 	if (q_vector->rx.count || q_vector->tx.count)
942 		napi_schedule_irqoff(&q_vector->napi);
943 
944 	return IRQ_HANDLED;
945 }
946 
947 static irqreturn_t fm10k_msix_mbx_vf(int __always_unused irq, void *data)
948 {
949 	struct fm10k_intfc *interface = data;
950 	struct fm10k_hw *hw = &interface->hw;
951 	struct fm10k_mbx_info *mbx = &hw->mbx;
952 
953 	/* re-enable mailbox interrupt and indicate 20us delay */
954 	fm10k_write_reg(hw, FM10K_VFITR(FM10K_MBX_VECTOR),
955 			(FM10K_MBX_INT_DELAY >> hw->mac.itr_scale) |
956 			FM10K_ITR_ENABLE);
957 
958 	/* service upstream mailbox */
959 	if (fm10k_mbx_trylock(interface)) {
960 		mbx->ops.process(hw, mbx);
961 		fm10k_mbx_unlock(interface);
962 	}
963 
964 	hw->mac.get_host_state = true;
965 	fm10k_service_event_schedule(interface);
966 
967 	return IRQ_HANDLED;
968 }
969 
970 #ifdef CONFIG_NET_POLL_CONTROLLER
971 /**
972  *  fm10k_netpoll - A Polling 'interrupt' handler
973  *  @netdev: network interface device structure
974  *
975  *  This is used by netconsole to send skbs without having to re-enable
976  *  interrupts. It's not called while the normal interrupt routine is executing.
977  **/
978 void fm10k_netpoll(struct net_device *netdev)
979 {
980 	struct fm10k_intfc *interface = netdev_priv(netdev);
981 	int i;
982 
983 	/* if interface is down do nothing */
984 	if (test_bit(__FM10K_DOWN, &interface->state))
985 		return;
986 
987 	for (i = 0; i < interface->num_q_vectors; i++)
988 		fm10k_msix_clean_rings(0, interface->q_vector[i]);
989 }
990 
991 #endif
992 #define FM10K_ERR_MSG(type) case (type): error = #type; break
993 static void fm10k_handle_fault(struct fm10k_intfc *interface, int type,
994 			       struct fm10k_fault *fault)
995 {
996 	struct pci_dev *pdev = interface->pdev;
997 	struct fm10k_hw *hw = &interface->hw;
998 	struct fm10k_iov_data *iov_data = interface->iov_data;
999 	char *error;
1000 
1001 	switch (type) {
1002 	case FM10K_PCA_FAULT:
1003 		switch (fault->type) {
1004 		default:
1005 			error = "Unknown PCA error";
1006 			break;
1007 		FM10K_ERR_MSG(PCA_NO_FAULT);
1008 		FM10K_ERR_MSG(PCA_UNMAPPED_ADDR);
1009 		FM10K_ERR_MSG(PCA_BAD_QACCESS_PF);
1010 		FM10K_ERR_MSG(PCA_BAD_QACCESS_VF);
1011 		FM10K_ERR_MSG(PCA_MALICIOUS_REQ);
1012 		FM10K_ERR_MSG(PCA_POISONED_TLP);
1013 		FM10K_ERR_MSG(PCA_TLP_ABORT);
1014 		}
1015 		break;
1016 	case FM10K_THI_FAULT:
1017 		switch (fault->type) {
1018 		default:
1019 			error = "Unknown THI error";
1020 			break;
1021 		FM10K_ERR_MSG(THI_NO_FAULT);
1022 		FM10K_ERR_MSG(THI_MAL_DIS_Q_FAULT);
1023 		}
1024 		break;
1025 	case FM10K_FUM_FAULT:
1026 		switch (fault->type) {
1027 		default:
1028 			error = "Unknown FUM error";
1029 			break;
1030 		FM10K_ERR_MSG(FUM_NO_FAULT);
1031 		FM10K_ERR_MSG(FUM_UNMAPPED_ADDR);
1032 		FM10K_ERR_MSG(FUM_BAD_VF_QACCESS);
1033 		FM10K_ERR_MSG(FUM_ADD_DECODE_ERR);
1034 		FM10K_ERR_MSG(FUM_RO_ERROR);
1035 		FM10K_ERR_MSG(FUM_QPRC_CRC_ERROR);
1036 		FM10K_ERR_MSG(FUM_CSR_TIMEOUT);
1037 		FM10K_ERR_MSG(FUM_INVALID_TYPE);
1038 		FM10K_ERR_MSG(FUM_INVALID_LENGTH);
1039 		FM10K_ERR_MSG(FUM_INVALID_BE);
1040 		FM10K_ERR_MSG(FUM_INVALID_ALIGN);
1041 		}
1042 		break;
1043 	default:
1044 		error = "Undocumented fault";
1045 		break;
1046 	}
1047 
1048 	dev_warn(&pdev->dev,
1049 		 "%s Address: 0x%llx SpecInfo: 0x%x Func: %02x.%0x\n",
1050 		 error, fault->address, fault->specinfo,
1051 		 PCI_SLOT(fault->func), PCI_FUNC(fault->func));
1052 
1053 	/* For VF faults, clear out the respective LPORT, reset the queue
1054 	 * resources, and then reconnect to the mailbox. This allows the
1055 	 * VF in question to resume behavior. For transient faults that are
1056 	 * the result of non-malicious behavior this will log the fault and
1057 	 * allow the VF to resume functionality. Obviously for malicious VFs
1058 	 * they will be able to attempt malicious behavior again. In this
1059 	 * case, the system administrator will need to step in and manually
1060 	 * remove or disable the VF in question.
1061 	 */
1062 	if (fault->func && iov_data) {
1063 		int vf = fault->func - 1;
1064 		struct fm10k_vf_info *vf_info = &iov_data->vf_info[vf];
1065 
1066 		hw->iov.ops.reset_lport(hw, vf_info);
1067 		hw->iov.ops.reset_resources(hw, vf_info);
1068 
1069 		/* reset_lport disables the VF, so re-enable it */
1070 		hw->iov.ops.set_lport(hw, vf_info, vf,
1071 				      FM10K_VF_FLAG_MULTI_CAPABLE);
1072 
1073 		/* reset_resources will disconnect from the mbx  */
1074 		vf_info->mbx.ops.connect(hw, &vf_info->mbx);
1075 	}
1076 }
1077 
1078 static void fm10k_report_fault(struct fm10k_intfc *interface, u32 eicr)
1079 {
1080 	struct fm10k_hw *hw = &interface->hw;
1081 	struct fm10k_fault fault = { 0 };
1082 	int type, err;
1083 
1084 	for (eicr &= FM10K_EICR_FAULT_MASK, type = FM10K_PCA_FAULT;
1085 	     eicr;
1086 	     eicr >>= 1, type += FM10K_FAULT_SIZE) {
1087 		/* only check if there is an error reported */
1088 		if (!(eicr & 0x1))
1089 			continue;
1090 
1091 		/* retrieve fault info */
1092 		err = hw->mac.ops.get_fault(hw, type, &fault);
1093 		if (err) {
1094 			dev_err(&interface->pdev->dev,
1095 				"error reading fault\n");
1096 			continue;
1097 		}
1098 
1099 		fm10k_handle_fault(interface, type, &fault);
1100 	}
1101 }
1102 
1103 static void fm10k_reset_drop_on_empty(struct fm10k_intfc *interface, u32 eicr)
1104 {
1105 	struct fm10k_hw *hw = &interface->hw;
1106 	const u32 rxdctl = FM10K_RXDCTL_WRITE_BACK_MIN_DELAY;
1107 	u32 maxholdq;
1108 	int q;
1109 
1110 	if (!(eicr & FM10K_EICR_MAXHOLDTIME))
1111 		return;
1112 
1113 	maxholdq = fm10k_read_reg(hw, FM10K_MAXHOLDQ(7));
1114 	if (maxholdq)
1115 		fm10k_write_reg(hw, FM10K_MAXHOLDQ(7), maxholdq);
1116 	for (q = 255;;) {
1117 		if (maxholdq & BIT(31)) {
1118 			if (q < FM10K_MAX_QUEUES_PF) {
1119 				interface->rx_overrun_pf++;
1120 				fm10k_write_reg(hw, FM10K_RXDCTL(q), rxdctl);
1121 			} else {
1122 				interface->rx_overrun_vf++;
1123 			}
1124 		}
1125 
1126 		maxholdq *= 2;
1127 		if (!maxholdq)
1128 			q &= ~(32 - 1);
1129 
1130 		if (!q)
1131 			break;
1132 
1133 		if (q-- % 32)
1134 			continue;
1135 
1136 		maxholdq = fm10k_read_reg(hw, FM10K_MAXHOLDQ(q / 32));
1137 		if (maxholdq)
1138 			fm10k_write_reg(hw, FM10K_MAXHOLDQ(q / 32), maxholdq);
1139 	}
1140 }
1141 
1142 static irqreturn_t fm10k_msix_mbx_pf(int __always_unused irq, void *data)
1143 {
1144 	struct fm10k_intfc *interface = data;
1145 	struct fm10k_hw *hw = &interface->hw;
1146 	struct fm10k_mbx_info *mbx = &hw->mbx;
1147 	u32 eicr;
1148 	s32 err = 0;
1149 
1150 	/* unmask any set bits related to this interrupt */
1151 	eicr = fm10k_read_reg(hw, FM10K_EICR);
1152 	fm10k_write_reg(hw, FM10K_EICR, eicr & (FM10K_EICR_MAILBOX |
1153 						FM10K_EICR_SWITCHREADY |
1154 						FM10K_EICR_SWITCHNOTREADY));
1155 
1156 	/* report any faults found to the message log */
1157 	fm10k_report_fault(interface, eicr);
1158 
1159 	/* reset any queues disabled due to receiver overrun */
1160 	fm10k_reset_drop_on_empty(interface, eicr);
1161 
1162 	/* service mailboxes */
1163 	if (fm10k_mbx_trylock(interface)) {
1164 		err = mbx->ops.process(hw, mbx);
1165 		/* handle VFLRE events */
1166 		fm10k_iov_event(interface);
1167 		fm10k_mbx_unlock(interface);
1168 	}
1169 
1170 	if (err == FM10K_ERR_RESET_REQUESTED)
1171 		interface->flags |= FM10K_FLAG_RESET_REQUESTED;
1172 
1173 	/* if switch toggled state we should reset GLORTs */
1174 	if (eicr & FM10K_EICR_SWITCHNOTREADY) {
1175 		/* force link down for at least 4 seconds */
1176 		interface->link_down_event = jiffies + (4 * HZ);
1177 		set_bit(__FM10K_LINK_DOWN, &interface->state);
1178 
1179 		/* reset dglort_map back to no config */
1180 		hw->mac.dglort_map = FM10K_DGLORTMAP_NONE;
1181 	}
1182 
1183 	/* we should validate host state after interrupt event */
1184 	hw->mac.get_host_state = true;
1185 
1186 	/* validate host state, and handle VF mailboxes in the service task */
1187 	fm10k_service_event_schedule(interface);
1188 
1189 	/* re-enable mailbox interrupt and indicate 20us delay */
1190 	fm10k_write_reg(hw, FM10K_ITR(FM10K_MBX_VECTOR),
1191 			(FM10K_MBX_INT_DELAY >> hw->mac.itr_scale) |
1192 			FM10K_ITR_ENABLE);
1193 
1194 	return IRQ_HANDLED;
1195 }
1196 
1197 void fm10k_mbx_free_irq(struct fm10k_intfc *interface)
1198 {
1199 	struct fm10k_hw *hw = &interface->hw;
1200 	struct msix_entry *entry;
1201 	int itr_reg;
1202 
1203 	/* no mailbox IRQ to free if MSI-X is not enabled */
1204 	if (!interface->msix_entries)
1205 		return;
1206 
1207 	entry = &interface->msix_entries[FM10K_MBX_VECTOR];
1208 
1209 	/* disconnect the mailbox */
1210 	hw->mbx.ops.disconnect(hw, &hw->mbx);
1211 
1212 	/* disable Mailbox cause */
1213 	if (hw->mac.type == fm10k_mac_pf) {
1214 		fm10k_write_reg(hw, FM10K_EIMR,
1215 				FM10K_EIMR_DISABLE(PCA_FAULT) |
1216 				FM10K_EIMR_DISABLE(FUM_FAULT) |
1217 				FM10K_EIMR_DISABLE(MAILBOX) |
1218 				FM10K_EIMR_DISABLE(SWITCHREADY) |
1219 				FM10K_EIMR_DISABLE(SWITCHNOTREADY) |
1220 				FM10K_EIMR_DISABLE(SRAMERROR) |
1221 				FM10K_EIMR_DISABLE(VFLR) |
1222 				FM10K_EIMR_DISABLE(MAXHOLDTIME));
1223 		itr_reg = FM10K_ITR(FM10K_MBX_VECTOR);
1224 	} else {
1225 		itr_reg = FM10K_VFITR(FM10K_MBX_VECTOR);
1226 	}
1227 
1228 	fm10k_write_reg(hw, itr_reg, FM10K_ITR_MASK_SET);
1229 
1230 	free_irq(entry->vector, interface);
1231 }
1232 
1233 static s32 fm10k_mbx_mac_addr(struct fm10k_hw *hw, u32 **results,
1234 			      struct fm10k_mbx_info *mbx)
1235 {
1236 	bool vlan_override = hw->mac.vlan_override;
1237 	u16 default_vid = hw->mac.default_vid;
1238 	struct fm10k_intfc *interface;
1239 	s32 err;
1240 
1241 	err = fm10k_msg_mac_vlan_vf(hw, results, mbx);
1242 	if (err)
1243 		return err;
1244 
1245 	interface = container_of(hw, struct fm10k_intfc, hw);
1246 
1247 	/* MAC was changed so we need reset */
1248 	if (is_valid_ether_addr(hw->mac.perm_addr) &&
1249 	    !ether_addr_equal(hw->mac.perm_addr, hw->mac.addr))
1250 		interface->flags |= FM10K_FLAG_RESET_REQUESTED;
1251 
1252 	/* VLAN override was changed, or default VLAN changed */
1253 	if ((vlan_override != hw->mac.vlan_override) ||
1254 	    (default_vid != hw->mac.default_vid))
1255 		interface->flags |= FM10K_FLAG_RESET_REQUESTED;
1256 
1257 	return 0;
1258 }
1259 
1260 /* generic error handler for mailbox issues */
1261 static s32 fm10k_mbx_error(struct fm10k_hw *hw, u32 **results,
1262 			   struct fm10k_mbx_info __always_unused *mbx)
1263 {
1264 	struct fm10k_intfc *interface;
1265 	struct pci_dev *pdev;
1266 
1267 	interface = container_of(hw, struct fm10k_intfc, hw);
1268 	pdev = interface->pdev;
1269 
1270 	dev_err(&pdev->dev, "Unknown message ID %u\n",
1271 		**results & FM10K_TLV_ID_MASK);
1272 
1273 	return 0;
1274 }
1275 
1276 static const struct fm10k_msg_data vf_mbx_data[] = {
1277 	FM10K_TLV_MSG_TEST_HANDLER(fm10k_tlv_msg_test),
1278 	FM10K_VF_MSG_MAC_VLAN_HANDLER(fm10k_mbx_mac_addr),
1279 	FM10K_VF_MSG_LPORT_STATE_HANDLER(fm10k_msg_lport_state_vf),
1280 	FM10K_TLV_MSG_ERROR_HANDLER(fm10k_mbx_error),
1281 };
1282 
1283 static int fm10k_mbx_request_irq_vf(struct fm10k_intfc *interface)
1284 {
1285 	struct msix_entry *entry = &interface->msix_entries[FM10K_MBX_VECTOR];
1286 	struct net_device *dev = interface->netdev;
1287 	struct fm10k_hw *hw = &interface->hw;
1288 	int err;
1289 
1290 	/* Use timer0 for interrupt moderation on the mailbox */
1291 	u32 itr = entry->entry | FM10K_INT_MAP_TIMER0;
1292 
1293 	/* register mailbox handlers */
1294 	err = hw->mbx.ops.register_handlers(&hw->mbx, vf_mbx_data);
1295 	if (err)
1296 		return err;
1297 
1298 	/* request the IRQ */
1299 	err = request_irq(entry->vector, fm10k_msix_mbx_vf, 0,
1300 			  dev->name, interface);
1301 	if (err) {
1302 		netif_err(interface, probe, dev,
1303 			  "request_irq for msix_mbx failed: %d\n", err);
1304 		return err;
1305 	}
1306 
1307 	/* map all of the interrupt sources */
1308 	fm10k_write_reg(hw, FM10K_VFINT_MAP, itr);
1309 
1310 	/* enable interrupt */
1311 	fm10k_write_reg(hw, FM10K_VFITR(entry->entry), FM10K_ITR_ENABLE);
1312 
1313 	return 0;
1314 }
1315 
1316 static s32 fm10k_lport_map(struct fm10k_hw *hw, u32 **results,
1317 			   struct fm10k_mbx_info *mbx)
1318 {
1319 	struct fm10k_intfc *interface;
1320 	u32 dglort_map = hw->mac.dglort_map;
1321 	s32 err;
1322 
1323 	interface = container_of(hw, struct fm10k_intfc, hw);
1324 
1325 	err = fm10k_msg_err_pf(hw, results, mbx);
1326 	if (!err && hw->swapi.status) {
1327 		/* force link down for a reasonable delay */
1328 		interface->link_down_event = jiffies + (2 * HZ);
1329 		set_bit(__FM10K_LINK_DOWN, &interface->state);
1330 
1331 		/* reset dglort_map back to no config */
1332 		hw->mac.dglort_map = FM10K_DGLORTMAP_NONE;
1333 
1334 		fm10k_service_event_schedule(interface);
1335 
1336 		/* prevent overloading kernel message buffer */
1337 		if (interface->lport_map_failed)
1338 			return 0;
1339 
1340 		interface->lport_map_failed = true;
1341 
1342 		if (hw->swapi.status == FM10K_MSG_ERR_PEP_NOT_SCHEDULED)
1343 			dev_warn(&interface->pdev->dev,
1344 				 "cannot obtain link because the host interface is configured for a PCIe host interface bandwidth of zero\n");
1345 		dev_warn(&interface->pdev->dev,
1346 			 "request logical port map failed: %d\n",
1347 			 hw->swapi.status);
1348 
1349 		return 0;
1350 	}
1351 
1352 	err = fm10k_msg_lport_map_pf(hw, results, mbx);
1353 	if (err)
1354 		return err;
1355 
1356 	interface->lport_map_failed = false;
1357 
1358 	/* we need to reset if port count was just updated */
1359 	if (dglort_map != hw->mac.dglort_map)
1360 		interface->flags |= FM10K_FLAG_RESET_REQUESTED;
1361 
1362 	return 0;
1363 }
1364 
1365 static s32 fm10k_update_pvid(struct fm10k_hw *hw, u32 **results,
1366 			     struct fm10k_mbx_info __always_unused *mbx)
1367 {
1368 	struct fm10k_intfc *interface;
1369 	u16 glort, pvid;
1370 	u32 pvid_update;
1371 	s32 err;
1372 
1373 	err = fm10k_tlv_attr_get_u32(results[FM10K_PF_ATTR_ID_UPDATE_PVID],
1374 				     &pvid_update);
1375 	if (err)
1376 		return err;
1377 
1378 	/* extract values from the pvid update */
1379 	glort = FM10K_MSG_HDR_FIELD_GET(pvid_update, UPDATE_PVID_GLORT);
1380 	pvid = FM10K_MSG_HDR_FIELD_GET(pvid_update, UPDATE_PVID_PVID);
1381 
1382 	/* if glort is not valid return error */
1383 	if (!fm10k_glort_valid_pf(hw, glort))
1384 		return FM10K_ERR_PARAM;
1385 
1386 	/* verify VLAN ID is valid */
1387 	if (pvid >= FM10K_VLAN_TABLE_VID_MAX)
1388 		return FM10K_ERR_PARAM;
1389 
1390 	interface = container_of(hw, struct fm10k_intfc, hw);
1391 
1392 	/* check to see if this belongs to one of the VFs */
1393 	err = fm10k_iov_update_pvid(interface, glort, pvid);
1394 	if (!err)
1395 		return 0;
1396 
1397 	/* we need to reset if default VLAN was just updated */
1398 	if (pvid != hw->mac.default_vid)
1399 		interface->flags |= FM10K_FLAG_RESET_REQUESTED;
1400 
1401 	hw->mac.default_vid = pvid;
1402 
1403 	return 0;
1404 }
1405 
1406 static const struct fm10k_msg_data pf_mbx_data[] = {
1407 	FM10K_PF_MSG_ERR_HANDLER(XCAST_MODES, fm10k_msg_err_pf),
1408 	FM10K_PF_MSG_ERR_HANDLER(UPDATE_MAC_FWD_RULE, fm10k_msg_err_pf),
1409 	FM10K_PF_MSG_LPORT_MAP_HANDLER(fm10k_lport_map),
1410 	FM10K_PF_MSG_ERR_HANDLER(LPORT_CREATE, fm10k_msg_err_pf),
1411 	FM10K_PF_MSG_ERR_HANDLER(LPORT_DELETE, fm10k_msg_err_pf),
1412 	FM10K_PF_MSG_UPDATE_PVID_HANDLER(fm10k_update_pvid),
1413 	FM10K_TLV_MSG_ERROR_HANDLER(fm10k_mbx_error),
1414 };
1415 
1416 static int fm10k_mbx_request_irq_pf(struct fm10k_intfc *interface)
1417 {
1418 	struct msix_entry *entry = &interface->msix_entries[FM10K_MBX_VECTOR];
1419 	struct net_device *dev = interface->netdev;
1420 	struct fm10k_hw *hw = &interface->hw;
1421 	int err;
1422 
1423 	/* Use timer0 for interrupt moderation on the mailbox */
1424 	u32 mbx_itr = entry->entry | FM10K_INT_MAP_TIMER0;
1425 	u32 other_itr = entry->entry | FM10K_INT_MAP_IMMEDIATE;
1426 
1427 	/* register mailbox handlers */
1428 	err = hw->mbx.ops.register_handlers(&hw->mbx, pf_mbx_data);
1429 	if (err)
1430 		return err;
1431 
1432 	/* request the IRQ */
1433 	err = request_irq(entry->vector, fm10k_msix_mbx_pf, 0,
1434 			  dev->name, interface);
1435 	if (err) {
1436 		netif_err(interface, probe, dev,
1437 			  "request_irq for msix_mbx failed: %d\n", err);
1438 		return err;
1439 	}
1440 
1441 	/* Enable interrupts w/ no moderation for "other" interrupts */
1442 	fm10k_write_reg(hw, FM10K_INT_MAP(fm10k_int_pcie_fault), other_itr);
1443 	fm10k_write_reg(hw, FM10K_INT_MAP(fm10k_int_switch_up_down), other_itr);
1444 	fm10k_write_reg(hw, FM10K_INT_MAP(fm10k_int_sram), other_itr);
1445 	fm10k_write_reg(hw, FM10K_INT_MAP(fm10k_int_max_hold_time), other_itr);
1446 	fm10k_write_reg(hw, FM10K_INT_MAP(fm10k_int_vflr), other_itr);
1447 
1448 	/* Enable interrupts w/ moderation for mailbox */
1449 	fm10k_write_reg(hw, FM10K_INT_MAP(fm10k_int_mailbox), mbx_itr);
1450 
1451 	/* Enable individual interrupt causes */
1452 	fm10k_write_reg(hw, FM10K_EIMR, FM10K_EIMR_ENABLE(PCA_FAULT) |
1453 					FM10K_EIMR_ENABLE(FUM_FAULT) |
1454 					FM10K_EIMR_ENABLE(MAILBOX) |
1455 					FM10K_EIMR_ENABLE(SWITCHREADY) |
1456 					FM10K_EIMR_ENABLE(SWITCHNOTREADY) |
1457 					FM10K_EIMR_ENABLE(SRAMERROR) |
1458 					FM10K_EIMR_ENABLE(VFLR) |
1459 					FM10K_EIMR_ENABLE(MAXHOLDTIME));
1460 
1461 	/* enable interrupt */
1462 	fm10k_write_reg(hw, FM10K_ITR(entry->entry), FM10K_ITR_ENABLE);
1463 
1464 	return 0;
1465 }
1466 
1467 int fm10k_mbx_request_irq(struct fm10k_intfc *interface)
1468 {
1469 	struct fm10k_hw *hw = &interface->hw;
1470 	int err;
1471 
1472 	/* enable Mailbox cause */
1473 	if (hw->mac.type == fm10k_mac_pf)
1474 		err = fm10k_mbx_request_irq_pf(interface);
1475 	else
1476 		err = fm10k_mbx_request_irq_vf(interface);
1477 	if (err)
1478 		return err;
1479 
1480 	/* connect mailbox */
1481 	err = hw->mbx.ops.connect(hw, &hw->mbx);
1482 
1483 	/* if the mailbox failed to connect, then free IRQ */
1484 	if (err)
1485 		fm10k_mbx_free_irq(interface);
1486 
1487 	return err;
1488 }
1489 
1490 /**
1491  * fm10k_qv_free_irq - release interrupts associated with queue vectors
1492  * @interface: board private structure
1493  *
1494  * Release all interrupts associated with this interface
1495  **/
1496 void fm10k_qv_free_irq(struct fm10k_intfc *interface)
1497 {
1498 	int vector = interface->num_q_vectors;
1499 	struct fm10k_hw *hw = &interface->hw;
1500 	struct msix_entry *entry;
1501 
1502 	entry = &interface->msix_entries[NON_Q_VECTORS(hw) + vector];
1503 
1504 	while (vector) {
1505 		struct fm10k_q_vector *q_vector;
1506 
1507 		vector--;
1508 		entry--;
1509 		q_vector = interface->q_vector[vector];
1510 
1511 		if (!q_vector->tx.count && !q_vector->rx.count)
1512 			continue;
1513 
1514 		/* clear the affinity_mask in the IRQ descriptor */
1515 		irq_set_affinity_hint(entry->vector, NULL);
1516 
1517 		/* disable interrupts */
1518 		writel(FM10K_ITR_MASK_SET, q_vector->itr);
1519 
1520 		free_irq(entry->vector, q_vector);
1521 	}
1522 }
1523 
1524 /**
1525  * fm10k_qv_request_irq - initialize interrupts for queue vectors
1526  * @interface: board private structure
1527  *
1528  * Attempts to configure interrupts using the best available
1529  * capabilities of the hardware and kernel.
1530  **/
1531 int fm10k_qv_request_irq(struct fm10k_intfc *interface)
1532 {
1533 	struct net_device *dev = interface->netdev;
1534 	struct fm10k_hw *hw = &interface->hw;
1535 	struct msix_entry *entry;
1536 	int ri = 0, ti = 0;
1537 	int vector, err;
1538 
1539 	entry = &interface->msix_entries[NON_Q_VECTORS(hw)];
1540 
1541 	for (vector = 0; vector < interface->num_q_vectors; vector++) {
1542 		struct fm10k_q_vector *q_vector = interface->q_vector[vector];
1543 
1544 		/* name the vector */
1545 		if (q_vector->tx.count && q_vector->rx.count) {
1546 			snprintf(q_vector->name, sizeof(q_vector->name) - 1,
1547 				 "%s-TxRx-%d", dev->name, ri++);
1548 			ti++;
1549 		} else if (q_vector->rx.count) {
1550 			snprintf(q_vector->name, sizeof(q_vector->name) - 1,
1551 				 "%s-rx-%d", dev->name, ri++);
1552 		} else if (q_vector->tx.count) {
1553 			snprintf(q_vector->name, sizeof(q_vector->name) - 1,
1554 				 "%s-tx-%d", dev->name, ti++);
1555 		} else {
1556 			/* skip this unused q_vector */
1557 			continue;
1558 		}
1559 
1560 		/* Assign ITR register to q_vector */
1561 		q_vector->itr = (hw->mac.type == fm10k_mac_pf) ?
1562 				&interface->uc_addr[FM10K_ITR(entry->entry)] :
1563 				&interface->uc_addr[FM10K_VFITR(entry->entry)];
1564 
1565 		/* request the IRQ */
1566 		err = request_irq(entry->vector, &fm10k_msix_clean_rings, 0,
1567 				  q_vector->name, q_vector);
1568 		if (err) {
1569 			netif_err(interface, probe, dev,
1570 				  "request_irq failed for MSIX interrupt Error: %d\n",
1571 				  err);
1572 			goto err_out;
1573 		}
1574 
1575 		/* assign the mask for this irq */
1576 		irq_set_affinity_hint(entry->vector, &q_vector->affinity_mask);
1577 
1578 		/* Enable q_vector */
1579 		writel(FM10K_ITR_ENABLE, q_vector->itr);
1580 
1581 		entry++;
1582 	}
1583 
1584 	return 0;
1585 
1586 err_out:
1587 	/* wind through the ring freeing all entries and vectors */
1588 	while (vector) {
1589 		struct fm10k_q_vector *q_vector;
1590 
1591 		entry--;
1592 		vector--;
1593 		q_vector = interface->q_vector[vector];
1594 
1595 		if (!q_vector->tx.count && !q_vector->rx.count)
1596 			continue;
1597 
1598 		/* clear the affinity_mask in the IRQ descriptor */
1599 		irq_set_affinity_hint(entry->vector, NULL);
1600 
1601 		/* disable interrupts */
1602 		writel(FM10K_ITR_MASK_SET, q_vector->itr);
1603 
1604 		free_irq(entry->vector, q_vector);
1605 	}
1606 
1607 	return err;
1608 }
1609 
1610 void fm10k_up(struct fm10k_intfc *interface)
1611 {
1612 	struct fm10k_hw *hw = &interface->hw;
1613 
1614 	/* Enable Tx/Rx DMA */
1615 	hw->mac.ops.start_hw(hw);
1616 
1617 	/* configure Tx descriptor rings */
1618 	fm10k_configure_tx(interface);
1619 
1620 	/* configure Rx descriptor rings */
1621 	fm10k_configure_rx(interface);
1622 
1623 	/* configure interrupts */
1624 	hw->mac.ops.update_int_moderator(hw);
1625 
1626 	/* enable statistics capture again */
1627 	clear_bit(__FM10K_UPDATING_STATS, &interface->state);
1628 
1629 	/* clear down bit to indicate we are ready to go */
1630 	clear_bit(__FM10K_DOWN, &interface->state);
1631 
1632 	/* enable polling cleanups */
1633 	fm10k_napi_enable_all(interface);
1634 
1635 	/* re-establish Rx filters */
1636 	fm10k_restore_rx_state(interface);
1637 
1638 	/* enable transmits */
1639 	netif_tx_start_all_queues(interface->netdev);
1640 
1641 	/* kick off the service timer now */
1642 	hw->mac.get_host_state = true;
1643 	mod_timer(&interface->service_timer, jiffies);
1644 }
1645 
1646 static void fm10k_napi_disable_all(struct fm10k_intfc *interface)
1647 {
1648 	struct fm10k_q_vector *q_vector;
1649 	int q_idx;
1650 
1651 	for (q_idx = 0; q_idx < interface->num_q_vectors; q_idx++) {
1652 		q_vector = interface->q_vector[q_idx];
1653 		napi_disable(&q_vector->napi);
1654 	}
1655 }
1656 
1657 void fm10k_down(struct fm10k_intfc *interface)
1658 {
1659 	struct net_device *netdev = interface->netdev;
1660 	struct fm10k_hw *hw = &interface->hw;
1661 	int err, i = 0, count = 0;
1662 
1663 	/* signal that we are down to the interrupt handler and service task */
1664 	if (test_and_set_bit(__FM10K_DOWN, &interface->state))
1665 		return;
1666 
1667 	/* call carrier off first to avoid false dev_watchdog timeouts */
1668 	netif_carrier_off(netdev);
1669 
1670 	/* disable transmits */
1671 	netif_tx_stop_all_queues(netdev);
1672 	netif_tx_disable(netdev);
1673 
1674 	/* reset Rx filters */
1675 	fm10k_reset_rx_state(interface);
1676 
1677 	/* disable polling routines */
1678 	fm10k_napi_disable_all(interface);
1679 
1680 	/* capture stats one last time before stopping interface */
1681 	fm10k_update_stats(interface);
1682 
1683 	/* prevent updating statistics while we're down */
1684 	while (test_and_set_bit(__FM10K_UPDATING_STATS, &interface->state))
1685 		usleep_range(1000, 2000);
1686 
1687 	/* skip waiting for TX DMA if we lost PCIe link */
1688 	if (FM10K_REMOVED(hw->hw_addr))
1689 		goto skip_tx_dma_drain;
1690 
1691 	/* In some rare circumstances it can take a while for Tx queues to
1692 	 * quiesce and be fully disabled. Attempt to .stop_hw() first, and
1693 	 * then if we get ERR_REQUESTS_PENDING, go ahead and wait in a loop
1694 	 * until the Tx queues have emptied, or until a number of retries. If
1695 	 * we fail to clear within the retry loop, we will issue a warning
1696 	 * indicating that Tx DMA is probably hung. Note this means we call
1697 	 * .stop_hw() twice but this shouldn't cause any problems.
1698 	 */
1699 	err = hw->mac.ops.stop_hw(hw);
1700 	if (err != FM10K_ERR_REQUESTS_PENDING)
1701 		goto skip_tx_dma_drain;
1702 
1703 #define TX_DMA_DRAIN_RETRIES 25
1704 	for (count = 0; count < TX_DMA_DRAIN_RETRIES; count++) {
1705 		usleep_range(10000, 20000);
1706 
1707 		/* start checking at the last ring to have pending Tx */
1708 		for (; i < interface->num_tx_queues; i++)
1709 			if (fm10k_get_tx_pending(interface->tx_ring[i], false))
1710 				break;
1711 
1712 		/* if all the queues are drained, we can break now */
1713 		if (i == interface->num_tx_queues)
1714 			break;
1715 	}
1716 
1717 	if (count >= TX_DMA_DRAIN_RETRIES)
1718 		dev_err(&interface->pdev->dev,
1719 			"Tx queues failed to drain after %d tries. Tx DMA is probably hung.\n",
1720 			count);
1721 skip_tx_dma_drain:
1722 	/* Disable DMA engine for Tx/Rx */
1723 	err = hw->mac.ops.stop_hw(hw);
1724 	if (err == FM10K_ERR_REQUESTS_PENDING)
1725 		dev_err(&interface->pdev->dev,
1726 			"due to pending requests hw was not shut down gracefully\n");
1727 	else if (err)
1728 		dev_err(&interface->pdev->dev, "stop_hw failed: %d\n", err);
1729 
1730 	/* free any buffers still on the rings */
1731 	fm10k_clean_all_tx_rings(interface);
1732 	fm10k_clean_all_rx_rings(interface);
1733 }
1734 
1735 /**
1736  * fm10k_sw_init - Initialize general software structures
1737  * @interface: host interface private structure to initialize
1738  *
1739  * fm10k_sw_init initializes the interface private data structure.
1740  * Fields are initialized based on PCI device information and
1741  * OS network device settings (MTU size).
1742  **/
1743 static int fm10k_sw_init(struct fm10k_intfc *interface,
1744 			 const struct pci_device_id *ent)
1745 {
1746 	const struct fm10k_info *fi = fm10k_info_tbl[ent->driver_data];
1747 	struct fm10k_hw *hw = &interface->hw;
1748 	struct pci_dev *pdev = interface->pdev;
1749 	struct net_device *netdev = interface->netdev;
1750 	u32 rss_key[FM10K_RSSRK_SIZE];
1751 	unsigned int rss;
1752 	int err;
1753 
1754 	/* initialize back pointer */
1755 	hw->back = interface;
1756 	hw->hw_addr = interface->uc_addr;
1757 
1758 	/* PCI config space info */
1759 	hw->vendor_id = pdev->vendor;
1760 	hw->device_id = pdev->device;
1761 	hw->revision_id = pdev->revision;
1762 	hw->subsystem_vendor_id = pdev->subsystem_vendor;
1763 	hw->subsystem_device_id = pdev->subsystem_device;
1764 
1765 	/* Setup hw api */
1766 	memcpy(&hw->mac.ops, fi->mac_ops, sizeof(hw->mac.ops));
1767 	hw->mac.type = fi->mac;
1768 
1769 	/* Setup IOV handlers */
1770 	if (fi->iov_ops)
1771 		memcpy(&hw->iov.ops, fi->iov_ops, sizeof(hw->iov.ops));
1772 
1773 	/* Set common capability flags and settings */
1774 	rss = min_t(int, FM10K_MAX_RSS_INDICES, num_online_cpus());
1775 	interface->ring_feature[RING_F_RSS].limit = rss;
1776 	fi->get_invariants(hw);
1777 
1778 	/* pick up the PCIe bus settings for reporting later */
1779 	if (hw->mac.ops.get_bus_info)
1780 		hw->mac.ops.get_bus_info(hw);
1781 
1782 	/* limit the usable DMA range */
1783 	if (hw->mac.ops.set_dma_mask)
1784 		hw->mac.ops.set_dma_mask(hw, dma_get_mask(&pdev->dev));
1785 
1786 	/* update netdev with DMA restrictions */
1787 	if (dma_get_mask(&pdev->dev) > DMA_BIT_MASK(32)) {
1788 		netdev->features |= NETIF_F_HIGHDMA;
1789 		netdev->vlan_features |= NETIF_F_HIGHDMA;
1790 	}
1791 
1792 	/* delay any future reset requests */
1793 	interface->last_reset = jiffies + (10 * HZ);
1794 
1795 	/* reset and initialize the hardware so it is in a known state */
1796 	err = hw->mac.ops.reset_hw(hw);
1797 	if (err) {
1798 		dev_err(&pdev->dev, "reset_hw failed: %d\n", err);
1799 		return err;
1800 	}
1801 
1802 	err = hw->mac.ops.init_hw(hw);
1803 	if (err) {
1804 		dev_err(&pdev->dev, "init_hw failed: %d\n", err);
1805 		return err;
1806 	}
1807 
1808 	/* initialize hardware statistics */
1809 	hw->mac.ops.update_hw_stats(hw, &interface->stats);
1810 
1811 	/* Set upper limit on IOV VFs that can be allocated */
1812 	pci_sriov_set_totalvfs(pdev, hw->iov.total_vfs);
1813 
1814 	/* Start with random Ethernet address */
1815 	eth_random_addr(hw->mac.addr);
1816 
1817 	/* Initialize MAC address from hardware */
1818 	err = hw->mac.ops.read_mac_addr(hw);
1819 	if (err) {
1820 		dev_warn(&pdev->dev,
1821 			 "Failed to obtain MAC address defaulting to random\n");
1822 		/* tag address assignment as random */
1823 		netdev->addr_assign_type |= NET_ADDR_RANDOM;
1824 	}
1825 
1826 	ether_addr_copy(netdev->dev_addr, hw->mac.addr);
1827 	ether_addr_copy(netdev->perm_addr, hw->mac.addr);
1828 
1829 	if (!is_valid_ether_addr(netdev->perm_addr)) {
1830 		dev_err(&pdev->dev, "Invalid MAC Address\n");
1831 		return -EIO;
1832 	}
1833 
1834 	/* initialize DCBNL interface */
1835 	fm10k_dcbnl_set_ops(netdev);
1836 
1837 	/* set default ring sizes */
1838 	interface->tx_ring_count = FM10K_DEFAULT_TXD;
1839 	interface->rx_ring_count = FM10K_DEFAULT_RXD;
1840 
1841 	/* set default interrupt moderation */
1842 	interface->tx_itr = FM10K_TX_ITR_DEFAULT;
1843 	interface->rx_itr = FM10K_ITR_ADAPTIVE | FM10K_RX_ITR_DEFAULT;
1844 
1845 	/* initialize udp port lists */
1846 	INIT_LIST_HEAD(&interface->vxlan_port);
1847 	INIT_LIST_HEAD(&interface->geneve_port);
1848 
1849 	netdev_rss_key_fill(rss_key, sizeof(rss_key));
1850 	memcpy(interface->rssrk, rss_key, sizeof(rss_key));
1851 
1852 	/* Start off interface as being down */
1853 	set_bit(__FM10K_DOWN, &interface->state);
1854 	set_bit(__FM10K_UPDATING_STATS, &interface->state);
1855 
1856 	return 0;
1857 }
1858 
1859 static void fm10k_slot_warn(struct fm10k_intfc *interface)
1860 {
1861 	enum pcie_link_width width = PCIE_LNK_WIDTH_UNKNOWN;
1862 	enum pci_bus_speed speed = PCI_SPEED_UNKNOWN;
1863 	struct fm10k_hw *hw = &interface->hw;
1864 	int max_gts = 0, expected_gts = 0;
1865 
1866 	if (pcie_get_minimum_link(interface->pdev, &speed, &width) ||
1867 	    speed == PCI_SPEED_UNKNOWN || width == PCIE_LNK_WIDTH_UNKNOWN) {
1868 		dev_warn(&interface->pdev->dev,
1869 			 "Unable to determine PCI Express bandwidth.\n");
1870 		return;
1871 	}
1872 
1873 	switch (speed) {
1874 	case PCIE_SPEED_2_5GT:
1875 		/* 8b/10b encoding reduces max throughput by 20% */
1876 		max_gts = 2 * width;
1877 		break;
1878 	case PCIE_SPEED_5_0GT:
1879 		/* 8b/10b encoding reduces max throughput by 20% */
1880 		max_gts = 4 * width;
1881 		break;
1882 	case PCIE_SPEED_8_0GT:
1883 		/* 128b/130b encoding has less than 2% impact on throughput */
1884 		max_gts = 8 * width;
1885 		break;
1886 	default:
1887 		dev_warn(&interface->pdev->dev,
1888 			 "Unable to determine PCI Express bandwidth.\n");
1889 		return;
1890 	}
1891 
1892 	dev_info(&interface->pdev->dev,
1893 		 "PCI Express bandwidth of %dGT/s available\n",
1894 		 max_gts);
1895 	dev_info(&interface->pdev->dev,
1896 		 "(Speed:%s, Width: x%d, Encoding Loss:%s, Payload:%s)\n",
1897 		 (speed == PCIE_SPEED_8_0GT ? "8.0GT/s" :
1898 		  speed == PCIE_SPEED_5_0GT ? "5.0GT/s" :
1899 		  speed == PCIE_SPEED_2_5GT ? "2.5GT/s" :
1900 		  "Unknown"),
1901 		 hw->bus.width,
1902 		 (speed == PCIE_SPEED_2_5GT ? "20%" :
1903 		  speed == PCIE_SPEED_5_0GT ? "20%" :
1904 		  speed == PCIE_SPEED_8_0GT ? "<2%" :
1905 		  "Unknown"),
1906 		 (hw->bus.payload == fm10k_bus_payload_128 ? "128B" :
1907 		  hw->bus.payload == fm10k_bus_payload_256 ? "256B" :
1908 		  hw->bus.payload == fm10k_bus_payload_512 ? "512B" :
1909 		  "Unknown"));
1910 
1911 	switch (hw->bus_caps.speed) {
1912 	case fm10k_bus_speed_2500:
1913 		/* 8b/10b encoding reduces max throughput by 20% */
1914 		expected_gts = 2 * hw->bus_caps.width;
1915 		break;
1916 	case fm10k_bus_speed_5000:
1917 		/* 8b/10b encoding reduces max throughput by 20% */
1918 		expected_gts = 4 * hw->bus_caps.width;
1919 		break;
1920 	case fm10k_bus_speed_8000:
1921 		/* 128b/130b encoding has less than 2% impact on throughput */
1922 		expected_gts = 8 * hw->bus_caps.width;
1923 		break;
1924 	default:
1925 		dev_warn(&interface->pdev->dev,
1926 			 "Unable to determine expected PCI Express bandwidth.\n");
1927 		return;
1928 	}
1929 
1930 	if (max_gts >= expected_gts)
1931 		return;
1932 
1933 	dev_warn(&interface->pdev->dev,
1934 		 "This device requires %dGT/s of bandwidth for optimal performance.\n",
1935 		 expected_gts);
1936 	dev_warn(&interface->pdev->dev,
1937 		 "A %sslot with x%d lanes is suggested.\n",
1938 		 (hw->bus_caps.speed == fm10k_bus_speed_2500 ? "2.5GT/s " :
1939 		  hw->bus_caps.speed == fm10k_bus_speed_5000 ? "5.0GT/s " :
1940 		  hw->bus_caps.speed == fm10k_bus_speed_8000 ? "8.0GT/s " : ""),
1941 		 hw->bus_caps.width);
1942 }
1943 
1944 /**
1945  * fm10k_probe - Device Initialization Routine
1946  * @pdev: PCI device information struct
1947  * @ent: entry in fm10k_pci_tbl
1948  *
1949  * Returns 0 on success, negative on failure
1950  *
1951  * fm10k_probe initializes an interface identified by a pci_dev structure.
1952  * The OS initialization, configuring of the interface private structure,
1953  * and a hardware reset occur.
1954  **/
1955 static int fm10k_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1956 {
1957 	struct net_device *netdev;
1958 	struct fm10k_intfc *interface;
1959 	int err;
1960 
1961 	if (pdev->error_state != pci_channel_io_normal) {
1962 		dev_err(&pdev->dev,
1963 			"PCI device still in an error state. Unable to load...\n");
1964 		return -EIO;
1965 	}
1966 
1967 	err = pci_enable_device_mem(pdev);
1968 	if (err) {
1969 		dev_err(&pdev->dev,
1970 			"PCI enable device failed: %d\n", err);
1971 		return err;
1972 	}
1973 
1974 	err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(48));
1975 	if (err)
1976 		err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
1977 	if (err) {
1978 		dev_err(&pdev->dev,
1979 			"DMA configuration failed: %d\n", err);
1980 		goto err_dma;
1981 	}
1982 
1983 	err = pci_request_mem_regions(pdev, fm10k_driver_name);
1984 	if (err) {
1985 		dev_err(&pdev->dev,
1986 			"pci_request_selected_regions failed: %d\n", err);
1987 		goto err_pci_reg;
1988 	}
1989 
1990 	pci_enable_pcie_error_reporting(pdev);
1991 
1992 	pci_set_master(pdev);
1993 	pci_save_state(pdev);
1994 
1995 	netdev = fm10k_alloc_netdev(fm10k_info_tbl[ent->driver_data]);
1996 	if (!netdev) {
1997 		err = -ENOMEM;
1998 		goto err_alloc_netdev;
1999 	}
2000 
2001 	SET_NETDEV_DEV(netdev, &pdev->dev);
2002 
2003 	interface = netdev_priv(netdev);
2004 	pci_set_drvdata(pdev, interface);
2005 
2006 	interface->netdev = netdev;
2007 	interface->pdev = pdev;
2008 
2009 	interface->uc_addr = ioremap(pci_resource_start(pdev, 0),
2010 				     FM10K_UC_ADDR_SIZE);
2011 	if (!interface->uc_addr) {
2012 		err = -EIO;
2013 		goto err_ioremap;
2014 	}
2015 
2016 	err = fm10k_sw_init(interface, ent);
2017 	if (err)
2018 		goto err_sw_init;
2019 
2020 	/* enable debugfs support */
2021 	fm10k_dbg_intfc_init(interface);
2022 
2023 	err = fm10k_init_queueing_scheme(interface);
2024 	if (err)
2025 		goto err_sw_init;
2026 
2027 	/* the mbx interrupt might attempt to schedule the service task, so we
2028 	 * must ensure it is disabled since we haven't yet requested the timer
2029 	 * or work item.
2030 	 */
2031 	set_bit(__FM10K_SERVICE_DISABLE, &interface->state);
2032 
2033 	err = fm10k_mbx_request_irq(interface);
2034 	if (err)
2035 		goto err_mbx_interrupt;
2036 
2037 	/* final check of hardware state before registering the interface */
2038 	err = fm10k_hw_ready(interface);
2039 	if (err)
2040 		goto err_register;
2041 
2042 	err = register_netdev(netdev);
2043 	if (err)
2044 		goto err_register;
2045 
2046 	/* carrier off reporting is important to ethtool even BEFORE open */
2047 	netif_carrier_off(netdev);
2048 
2049 	/* stop all the transmit queues from transmitting until link is up */
2050 	netif_tx_stop_all_queues(netdev);
2051 
2052 	/* Initialize service timer and service task late in order to avoid
2053 	 * cleanup issues.
2054 	 */
2055 	setup_timer(&interface->service_timer, &fm10k_service_timer,
2056 		    (unsigned long)interface);
2057 	INIT_WORK(&interface->service_task, fm10k_service_task);
2058 
2059 	/* kick off service timer now, even when interface is down */
2060 	mod_timer(&interface->service_timer, (HZ * 2) + jiffies);
2061 
2062 	/* print warning for non-optimal configurations */
2063 	fm10k_slot_warn(interface);
2064 
2065 	/* report MAC address for logging */
2066 	dev_info(&pdev->dev, "%pM\n", netdev->dev_addr);
2067 
2068 	/* enable SR-IOV after registering netdev to enforce PF/VF ordering */
2069 	fm10k_iov_configure(pdev, 0);
2070 
2071 	/* clear the service task disable bit to allow service task to start */
2072 	clear_bit(__FM10K_SERVICE_DISABLE, &interface->state);
2073 
2074 	return 0;
2075 
2076 err_register:
2077 	fm10k_mbx_free_irq(interface);
2078 err_mbx_interrupt:
2079 	fm10k_clear_queueing_scheme(interface);
2080 err_sw_init:
2081 	if (interface->sw_addr)
2082 		iounmap(interface->sw_addr);
2083 	iounmap(interface->uc_addr);
2084 err_ioremap:
2085 	free_netdev(netdev);
2086 err_alloc_netdev:
2087 	pci_release_mem_regions(pdev);
2088 err_pci_reg:
2089 err_dma:
2090 	pci_disable_device(pdev);
2091 	return err;
2092 }
2093 
2094 /**
2095  * fm10k_remove - Device Removal Routine
2096  * @pdev: PCI device information struct
2097  *
2098  * fm10k_remove is called by the PCI subsystem to alert the driver
2099  * that it should release a PCI device.  The could be caused by a
2100  * Hot-Plug event, or because the driver is going to be removed from
2101  * memory.
2102  **/
2103 static void fm10k_remove(struct pci_dev *pdev)
2104 {
2105 	struct fm10k_intfc *interface = pci_get_drvdata(pdev);
2106 	struct net_device *netdev = interface->netdev;
2107 
2108 	del_timer_sync(&interface->service_timer);
2109 
2110 	set_bit(__FM10K_SERVICE_DISABLE, &interface->state);
2111 	cancel_work_sync(&interface->service_task);
2112 
2113 	/* free netdev, this may bounce the interrupts due to setup_tc */
2114 	if (netdev->reg_state == NETREG_REGISTERED)
2115 		unregister_netdev(netdev);
2116 
2117 	/* release VFs */
2118 	fm10k_iov_disable(pdev);
2119 
2120 	/* disable mailbox interrupt */
2121 	fm10k_mbx_free_irq(interface);
2122 
2123 	/* free interrupts */
2124 	fm10k_clear_queueing_scheme(interface);
2125 
2126 	/* remove any debugfs interfaces */
2127 	fm10k_dbg_intfc_exit(interface);
2128 
2129 	if (interface->sw_addr)
2130 		iounmap(interface->sw_addr);
2131 	iounmap(interface->uc_addr);
2132 
2133 	free_netdev(netdev);
2134 
2135 	pci_release_mem_regions(pdev);
2136 
2137 	pci_disable_pcie_error_reporting(pdev);
2138 
2139 	pci_disable_device(pdev);
2140 }
2141 
2142 static void fm10k_prepare_suspend(struct fm10k_intfc *interface)
2143 {
2144 	/* the watchdog task reads from registers, which might appear like
2145 	 * a surprise remove if the PCIe device is disabled while we're
2146 	 * stopped. We stop the watchdog task until after we resume software
2147 	 * activity.
2148 	 */
2149 	set_bit(__FM10K_SERVICE_DISABLE, &interface->state);
2150 	cancel_work_sync(&interface->service_task);
2151 
2152 	fm10k_prepare_for_reset(interface);
2153 }
2154 
2155 static int fm10k_handle_resume(struct fm10k_intfc *interface)
2156 {
2157 	struct fm10k_hw *hw = &interface->hw;
2158 	int err;
2159 
2160 	/* reset statistics starting values */
2161 	hw->mac.ops.rebind_hw_stats(hw, &interface->stats);
2162 
2163 	err = fm10k_handle_reset(interface);
2164 	if (err)
2165 		return err;
2166 
2167 	/* assume host is not ready, to prevent race with watchdog in case we
2168 	 * actually don't have connection to the switch
2169 	 */
2170 	interface->host_ready = false;
2171 	fm10k_watchdog_host_not_ready(interface);
2172 
2173 	/* force link to stay down for a second to prevent link flutter */
2174 	interface->link_down_event = jiffies + (HZ);
2175 	set_bit(__FM10K_LINK_DOWN, &interface->state);
2176 
2177 	/* clear the service task disable bit to allow service task to start */
2178 	clear_bit(__FM10K_SERVICE_DISABLE, &interface->state);
2179 	fm10k_service_event_schedule(interface);
2180 
2181 	return err;
2182 }
2183 
2184 #ifdef CONFIG_PM
2185 /**
2186  * fm10k_resume - Restore device to pre-sleep state
2187  * @pdev: PCI device information struct
2188  *
2189  * fm10k_resume is called after the system has powered back up from a sleep
2190  * state and is ready to resume operation.  This function is meant to restore
2191  * the device back to its pre-sleep state.
2192  **/
2193 static int fm10k_resume(struct pci_dev *pdev)
2194 {
2195 	struct fm10k_intfc *interface = pci_get_drvdata(pdev);
2196 	struct net_device *netdev = interface->netdev;
2197 	struct fm10k_hw *hw = &interface->hw;
2198 	u32 err;
2199 
2200 	pci_set_power_state(pdev, PCI_D0);
2201 	pci_restore_state(pdev);
2202 
2203 	/* pci_restore_state clears dev->state_saved so call
2204 	 * pci_save_state to restore it.
2205 	 */
2206 	pci_save_state(pdev);
2207 
2208 	err = pci_enable_device_mem(pdev);
2209 	if (err) {
2210 		dev_err(&pdev->dev, "Cannot enable PCI device from suspend\n");
2211 		return err;
2212 	}
2213 	pci_set_master(pdev);
2214 
2215 	pci_wake_from_d3(pdev, false);
2216 
2217 	/* refresh hw_addr in case it was dropped */
2218 	hw->hw_addr = interface->uc_addr;
2219 
2220 	err = fm10k_handle_resume(interface);
2221 	if (err)
2222 		return err;
2223 
2224 	netif_device_attach(netdev);
2225 
2226 	return 0;
2227 }
2228 
2229 /**
2230  * fm10k_suspend - Prepare the device for a system sleep state
2231  * @pdev: PCI device information struct
2232  *
2233  * fm10k_suspend is meant to shutdown the device prior to the system entering
2234  * a sleep state.  The fm10k hardware does not support wake on lan so the
2235  * driver simply needs to shut down the device so it is in a low power state.
2236  **/
2237 static int fm10k_suspend(struct pci_dev *pdev,
2238 			 pm_message_t __always_unused state)
2239 {
2240 	struct fm10k_intfc *interface = pci_get_drvdata(pdev);
2241 	struct net_device *netdev = interface->netdev;
2242 	int err = 0;
2243 
2244 	netif_device_detach(netdev);
2245 
2246 	fm10k_prepare_suspend(interface);
2247 
2248 	err = pci_save_state(pdev);
2249 	if (err)
2250 		return err;
2251 
2252 	pci_disable_device(pdev);
2253 	pci_wake_from_d3(pdev, false);
2254 	pci_set_power_state(pdev, PCI_D3hot);
2255 
2256 	return 0;
2257 }
2258 
2259 #endif /* CONFIG_PM */
2260 /**
2261  * fm10k_io_error_detected - called when PCI error is detected
2262  * @pdev: Pointer to PCI device
2263  * @state: The current pci connection state
2264  *
2265  * This function is called after a PCI bus error affecting
2266  * this device has been detected.
2267  */
2268 static pci_ers_result_t fm10k_io_error_detected(struct pci_dev *pdev,
2269 						pci_channel_state_t state)
2270 {
2271 	struct fm10k_intfc *interface = pci_get_drvdata(pdev);
2272 	struct net_device *netdev = interface->netdev;
2273 
2274 	netif_device_detach(netdev);
2275 
2276 	if (state == pci_channel_io_perm_failure)
2277 		return PCI_ERS_RESULT_DISCONNECT;
2278 
2279 	fm10k_prepare_suspend(interface);
2280 
2281 	/* Request a slot reset. */
2282 	return PCI_ERS_RESULT_NEED_RESET;
2283 }
2284 
2285 /**
2286  * fm10k_io_slot_reset - called after the pci bus has been reset.
2287  * @pdev: Pointer to PCI device
2288  *
2289  * Restart the card from scratch, as if from a cold-boot.
2290  */
2291 static pci_ers_result_t fm10k_io_slot_reset(struct pci_dev *pdev)
2292 {
2293 	pci_ers_result_t result;
2294 
2295 	if (pci_reenable_device(pdev)) {
2296 		dev_err(&pdev->dev,
2297 			"Cannot re-enable PCI device after reset.\n");
2298 		result = PCI_ERS_RESULT_DISCONNECT;
2299 	} else {
2300 		pci_set_master(pdev);
2301 		pci_restore_state(pdev);
2302 
2303 		/* After second error pci->state_saved is false, this
2304 		 * resets it so EEH doesn't break.
2305 		 */
2306 		pci_save_state(pdev);
2307 
2308 		pci_wake_from_d3(pdev, false);
2309 
2310 		result = PCI_ERS_RESULT_RECOVERED;
2311 	}
2312 
2313 	pci_cleanup_aer_uncorrect_error_status(pdev);
2314 
2315 	return result;
2316 }
2317 
2318 /**
2319  * fm10k_io_resume - called when traffic can start flowing again.
2320  * @pdev: Pointer to PCI device
2321  *
2322  * This callback is called when the error recovery driver tells us that
2323  * its OK to resume normal operation.
2324  */
2325 static void fm10k_io_resume(struct pci_dev *pdev)
2326 {
2327 	struct fm10k_intfc *interface = pci_get_drvdata(pdev);
2328 	struct net_device *netdev = interface->netdev;
2329 	int err;
2330 
2331 	err = fm10k_handle_resume(interface);
2332 
2333 	if (err)
2334 		dev_warn(&pdev->dev,
2335 			 "fm10k_io_resume failed: %d\n", err);
2336 	else
2337 		netif_device_attach(netdev);
2338 }
2339 
2340 /**
2341  * fm10k_io_reset_notify - called when PCI function is reset
2342  * @pdev: Pointer to PCI device
2343  *
2344  * This callback is called when the PCI function is reset such as from
2345  * /sys/class/net/<enpX>/device/reset or similar. When prepare is true, it
2346  * means we should prepare for a function reset. If prepare is false, it means
2347  * the function reset just occurred.
2348  */
2349 static void fm10k_io_reset_notify(struct pci_dev *pdev, bool prepare)
2350 {
2351 	struct fm10k_intfc *interface = pci_get_drvdata(pdev);
2352 	int err = 0;
2353 
2354 	if (prepare) {
2355 		/* warn incase we have any active VF devices */
2356 		if (pci_num_vf(pdev))
2357 			dev_warn(&pdev->dev,
2358 				 "PCIe FLR may cause issues for any active VF devices\n");
2359 
2360 		fm10k_prepare_suspend(interface);
2361 	} else {
2362 		err = fm10k_handle_resume(interface);
2363 	}
2364 
2365 	if (err) {
2366 		dev_warn(&pdev->dev,
2367 			 "fm10k_io_reset_notify failed: %d\n", err);
2368 		netif_device_detach(interface->netdev);
2369 	}
2370 }
2371 
2372 static const struct pci_error_handlers fm10k_err_handler = {
2373 	.error_detected = fm10k_io_error_detected,
2374 	.slot_reset = fm10k_io_slot_reset,
2375 	.resume = fm10k_io_resume,
2376 	.reset_notify = fm10k_io_reset_notify,
2377 };
2378 
2379 static struct pci_driver fm10k_driver = {
2380 	.name			= fm10k_driver_name,
2381 	.id_table		= fm10k_pci_tbl,
2382 	.probe			= fm10k_probe,
2383 	.remove			= fm10k_remove,
2384 #ifdef CONFIG_PM
2385 	.suspend		= fm10k_suspend,
2386 	.resume			= fm10k_resume,
2387 #endif
2388 	.sriov_configure	= fm10k_iov_configure,
2389 	.err_handler		= &fm10k_err_handler
2390 };
2391 
2392 /**
2393  * fm10k_register_pci_driver - register driver interface
2394  *
2395  * This function is called on module load in order to register the driver.
2396  **/
2397 int fm10k_register_pci_driver(void)
2398 {
2399 	return pci_register_driver(&fm10k_driver);
2400 }
2401 
2402 /**
2403  * fm10k_unregister_pci_driver - unregister driver interface
2404  *
2405  * This function is called on module unload in order to remove the driver.
2406  **/
2407 void fm10k_unregister_pci_driver(void)
2408 {
2409 	pci_unregister_driver(&fm10k_driver);
2410 }
2411