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