dee468f89efeb31632dc5bc4ed662201f6c0522d
[dpdk.git] / drivers / net / sfc / sfc.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  *
3  * Copyright (c) 2016-2018 Solarflare Communications Inc.
4  * All rights reserved.
5  *
6  * This software was jointly developed between OKTET Labs (under contract
7  * for Solarflare) and Solarflare Communications, Inc.
8  */
9
10 /* sysconf() */
11 #include <unistd.h>
12
13 #include <rte_errno.h>
14 #include <rte_alarm.h>
15
16 #include "efx.h"
17
18 #include "sfc.h"
19 #include "sfc_log.h"
20 #include "sfc_ev.h"
21 #include "sfc_rx.h"
22 #include "sfc_tx.h"
23 #include "sfc_kvargs.h"
24 #include "sfc_tweak.h"
25
26
27 int
28 sfc_dma_alloc(const struct sfc_adapter *sa, const char *name, uint16_t id,
29               size_t len, int socket_id, efsys_mem_t *esmp)
30 {
31         const struct rte_memzone *mz;
32
33         sfc_log_init(sa, "name=%s id=%u len=%lu socket_id=%d",
34                      name, id, len, socket_id);
35
36         mz = rte_eth_dma_zone_reserve(sa->eth_dev, name, id, len,
37                                       sysconf(_SC_PAGESIZE), socket_id);
38         if (mz == NULL) {
39                 sfc_err(sa, "cannot reserve DMA zone for %s:%u %#x@%d: %s",
40                         name, (unsigned int)id, (unsigned int)len, socket_id,
41                         rte_strerror(rte_errno));
42                 return ENOMEM;
43         }
44
45         esmp->esm_addr = mz->iova;
46         if (esmp->esm_addr == RTE_BAD_IOVA) {
47                 (void)rte_memzone_free(mz);
48                 return EFAULT;
49         }
50
51         esmp->esm_mz = mz;
52         esmp->esm_base = mz->addr;
53
54         return 0;
55 }
56
57 void
58 sfc_dma_free(const struct sfc_adapter *sa, efsys_mem_t *esmp)
59 {
60         int rc;
61
62         sfc_log_init(sa, "name=%s", esmp->esm_mz->name);
63
64         rc = rte_memzone_free(esmp->esm_mz);
65         if (rc != 0)
66                 sfc_err(sa, "rte_memzone_free(() failed: %d", rc);
67
68         memset(esmp, 0, sizeof(*esmp));
69 }
70
71 static uint32_t
72 sfc_phy_cap_from_link_speeds(uint32_t speeds)
73 {
74         uint32_t phy_caps = 0;
75
76         if (~speeds & ETH_LINK_SPEED_FIXED) {
77                 phy_caps |= (1 << EFX_PHY_CAP_AN);
78                 /*
79                  * If no speeds are specified in the mask, any supported
80                  * may be negotiated
81                  */
82                 if (speeds == ETH_LINK_SPEED_AUTONEG)
83                         phy_caps |=
84                                 (1 << EFX_PHY_CAP_1000FDX) |
85                                 (1 << EFX_PHY_CAP_10000FDX) |
86                                 (1 << EFX_PHY_CAP_25000FDX) |
87                                 (1 << EFX_PHY_CAP_40000FDX) |
88                                 (1 << EFX_PHY_CAP_50000FDX) |
89                                 (1 << EFX_PHY_CAP_100000FDX);
90         }
91         if (speeds & ETH_LINK_SPEED_1G)
92                 phy_caps |= (1 << EFX_PHY_CAP_1000FDX);
93         if (speeds & ETH_LINK_SPEED_10G)
94                 phy_caps |= (1 << EFX_PHY_CAP_10000FDX);
95         if (speeds & ETH_LINK_SPEED_25G)
96                 phy_caps |= (1 << EFX_PHY_CAP_25000FDX);
97         if (speeds & ETH_LINK_SPEED_40G)
98                 phy_caps |= (1 << EFX_PHY_CAP_40000FDX);
99         if (speeds & ETH_LINK_SPEED_50G)
100                 phy_caps |= (1 << EFX_PHY_CAP_50000FDX);
101         if (speeds & ETH_LINK_SPEED_100G)
102                 phy_caps |= (1 << EFX_PHY_CAP_100000FDX);
103
104         return phy_caps;
105 }
106
107 /*
108  * Check requested device level configuration.
109  * Receive and transmit configuration is checked in corresponding
110  * modules.
111  */
112 static int
113 sfc_check_conf(struct sfc_adapter *sa)
114 {
115         const struct rte_eth_conf *conf = &sa->eth_dev->data->dev_conf;
116         int rc = 0;
117
118         sa->port.phy_adv_cap =
119                 sfc_phy_cap_from_link_speeds(conf->link_speeds) &
120                 sa->port.phy_adv_cap_mask;
121         if ((sa->port.phy_adv_cap & ~(1 << EFX_PHY_CAP_AN)) == 0) {
122                 sfc_err(sa, "No link speeds from mask %#x are supported",
123                         conf->link_speeds);
124                 rc = EINVAL;
125         }
126
127 #if !EFSYS_OPT_LOOPBACK
128         if (conf->lpbk_mode != 0) {
129                 sfc_err(sa, "Loopback not supported");
130                 rc = EINVAL;
131         }
132 #endif
133
134         if (conf->dcb_capability_en != 0) {
135                 sfc_err(sa, "Priority-based flow control not supported");
136                 rc = EINVAL;
137         }
138
139         if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) {
140                 sfc_err(sa, "Flow Director not supported");
141                 rc = EINVAL;
142         }
143
144         if ((conf->intr_conf.lsc != 0) &&
145             (sa->intr.type != EFX_INTR_LINE) &&
146             (sa->intr.type != EFX_INTR_MESSAGE)) {
147                 sfc_err(sa, "Link status change interrupt not supported");
148                 rc = EINVAL;
149         }
150
151         if (conf->intr_conf.rxq != 0) {
152                 sfc_err(sa, "Receive queue interrupt not supported");
153                 rc = EINVAL;
154         }
155
156         return rc;
157 }
158
159 /*
160  * Find out maximum number of receive and transmit queues which could be
161  * advertised.
162  *
163  * NIC is kept initialized on success to allow other modules acquire
164  * defaults and capabilities.
165  */
166 static int
167 sfc_estimate_resource_limits(struct sfc_adapter *sa)
168 {
169         const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic);
170         efx_drv_limits_t limits;
171         int rc;
172         uint32_t evq_allocated;
173         uint32_t rxq_allocated;
174         uint32_t txq_allocated;
175
176         memset(&limits, 0, sizeof(limits));
177
178         /* Request at least one Rx and Tx queue */
179         limits.edl_min_rxq_count = 1;
180         limits.edl_min_txq_count = 1;
181         /* Management event queue plus event queue for each Tx and Rx queue */
182         limits.edl_min_evq_count =
183                 1 + limits.edl_min_rxq_count + limits.edl_min_txq_count;
184
185         /* Divide by number of functions to guarantee that all functions
186          * will get promised resources
187          */
188         /* FIXME Divide by number of functions (not 2) below */
189         limits.edl_max_evq_count = encp->enc_evq_limit / 2;
190         SFC_ASSERT(limits.edl_max_evq_count >= limits.edl_min_rxq_count);
191
192         /* Split equally between receive and transmit */
193         limits.edl_max_rxq_count =
194                 MIN(encp->enc_rxq_limit, (limits.edl_max_evq_count - 1) / 2);
195         SFC_ASSERT(limits.edl_max_rxq_count >= limits.edl_min_rxq_count);
196
197         limits.edl_max_txq_count =
198                 MIN(encp->enc_txq_limit,
199                     limits.edl_max_evq_count - 1 - limits.edl_max_rxq_count);
200
201         if (sa->tso)
202                 limits.edl_max_txq_count =
203                         MIN(limits.edl_max_txq_count,
204                             encp->enc_fw_assisted_tso_v2_n_contexts /
205                             encp->enc_hw_pf_count);
206
207         SFC_ASSERT(limits.edl_max_txq_count >= limits.edl_min_rxq_count);
208
209         /* Configure the minimum required resources needed for the
210          * driver to operate, and the maximum desired resources that the
211          * driver is capable of using.
212          */
213         efx_nic_set_drv_limits(sa->nic, &limits);
214
215         sfc_log_init(sa, "init nic");
216         rc = efx_nic_init(sa->nic);
217         if (rc != 0)
218                 goto fail_nic_init;
219
220         /* Find resource dimensions assigned by firmware to this function */
221         rc = efx_nic_get_vi_pool(sa->nic, &evq_allocated, &rxq_allocated,
222                                  &txq_allocated);
223         if (rc != 0)
224                 goto fail_get_vi_pool;
225
226         /* It still may allocate more than maximum, ensure limit */
227         evq_allocated = MIN(evq_allocated, limits.edl_max_evq_count);
228         rxq_allocated = MIN(rxq_allocated, limits.edl_max_rxq_count);
229         txq_allocated = MIN(txq_allocated, limits.edl_max_txq_count);
230
231         /* Subtract management EVQ not used for traffic */
232         SFC_ASSERT(evq_allocated > 0);
233         evq_allocated--;
234
235         /* Right now we use separate EVQ for Rx and Tx */
236         sa->rxq_max = MIN(rxq_allocated, evq_allocated / 2);
237         sa->txq_max = MIN(txq_allocated, evq_allocated - sa->rxq_max);
238
239         /* Keep NIC initialized */
240         return 0;
241
242 fail_get_vi_pool:
243 fail_nic_init:
244         efx_nic_fini(sa->nic);
245         return rc;
246 }
247
248 static int
249 sfc_set_drv_limits(struct sfc_adapter *sa)
250 {
251         const struct rte_eth_dev_data *data = sa->eth_dev->data;
252         efx_drv_limits_t lim;
253
254         memset(&lim, 0, sizeof(lim));
255
256         /* Limits are strict since take into account initial estimation */
257         lim.edl_min_evq_count = lim.edl_max_evq_count =
258                 1 + data->nb_rx_queues + data->nb_tx_queues;
259         lim.edl_min_rxq_count = lim.edl_max_rxq_count = data->nb_rx_queues;
260         lim.edl_min_txq_count = lim.edl_max_txq_count = data->nb_tx_queues;
261
262         return efx_nic_set_drv_limits(sa->nic, &lim);
263 }
264
265 static int
266 sfc_set_fw_subvariant(struct sfc_adapter *sa)
267 {
268         struct sfc_adapter_shared *sas = sfc_sa2shared(sa);
269         const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic);
270         uint64_t tx_offloads = sa->eth_dev->data->dev_conf.txmode.offloads;
271         unsigned int txq_index;
272         efx_nic_fw_subvariant_t req_fw_subvariant;
273         efx_nic_fw_subvariant_t cur_fw_subvariant;
274         int rc;
275
276         if (!encp->enc_fw_subvariant_no_tx_csum_supported) {
277                 sfc_info(sa, "no-Tx-checksum subvariant not supported");
278                 return 0;
279         }
280
281         for (txq_index = 0; txq_index < sas->txq_count; ++txq_index) {
282                 struct sfc_txq_info *txq_info = &sas->txq_info[txq_index];
283
284                 if (txq_info->state & SFC_TXQ_INITIALIZED)
285                         tx_offloads |= txq_info->offloads;
286         }
287
288         if (tx_offloads & (DEV_TX_OFFLOAD_IPV4_CKSUM |
289                            DEV_TX_OFFLOAD_TCP_CKSUM |
290                            DEV_TX_OFFLOAD_UDP_CKSUM |
291                            DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM))
292                 req_fw_subvariant = EFX_NIC_FW_SUBVARIANT_DEFAULT;
293         else
294                 req_fw_subvariant = EFX_NIC_FW_SUBVARIANT_NO_TX_CSUM;
295
296         rc = efx_nic_get_fw_subvariant(sa->nic, &cur_fw_subvariant);
297         if (rc != 0) {
298                 sfc_err(sa, "failed to get FW subvariant: %d", rc);
299                 return rc;
300         }
301         sfc_info(sa, "FW subvariant is %u vs required %u",
302                  cur_fw_subvariant, req_fw_subvariant);
303
304         if (cur_fw_subvariant == req_fw_subvariant)
305                 return 0;
306
307         rc = efx_nic_set_fw_subvariant(sa->nic, req_fw_subvariant);
308         if (rc != 0) {
309                 sfc_err(sa, "failed to set FW subvariant %u: %d",
310                         req_fw_subvariant, rc);
311                 return rc;
312         }
313         sfc_info(sa, "FW subvariant set to %u", req_fw_subvariant);
314
315         return 0;
316 }
317
318 static int
319 sfc_try_start(struct sfc_adapter *sa)
320 {
321         const efx_nic_cfg_t *encp;
322         int rc;
323
324         sfc_log_init(sa, "entry");
325
326         SFC_ASSERT(sfc_adapter_is_locked(sa));
327         SFC_ASSERT(sa->state == SFC_ADAPTER_STARTING);
328
329         sfc_log_init(sa, "set FW subvariant");
330         rc = sfc_set_fw_subvariant(sa);
331         if (rc != 0)
332                 goto fail_set_fw_subvariant;
333
334         sfc_log_init(sa, "set resource limits");
335         rc = sfc_set_drv_limits(sa);
336         if (rc != 0)
337                 goto fail_set_drv_limits;
338
339         sfc_log_init(sa, "init nic");
340         rc = efx_nic_init(sa->nic);
341         if (rc != 0)
342                 goto fail_nic_init;
343
344         encp = efx_nic_cfg_get(sa->nic);
345
346         /*
347          * Refresh (since it may change on NIC reset/restart) a copy of
348          * supported tunnel encapsulations in shared memory to be used
349          * on supported Rx packet type classes get.
350          */
351         sa->priv.shared->tunnel_encaps =
352                 encp->enc_tunnel_encapsulations_supported;
353
354         if (encp->enc_tunnel_encapsulations_supported != 0) {
355                 sfc_log_init(sa, "apply tunnel config");
356                 rc = efx_tunnel_reconfigure(sa->nic);
357                 if (rc != 0)
358                         goto fail_tunnel_reconfigure;
359         }
360
361         rc = sfc_intr_start(sa);
362         if (rc != 0)
363                 goto fail_intr_start;
364
365         rc = sfc_ev_start(sa);
366         if (rc != 0)
367                 goto fail_ev_start;
368
369         rc = sfc_port_start(sa);
370         if (rc != 0)
371                 goto fail_port_start;
372
373         rc = sfc_rx_start(sa);
374         if (rc != 0)
375                 goto fail_rx_start;
376
377         rc = sfc_tx_start(sa);
378         if (rc != 0)
379                 goto fail_tx_start;
380
381         rc = sfc_flow_start(sa);
382         if (rc != 0)
383                 goto fail_flows_insert;
384
385         sfc_log_init(sa, "done");
386         return 0;
387
388 fail_flows_insert:
389         sfc_tx_stop(sa);
390
391 fail_tx_start:
392         sfc_rx_stop(sa);
393
394 fail_rx_start:
395         sfc_port_stop(sa);
396
397 fail_port_start:
398         sfc_ev_stop(sa);
399
400 fail_ev_start:
401         sfc_intr_stop(sa);
402
403 fail_intr_start:
404 fail_tunnel_reconfigure:
405         efx_nic_fini(sa->nic);
406
407 fail_nic_init:
408 fail_set_drv_limits:
409 fail_set_fw_subvariant:
410         sfc_log_init(sa, "failed %d", rc);
411         return rc;
412 }
413
414 int
415 sfc_start(struct sfc_adapter *sa)
416 {
417         unsigned int start_tries = 3;
418         int rc;
419
420         sfc_log_init(sa, "entry");
421
422         SFC_ASSERT(sfc_adapter_is_locked(sa));
423
424         switch (sa->state) {
425         case SFC_ADAPTER_CONFIGURED:
426                 break;
427         case SFC_ADAPTER_STARTED:
428                 sfc_notice(sa, "already started");
429                 return 0;
430         default:
431                 rc = EINVAL;
432                 goto fail_bad_state;
433         }
434
435         sa->state = SFC_ADAPTER_STARTING;
436
437         do {
438                 rc = sfc_try_start(sa);
439         } while ((--start_tries > 0) &&
440                  (rc == EIO || rc == EAGAIN || rc == ENOENT || rc == EINVAL));
441
442         if (rc != 0)
443                 goto fail_try_start;
444
445         sa->state = SFC_ADAPTER_STARTED;
446         sfc_log_init(sa, "done");
447         return 0;
448
449 fail_try_start:
450         sa->state = SFC_ADAPTER_CONFIGURED;
451 fail_bad_state:
452         sfc_log_init(sa, "failed %d", rc);
453         return rc;
454 }
455
456 void
457 sfc_stop(struct sfc_adapter *sa)
458 {
459         sfc_log_init(sa, "entry");
460
461         SFC_ASSERT(sfc_adapter_is_locked(sa));
462
463         switch (sa->state) {
464         case SFC_ADAPTER_STARTED:
465                 break;
466         case SFC_ADAPTER_CONFIGURED:
467                 sfc_notice(sa, "already stopped");
468                 return;
469         default:
470                 sfc_err(sa, "stop in unexpected state %u", sa->state);
471                 SFC_ASSERT(B_FALSE);
472                 return;
473         }
474
475         sa->state = SFC_ADAPTER_STOPPING;
476
477         sfc_flow_stop(sa);
478         sfc_tx_stop(sa);
479         sfc_rx_stop(sa);
480         sfc_port_stop(sa);
481         sfc_ev_stop(sa);
482         sfc_intr_stop(sa);
483         efx_nic_fini(sa->nic);
484
485         sa->state = SFC_ADAPTER_CONFIGURED;
486         sfc_log_init(sa, "done");
487 }
488
489 static int
490 sfc_restart(struct sfc_adapter *sa)
491 {
492         int rc;
493
494         SFC_ASSERT(sfc_adapter_is_locked(sa));
495
496         if (sa->state != SFC_ADAPTER_STARTED)
497                 return EINVAL;
498
499         sfc_stop(sa);
500
501         rc = sfc_start(sa);
502         if (rc != 0)
503                 sfc_err(sa, "restart failed");
504
505         return rc;
506 }
507
508 static void
509 sfc_restart_if_required(void *arg)
510 {
511         struct sfc_adapter *sa = arg;
512
513         /* If restart is scheduled, clear the flag and do it */
514         if (rte_atomic32_cmpset((volatile uint32_t *)&sa->restart_required,
515                                 1, 0)) {
516                 sfc_adapter_lock(sa);
517                 if (sa->state == SFC_ADAPTER_STARTED)
518                         (void)sfc_restart(sa);
519                 sfc_adapter_unlock(sa);
520         }
521 }
522
523 void
524 sfc_schedule_restart(struct sfc_adapter *sa)
525 {
526         int rc;
527
528         /* Schedule restart alarm if it is not scheduled yet */
529         if (!rte_atomic32_test_and_set(&sa->restart_required))
530                 return;
531
532         rc = rte_eal_alarm_set(1, sfc_restart_if_required, sa);
533         if (rc == -ENOTSUP)
534                 sfc_warn(sa, "alarms are not supported, restart is pending");
535         else if (rc != 0)
536                 sfc_err(sa, "cannot arm restart alarm (rc=%d)", rc);
537         else
538                 sfc_notice(sa, "restart scheduled");
539 }
540
541 int
542 sfc_configure(struct sfc_adapter *sa)
543 {
544         int rc;
545
546         sfc_log_init(sa, "entry");
547
548         SFC_ASSERT(sfc_adapter_is_locked(sa));
549
550         SFC_ASSERT(sa->state == SFC_ADAPTER_INITIALIZED ||
551                    sa->state == SFC_ADAPTER_CONFIGURED);
552         sa->state = SFC_ADAPTER_CONFIGURING;
553
554         rc = sfc_check_conf(sa);
555         if (rc != 0)
556                 goto fail_check_conf;
557
558         rc = sfc_intr_configure(sa);
559         if (rc != 0)
560                 goto fail_intr_configure;
561
562         rc = sfc_port_configure(sa);
563         if (rc != 0)
564                 goto fail_port_configure;
565
566         rc = sfc_rx_configure(sa);
567         if (rc != 0)
568                 goto fail_rx_configure;
569
570         rc = sfc_tx_configure(sa);
571         if (rc != 0)
572                 goto fail_tx_configure;
573
574         sa->state = SFC_ADAPTER_CONFIGURED;
575         sfc_log_init(sa, "done");
576         return 0;
577
578 fail_tx_configure:
579         sfc_rx_close(sa);
580
581 fail_rx_configure:
582         sfc_port_close(sa);
583
584 fail_port_configure:
585         sfc_intr_close(sa);
586
587 fail_intr_configure:
588 fail_check_conf:
589         sa->state = SFC_ADAPTER_INITIALIZED;
590         sfc_log_init(sa, "failed %d", rc);
591         return rc;
592 }
593
594 void
595 sfc_close(struct sfc_adapter *sa)
596 {
597         sfc_log_init(sa, "entry");
598
599         SFC_ASSERT(sfc_adapter_is_locked(sa));
600
601         SFC_ASSERT(sa->state == SFC_ADAPTER_CONFIGURED);
602         sa->state = SFC_ADAPTER_CLOSING;
603
604         sfc_tx_close(sa);
605         sfc_rx_close(sa);
606         sfc_port_close(sa);
607         sfc_intr_close(sa);
608
609         sa->state = SFC_ADAPTER_INITIALIZED;
610         sfc_log_init(sa, "done");
611 }
612
613 static int
614 sfc_mem_bar_init(struct sfc_adapter *sa, unsigned int membar)
615 {
616         struct rte_eth_dev *eth_dev = sa->eth_dev;
617         struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
618         efsys_bar_t *ebp = &sa->mem_bar;
619         struct rte_mem_resource *res = &pci_dev->mem_resource[membar];
620
621         SFC_BAR_LOCK_INIT(ebp, eth_dev->data->name);
622         ebp->esb_rid = membar;
623         ebp->esb_dev = pci_dev;
624         ebp->esb_base = res->addr;
625         return 0;
626 }
627
628 static void
629 sfc_mem_bar_fini(struct sfc_adapter *sa)
630 {
631         efsys_bar_t *ebp = &sa->mem_bar;
632
633         SFC_BAR_LOCK_DESTROY(ebp);
634         memset(ebp, 0, sizeof(*ebp));
635 }
636
637 /*
638  * A fixed RSS key which has a property of being symmetric
639  * (symmetrical flows are distributed to the same CPU)
640  * and also known to give a uniform distribution
641  * (a good distribution of traffic between different CPUs)
642  */
643 static const uint8_t default_rss_key[EFX_RSS_KEY_SIZE] = {
644         0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,
645         0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,
646         0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,
647         0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,
648         0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,
649 };
650
651 static int
652 sfc_rss_attach(struct sfc_adapter *sa)
653 {
654         struct sfc_rss *rss = &sfc_sa2shared(sa)->rss;
655         int rc;
656
657         rc = efx_intr_init(sa->nic, sa->intr.type, NULL);
658         if (rc != 0)
659                 goto fail_intr_init;
660
661         rc = efx_ev_init(sa->nic);
662         if (rc != 0)
663                 goto fail_ev_init;
664
665         rc = efx_rx_init(sa->nic);
666         if (rc != 0)
667                 goto fail_rx_init;
668
669         rc = efx_rx_scale_default_support_get(sa->nic, &rss->context_type);
670         if (rc != 0)
671                 goto fail_scale_support_get;
672
673         rc = efx_rx_hash_default_support_get(sa->nic, &rss->hash_support);
674         if (rc != 0)
675                 goto fail_hash_support_get;
676
677         rc = sfc_rx_hash_init(sa);
678         if (rc != 0)
679                 goto fail_rx_hash_init;
680
681         efx_rx_fini(sa->nic);
682         efx_ev_fini(sa->nic);
683         efx_intr_fini(sa->nic);
684
685         rte_memcpy(rss->key, default_rss_key, sizeof(rss->key));
686
687         return 0;
688
689 fail_rx_hash_init:
690 fail_hash_support_get:
691 fail_scale_support_get:
692         efx_rx_fini(sa->nic);
693
694 fail_rx_init:
695         efx_ev_fini(sa->nic);
696
697 fail_ev_init:
698         efx_intr_fini(sa->nic);
699
700 fail_intr_init:
701         return rc;
702 }
703
704 static void
705 sfc_rss_detach(struct sfc_adapter *sa)
706 {
707         sfc_rx_hash_fini(sa);
708 }
709
710 int
711 sfc_attach(struct sfc_adapter *sa)
712 {
713         const efx_nic_cfg_t *encp;
714         efx_nic_t *enp = sa->nic;
715         int rc;
716
717         sfc_log_init(sa, "entry");
718
719         SFC_ASSERT(sfc_adapter_is_locked(sa));
720
721         efx_mcdi_new_epoch(enp);
722
723         sfc_log_init(sa, "reset nic");
724         rc = efx_nic_reset(enp);
725         if (rc != 0)
726                 goto fail_nic_reset;
727
728         /*
729          * Probed NIC is sufficient for tunnel init.
730          * Initialize tunnel support to be able to use libefx
731          * efx_tunnel_config_udp_{add,remove}() in any state and
732          * efx_tunnel_reconfigure() on start up.
733          */
734         rc = efx_tunnel_init(enp);
735         if (rc != 0)
736                 goto fail_tunnel_init;
737
738         encp = efx_nic_cfg_get(sa->nic);
739
740         /*
741          * Make a copy of supported tunnel encapsulations in shared
742          * memory to be used on supported Rx packet type classes get.
743          */
744         sa->priv.shared->tunnel_encaps =
745                 encp->enc_tunnel_encapsulations_supported;
746
747         if (sa->priv.dp_tx->features & SFC_DP_TX_FEAT_TSO) {
748                 sa->tso = encp->enc_fw_assisted_tso_v2_enabled;
749                 if (!sa->tso)
750                         sfc_info(sa, "TSO support isn't available on this adapter");
751         }
752
753         sfc_log_init(sa, "estimate resource limits");
754         rc = sfc_estimate_resource_limits(sa);
755         if (rc != 0)
756                 goto fail_estimate_rsrc_limits;
757
758         sa->evq_max_entries = encp->enc_evq_max_nevs;
759         SFC_ASSERT(rte_is_power_of_2(sa->evq_max_entries));
760
761         sa->evq_min_entries = encp->enc_evq_min_nevs;
762         SFC_ASSERT(rte_is_power_of_2(sa->evq_min_entries));
763
764         sa->rxq_max_entries = encp->enc_rxq_max_ndescs;
765         SFC_ASSERT(rte_is_power_of_2(sa->rxq_max_entries));
766
767         sa->rxq_min_entries = encp->enc_rxq_min_ndescs;
768         SFC_ASSERT(rte_is_power_of_2(sa->rxq_min_entries));
769
770         sa->txq_max_entries = encp->enc_txq_max_ndescs;
771         SFC_ASSERT(rte_is_power_of_2(sa->txq_max_entries));
772
773         sa->txq_min_entries = encp->enc_txq_min_ndescs;
774         SFC_ASSERT(rte_is_power_of_2(sa->txq_min_entries));
775
776         rc = sfc_intr_attach(sa);
777         if (rc != 0)
778                 goto fail_intr_attach;
779
780         rc = sfc_ev_attach(sa);
781         if (rc != 0)
782                 goto fail_ev_attach;
783
784         rc = sfc_port_attach(sa);
785         if (rc != 0)
786                 goto fail_port_attach;
787
788         rc = sfc_rss_attach(sa);
789         if (rc != 0)
790                 goto fail_rss_attach;
791
792         rc = sfc_filter_attach(sa);
793         if (rc != 0)
794                 goto fail_filter_attach;
795
796         sfc_log_init(sa, "fini nic");
797         efx_nic_fini(enp);
798
799         sfc_flow_init(sa);
800
801         sa->state = SFC_ADAPTER_INITIALIZED;
802
803         sfc_log_init(sa, "done");
804         return 0;
805
806 fail_filter_attach:
807         sfc_rss_detach(sa);
808
809 fail_rss_attach:
810         sfc_port_detach(sa);
811
812 fail_port_attach:
813         sfc_ev_detach(sa);
814
815 fail_ev_attach:
816         sfc_intr_detach(sa);
817
818 fail_intr_attach:
819         efx_nic_fini(sa->nic);
820
821 fail_estimate_rsrc_limits:
822 fail_tunnel_init:
823         efx_tunnel_fini(sa->nic);
824
825 fail_nic_reset:
826
827         sfc_log_init(sa, "failed %d", rc);
828         return rc;
829 }
830
831 void
832 sfc_detach(struct sfc_adapter *sa)
833 {
834         sfc_log_init(sa, "entry");
835
836         SFC_ASSERT(sfc_adapter_is_locked(sa));
837
838         sfc_flow_fini(sa);
839
840         sfc_filter_detach(sa);
841         sfc_rss_detach(sa);
842         sfc_port_detach(sa);
843         sfc_ev_detach(sa);
844         sfc_intr_detach(sa);
845         efx_tunnel_fini(sa->nic);
846
847         sa->state = SFC_ADAPTER_UNINITIALIZED;
848 }
849
850 static int
851 sfc_kvarg_fv_variant_handler(__rte_unused const char *key,
852                              const char *value_str, void *opaque)
853 {
854         uint32_t *value = opaque;
855
856         if (strcasecmp(value_str, SFC_KVARG_FW_VARIANT_DONT_CARE) == 0)
857                 *value = EFX_FW_VARIANT_DONT_CARE;
858         else if (strcasecmp(value_str, SFC_KVARG_FW_VARIANT_FULL_FEATURED) == 0)
859                 *value = EFX_FW_VARIANT_FULL_FEATURED;
860         else if (strcasecmp(value_str, SFC_KVARG_FW_VARIANT_LOW_LATENCY) == 0)
861                 *value = EFX_FW_VARIANT_LOW_LATENCY;
862         else if (strcasecmp(value_str, SFC_KVARG_FW_VARIANT_PACKED_STREAM) == 0)
863                 *value = EFX_FW_VARIANT_PACKED_STREAM;
864         else if (strcasecmp(value_str, SFC_KVARG_FW_VARIANT_DPDK) == 0)
865                 *value = EFX_FW_VARIANT_DPDK;
866         else
867                 return -EINVAL;
868
869         return 0;
870 }
871
872 static int
873 sfc_get_fw_variant(struct sfc_adapter *sa, efx_fw_variant_t *efv)
874 {
875         efx_nic_fw_info_t enfi;
876         int rc;
877
878         rc = efx_nic_get_fw_version(sa->nic, &enfi);
879         if (rc != 0)
880                 return rc;
881         else if (!enfi.enfi_dpcpu_fw_ids_valid)
882                 return ENOTSUP;
883
884         /*
885          * Firmware variant can be uniquely identified by the RxDPCPU
886          * firmware id
887          */
888         switch (enfi.enfi_rx_dpcpu_fw_id) {
889         case EFX_RXDP_FULL_FEATURED_FW_ID:
890                 *efv = EFX_FW_VARIANT_FULL_FEATURED;
891                 break;
892
893         case EFX_RXDP_LOW_LATENCY_FW_ID:
894                 *efv = EFX_FW_VARIANT_LOW_LATENCY;
895                 break;
896
897         case EFX_RXDP_PACKED_STREAM_FW_ID:
898                 *efv = EFX_FW_VARIANT_PACKED_STREAM;
899                 break;
900
901         case EFX_RXDP_DPDK_FW_ID:
902                 *efv = EFX_FW_VARIANT_DPDK;
903                 break;
904
905         default:
906                 /*
907                  * Other firmware variants are not considered, since they are
908                  * not supported in the device parameters
909                  */
910                 *efv = EFX_FW_VARIANT_DONT_CARE;
911                 break;
912         }
913
914         return 0;
915 }
916
917 static const char *
918 sfc_fw_variant2str(efx_fw_variant_t efv)
919 {
920         switch (efv) {
921         case EFX_RXDP_FULL_FEATURED_FW_ID:
922                 return SFC_KVARG_FW_VARIANT_FULL_FEATURED;
923         case EFX_RXDP_LOW_LATENCY_FW_ID:
924                 return SFC_KVARG_FW_VARIANT_LOW_LATENCY;
925         case EFX_RXDP_PACKED_STREAM_FW_ID:
926                 return SFC_KVARG_FW_VARIANT_PACKED_STREAM;
927         case EFX_RXDP_DPDK_FW_ID:
928                 return SFC_KVARG_FW_VARIANT_DPDK;
929         default:
930                 return "unknown";
931         }
932 }
933
934 static int
935 sfc_kvarg_rxd_wait_timeout_ns(struct sfc_adapter *sa)
936 {
937         int rc;
938         long value;
939
940         value = SFC_RXD_WAIT_TIMEOUT_NS_DEF;
941
942         rc = sfc_kvargs_process(sa, SFC_KVARG_RXD_WAIT_TIMEOUT_NS,
943                                 sfc_kvarg_long_handler, &value);
944         if (rc != 0)
945                 return rc;
946
947         if (value < 0 ||
948             (unsigned long)value > EFX_RXQ_ES_SUPER_BUFFER_HOL_BLOCK_MAX) {
949                 sfc_err(sa, "wrong '" SFC_KVARG_RXD_WAIT_TIMEOUT_NS "' "
950                             "was set (%ld);", value);
951                 sfc_err(sa, "it must not be less than 0 or greater than %u",
952                             EFX_RXQ_ES_SUPER_BUFFER_HOL_BLOCK_MAX);
953                 return EINVAL;
954         }
955
956         sa->rxd_wait_timeout_ns = value;
957         return 0;
958 }
959
960 static int
961 sfc_nic_probe(struct sfc_adapter *sa)
962 {
963         efx_nic_t *enp = sa->nic;
964         efx_fw_variant_t preferred_efv;
965         efx_fw_variant_t efv;
966         int rc;
967
968         preferred_efv = EFX_FW_VARIANT_DONT_CARE;
969         rc = sfc_kvargs_process(sa, SFC_KVARG_FW_VARIANT,
970                                 sfc_kvarg_fv_variant_handler,
971                                 &preferred_efv);
972         if (rc != 0) {
973                 sfc_err(sa, "invalid %s parameter value", SFC_KVARG_FW_VARIANT);
974                 return rc;
975         }
976
977         rc = sfc_kvarg_rxd_wait_timeout_ns(sa);
978         if (rc != 0)
979                 return rc;
980
981         rc = efx_nic_probe(enp, preferred_efv);
982         if (rc == EACCES) {
983                 /* Unprivileged functions cannot set FW variant */
984                 rc = efx_nic_probe(enp, EFX_FW_VARIANT_DONT_CARE);
985         }
986         if (rc != 0)
987                 return rc;
988
989         rc = sfc_get_fw_variant(sa, &efv);
990         if (rc == ENOTSUP) {
991                 sfc_warn(sa, "FW variant can not be obtained");
992                 return 0;
993         }
994         if (rc != 0)
995                 return rc;
996
997         /* Check that firmware variant was changed to the requested one */
998         if (preferred_efv != EFX_FW_VARIANT_DONT_CARE && preferred_efv != efv) {
999                 sfc_warn(sa, "FW variant has not changed to the requested %s",
1000                          sfc_fw_variant2str(preferred_efv));
1001         }
1002
1003         sfc_notice(sa, "running FW variant is %s", sfc_fw_variant2str(efv));
1004
1005         return 0;
1006 }
1007
1008 int
1009 sfc_probe(struct sfc_adapter *sa)
1010 {
1011         struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(sa->eth_dev);
1012         unsigned int membar;
1013         efx_nic_t *enp;
1014         int rc;
1015
1016         sfc_log_init(sa, "entry");
1017
1018         SFC_ASSERT(sfc_adapter_is_locked(sa));
1019
1020         sa->socket_id = rte_socket_id();
1021         rte_atomic32_init(&sa->restart_required);
1022
1023         sfc_log_init(sa, "get family");
1024         rc = efx_family(pci_dev->id.vendor_id, pci_dev->id.device_id,
1025                         &sa->family, &membar);
1026         if (rc != 0)
1027                 goto fail_family;
1028         sfc_log_init(sa, "family is %u, membar is %u", sa->family, membar);
1029
1030         sfc_log_init(sa, "init mem bar");
1031         rc = sfc_mem_bar_init(sa, membar);
1032         if (rc != 0)
1033                 goto fail_mem_bar_init;
1034
1035         sfc_log_init(sa, "create nic");
1036         rte_spinlock_init(&sa->nic_lock);
1037         rc = efx_nic_create(sa->family, (efsys_identifier_t *)sa,
1038                             &sa->mem_bar, &sa->nic_lock, &enp);
1039         if (rc != 0)
1040                 goto fail_nic_create;
1041         sa->nic = enp;
1042
1043         rc = sfc_mcdi_init(sa);
1044         if (rc != 0)
1045                 goto fail_mcdi_init;
1046
1047         sfc_log_init(sa, "probe nic");
1048         rc = sfc_nic_probe(sa);
1049         if (rc != 0)
1050                 goto fail_nic_probe;
1051
1052         sfc_log_init(sa, "done");
1053         return 0;
1054
1055 fail_nic_probe:
1056         sfc_mcdi_fini(sa);
1057
1058 fail_mcdi_init:
1059         sfc_log_init(sa, "destroy nic");
1060         sa->nic = NULL;
1061         efx_nic_destroy(enp);
1062
1063 fail_nic_create:
1064         sfc_mem_bar_fini(sa);
1065
1066 fail_mem_bar_init:
1067 fail_family:
1068         sfc_log_init(sa, "failed %d", rc);
1069         return rc;
1070 }
1071
1072 void
1073 sfc_unprobe(struct sfc_adapter *sa)
1074 {
1075         efx_nic_t *enp = sa->nic;
1076
1077         sfc_log_init(sa, "entry");
1078
1079         SFC_ASSERT(sfc_adapter_is_locked(sa));
1080
1081         sfc_log_init(sa, "unprobe nic");
1082         efx_nic_unprobe(enp);
1083
1084         sfc_mcdi_fini(sa);
1085
1086         /*
1087          * Make sure there is no pending alarm to restart since we are
1088          * going to free device private which is passed as the callback
1089          * opaque data. A new alarm cannot be scheduled since MCDI is
1090          * shut down.
1091          */
1092         rte_eal_alarm_cancel(sfc_restart_if_required, sa);
1093
1094         sfc_log_init(sa, "destroy nic");
1095         sa->nic = NULL;
1096         efx_nic_destroy(enp);
1097
1098         sfc_mem_bar_fini(sa);
1099
1100         sfc_flow_fini(sa);
1101         sa->state = SFC_ADAPTER_UNINITIALIZED;
1102 }
1103
1104 uint32_t
1105 sfc_register_logtype(const struct rte_pci_addr *pci_addr,
1106                      const char *lt_prefix_str, uint32_t ll_default)
1107 {
1108         size_t lt_prefix_str_size = strlen(lt_prefix_str);
1109         size_t lt_str_size_max;
1110         char *lt_str = NULL;
1111         int ret;
1112
1113         if (SIZE_MAX - PCI_PRI_STR_SIZE - 1 > lt_prefix_str_size) {
1114                 ++lt_prefix_str_size; /* Reserve space for prefix separator */
1115                 lt_str_size_max = lt_prefix_str_size + PCI_PRI_STR_SIZE + 1;
1116         } else {
1117                 return sfc_logtype_driver;
1118         }
1119
1120         lt_str = rte_zmalloc("logtype_str", lt_str_size_max, 0);
1121         if (lt_str == NULL)
1122                 return sfc_logtype_driver;
1123
1124         strncpy(lt_str, lt_prefix_str, lt_prefix_str_size);
1125         lt_str[lt_prefix_str_size - 1] = '.';
1126         rte_pci_device_name(pci_addr, lt_str + lt_prefix_str_size,
1127                             lt_str_size_max - lt_prefix_str_size);
1128         lt_str[lt_str_size_max - 1] = '\0';
1129
1130         ret = rte_log_register_type_and_pick_level(lt_str, ll_default);
1131         rte_free(lt_str);
1132
1133         if (ret < 0)
1134                 return sfc_logtype_driver;
1135
1136         return ret;
1137 }