1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 /* Copyright (C) 2015-2019 Netronome Systems, Inc. */
6 * Netronome network device driver: Common functions between PF and VF
7 * Authors: Jakub Kicinski <jakub.kicinski@netronome.com>
8 * Jason McMullan <jason.mcmullan@netronome.com>
9 * Rolf Neugebauer <rolf.neugebauer@netronome.com>
10 * Brad Petrus <brad.petrus@netronome.com>
11 * Chris Telfer <chris.telfer@netronome.com>
14 #include <linux/bitfield.h>
15 #include <linux/bpf.h>
16 #include <linux/module.h>
17 #include <linux/kernel.h>
18 #include <linux/init.h>
20 #include <linux/netdevice.h>
21 #include <linux/etherdevice.h>
22 #include <linux/interrupt.h>
24 #include <linux/ipv6.h>
26 #include <linux/overflow.h>
27 #include <linux/page_ref.h>
28 #include <linux/pci.h>
29 #include <linux/pci_regs.h>
30 #include <linux/ethtool.h>
31 #include <linux/log2.h>
32 #include <linux/if_vlan.h>
33 #include <linux/if_bridge.h>
34 #include <linux/random.h>
35 #include <linux/vmalloc.h>
36 #include <linux/ktime.h>
39 #include <net/vxlan.h>
40 #include <net/xdp_sock_drv.h>
43 #include "nfpcore/nfp_dev.h"
44 #include "nfpcore/nfp_nsp.h"
47 #include "nfp_net_ctrl.h"
49 #include "nfp_net_dp.h"
50 #include "nfp_net_sriov.h"
51 #include "nfp_net_xsk.h"
53 #include "crypto/crypto.h"
54 #include "crypto/fw.h"
56 static int nfp_net_mc_unsync(struct net_device
*netdev
, const unsigned char *addr
);
59 * nfp_net_get_fw_version() - Read and parse the FW version
60 * @fw_ver: Output fw_version structure to read to
61 * @ctrl_bar: Mapped address of the control BAR
63 void nfp_net_get_fw_version(struct nfp_net_fw_version
*fw_ver
,
64 void __iomem
*ctrl_bar
)
68 reg
= readl(ctrl_bar
+ NFP_NET_CFG_VERSION
);
69 put_unaligned_le32(reg
, fw_ver
);
72 u32
nfp_qcp_queue_offset(const struct nfp_dev_info
*dev_info
, u16 queue
)
74 queue
&= dev_info
->qc_idx_mask
;
75 return dev_info
->qc_addr_offset
+ NFP_QCP_QUEUE_ADDR_SZ
* queue
;
80 * Firmware reconfig may take a while so we have two versions of it -
81 * synchronous and asynchronous (posted). All synchronous callers are holding
82 * RTNL so we don't have to worry about serializing them.
84 static void nfp_net_reconfig_start(struct nfp_net
*nn
, u32 update
)
86 nn_writel(nn
, NFP_NET_CFG_UPDATE
, update
);
87 /* ensure update is written before pinging HW */
89 nfp_qcp_wr_ptr_add(nn
->qcp_cfg
, 1);
90 nn
->reconfig_in_progress_update
= update
;
93 /* Pass 0 as update to run posted reconfigs. */
94 static void nfp_net_reconfig_start_async(struct nfp_net
*nn
, u32 update
)
96 update
|= nn
->reconfig_posted
;
97 nn
->reconfig_posted
= 0;
99 nfp_net_reconfig_start(nn
, update
);
101 nn
->reconfig_timer_active
= true;
102 mod_timer(&nn
->reconfig_timer
, jiffies
+ NFP_NET_POLL_TIMEOUT
* HZ
);
105 static bool nfp_net_reconfig_check_done(struct nfp_net
*nn
, bool last_check
)
109 reg
= nn_readl(nn
, NFP_NET_CFG_UPDATE
);
112 if (reg
& NFP_NET_CFG_UPDATE_ERR
) {
113 nn_err(nn
, "Reconfig error (status: 0x%08x update: 0x%08x ctrl: 0x%08x)\n",
114 reg
, nn
->reconfig_in_progress_update
,
115 nn_readl(nn
, NFP_NET_CFG_CTRL
));
117 } else if (last_check
) {
118 nn_err(nn
, "Reconfig timeout (status: 0x%08x update: 0x%08x ctrl: 0x%08x)\n",
119 reg
, nn
->reconfig_in_progress_update
,
120 nn_readl(nn
, NFP_NET_CFG_CTRL
));
127 static bool __nfp_net_reconfig_wait(struct nfp_net
*nn
, unsigned long deadline
)
129 bool timed_out
= false;
132 /* Poll update field, waiting for NFP to ack the config.
133 * Do an opportunistic wait-busy loop, afterward sleep.
135 for (i
= 0; i
< 50; i
++) {
136 if (nfp_net_reconfig_check_done(nn
, false))
141 while (!nfp_net_reconfig_check_done(nn
, timed_out
)) {
142 usleep_range(250, 500);
143 timed_out
= time_is_before_eq_jiffies(deadline
);
149 static int nfp_net_reconfig_wait(struct nfp_net
*nn
, unsigned long deadline
)
151 if (__nfp_net_reconfig_wait(nn
, deadline
))
154 if (nn_readl(nn
, NFP_NET_CFG_UPDATE
) & NFP_NET_CFG_UPDATE_ERR
)
160 static void nfp_net_reconfig_timer(struct timer_list
*t
)
162 struct nfp_net
*nn
= from_timer(nn
, t
, reconfig_timer
);
164 spin_lock_bh(&nn
->reconfig_lock
);
166 nn
->reconfig_timer_active
= false;
168 /* If sync caller is present it will take over from us */
169 if (nn
->reconfig_sync_present
)
172 /* Read reconfig status and report errors */
173 nfp_net_reconfig_check_done(nn
, true);
175 if (nn
->reconfig_posted
)
176 nfp_net_reconfig_start_async(nn
, 0);
178 spin_unlock_bh(&nn
->reconfig_lock
);
182 * nfp_net_reconfig_post() - Post async reconfig request
183 * @nn: NFP Net device to reconfigure
184 * @update: The value for the update field in the BAR config
186 * Record FW reconfiguration request. Reconfiguration will be kicked off
187 * whenever reconfiguration machinery is idle. Multiple requests can be
190 static void nfp_net_reconfig_post(struct nfp_net
*nn
, u32 update
)
192 spin_lock_bh(&nn
->reconfig_lock
);
194 /* Sync caller will kick off async reconf when it's done, just post */
195 if (nn
->reconfig_sync_present
) {
196 nn
->reconfig_posted
|= update
;
200 /* Opportunistically check if the previous command is done */
201 if (!nn
->reconfig_timer_active
||
202 nfp_net_reconfig_check_done(nn
, false))
203 nfp_net_reconfig_start_async(nn
, update
);
205 nn
->reconfig_posted
|= update
;
207 spin_unlock_bh(&nn
->reconfig_lock
);
210 static void nfp_net_reconfig_sync_enter(struct nfp_net
*nn
)
212 bool cancelled_timer
= false;
213 u32 pre_posted_requests
;
215 spin_lock_bh(&nn
->reconfig_lock
);
217 WARN_ON(nn
->reconfig_sync_present
);
218 nn
->reconfig_sync_present
= true;
220 if (nn
->reconfig_timer_active
) {
221 nn
->reconfig_timer_active
= false;
222 cancelled_timer
= true;
224 pre_posted_requests
= nn
->reconfig_posted
;
225 nn
->reconfig_posted
= 0;
227 spin_unlock_bh(&nn
->reconfig_lock
);
229 if (cancelled_timer
) {
230 del_timer_sync(&nn
->reconfig_timer
);
231 nfp_net_reconfig_wait(nn
, nn
->reconfig_timer
.expires
);
234 /* Run the posted reconfigs which were issued before we started */
235 if (pre_posted_requests
) {
236 nfp_net_reconfig_start(nn
, pre_posted_requests
);
237 nfp_net_reconfig_wait(nn
, jiffies
+ HZ
* NFP_NET_POLL_TIMEOUT
);
241 static void nfp_net_reconfig_wait_posted(struct nfp_net
*nn
)
243 nfp_net_reconfig_sync_enter(nn
);
245 spin_lock_bh(&nn
->reconfig_lock
);
246 nn
->reconfig_sync_present
= false;
247 spin_unlock_bh(&nn
->reconfig_lock
);
251 * __nfp_net_reconfig() - Reconfigure the firmware
252 * @nn: NFP Net device to reconfigure
253 * @update: The value for the update field in the BAR config
255 * Write the update word to the BAR and ping the reconfig queue. The
256 * poll until the firmware has acknowledged the update by zeroing the
259 * Return: Negative errno on error, 0 on success
261 int __nfp_net_reconfig(struct nfp_net
*nn
, u32 update
)
265 nfp_net_reconfig_sync_enter(nn
);
267 nfp_net_reconfig_start(nn
, update
);
268 ret
= nfp_net_reconfig_wait(nn
, jiffies
+ HZ
* NFP_NET_POLL_TIMEOUT
);
270 spin_lock_bh(&nn
->reconfig_lock
);
272 if (nn
->reconfig_posted
)
273 nfp_net_reconfig_start_async(nn
, 0);
275 nn
->reconfig_sync_present
= false;
277 spin_unlock_bh(&nn
->reconfig_lock
);
282 int nfp_net_reconfig(struct nfp_net
*nn
, u32 update
)
286 nn_ctrl_bar_lock(nn
);
287 ret
= __nfp_net_reconfig(nn
, update
);
288 nn_ctrl_bar_unlock(nn
);
293 int nfp_net_mbox_lock(struct nfp_net
*nn
, unsigned int data_size
)
295 if (nn
->tlv_caps
.mbox_len
< NFP_NET_CFG_MBOX_SIMPLE_VAL
+ data_size
) {
296 nn_err(nn
, "mailbox too small for %u of data (%u)\n",
297 data_size
, nn
->tlv_caps
.mbox_len
);
301 nn_ctrl_bar_lock(nn
);
306 * nfp_net_mbox_reconfig() - Reconfigure the firmware via the mailbox
307 * @nn: NFP Net device to reconfigure
308 * @mbox_cmd: The value for the mailbox command
310 * Helper function for mailbox updates
312 * Return: Negative errno on error, 0 on success
314 int nfp_net_mbox_reconfig(struct nfp_net
*nn
, u32 mbox_cmd
)
316 u32 mbox
= nn
->tlv_caps
.mbox_off
;
319 nn_writeq(nn
, mbox
+ NFP_NET_CFG_MBOX_SIMPLE_CMD
, mbox_cmd
);
321 ret
= __nfp_net_reconfig(nn
, NFP_NET_CFG_UPDATE_MBOX
);
323 nn_err(nn
, "Mailbox update error\n");
327 return -nn_readl(nn
, mbox
+ NFP_NET_CFG_MBOX_SIMPLE_RET
);
330 void nfp_net_mbox_reconfig_post(struct nfp_net
*nn
, u32 mbox_cmd
)
332 u32 mbox
= nn
->tlv_caps
.mbox_off
;
334 nn_writeq(nn
, mbox
+ NFP_NET_CFG_MBOX_SIMPLE_CMD
, mbox_cmd
);
336 nfp_net_reconfig_post(nn
, NFP_NET_CFG_UPDATE_MBOX
);
339 int nfp_net_mbox_reconfig_wait_posted(struct nfp_net
*nn
)
341 u32 mbox
= nn
->tlv_caps
.mbox_off
;
343 nfp_net_reconfig_wait_posted(nn
);
345 return -nn_readl(nn
, mbox
+ NFP_NET_CFG_MBOX_SIMPLE_RET
);
348 int nfp_net_mbox_reconfig_and_unlock(struct nfp_net
*nn
, u32 mbox_cmd
)
352 ret
= nfp_net_mbox_reconfig(nn
, mbox_cmd
);
353 nn_ctrl_bar_unlock(nn
);
357 /* Interrupt configuration and handling
361 * nfp_net_irqs_alloc() - allocates MSI-X irqs
362 * @pdev: PCI device structure
363 * @irq_entries: Array to be initialized and used to hold the irq entries
364 * @min_irqs: Minimal acceptable number of interrupts
365 * @wanted_irqs: Target number of interrupts to allocate
367 * Return: Number of irqs obtained or 0 on error.
370 nfp_net_irqs_alloc(struct pci_dev
*pdev
, struct msix_entry
*irq_entries
,
371 unsigned int min_irqs
, unsigned int wanted_irqs
)
376 for (i
= 0; i
< wanted_irqs
; i
++)
377 irq_entries
[i
].entry
= i
;
379 got_irqs
= pci_enable_msix_range(pdev
, irq_entries
,
380 min_irqs
, wanted_irqs
);
382 dev_err(&pdev
->dev
, "Failed to enable %d-%d MSI-X (err=%d)\n",
383 min_irqs
, wanted_irqs
, got_irqs
);
387 if (got_irqs
< wanted_irqs
)
388 dev_warn(&pdev
->dev
, "Unable to allocate %d IRQs got only %d\n",
389 wanted_irqs
, got_irqs
);
395 * nfp_net_irqs_assign() - Assign interrupts allocated externally to netdev
396 * @nn: NFP Network structure
397 * @irq_entries: Table of allocated interrupts
398 * @n: Size of @irq_entries (number of entries to grab)
400 * After interrupts are allocated with nfp_net_irqs_alloc() this function
401 * should be called to assign them to a specific netdev (port).
404 nfp_net_irqs_assign(struct nfp_net
*nn
, struct msix_entry
*irq_entries
,
407 struct nfp_net_dp
*dp
= &nn
->dp
;
409 nn
->max_r_vecs
= n
- NFP_NET_NON_Q_VECTORS
;
410 dp
->num_r_vecs
= nn
->max_r_vecs
;
412 memcpy(nn
->irq_entries
, irq_entries
, sizeof(*irq_entries
) * n
);
414 if (dp
->num_rx_rings
> dp
->num_r_vecs
||
415 dp
->num_tx_rings
> dp
->num_r_vecs
)
416 dev_warn(nn
->dp
.dev
, "More rings (%d,%d) than vectors (%d).\n",
417 dp
->num_rx_rings
, dp
->num_tx_rings
,
420 dp
->num_rx_rings
= min(dp
->num_r_vecs
, dp
->num_rx_rings
);
421 dp
->num_tx_rings
= min(dp
->num_r_vecs
, dp
->num_tx_rings
);
422 dp
->num_stack_tx_rings
= dp
->num_tx_rings
;
426 * nfp_net_irqs_disable() - Disable interrupts
427 * @pdev: PCI device structure
429 * Undoes what @nfp_net_irqs_alloc() does.
431 void nfp_net_irqs_disable(struct pci_dev
*pdev
)
433 pci_disable_msix(pdev
);
437 * nfp_net_irq_rxtx() - Interrupt service routine for RX/TX rings.
439 * @data: Opaque data structure
441 * Return: Indicate if the interrupt has been handled.
443 static irqreturn_t
nfp_net_irq_rxtx(int irq
, void *data
)
445 struct nfp_net_r_vector
*r_vec
= data
;
447 /* Currently we cannot tell if it's a rx or tx interrupt,
448 * since dim does not need accurate event_ctr to calculate,
449 * we just use this counter for both rx and tx dim.
453 napi_schedule_irqoff(&r_vec
->napi
);
455 /* The FW auto-masks any interrupt, either via the MASK bit in
456 * the MSI-X table or via the per entry ICR field. So there
457 * is no need to disable interrupts here.
462 static irqreturn_t
nfp_ctrl_irq_rxtx(int irq
, void *data
)
464 struct nfp_net_r_vector
*r_vec
= data
;
466 tasklet_schedule(&r_vec
->tasklet
);
472 * nfp_net_read_link_status() - Reread link status from control BAR
473 * @nn: NFP Network structure
475 static void nfp_net_read_link_status(struct nfp_net
*nn
)
481 spin_lock_irqsave(&nn
->link_status_lock
, flags
);
483 sts
= nn_readw(nn
, NFP_NET_CFG_STS
);
484 link_up
= !!(sts
& NFP_NET_CFG_STS_LINK
);
486 if (nn
->link_up
== link_up
)
489 nn
->link_up
= link_up
;
491 set_bit(NFP_PORT_CHANGED
, &nn
->port
->flags
);
492 if (nn
->port
->link_cb
)
493 nn
->port
->link_cb(nn
->port
);
497 netif_carrier_on(nn
->dp
.netdev
);
498 netdev_info(nn
->dp
.netdev
, "NIC Link is Up\n");
500 netif_carrier_off(nn
->dp
.netdev
);
501 netdev_info(nn
->dp
.netdev
, "NIC Link is Down\n");
504 spin_unlock_irqrestore(&nn
->link_status_lock
, flags
);
508 * nfp_net_irq_lsc() - Interrupt service routine for link state changes
510 * @data: Opaque data structure
512 * Return: Indicate if the interrupt has been handled.
514 static irqreturn_t
nfp_net_irq_lsc(int irq
, void *data
)
516 struct nfp_net
*nn
= data
;
517 struct msix_entry
*entry
;
519 entry
= &nn
->irq_entries
[NFP_NET_IRQ_LSC_IDX
];
521 nfp_net_read_link_status(nn
);
523 nfp_net_irq_unmask(nn
, entry
->entry
);
529 * nfp_net_irq_exn() - Interrupt service routine for exceptions
531 * @data: Opaque data structure
533 * Return: Indicate if the interrupt has been handled.
535 static irqreturn_t
nfp_net_irq_exn(int irq
, void *data
)
537 struct nfp_net
*nn
= data
;
539 nn_err(nn
, "%s: UNIMPLEMENTED.\n", __func__
);
540 /* XXX TO BE IMPLEMENTED */
545 * nfp_net_aux_irq_request() - Request an auxiliary interrupt (LSC or EXN)
546 * @nn: NFP Network structure
547 * @ctrl_offset: Control BAR offset where IRQ configuration should be written
548 * @format: printf-style format to construct the interrupt name
549 * @name: Pointer to allocated space for interrupt name
550 * @name_sz: Size of space for interrupt name
551 * @vector_idx: Index of MSI-X vector used for this interrupt
552 * @handler: IRQ handler to register for this interrupt
555 nfp_net_aux_irq_request(struct nfp_net
*nn
, u32 ctrl_offset
,
556 const char *format
, char *name
, size_t name_sz
,
557 unsigned int vector_idx
, irq_handler_t handler
)
559 struct msix_entry
*entry
;
562 entry
= &nn
->irq_entries
[vector_idx
];
564 snprintf(name
, name_sz
, format
, nfp_net_name(nn
));
565 err
= request_irq(entry
->vector
, handler
, 0, name
, nn
);
567 nn_err(nn
, "Failed to request IRQ %d (err=%d).\n",
571 nn_writeb(nn
, ctrl_offset
, entry
->entry
);
572 nfp_net_irq_unmask(nn
, entry
->entry
);
578 * nfp_net_aux_irq_free() - Free an auxiliary interrupt (LSC or EXN)
579 * @nn: NFP Network structure
580 * @ctrl_offset: Control BAR offset where IRQ configuration should be written
581 * @vector_idx: Index of MSI-X vector used for this interrupt
583 static void nfp_net_aux_irq_free(struct nfp_net
*nn
, u32 ctrl_offset
,
584 unsigned int vector_idx
)
586 nn_writeb(nn
, ctrl_offset
, 0xff);
588 free_irq(nn
->irq_entries
[vector_idx
].vector
, nn
);
592 nfp_net_tls_tx(struct nfp_net_dp
*dp
, struct nfp_net_r_vector
*r_vec
,
593 struct sk_buff
*skb
, u64
*tls_handle
, int *nr_frags
)
595 #ifdef CONFIG_TLS_DEVICE
596 struct nfp_net_tls_offload_ctx
*ntls
;
597 struct sk_buff
*nskb
;
601 if (likely(!dp
->ktls_tx
))
603 if (!tls_is_skb_tx_device_offloaded(skb
))
606 datalen
= skb
->len
- skb_tcp_all_headers(skb
);
607 seq
= ntohl(tcp_hdr(skb
)->seq
);
608 ntls
= tls_driver_ctx(skb
->sk
, TLS_OFFLOAD_CTX_DIR_TX
);
609 resync_pending
= tls_offload_tx_resync_pending(skb
->sk
);
610 if (unlikely(resync_pending
|| ntls
->next_seq
!= seq
)) {
611 /* Pure ACK out of order already */
615 u64_stats_update_begin(&r_vec
->tx_sync
);
616 r_vec
->tls_tx_fallback
++;
617 u64_stats_update_end(&r_vec
->tx_sync
);
619 nskb
= tls_encrypt_skb(skb
);
621 u64_stats_update_begin(&r_vec
->tx_sync
);
622 r_vec
->tls_tx_no_fallback
++;
623 u64_stats_update_end(&r_vec
->tx_sync
);
626 /* encryption wasn't necessary */
629 /* we don't re-check ring space */
630 if (unlikely(skb_is_nonlinear(nskb
))) {
631 nn_dp_warn(dp
, "tls_encrypt_skb() produced fragmented frame\n");
632 u64_stats_update_begin(&r_vec
->tx_sync
);
634 u64_stats_update_end(&r_vec
->tx_sync
);
635 dev_kfree_skb_any(nskb
);
639 /* jump forward, a TX may have gotten lost, need to sync TX */
640 if (!resync_pending
&& seq
- ntls
->next_seq
< U32_MAX
/ 4)
641 tls_offload_tx_resync_request(nskb
->sk
, seq
,
649 u64_stats_update_begin(&r_vec
->tx_sync
);
650 if (!skb_is_gso(skb
))
653 r_vec
->hw_tls_tx
+= skb_shinfo(skb
)->gso_segs
;
654 u64_stats_update_end(&r_vec
->tx_sync
);
657 memcpy(tls_handle
, ntls
->fw_handle
, sizeof(ntls
->fw_handle
));
658 ntls
->next_seq
+= datalen
;
663 void nfp_net_tls_tx_undo(struct sk_buff
*skb
, u64 tls_handle
)
665 #ifdef CONFIG_TLS_DEVICE
666 struct nfp_net_tls_offload_ctx
*ntls
;
671 if (WARN_ON_ONCE(!tls_is_skb_tx_device_offloaded(skb
)))
674 datalen
= skb
->len
- skb_tcp_all_headers(skb
);
675 seq
= ntohl(tcp_hdr(skb
)->seq
);
677 ntls
= tls_driver_ctx(skb
->sk
, TLS_OFFLOAD_CTX_DIR_TX
);
678 if (ntls
->next_seq
== seq
+ datalen
)
679 ntls
->next_seq
= seq
;
685 static void nfp_net_tx_timeout(struct net_device
*netdev
, unsigned int txqueue
)
687 struct nfp_net
*nn
= netdev_priv(netdev
);
689 nn_warn(nn
, "TX watchdog timeout on ring: %u\n", txqueue
);
692 /* Receive processing */
694 nfp_net_calc_fl_bufsz_data(struct nfp_net_dp
*dp
)
696 unsigned int fl_bufsz
= 0;
698 if (dp
->rx_offset
== NFP_NET_CFG_RX_OFFSET_DYNAMIC
)
699 fl_bufsz
+= NFP_NET_MAX_PREPEND
;
701 fl_bufsz
+= dp
->rx_offset
;
702 fl_bufsz
+= ETH_HLEN
+ VLAN_HLEN
* 2 + dp
->mtu
;
707 static unsigned int nfp_net_calc_fl_bufsz(struct nfp_net_dp
*dp
)
709 unsigned int fl_bufsz
;
711 fl_bufsz
= NFP_NET_RX_BUF_HEADROOM
;
712 fl_bufsz
+= dp
->rx_dma_off
;
713 fl_bufsz
+= nfp_net_calc_fl_bufsz_data(dp
);
715 fl_bufsz
= SKB_DATA_ALIGN(fl_bufsz
);
716 fl_bufsz
+= SKB_DATA_ALIGN(sizeof(struct skb_shared_info
));
721 static unsigned int nfp_net_calc_fl_bufsz_xsk(struct nfp_net_dp
*dp
)
723 unsigned int fl_bufsz
;
725 fl_bufsz
= XDP_PACKET_HEADROOM
;
726 fl_bufsz
+= nfp_net_calc_fl_bufsz_data(dp
);
731 /* Setup and Configuration
735 * nfp_net_vecs_init() - Assign IRQs and setup rvecs.
736 * @nn: NFP Network structure
738 static void nfp_net_vecs_init(struct nfp_net
*nn
)
740 int numa_node
= dev_to_node(&nn
->pdev
->dev
);
741 struct nfp_net_r_vector
*r_vec
;
744 nn
->lsc_handler
= nfp_net_irq_lsc
;
745 nn
->exn_handler
= nfp_net_irq_exn
;
747 for (r
= 0; r
< nn
->max_r_vecs
; r
++) {
748 struct msix_entry
*entry
;
750 entry
= &nn
->irq_entries
[NFP_NET_NON_Q_VECTORS
+ r
];
752 r_vec
= &nn
->r_vecs
[r
];
754 r_vec
->irq_entry
= entry
->entry
;
755 r_vec
->irq_vector
= entry
->vector
;
758 r_vec
->handler
= nfp_net_irq_rxtx
;
760 r_vec
->handler
= nfp_ctrl_irq_rxtx
;
762 __skb_queue_head_init(&r_vec
->queue
);
763 spin_lock_init(&r_vec
->lock
);
764 tasklet_setup(&r_vec
->tasklet
, nn
->dp
.ops
->ctrl_poll
);
765 tasklet_disable(&r_vec
->tasklet
);
768 cpumask_set_cpu(cpumask_local_spread(r
, numa_node
), &r_vec
->affinity_mask
);
773 nfp_net_napi_add(struct nfp_net_dp
*dp
, struct nfp_net_r_vector
*r_vec
, int idx
)
776 netif_napi_add(dp
->netdev
, &r_vec
->napi
,
777 nfp_net_has_xsk_pool_slow(dp
, idx
) ? dp
->ops
->xsk_poll
: dp
->ops
->poll
);
779 tasklet_enable(&r_vec
->tasklet
);
783 nfp_net_napi_del(struct nfp_net_dp
*dp
, struct nfp_net_r_vector
*r_vec
)
786 netif_napi_del(&r_vec
->napi
);
788 tasklet_disable(&r_vec
->tasklet
);
792 nfp_net_vector_assign_rings(struct nfp_net_dp
*dp
,
793 struct nfp_net_r_vector
*r_vec
, int idx
)
795 r_vec
->rx_ring
= idx
< dp
->num_rx_rings
? &dp
->rx_rings
[idx
] : NULL
;
797 idx
< dp
->num_stack_tx_rings
? &dp
->tx_rings
[idx
] : NULL
;
799 r_vec
->xdp_ring
= idx
< dp
->num_tx_rings
- dp
->num_stack_tx_rings
?
800 &dp
->tx_rings
[dp
->num_stack_tx_rings
+ idx
] : NULL
;
802 if (nfp_net_has_xsk_pool_slow(dp
, idx
) || r_vec
->xsk_pool
) {
803 r_vec
->xsk_pool
= dp
->xdp_prog
? dp
->xsk_pools
[idx
] : NULL
;
806 xsk_pool_set_rxq_info(r_vec
->xsk_pool
,
807 &r_vec
->rx_ring
->xdp_rxq
);
809 nfp_net_napi_del(dp
, r_vec
);
810 nfp_net_napi_add(dp
, r_vec
, idx
);
815 nfp_net_prepare_vector(struct nfp_net
*nn
, struct nfp_net_r_vector
*r_vec
,
820 nfp_net_napi_add(&nn
->dp
, r_vec
, idx
);
822 snprintf(r_vec
->name
, sizeof(r_vec
->name
),
823 "%s-rxtx-%d", nfp_net_name(nn
), idx
);
824 err
= request_irq(r_vec
->irq_vector
, r_vec
->handler
, IRQF_NO_AUTOEN
,
827 nfp_net_napi_del(&nn
->dp
, r_vec
);
828 nn_err(nn
, "Error requesting IRQ %d\n", r_vec
->irq_vector
);
832 irq_update_affinity_hint(r_vec
->irq_vector
, &r_vec
->affinity_mask
);
834 nn_dbg(nn
, "RV%02d: irq=%03d/%03d\n", idx
, r_vec
->irq_vector
,
841 nfp_net_cleanup_vector(struct nfp_net
*nn
, struct nfp_net_r_vector
*r_vec
)
843 irq_update_affinity_hint(r_vec
->irq_vector
, NULL
);
844 nfp_net_napi_del(&nn
->dp
, r_vec
);
845 free_irq(r_vec
->irq_vector
, r_vec
);
849 * nfp_net_rss_write_itbl() - Write RSS indirection table to device
850 * @nn: NFP Net device to reconfigure
852 void nfp_net_rss_write_itbl(struct nfp_net
*nn
)
856 for (i
= 0; i
< NFP_NET_CFG_RSS_ITBL_SZ
; i
+= 4)
857 nn_writel(nn
, NFP_NET_CFG_RSS_ITBL
+ i
,
858 get_unaligned_le32(nn
->rss_itbl
+ i
));
862 * nfp_net_rss_write_key() - Write RSS hash key to device
863 * @nn: NFP Net device to reconfigure
865 void nfp_net_rss_write_key(struct nfp_net
*nn
)
869 for (i
= 0; i
< nfp_net_rss_key_sz(nn
); i
+= 4)
870 nn_writel(nn
, NFP_NET_CFG_RSS_KEY
+ i
,
871 get_unaligned_le32(nn
->rss_key
+ i
));
875 * nfp_net_coalesce_write_cfg() - Write irq coalescence configuration to HW
876 * @nn: NFP Net device to reconfigure
878 void nfp_net_coalesce_write_cfg(struct nfp_net
*nn
)
884 /* Compute factor used to convert coalesce '_usecs' parameters to
885 * ME timestamp ticks. There are 16 ME clock cycles for each timestamp
888 factor
= nn
->tlv_caps
.me_freq_mhz
/ 16;
890 /* copy RX interrupt coalesce parameters */
891 value
= (nn
->rx_coalesce_max_frames
<< 16) |
892 (factor
* nn
->rx_coalesce_usecs
);
893 for (i
= 0; i
< nn
->dp
.num_rx_rings
; i
++)
894 nn_writel(nn
, NFP_NET_CFG_RXR_IRQ_MOD(i
), value
);
896 /* copy TX interrupt coalesce parameters */
897 value
= (nn
->tx_coalesce_max_frames
<< 16) |
898 (factor
* nn
->tx_coalesce_usecs
);
899 for (i
= 0; i
< nn
->dp
.num_tx_rings
; i
++)
900 nn_writel(nn
, NFP_NET_CFG_TXR_IRQ_MOD(i
), value
);
904 * nfp_net_write_mac_addr() - Write mac address to the device control BAR
905 * @nn: NFP Net device to reconfigure
906 * @addr: MAC address to write
908 * Writes the MAC address from the netdev to the device control BAR. Does not
909 * perform the required reconfig. We do a bit of byte swapping dance because
912 static void nfp_net_write_mac_addr(struct nfp_net
*nn
, const u8
*addr
)
914 nn_writel(nn
, NFP_NET_CFG_MACADDR
+ 0, get_unaligned_be32(addr
));
915 nn_writew(nn
, NFP_NET_CFG_MACADDR
+ 6, get_unaligned_be16(addr
+ 4));
919 * nfp_net_clear_config_and_disable() - Clear control BAR and disable NFP
920 * @nn: NFP Net device to reconfigure
922 * Warning: must be fully idempotent.
924 static void nfp_net_clear_config_and_disable(struct nfp_net
*nn
)
926 u32 new_ctrl
, new_ctrl_w1
, update
;
930 new_ctrl
= nn
->dp
.ctrl
;
931 new_ctrl
&= ~NFP_NET_CFG_CTRL_ENABLE
;
932 update
= NFP_NET_CFG_UPDATE_GEN
;
933 update
|= NFP_NET_CFG_UPDATE_MSIX
;
934 update
|= NFP_NET_CFG_UPDATE_RING
;
936 if (nn
->cap
& NFP_NET_CFG_CTRL_RINGCFG
)
937 new_ctrl
&= ~NFP_NET_CFG_CTRL_RINGCFG
;
939 if (!(nn
->cap_w1
& NFP_NET_CFG_CTRL_FREELIST_EN
)) {
940 nn_writeq(nn
, NFP_NET_CFG_TXRS_ENABLE
, 0);
941 nn_writeq(nn
, NFP_NET_CFG_RXRS_ENABLE
, 0);
944 nn_writel(nn
, NFP_NET_CFG_CTRL
, new_ctrl
);
945 err
= nfp_net_reconfig(nn
, update
);
947 nn_err(nn
, "Could not disable device: %d\n", err
);
949 if (nn
->cap_w1
& NFP_NET_CFG_CTRL_FREELIST_EN
) {
950 new_ctrl_w1
= nn
->dp
.ctrl_w1
;
951 new_ctrl_w1
&= ~NFP_NET_CFG_CTRL_FREELIST_EN
;
952 nn_writeq(nn
, NFP_NET_CFG_TXRS_ENABLE
, 0);
953 nn_writeq(nn
, NFP_NET_CFG_RXRS_ENABLE
, 0);
955 nn_writel(nn
, NFP_NET_CFG_CTRL_WORD1
, new_ctrl_w1
);
956 err
= nfp_net_reconfig(nn
, update
);
958 nn_err(nn
, "Could not disable FREELIST_EN: %d\n", err
);
959 nn
->dp
.ctrl_w1
= new_ctrl_w1
;
962 for (r
= 0; r
< nn
->dp
.num_rx_rings
; r
++) {
963 nfp_net_rx_ring_reset(&nn
->dp
.rx_rings
[r
]);
964 if (nfp_net_has_xsk_pool_slow(&nn
->dp
, nn
->dp
.rx_rings
[r
].idx
))
965 nfp_net_xsk_rx_bufs_free(&nn
->dp
.rx_rings
[r
]);
967 for (r
= 0; r
< nn
->dp
.num_tx_rings
; r
++)
968 nfp_net_tx_ring_reset(&nn
->dp
, &nn
->dp
.tx_rings
[r
]);
969 for (r
= 0; r
< nn
->dp
.num_r_vecs
; r
++)
970 nfp_net_vec_clear_ring_data(nn
, r
);
972 nn
->dp
.ctrl
= new_ctrl
;
976 * nfp_net_set_config_and_enable() - Write control BAR and enable NFP
977 * @nn: NFP Net device to reconfigure
979 static int nfp_net_set_config_and_enable(struct nfp_net
*nn
)
981 u32 bufsz
, new_ctrl
, new_ctrl_w1
, update
= 0;
985 new_ctrl
= nn
->dp
.ctrl
;
986 new_ctrl_w1
= nn
->dp
.ctrl_w1
;
988 if (nn
->dp
.ctrl
& NFP_NET_CFG_CTRL_RSS_ANY
) {
989 nfp_net_rss_write_key(nn
);
990 nfp_net_rss_write_itbl(nn
);
991 nn_writel(nn
, NFP_NET_CFG_RSS_CTRL
, nn
->rss_cfg
);
992 update
|= NFP_NET_CFG_UPDATE_RSS
;
995 if (nn
->dp
.ctrl
& NFP_NET_CFG_CTRL_IRQMOD
) {
996 nfp_net_coalesce_write_cfg(nn
);
997 update
|= NFP_NET_CFG_UPDATE_IRQMOD
;
1000 for (r
= 0; r
< nn
->dp
.num_tx_rings
; r
++)
1001 nfp_net_tx_ring_hw_cfg_write(nn
, &nn
->dp
.tx_rings
[r
], r
);
1002 for (r
= 0; r
< nn
->dp
.num_rx_rings
; r
++)
1003 nfp_net_rx_ring_hw_cfg_write(nn
, &nn
->dp
.rx_rings
[r
], r
);
1005 nn_writeq(nn
, NFP_NET_CFG_TXRS_ENABLE
,
1006 U64_MAX
>> (64 - nn
->dp
.num_tx_rings
));
1008 nn_writeq(nn
, NFP_NET_CFG_RXRS_ENABLE
,
1009 U64_MAX
>> (64 - nn
->dp
.num_rx_rings
));
1012 nfp_net_write_mac_addr(nn
, nn
->dp
.netdev
->dev_addr
);
1014 nn_writel(nn
, NFP_NET_CFG_MTU
, nn
->dp
.mtu
);
1016 bufsz
= nn
->dp
.fl_bufsz
- nn
->dp
.rx_dma_off
- NFP_NET_RX_BUF_NON_DATA
;
1017 nn_writel(nn
, NFP_NET_CFG_FLBUFSZ
, bufsz
);
1020 * Step 1: Replace the CTRL_ENABLE by NFP_NET_CFG_CTRL_FREELIST_EN if
1021 * FREELIST_EN exits.
1023 if (nn
->cap_w1
& NFP_NET_CFG_CTRL_FREELIST_EN
)
1024 new_ctrl_w1
|= NFP_NET_CFG_CTRL_FREELIST_EN
;
1026 new_ctrl
|= NFP_NET_CFG_CTRL_ENABLE
;
1027 update
|= NFP_NET_CFG_UPDATE_GEN
;
1028 update
|= NFP_NET_CFG_UPDATE_MSIX
;
1029 update
|= NFP_NET_CFG_UPDATE_RING
;
1030 if (nn
->cap
& NFP_NET_CFG_CTRL_RINGCFG
)
1031 new_ctrl
|= NFP_NET_CFG_CTRL_RINGCFG
;
1033 /* Step 2: Send the configuration and write the freelist.
1034 * - The freelist only need to be written once.
1036 nn_writel(nn
, NFP_NET_CFG_CTRL
, new_ctrl
);
1037 nn_writel(nn
, NFP_NET_CFG_CTRL_WORD1
, new_ctrl_w1
);
1038 err
= nfp_net_reconfig(nn
, update
);
1040 nfp_net_clear_config_and_disable(nn
);
1044 nn
->dp
.ctrl
= new_ctrl
;
1045 nn
->dp
.ctrl_w1
= new_ctrl_w1
;
1047 for (r
= 0; r
< nn
->dp
.num_rx_rings
; r
++)
1048 nfp_net_rx_ring_fill_freelist(&nn
->dp
, &nn
->dp
.rx_rings
[r
]);
1050 /* Step 3: Do the NFP_NET_CFG_CTRL_ENABLE. Send the configuration.
1052 if (nn
->cap_w1
& NFP_NET_CFG_CTRL_FREELIST_EN
) {
1053 new_ctrl
|= NFP_NET_CFG_CTRL_ENABLE
;
1054 nn_writel(nn
, NFP_NET_CFG_CTRL
, new_ctrl
);
1056 err
= nfp_net_reconfig(nn
, update
);
1058 nfp_net_clear_config_and_disable(nn
);
1061 nn
->dp
.ctrl
= new_ctrl
;
1068 * nfp_net_close_stack() - Quiesce the stack (part of close)
1069 * @nn: NFP Net device to reconfigure
1071 static void nfp_net_close_stack(struct nfp_net
*nn
)
1073 struct nfp_net_r_vector
*r_vec
;
1076 disable_irq(nn
->irq_entries
[NFP_NET_IRQ_LSC_IDX
].vector
);
1077 netif_carrier_off(nn
->dp
.netdev
);
1078 nn
->link_up
= false;
1080 for (r
= 0; r
< nn
->dp
.num_r_vecs
; r
++) {
1081 r_vec
= &nn
->r_vecs
[r
];
1083 disable_irq(r_vec
->irq_vector
);
1084 napi_disable(&r_vec
->napi
);
1087 cancel_work_sync(&r_vec
->rx_dim
.work
);
1090 cancel_work_sync(&r_vec
->tx_dim
.work
);
1093 netif_tx_disable(nn
->dp
.netdev
);
1097 * nfp_net_close_free_all() - Free all runtime resources
1098 * @nn: NFP Net device to reconfigure
1100 static void nfp_net_close_free_all(struct nfp_net
*nn
)
1104 nfp_net_tx_rings_free(&nn
->dp
);
1105 nfp_net_rx_rings_free(&nn
->dp
);
1107 for (r
= 0; r
< nn
->dp
.num_r_vecs
; r
++)
1108 nfp_net_cleanup_vector(nn
, &nn
->r_vecs
[r
]);
1110 nfp_net_aux_irq_free(nn
, NFP_NET_CFG_LSC
, NFP_NET_IRQ_LSC_IDX
);
1111 nfp_net_aux_irq_free(nn
, NFP_NET_CFG_EXN
, NFP_NET_IRQ_EXN_IDX
);
1115 * nfp_net_netdev_close() - Called when the device is downed
1116 * @netdev: netdev structure
1118 static int nfp_net_netdev_close(struct net_device
*netdev
)
1120 struct nfp_net
*nn
= netdev_priv(netdev
);
1122 /* Step 1: Disable RX and TX rings from the Linux kernel perspective
1124 nfp_net_close_stack(nn
);
1128 if (nn
->cap_w1
& NFP_NET_CFG_CTRL_MCAST_FILTER
)
1129 __dev_mc_unsync(netdev
, nfp_net_mc_unsync
);
1131 nfp_net_clear_config_and_disable(nn
);
1132 nfp_port_configure(netdev
, false);
1134 /* Step 3: Free resources
1136 nfp_net_close_free_all(nn
);
1138 nn_dbg(nn
, "%s down", netdev
->name
);
1142 void nfp_ctrl_close(struct nfp_net
*nn
)
1148 for (r
= 0; r
< nn
->dp
.num_r_vecs
; r
++) {
1149 disable_irq(nn
->r_vecs
[r
].irq_vector
);
1150 tasklet_disable(&nn
->r_vecs
[r
].tasklet
);
1153 nfp_net_clear_config_and_disable(nn
);
1155 nfp_net_close_free_all(nn
);
1160 static void nfp_net_rx_dim_work(struct work_struct
*work
)
1162 struct nfp_net_r_vector
*r_vec
;
1163 unsigned int factor
, value
;
1164 struct dim_cq_moder moder
;
1168 dim
= container_of(work
, struct dim
, work
);
1169 moder
= net_dim_get_rx_moderation(dim
->mode
, dim
->profile_ix
);
1170 r_vec
= container_of(dim
, struct nfp_net_r_vector
, rx_dim
);
1171 nn
= r_vec
->nfp_net
;
1173 /* Compute factor used to convert coalesce '_usecs' parameters to
1174 * ME timestamp ticks. There are 16 ME clock cycles for each timestamp
1177 factor
= nn
->tlv_caps
.me_freq_mhz
/ 16;
1178 if (nfp_net_coalesce_para_check(factor
* moder
.usec
) ||
1179 nfp_net_coalesce_para_check(moder
.pkts
))
1182 /* copy RX interrupt coalesce parameters */
1183 value
= (moder
.pkts
<< 16) | (factor
* moder
.usec
);
1184 nn_writel(nn
, NFP_NET_CFG_RXR_IRQ_MOD(r_vec
->rx_ring
->idx
), value
);
1185 (void)nfp_net_reconfig(nn
, NFP_NET_CFG_UPDATE_IRQMOD
);
1187 dim
->state
= DIM_START_MEASURE
;
1190 static void nfp_net_tx_dim_work(struct work_struct
*work
)
1192 struct nfp_net_r_vector
*r_vec
;
1193 unsigned int factor
, value
;
1194 struct dim_cq_moder moder
;
1198 dim
= container_of(work
, struct dim
, work
);
1199 moder
= net_dim_get_tx_moderation(dim
->mode
, dim
->profile_ix
);
1200 r_vec
= container_of(dim
, struct nfp_net_r_vector
, tx_dim
);
1201 nn
= r_vec
->nfp_net
;
1203 /* Compute factor used to convert coalesce '_usecs' parameters to
1204 * ME timestamp ticks. There are 16 ME clock cycles for each timestamp
1207 factor
= nn
->tlv_caps
.me_freq_mhz
/ 16;
1208 if (nfp_net_coalesce_para_check(factor
* moder
.usec
) ||
1209 nfp_net_coalesce_para_check(moder
.pkts
))
1212 /* copy TX interrupt coalesce parameters */
1213 value
= (moder
.pkts
<< 16) | (factor
* moder
.usec
);
1214 nn_writel(nn
, NFP_NET_CFG_TXR_IRQ_MOD(r_vec
->tx_ring
->idx
), value
);
1215 (void)nfp_net_reconfig(nn
, NFP_NET_CFG_UPDATE_IRQMOD
);
1217 dim
->state
= DIM_START_MEASURE
;
1221 * nfp_net_open_stack() - Start the device from stack's perspective
1222 * @nn: NFP Net device to reconfigure
1224 static void nfp_net_open_stack(struct nfp_net
*nn
)
1226 struct nfp_net_r_vector
*r_vec
;
1229 for (r
= 0; r
< nn
->dp
.num_r_vecs
; r
++) {
1230 r_vec
= &nn
->r_vecs
[r
];
1232 if (r_vec
->rx_ring
) {
1233 INIT_WORK(&r_vec
->rx_dim
.work
, nfp_net_rx_dim_work
);
1234 r_vec
->rx_dim
.mode
= DIM_CQ_PERIOD_MODE_START_FROM_EQE
;
1237 if (r_vec
->tx_ring
) {
1238 INIT_WORK(&r_vec
->tx_dim
.work
, nfp_net_tx_dim_work
);
1239 r_vec
->tx_dim
.mode
= DIM_CQ_PERIOD_MODE_START_FROM_EQE
;
1242 napi_enable(&r_vec
->napi
);
1243 enable_irq(r_vec
->irq_vector
);
1246 netif_tx_wake_all_queues(nn
->dp
.netdev
);
1248 enable_irq(nn
->irq_entries
[NFP_NET_IRQ_LSC_IDX
].vector
);
1249 nfp_net_read_link_status(nn
);
1252 static int nfp_net_open_alloc_all(struct nfp_net
*nn
)
1256 err
= nfp_net_aux_irq_request(nn
, NFP_NET_CFG_EXN
, "%s-exn",
1257 nn
->exn_name
, sizeof(nn
->exn_name
),
1258 NFP_NET_IRQ_EXN_IDX
, nn
->exn_handler
);
1261 err
= nfp_net_aux_irq_request(nn
, NFP_NET_CFG_LSC
, "%s-lsc",
1262 nn
->lsc_name
, sizeof(nn
->lsc_name
),
1263 NFP_NET_IRQ_LSC_IDX
, nn
->lsc_handler
);
1266 disable_irq(nn
->irq_entries
[NFP_NET_IRQ_LSC_IDX
].vector
);
1268 for (r
= 0; r
< nn
->dp
.num_r_vecs
; r
++) {
1269 err
= nfp_net_prepare_vector(nn
, &nn
->r_vecs
[r
], r
);
1271 goto err_cleanup_vec_p
;
1274 err
= nfp_net_rx_rings_prepare(nn
, &nn
->dp
);
1276 goto err_cleanup_vec
;
1278 err
= nfp_net_tx_rings_prepare(nn
, &nn
->dp
);
1280 goto err_free_rx_rings
;
1282 for (r
= 0; r
< nn
->max_r_vecs
; r
++)
1283 nfp_net_vector_assign_rings(&nn
->dp
, &nn
->r_vecs
[r
], r
);
1288 nfp_net_rx_rings_free(&nn
->dp
);
1290 r
= nn
->dp
.num_r_vecs
;
1293 nfp_net_cleanup_vector(nn
, &nn
->r_vecs
[r
]);
1294 nfp_net_aux_irq_free(nn
, NFP_NET_CFG_LSC
, NFP_NET_IRQ_LSC_IDX
);
1296 nfp_net_aux_irq_free(nn
, NFP_NET_CFG_EXN
, NFP_NET_IRQ_EXN_IDX
);
1300 static int nfp_net_netdev_open(struct net_device
*netdev
)
1302 struct nfp_net
*nn
= netdev_priv(netdev
);
1305 /* Step 1: Allocate resources for rings and the like
1306 * - Request interrupts
1307 * - Allocate RX and TX ring resources
1308 * - Setup initial RSS table
1310 err
= nfp_net_open_alloc_all(nn
);
1314 err
= netif_set_real_num_tx_queues(netdev
, nn
->dp
.num_stack_tx_rings
);
1318 err
= netif_set_real_num_rx_queues(netdev
, nn
->dp
.num_rx_rings
);
1322 /* Step 2: Configure the NFP
1323 * - Ifup the physical interface if it exists
1324 * - Enable rings from 0 to tx_rings/rx_rings - 1.
1325 * - Write MAC address (in case it changed)
1327 * - Set the Freelist buffer size
1330 err
= nfp_port_configure(netdev
, true);
1334 err
= nfp_net_set_config_and_enable(nn
);
1336 goto err_port_disable
;
1338 /* Step 3: Enable for kernel
1339 * - put some freelist descriptors on each RX ring
1340 * - enable NAPI on each ring
1341 * - enable all TX queues
1344 nfp_net_open_stack(nn
);
1349 nfp_port_configure(netdev
, false);
1351 nfp_net_close_free_all(nn
);
1355 int nfp_ctrl_open(struct nfp_net
*nn
)
1359 /* ring dumping depends on vNICs being opened/closed under rtnl */
1362 err
= nfp_net_open_alloc_all(nn
);
1366 err
= nfp_net_set_config_and_enable(nn
);
1370 for (r
= 0; r
< nn
->dp
.num_r_vecs
; r
++)
1371 enable_irq(nn
->r_vecs
[r
].irq_vector
);
1378 nfp_net_close_free_all(nn
);
1384 int nfp_net_sched_mbox_amsg_work(struct nfp_net
*nn
, u32 cmd
, const void *data
, size_t len
,
1385 int (*cb
)(struct nfp_net
*, struct nfp_mbox_amsg_entry
*))
1387 struct nfp_mbox_amsg_entry
*entry
;
1389 entry
= kmalloc(sizeof(*entry
) + len
, GFP_ATOMIC
);
1393 memcpy(entry
->msg
, data
, len
);
1397 spin_lock_bh(&nn
->mbox_amsg
.lock
);
1398 list_add_tail(&entry
->list
, &nn
->mbox_amsg
.list
);
1399 spin_unlock_bh(&nn
->mbox_amsg
.lock
);
1401 schedule_work(&nn
->mbox_amsg
.work
);
1406 static void nfp_net_mbox_amsg_work(struct work_struct
*work
)
1408 struct nfp_net
*nn
= container_of(work
, struct nfp_net
, mbox_amsg
.work
);
1409 struct nfp_mbox_amsg_entry
*entry
, *tmp
;
1410 struct list_head tmp_list
;
1412 INIT_LIST_HEAD(&tmp_list
);
1414 spin_lock_bh(&nn
->mbox_amsg
.lock
);
1415 list_splice_init(&nn
->mbox_amsg
.list
, &tmp_list
);
1416 spin_unlock_bh(&nn
->mbox_amsg
.lock
);
1418 list_for_each_entry_safe(entry
, tmp
, &tmp_list
, list
) {
1419 int err
= entry
->cfg(nn
, entry
);
1422 nn_err(nn
, "Config cmd %d to HW failed %d.\n", entry
->cmd
, err
);
1424 list_del(&entry
->list
);
1429 static int nfp_net_mc_cfg(struct nfp_net
*nn
, struct nfp_mbox_amsg_entry
*entry
)
1431 unsigned char *addr
= entry
->msg
;
1434 ret
= nfp_net_mbox_lock(nn
, NFP_NET_CFG_MULTICAST_SZ
);
1438 nn_writel(nn
, nn
->tlv_caps
.mbox_off
+ NFP_NET_CFG_MULTICAST_MAC_HI
,
1439 get_unaligned_be32(addr
));
1440 nn_writew(nn
, nn
->tlv_caps
.mbox_off
+ NFP_NET_CFG_MULTICAST_MAC_LO
,
1441 get_unaligned_be16(addr
+ 4));
1443 return nfp_net_mbox_reconfig_and_unlock(nn
, entry
->cmd
);
1446 static int nfp_net_mc_sync(struct net_device
*netdev
, const unsigned char *addr
)
1448 struct nfp_net
*nn
= netdev_priv(netdev
);
1450 if (netdev_mc_count(netdev
) > NFP_NET_CFG_MAC_MC_MAX
) {
1451 nn_err(nn
, "Requested number of MC addresses (%d) exceeds maximum (%d).\n",
1452 netdev_mc_count(netdev
), NFP_NET_CFG_MAC_MC_MAX
);
1456 return nfp_net_sched_mbox_amsg_work(nn
, NFP_NET_CFG_MBOX_CMD_MULTICAST_ADD
, addr
,
1457 NFP_NET_CFG_MULTICAST_SZ
, nfp_net_mc_cfg
);
1460 static int nfp_net_mc_unsync(struct net_device
*netdev
, const unsigned char *addr
)
1462 struct nfp_net
*nn
= netdev_priv(netdev
);
1464 return nfp_net_sched_mbox_amsg_work(nn
, NFP_NET_CFG_MBOX_CMD_MULTICAST_DEL
, addr
,
1465 NFP_NET_CFG_MULTICAST_SZ
, nfp_net_mc_cfg
);
1468 static void nfp_net_set_rx_mode(struct net_device
*netdev
)
1470 struct nfp_net
*nn
= netdev_priv(netdev
);
1471 u32 new_ctrl
, new_ctrl_w1
;
1473 new_ctrl
= nn
->dp
.ctrl
;
1474 new_ctrl_w1
= nn
->dp
.ctrl_w1
;
1476 if (!netdev_mc_empty(netdev
) || netdev
->flags
& IFF_ALLMULTI
)
1477 new_ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_L2MC
;
1479 new_ctrl
&= ~NFP_NET_CFG_CTRL_L2MC
;
1481 if (netdev
->flags
& IFF_ALLMULTI
)
1482 new_ctrl_w1
&= ~NFP_NET_CFG_CTRL_MCAST_FILTER
;
1484 new_ctrl_w1
|= nn
->cap_w1
& NFP_NET_CFG_CTRL_MCAST_FILTER
;
1486 if (netdev
->flags
& IFF_PROMISC
) {
1487 if (nn
->cap
& NFP_NET_CFG_CTRL_PROMISC
)
1488 new_ctrl
|= NFP_NET_CFG_CTRL_PROMISC
;
1490 nn_warn(nn
, "FW does not support promiscuous mode\n");
1492 new_ctrl
&= ~NFP_NET_CFG_CTRL_PROMISC
;
1495 if ((nn
->cap_w1
& NFP_NET_CFG_CTRL_MCAST_FILTER
) &&
1496 __dev_mc_sync(netdev
, nfp_net_mc_sync
, nfp_net_mc_unsync
))
1497 netdev_err(netdev
, "Sync mc address failed\n");
1499 if (new_ctrl
== nn
->dp
.ctrl
&& new_ctrl_w1
== nn
->dp
.ctrl_w1
)
1502 if (new_ctrl
!= nn
->dp
.ctrl
)
1503 nn_writel(nn
, NFP_NET_CFG_CTRL
, new_ctrl
);
1504 if (new_ctrl_w1
!= nn
->dp
.ctrl_w1
)
1505 nn_writel(nn
, NFP_NET_CFG_CTRL_WORD1
, new_ctrl_w1
);
1506 nfp_net_reconfig_post(nn
, NFP_NET_CFG_UPDATE_GEN
);
1508 nn
->dp
.ctrl
= new_ctrl
;
1509 nn
->dp
.ctrl_w1
= new_ctrl_w1
;
1512 static void nfp_net_rss_init_itbl(struct nfp_net
*nn
)
1516 for (i
= 0; i
< sizeof(nn
->rss_itbl
); i
++)
1518 ethtool_rxfh_indir_default(i
, nn
->dp
.num_rx_rings
);
1521 static void nfp_net_dp_swap(struct nfp_net
*nn
, struct nfp_net_dp
*dp
)
1523 struct nfp_net_dp new_dp
= *dp
;
1528 WRITE_ONCE(nn
->dp
.netdev
->mtu
, new_dp
.mtu
);
1530 if (!netif_is_rxfh_configured(nn
->dp
.netdev
))
1531 nfp_net_rss_init_itbl(nn
);
1534 static int nfp_net_dp_swap_enable(struct nfp_net
*nn
, struct nfp_net_dp
*dp
)
1539 nfp_net_dp_swap(nn
, dp
);
1541 for (r
= 0; r
< nn
->max_r_vecs
; r
++)
1542 nfp_net_vector_assign_rings(&nn
->dp
, &nn
->r_vecs
[r
], r
);
1544 err
= netif_set_real_num_queues(nn
->dp
.netdev
,
1545 nn
->dp
.num_stack_tx_rings
,
1546 nn
->dp
.num_rx_rings
);
1550 return nfp_net_set_config_and_enable(nn
);
1553 struct nfp_net_dp
*nfp_net_clone_dp(struct nfp_net
*nn
)
1555 struct nfp_net_dp
*new;
1557 new = kmalloc(sizeof(*new), GFP_KERNEL
);
1563 new->xsk_pools
= kmemdup(new->xsk_pools
,
1564 array_size(nn
->max_r_vecs
,
1565 sizeof(new->xsk_pools
)),
1567 if (!new->xsk_pools
) {
1572 /* Clear things which need to be recomputed */
1574 new->tx_rings
= NULL
;
1575 new->rx_rings
= NULL
;
1576 new->num_r_vecs
= 0;
1577 new->num_stack_tx_rings
= 0;
1584 static void nfp_net_free_dp(struct nfp_net_dp
*dp
)
1586 kfree(dp
->xsk_pools
);
1591 nfp_net_check_config(struct nfp_net
*nn
, struct nfp_net_dp
*dp
,
1592 struct netlink_ext_ack
*extack
)
1594 unsigned int r
, xsk_min_fl_bufsz
;
1596 /* XDP-enabled tests */
1599 if (dp
->fl_bufsz
> PAGE_SIZE
) {
1600 NL_SET_ERR_MSG_MOD(extack
, "MTU too large w/ XDP enabled");
1603 if (dp
->num_tx_rings
> nn
->max_tx_rings
) {
1604 NL_SET_ERR_MSG_MOD(extack
, "Insufficient number of TX rings w/ XDP enabled");
1608 xsk_min_fl_bufsz
= nfp_net_calc_fl_bufsz_xsk(dp
);
1609 for (r
= 0; r
< nn
->max_r_vecs
; r
++) {
1610 if (!dp
->xsk_pools
[r
])
1613 if (xsk_pool_get_rx_frame_size(dp
->xsk_pools
[r
]) < xsk_min_fl_bufsz
) {
1614 NL_SET_ERR_MSG_MOD(extack
,
1615 "XSK buffer pool chunk size too small");
1623 int nfp_net_ring_reconfig(struct nfp_net
*nn
, struct nfp_net_dp
*dp
,
1624 struct netlink_ext_ack
*extack
)
1628 dp
->fl_bufsz
= nfp_net_calc_fl_bufsz(dp
);
1630 dp
->num_stack_tx_rings
= dp
->num_tx_rings
;
1632 dp
->num_stack_tx_rings
-= dp
->num_rx_rings
;
1634 dp
->num_r_vecs
= max(dp
->num_rx_rings
, dp
->num_stack_tx_rings
);
1636 err
= nfp_net_check_config(nn
, dp
, extack
);
1640 if (!netif_running(dp
->netdev
)) {
1641 nfp_net_dp_swap(nn
, dp
);
1646 /* Prepare new rings */
1647 for (r
= nn
->dp
.num_r_vecs
; r
< dp
->num_r_vecs
; r
++) {
1648 err
= nfp_net_prepare_vector(nn
, &nn
->r_vecs
[r
], r
);
1651 goto err_cleanup_vecs
;
1655 err
= nfp_net_rx_rings_prepare(nn
, dp
);
1657 goto err_cleanup_vecs
;
1659 err
= nfp_net_tx_rings_prepare(nn
, dp
);
1663 /* Stop device, swap in new rings, try to start the firmware */
1664 nfp_net_close_stack(nn
);
1665 nfp_net_clear_config_and_disable(nn
);
1667 err
= nfp_net_dp_swap_enable(nn
, dp
);
1671 nfp_net_clear_config_and_disable(nn
);
1673 /* Try with old configuration and old rings */
1674 err2
= nfp_net_dp_swap_enable(nn
, dp
);
1676 nn_err(nn
, "Can't restore ring config - FW communication failed (%d,%d)\n",
1679 for (r
= dp
->num_r_vecs
- 1; r
>= nn
->dp
.num_r_vecs
; r
--)
1680 nfp_net_cleanup_vector(nn
, &nn
->r_vecs
[r
]);
1682 nfp_net_rx_rings_free(dp
);
1683 nfp_net_tx_rings_free(dp
);
1685 nfp_net_open_stack(nn
);
1687 nfp_net_free_dp(dp
);
1692 nfp_net_rx_rings_free(dp
);
1694 for (r
= dp
->num_r_vecs
- 1; r
>= nn
->dp
.num_r_vecs
; r
--)
1695 nfp_net_cleanup_vector(nn
, &nn
->r_vecs
[r
]);
1696 nfp_net_free_dp(dp
);
1700 static int nfp_net_change_mtu(struct net_device
*netdev
, int new_mtu
)
1702 struct nfp_net
*nn
= netdev_priv(netdev
);
1703 struct nfp_net_dp
*dp
;
1706 err
= nfp_app_check_mtu(nn
->app
, netdev
, new_mtu
);
1710 dp
= nfp_net_clone_dp(nn
);
1716 return nfp_net_ring_reconfig(nn
, dp
, NULL
);
1720 nfp_net_vlan_rx_add_vid(struct net_device
*netdev
, __be16 proto
, u16 vid
)
1722 const u32 cmd
= NFP_NET_CFG_MBOX_CMD_CTAG_FILTER_ADD
;
1723 struct nfp_net
*nn
= netdev_priv(netdev
);
1726 /* Priority tagged packets with vlan id 0 are processed by the
1727 * NFP as untagged packets
1732 err
= nfp_net_mbox_lock(nn
, NFP_NET_CFG_VLAN_FILTER_SZ
);
1736 nn_writew(nn
, nn
->tlv_caps
.mbox_off
+ NFP_NET_CFG_VLAN_FILTER_VID
, vid
);
1737 nn_writew(nn
, nn
->tlv_caps
.mbox_off
+ NFP_NET_CFG_VLAN_FILTER_PROTO
,
1740 return nfp_net_mbox_reconfig_and_unlock(nn
, cmd
);
1744 nfp_net_vlan_rx_kill_vid(struct net_device
*netdev
, __be16 proto
, u16 vid
)
1746 const u32 cmd
= NFP_NET_CFG_MBOX_CMD_CTAG_FILTER_KILL
;
1747 struct nfp_net
*nn
= netdev_priv(netdev
);
1750 /* Priority tagged packets with vlan id 0 are processed by the
1751 * NFP as untagged packets
1756 err
= nfp_net_mbox_lock(nn
, NFP_NET_CFG_VLAN_FILTER_SZ
);
1760 nn_writew(nn
, nn
->tlv_caps
.mbox_off
+ NFP_NET_CFG_VLAN_FILTER_VID
, vid
);
1761 nn_writew(nn
, nn
->tlv_caps
.mbox_off
+ NFP_NET_CFG_VLAN_FILTER_PROTO
,
1764 return nfp_net_mbox_reconfig_and_unlock(nn
, cmd
);
1768 nfp_net_fs_fill_v4(struct nfp_net
*nn
, struct nfp_fs_entry
*entry
, u32 op
, u32
*addr
)
1775 u8 k_proto
, m_proto
;
1776 __be32 k_sip
, m_sip
, k_dip
, m_dip
;
1777 __be16 k_sport
, m_sport
, k_dport
, m_dport
;
1782 nn_writel(nn
, *addr
, op
);
1783 *addr
+= sizeof(u32
);
1785 v4_rule
.loc
= cpu_to_be16(entry
->loc
);
1786 v4_rule
.k_proto
= entry
->key
.l4_proto
;
1787 v4_rule
.m_proto
= entry
->msk
.l4_proto
;
1788 v4_rule
.k_sip
= entry
->key
.sip4
;
1789 v4_rule
.m_sip
= entry
->msk
.sip4
;
1790 v4_rule
.k_dip
= entry
->key
.dip4
;
1791 v4_rule
.m_dip
= entry
->msk
.dip4
;
1792 v4_rule
.k_sport
= entry
->key
.sport
;
1793 v4_rule
.m_sport
= entry
->msk
.sport
;
1794 v4_rule
.k_dport
= entry
->key
.dport
;
1795 v4_rule
.m_dport
= entry
->msk
.dport
;
1797 for (i
= 0; i
< ARRAY_SIZE(v4_rule
.val
); i
++, *addr
+= sizeof(__be32
))
1798 nn_writel(nn
, *addr
, be32_to_cpu(v4_rule
.val
[i
]));
1802 nfp_net_fs_fill_v6(struct nfp_net
*nn
, struct nfp_fs_entry
*entry
, u32 op
, u32
*addr
)
1809 u8 k_proto
, m_proto
;
1810 __be32 k_sip
[4], m_sip
[4], k_dip
[4], m_dip
[4];
1811 __be16 k_sport
, m_sport
, k_dport
, m_dport
;
1816 nn_writel(nn
, *addr
, op
);
1817 *addr
+= sizeof(u32
);
1819 v6_rule
.loc
= cpu_to_be16(entry
->loc
);
1820 v6_rule
.k_proto
= entry
->key
.l4_proto
;
1821 v6_rule
.m_proto
= entry
->msk
.l4_proto
;
1822 for (i
= 0; i
< 4; i
++) {
1823 v6_rule
.k_sip
[i
] = entry
->key
.sip6
[i
];
1824 v6_rule
.m_sip
[i
] = entry
->msk
.sip6
[i
];
1825 v6_rule
.k_dip
[i
] = entry
->key
.dip6
[i
];
1826 v6_rule
.m_dip
[i
] = entry
->msk
.dip6
[i
];
1828 v6_rule
.k_sport
= entry
->key
.sport
;
1829 v6_rule
.m_sport
= entry
->msk
.sport
;
1830 v6_rule
.k_dport
= entry
->key
.dport
;
1831 v6_rule
.m_dport
= entry
->msk
.dport
;
1833 for (i
= 0; i
< ARRAY_SIZE(v6_rule
.val
); i
++, *addr
+= sizeof(__be32
))
1834 nn_writel(nn
, *addr
, be32_to_cpu(v6_rule
.val
[i
]));
1837 #define NFP_FS_QUEUE_ID GENMASK(22, 16)
1838 #define NFP_FS_ACT GENMASK(15, 0)
1839 #define NFP_FS_ACT_DROP BIT(0)
1840 #define NFP_FS_ACT_Q BIT(1)
1842 nfp_net_fs_fill_act(struct nfp_net
*nn
, struct nfp_fs_entry
*entry
, u32 addr
)
1844 u32 action
= 0; /* 0 means default passthrough */
1846 if (entry
->action
== RX_CLS_FLOW_DISC
)
1847 action
= NFP_FS_ACT_DROP
;
1848 else if (!(entry
->flow_type
& FLOW_RSS
))
1849 action
= FIELD_PREP(NFP_FS_QUEUE_ID
, entry
->action
) | NFP_FS_ACT_Q
;
1851 nn_writel(nn
, addr
, action
);
1854 int nfp_net_fs_add_hw(struct nfp_net
*nn
, struct nfp_fs_entry
*entry
)
1856 u32 addr
= nn
->tlv_caps
.mbox_off
+ NFP_NET_CFG_MBOX_SIMPLE_VAL
;
1859 err
= nfp_net_mbox_lock(nn
, NFP_NET_CFG_FS_SZ
);
1863 switch (entry
->flow_type
& ~FLOW_RSS
) {
1867 case IPV4_USER_FLOW
:
1868 nfp_net_fs_fill_v4(nn
, entry
, NFP_NET_CFG_MBOX_CMD_FS_ADD_V4
, &addr
);
1873 case IPV6_USER_FLOW
:
1874 nfp_net_fs_fill_v6(nn
, entry
, NFP_NET_CFG_MBOX_CMD_FS_ADD_V6
, &addr
);
1877 nn_writel(nn
, addr
, NFP_NET_CFG_MBOX_CMD_FS_ADD_ETHTYPE
);
1878 addr
+= sizeof(u32
);
1879 nn_writew(nn
, addr
, be16_to_cpu(entry
->key
.l3_proto
));
1880 addr
+= sizeof(u32
);
1884 nfp_net_fs_fill_act(nn
, entry
, addr
);
1886 err
= nfp_net_mbox_reconfig_and_unlock(nn
, NFP_NET_CFG_MBOX_CMD_FLOW_STEER
);
1888 nn_err(nn
, "Add new fs rule failed with %d\n", err
);
1895 int nfp_net_fs_del_hw(struct nfp_net
*nn
, struct nfp_fs_entry
*entry
)
1897 u32 addr
= nn
->tlv_caps
.mbox_off
+ NFP_NET_CFG_MBOX_SIMPLE_VAL
;
1900 err
= nfp_net_mbox_lock(nn
, NFP_NET_CFG_FS_SZ
);
1904 switch (entry
->flow_type
& ~FLOW_RSS
) {
1908 case IPV4_USER_FLOW
:
1909 nfp_net_fs_fill_v4(nn
, entry
, NFP_NET_CFG_MBOX_CMD_FS_DEL_V4
, &addr
);
1914 case IPV6_USER_FLOW
:
1915 nfp_net_fs_fill_v6(nn
, entry
, NFP_NET_CFG_MBOX_CMD_FS_DEL_V6
, &addr
);
1918 nn_writel(nn
, addr
, NFP_NET_CFG_MBOX_CMD_FS_DEL_ETHTYPE
);
1919 addr
+= sizeof(u32
);
1920 nn_writew(nn
, addr
, be16_to_cpu(entry
->key
.l3_proto
));
1921 addr
+= sizeof(u32
);
1925 nfp_net_fs_fill_act(nn
, entry
, addr
);
1927 err
= nfp_net_mbox_reconfig_and_unlock(nn
, NFP_NET_CFG_MBOX_CMD_FLOW_STEER
);
1929 nn_err(nn
, "Delete fs rule failed with %d\n", err
);
1936 static void nfp_net_fs_clean(struct nfp_net
*nn
)
1938 struct nfp_fs_entry
*entry
, *tmp
;
1940 list_for_each_entry_safe(entry
, tmp
, &nn
->fs
.list
, node
) {
1941 nfp_net_fs_del_hw(nn
, entry
);
1942 list_del(&entry
->node
);
1947 static void nfp_net_stat64(struct net_device
*netdev
,
1948 struct rtnl_link_stats64
*stats
)
1950 struct nfp_net
*nn
= netdev_priv(netdev
);
1953 /* Collect software stats */
1954 for (r
= 0; r
< nn
->max_r_vecs
; r
++) {
1955 struct nfp_net_r_vector
*r_vec
= &nn
->r_vecs
[r
];
1960 start
= u64_stats_fetch_begin(&r_vec
->rx_sync
);
1961 data
[0] = r_vec
->rx_pkts
;
1962 data
[1] = r_vec
->rx_bytes
;
1963 data
[2] = r_vec
->rx_drops
;
1964 } while (u64_stats_fetch_retry(&r_vec
->rx_sync
, start
));
1965 stats
->rx_packets
+= data
[0];
1966 stats
->rx_bytes
+= data
[1];
1967 stats
->rx_dropped
+= data
[2];
1970 start
= u64_stats_fetch_begin(&r_vec
->tx_sync
);
1971 data
[0] = r_vec
->tx_pkts
;
1972 data
[1] = r_vec
->tx_bytes
;
1973 data
[2] = r_vec
->tx_errors
;
1974 } while (u64_stats_fetch_retry(&r_vec
->tx_sync
, start
));
1975 stats
->tx_packets
+= data
[0];
1976 stats
->tx_bytes
+= data
[1];
1977 stats
->tx_errors
+= data
[2];
1980 /* Add in device stats */
1981 stats
->multicast
+= nn_readq(nn
, NFP_NET_CFG_STATS_RX_MC_FRAMES
);
1982 stats
->rx_dropped
+= nn_readq(nn
, NFP_NET_CFG_STATS_RX_DISCARDS
);
1983 stats
->rx_errors
+= nn_readq(nn
, NFP_NET_CFG_STATS_RX_ERRORS
);
1985 stats
->tx_dropped
+= nn_readq(nn
, NFP_NET_CFG_STATS_TX_DISCARDS
);
1986 stats
->tx_errors
+= nn_readq(nn
, NFP_NET_CFG_STATS_TX_ERRORS
);
1989 static int nfp_net_set_features(struct net_device
*netdev
,
1990 netdev_features_t features
)
1992 netdev_features_t changed
= netdev
->features
^ features
;
1993 struct nfp_net
*nn
= netdev_priv(netdev
);
1997 /* Assume this is not called with features we have not advertised */
1999 new_ctrl
= nn
->dp
.ctrl
;
2001 if (changed
& NETIF_F_RXCSUM
) {
2002 if (features
& NETIF_F_RXCSUM
)
2003 new_ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_RXCSUM_ANY
;
2005 new_ctrl
&= ~NFP_NET_CFG_CTRL_RXCSUM_ANY
;
2008 if (changed
& (NETIF_F_IP_CSUM
| NETIF_F_IPV6_CSUM
)) {
2009 if (features
& (NETIF_F_IP_CSUM
| NETIF_F_IPV6_CSUM
))
2010 new_ctrl
|= NFP_NET_CFG_CTRL_TXCSUM
;
2012 new_ctrl
&= ~NFP_NET_CFG_CTRL_TXCSUM
;
2015 if (changed
& (NETIF_F_TSO
| NETIF_F_TSO6
)) {
2016 if (features
& (NETIF_F_TSO
| NETIF_F_TSO6
))
2017 new_ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_LSO2
?:
2018 NFP_NET_CFG_CTRL_LSO
;
2020 new_ctrl
&= ~NFP_NET_CFG_CTRL_LSO_ANY
;
2023 if (changed
& NETIF_F_HW_VLAN_CTAG_RX
) {
2024 if (features
& NETIF_F_HW_VLAN_CTAG_RX
)
2025 new_ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_RXVLAN_V2
?:
2026 NFP_NET_CFG_CTRL_RXVLAN
;
2028 new_ctrl
&= ~NFP_NET_CFG_CTRL_RXVLAN_ANY
;
2031 if (changed
& NETIF_F_HW_VLAN_CTAG_TX
) {
2032 if (features
& NETIF_F_HW_VLAN_CTAG_TX
)
2033 new_ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_TXVLAN_V2
?:
2034 NFP_NET_CFG_CTRL_TXVLAN
;
2036 new_ctrl
&= ~NFP_NET_CFG_CTRL_TXVLAN_ANY
;
2039 if (changed
& NETIF_F_HW_VLAN_CTAG_FILTER
) {
2040 if (features
& NETIF_F_HW_VLAN_CTAG_FILTER
)
2041 new_ctrl
|= NFP_NET_CFG_CTRL_CTAG_FILTER
;
2043 new_ctrl
&= ~NFP_NET_CFG_CTRL_CTAG_FILTER
;
2046 if (changed
& NETIF_F_HW_VLAN_STAG_RX
) {
2047 if (features
& NETIF_F_HW_VLAN_STAG_RX
)
2048 new_ctrl
|= NFP_NET_CFG_CTRL_RXQINQ
;
2050 new_ctrl
&= ~NFP_NET_CFG_CTRL_RXQINQ
;
2053 if (changed
& NETIF_F_SG
) {
2054 if (features
& NETIF_F_SG
)
2055 new_ctrl
|= NFP_NET_CFG_CTRL_GATHER
;
2057 new_ctrl
&= ~NFP_NET_CFG_CTRL_GATHER
;
2060 err
= nfp_port_set_features(netdev
, features
);
2064 nn_dbg(nn
, "Feature change 0x%llx -> 0x%llx (changed=0x%llx)\n",
2065 netdev
->features
, features
, changed
);
2067 if (new_ctrl
== nn
->dp
.ctrl
)
2070 nn_dbg(nn
, "NIC ctrl: 0x%x -> 0x%x\n", nn
->dp
.ctrl
, new_ctrl
);
2071 nn_writel(nn
, NFP_NET_CFG_CTRL
, new_ctrl
);
2072 err
= nfp_net_reconfig(nn
, NFP_NET_CFG_UPDATE_GEN
);
2076 nn
->dp
.ctrl
= new_ctrl
;
2081 static netdev_features_t
2082 nfp_net_fix_features(struct net_device
*netdev
,
2083 netdev_features_t features
)
2085 if ((features
& NETIF_F_HW_VLAN_CTAG_RX
) &&
2086 (features
& NETIF_F_HW_VLAN_STAG_RX
)) {
2087 if (netdev
->features
& NETIF_F_HW_VLAN_CTAG_RX
) {
2088 features
&= ~NETIF_F_HW_VLAN_CTAG_RX
;
2089 netdev
->wanted_features
&= ~NETIF_F_HW_VLAN_CTAG_RX
;
2091 "S-tag and C-tag stripping can't be enabled at the same time. Enabling S-tag stripping and disabling C-tag stripping\n");
2092 } else if (netdev
->features
& NETIF_F_HW_VLAN_STAG_RX
) {
2093 features
&= ~NETIF_F_HW_VLAN_STAG_RX
;
2094 netdev
->wanted_features
&= ~NETIF_F_HW_VLAN_STAG_RX
;
2096 "S-tag and C-tag stripping can't be enabled at the same time. Enabling C-tag stripping and disabling S-tag stripping\n");
2102 static netdev_features_t
2103 nfp_net_features_check(struct sk_buff
*skb
, struct net_device
*dev
,
2104 netdev_features_t features
)
2108 /* We can't do TSO over double tagged packets (802.1AD) */
2109 features
&= vlan_features_check(skb
, features
);
2111 if (!skb
->encapsulation
)
2114 /* Ensure that inner L4 header offset fits into TX descriptor field */
2115 if (skb_is_gso(skb
)) {
2118 if (skb_shinfo(skb
)->gso_type
& SKB_GSO_UDP_L4
)
2119 hdrlen
= skb_inner_transport_offset(skb
) + sizeof(struct udphdr
);
2121 hdrlen
= skb_inner_tcp_all_headers(skb
);
2123 /* Assume worst case scenario of having longest possible
2124 * metadata prepend - 8B
2126 if (unlikely(hdrlen
> NFP_NET_LSO_MAX_HDR_SZ
- 8))
2127 features
&= ~NETIF_F_GSO_MASK
;
2130 if (xfrm_offload(skb
))
2133 /* VXLAN/GRE check */
2134 switch (vlan_get_protocol(skb
)) {
2135 case htons(ETH_P_IP
):
2136 l4_hdr
= ip_hdr(skb
)->protocol
;
2138 case htons(ETH_P_IPV6
):
2139 l4_hdr
= ipv6_hdr(skb
)->nexthdr
;
2142 return features
& ~(NETIF_F_CSUM_MASK
| NETIF_F_GSO_MASK
);
2145 if (skb
->inner_protocol_type
!= ENCAP_TYPE_ETHER
||
2146 skb
->inner_protocol
!= htons(ETH_P_TEB
) ||
2147 (l4_hdr
!= IPPROTO_UDP
&& l4_hdr
!= IPPROTO_GRE
) ||
2148 (l4_hdr
== IPPROTO_UDP
&&
2149 (skb_inner_mac_header(skb
) - skb_transport_header(skb
) !=
2150 sizeof(struct udphdr
) + sizeof(struct vxlanhdr
))))
2151 return features
& ~(NETIF_F_CSUM_MASK
| NETIF_F_GSO_MASK
);
2157 nfp_net_get_phys_port_name(struct net_device
*netdev
, char *name
, size_t len
)
2159 struct nfp_net
*nn
= netdev_priv(netdev
);
2162 /* If port is defined, devlink_port is registered and devlink core
2163 * is taking care of name formatting.
2168 if (nn
->dp
.is_vf
|| nn
->vnic_no_name
)
2171 n
= snprintf(name
, len
, "n%d", nn
->id
);
2178 static int nfp_net_xdp_setup_drv(struct nfp_net
*nn
, struct netdev_bpf
*bpf
)
2180 struct bpf_prog
*prog
= bpf
->prog
;
2181 struct nfp_net_dp
*dp
;
2184 if (!prog
== !nn
->dp
.xdp_prog
) {
2185 WRITE_ONCE(nn
->dp
.xdp_prog
, prog
);
2186 xdp_attachment_setup(&nn
->xdp
, bpf
);
2190 dp
= nfp_net_clone_dp(nn
);
2194 dp
->xdp_prog
= prog
;
2195 dp
->num_tx_rings
+= prog
? nn
->dp
.num_rx_rings
: -nn
->dp
.num_rx_rings
;
2196 dp
->rx_dma_dir
= prog
? DMA_BIDIRECTIONAL
: DMA_FROM_DEVICE
;
2197 dp
->rx_dma_off
= prog
? XDP_PACKET_HEADROOM
- nn
->dp
.rx_offset
: 0;
2199 /* We need RX reconfig to remap the buffers (BIDIR vs FROM_DEV) */
2200 err
= nfp_net_ring_reconfig(nn
, dp
, bpf
->extack
);
2204 xdp_attachment_setup(&nn
->xdp
, bpf
);
2208 static int nfp_net_xdp_setup_hw(struct nfp_net
*nn
, struct netdev_bpf
*bpf
)
2212 err
= nfp_app_xdp_offload(nn
->app
, nn
, bpf
->prog
, bpf
->extack
);
2216 xdp_attachment_setup(&nn
->xdp_hw
, bpf
);
2220 static int nfp_net_xdp(struct net_device
*netdev
, struct netdev_bpf
*xdp
)
2222 struct nfp_net
*nn
= netdev_priv(netdev
);
2224 switch (xdp
->command
) {
2225 case XDP_SETUP_PROG
:
2226 return nfp_net_xdp_setup_drv(nn
, xdp
);
2227 case XDP_SETUP_PROG_HW
:
2228 return nfp_net_xdp_setup_hw(nn
, xdp
);
2229 case XDP_SETUP_XSK_POOL
:
2230 return nfp_net_xsk_setup_pool(netdev
, xdp
->xsk
.pool
,
2233 return nfp_app_bpf(nn
->app
, nn
, xdp
);
2237 static int nfp_net_set_mac_address(struct net_device
*netdev
, void *addr
)
2239 struct nfp_net
*nn
= netdev_priv(netdev
);
2240 struct sockaddr
*saddr
= addr
;
2243 err
= eth_prepare_mac_addr_change(netdev
, addr
);
2247 nfp_net_write_mac_addr(nn
, saddr
->sa_data
);
2249 err
= nfp_net_reconfig(nn
, NFP_NET_CFG_UPDATE_MACADDR
);
2253 eth_commit_mac_addr_change(netdev
, addr
);
2258 static int nfp_net_bridge_getlink(struct sk_buff
*skb
, u32 pid
, u32 seq
,
2259 struct net_device
*dev
, u32 filter_mask
,
2262 struct nfp_net
*nn
= netdev_priv(dev
);
2265 if (!(nn
->cap
& NFP_NET_CFG_CTRL_VEPA
))
2268 mode
= (nn
->dp
.ctrl
& NFP_NET_CFG_CTRL_VEPA
) ?
2269 BRIDGE_MODE_VEPA
: BRIDGE_MODE_VEB
;
2271 return ndo_dflt_bridge_getlink(skb
, pid
, seq
, dev
, mode
, 0, 0,
2272 nlflags
, filter_mask
, NULL
);
2275 static int nfp_net_bridge_setlink(struct net_device
*dev
, struct nlmsghdr
*nlh
,
2276 u16 flags
, struct netlink_ext_ack
*extack
)
2278 struct nfp_net
*nn
= netdev_priv(dev
);
2279 struct nlattr
*attr
, *br_spec
;
2284 if (!(nn
->cap
& NFP_NET_CFG_CTRL_VEPA
))
2287 br_spec
= nlmsg_find_attr(nlh
, sizeof(struct ifinfomsg
), IFLA_AF_SPEC
);
2291 nla_for_each_nested_type(attr
, IFLA_BRIDGE_MODE
, br_spec
, rem
) {
2292 new_ctrl
= nn
->dp
.ctrl
;
2293 mode
= nla_get_u16(attr
);
2294 if (mode
== BRIDGE_MODE_VEPA
)
2295 new_ctrl
|= NFP_NET_CFG_CTRL_VEPA
;
2296 else if (mode
== BRIDGE_MODE_VEB
)
2297 new_ctrl
&= ~NFP_NET_CFG_CTRL_VEPA
;
2301 if (new_ctrl
== nn
->dp
.ctrl
)
2304 nn_writel(nn
, NFP_NET_CFG_CTRL
, new_ctrl
);
2305 err
= nfp_net_reconfig(nn
, NFP_NET_CFG_UPDATE_GEN
);
2307 nn
->dp
.ctrl
= new_ctrl
;
2315 const struct net_device_ops nfp_nfd3_netdev_ops
= {
2316 .ndo_init
= nfp_app_ndo_init
,
2317 .ndo_uninit
= nfp_app_ndo_uninit
,
2318 .ndo_open
= nfp_net_netdev_open
,
2319 .ndo_stop
= nfp_net_netdev_close
,
2320 .ndo_start_xmit
= nfp_net_tx
,
2321 .ndo_get_stats64
= nfp_net_stat64
,
2322 .ndo_vlan_rx_add_vid
= nfp_net_vlan_rx_add_vid
,
2323 .ndo_vlan_rx_kill_vid
= nfp_net_vlan_rx_kill_vid
,
2324 .ndo_set_vf_mac
= nfp_app_set_vf_mac
,
2325 .ndo_set_vf_vlan
= nfp_app_set_vf_vlan
,
2326 .ndo_set_vf_rate
= nfp_app_set_vf_rate
,
2327 .ndo_set_vf_spoofchk
= nfp_app_set_vf_spoofchk
,
2328 .ndo_set_vf_trust
= nfp_app_set_vf_trust
,
2329 .ndo_get_vf_config
= nfp_app_get_vf_config
,
2330 .ndo_set_vf_link_state
= nfp_app_set_vf_link_state
,
2331 .ndo_setup_tc
= nfp_port_setup_tc
,
2332 .ndo_tx_timeout
= nfp_net_tx_timeout
,
2333 .ndo_set_rx_mode
= nfp_net_set_rx_mode
,
2334 .ndo_change_mtu
= nfp_net_change_mtu
,
2335 .ndo_set_mac_address
= nfp_net_set_mac_address
,
2336 .ndo_set_features
= nfp_net_set_features
,
2337 .ndo_fix_features
= nfp_net_fix_features
,
2338 .ndo_features_check
= nfp_net_features_check
,
2339 .ndo_get_phys_port_name
= nfp_net_get_phys_port_name
,
2340 .ndo_bpf
= nfp_net_xdp
,
2341 .ndo_xsk_wakeup
= nfp_net_xsk_wakeup
,
2342 .ndo_bridge_getlink
= nfp_net_bridge_getlink
,
2343 .ndo_bridge_setlink
= nfp_net_bridge_setlink
,
2346 const struct net_device_ops nfp_nfdk_netdev_ops
= {
2347 .ndo_init
= nfp_app_ndo_init
,
2348 .ndo_uninit
= nfp_app_ndo_uninit
,
2349 .ndo_open
= nfp_net_netdev_open
,
2350 .ndo_stop
= nfp_net_netdev_close
,
2351 .ndo_start_xmit
= nfp_net_tx
,
2352 .ndo_get_stats64
= nfp_net_stat64
,
2353 .ndo_vlan_rx_add_vid
= nfp_net_vlan_rx_add_vid
,
2354 .ndo_vlan_rx_kill_vid
= nfp_net_vlan_rx_kill_vid
,
2355 .ndo_set_vf_mac
= nfp_app_set_vf_mac
,
2356 .ndo_set_vf_vlan
= nfp_app_set_vf_vlan
,
2357 .ndo_set_vf_rate
= nfp_app_set_vf_rate
,
2358 .ndo_set_vf_spoofchk
= nfp_app_set_vf_spoofchk
,
2359 .ndo_set_vf_trust
= nfp_app_set_vf_trust
,
2360 .ndo_get_vf_config
= nfp_app_get_vf_config
,
2361 .ndo_set_vf_link_state
= nfp_app_set_vf_link_state
,
2362 .ndo_setup_tc
= nfp_port_setup_tc
,
2363 .ndo_tx_timeout
= nfp_net_tx_timeout
,
2364 .ndo_set_rx_mode
= nfp_net_set_rx_mode
,
2365 .ndo_change_mtu
= nfp_net_change_mtu
,
2366 .ndo_set_mac_address
= nfp_net_set_mac_address
,
2367 .ndo_set_features
= nfp_net_set_features
,
2368 .ndo_fix_features
= nfp_net_fix_features
,
2369 .ndo_features_check
= nfp_net_features_check
,
2370 .ndo_get_phys_port_name
= nfp_net_get_phys_port_name
,
2371 .ndo_bpf
= nfp_net_xdp
,
2372 .ndo_bridge_getlink
= nfp_net_bridge_getlink
,
2373 .ndo_bridge_setlink
= nfp_net_bridge_setlink
,
2376 static int nfp_udp_tunnel_sync(struct net_device
*netdev
, unsigned int table
)
2378 struct nfp_net
*nn
= netdev_priv(netdev
);
2381 BUILD_BUG_ON(NFP_NET_N_VXLAN_PORTS
& 1);
2382 for (i
= 0; i
< NFP_NET_N_VXLAN_PORTS
; i
+= 2) {
2383 struct udp_tunnel_info ti0
, ti1
;
2385 udp_tunnel_nic_get_port(netdev
, table
, i
, &ti0
);
2386 udp_tunnel_nic_get_port(netdev
, table
, i
+ 1, &ti1
);
2388 nn_writel(nn
, NFP_NET_CFG_VXLAN_PORT
+ i
* sizeof(ti0
.port
),
2389 be16_to_cpu(ti1
.port
) << 16 | be16_to_cpu(ti0
.port
));
2392 return nfp_net_reconfig(nn
, NFP_NET_CFG_UPDATE_VXLAN
);
2395 static const struct udp_tunnel_nic_info nfp_udp_tunnels
= {
2396 .sync_table
= nfp_udp_tunnel_sync
,
2397 .flags
= UDP_TUNNEL_NIC_INFO_MAY_SLEEP
|
2398 UDP_TUNNEL_NIC_INFO_OPEN_ONLY
,
2401 .n_entries
= NFP_NET_N_VXLAN_PORTS
,
2402 .tunnel_types
= UDP_TUNNEL_TYPE_VXLAN
,
2408 * nfp_net_info() - Print general info about the NIC
2409 * @nn: NFP Net device to reconfigure
2411 void nfp_net_info(struct nfp_net
*nn
)
2413 nn_info(nn
, "NFP-6xxx %sNetdev: TxQs=%d/%d RxQs=%d/%d\n",
2414 nn
->dp
.is_vf
? "VF " : "",
2415 nn
->dp
.num_tx_rings
, nn
->max_tx_rings
,
2416 nn
->dp
.num_rx_rings
, nn
->max_rx_rings
);
2417 nn_info(nn
, "VER: %d.%d.%d.%d, Maximum supported MTU: %d\n",
2418 nn
->fw_ver
.extend
, nn
->fw_ver
.class,
2419 nn
->fw_ver
.major
, nn
->fw_ver
.minor
,
2421 nn_info(nn
, "CAP: %#x %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
2423 nn
->cap
& NFP_NET_CFG_CTRL_PROMISC
? "PROMISC " : "",
2424 nn
->cap
& NFP_NET_CFG_CTRL_L2BC
? "L2BCFILT " : "",
2425 nn
->cap
& NFP_NET_CFG_CTRL_L2MC
? "L2MCFILT " : "",
2426 nn
->cap
& NFP_NET_CFG_CTRL_RXCSUM
? "RXCSUM " : "",
2427 nn
->cap
& NFP_NET_CFG_CTRL_TXCSUM
? "TXCSUM " : "",
2428 nn
->cap
& NFP_NET_CFG_CTRL_RXVLAN
? "RXVLAN " : "",
2429 nn
->cap
& NFP_NET_CFG_CTRL_TXVLAN
? "TXVLAN " : "",
2430 nn
->cap
& NFP_NET_CFG_CTRL_RXQINQ
? "RXQINQ " : "",
2431 nn
->cap
& NFP_NET_CFG_CTRL_RXVLAN_V2
? "RXVLANv2 " : "",
2432 nn
->cap
& NFP_NET_CFG_CTRL_TXVLAN_V2
? "TXVLANv2 " : "",
2433 nn
->cap
& NFP_NET_CFG_CTRL_SCATTER
? "SCATTER " : "",
2434 nn
->cap
& NFP_NET_CFG_CTRL_GATHER
? "GATHER " : "",
2435 nn
->cap
& NFP_NET_CFG_CTRL_LSO
? "TSO1 " : "",
2436 nn
->cap
& NFP_NET_CFG_CTRL_LSO2
? "TSO2 " : "",
2437 nn
->cap
& NFP_NET_CFG_CTRL_RSS
? "RSS1 " : "",
2438 nn
->cap
& NFP_NET_CFG_CTRL_RSS2
? "RSS2 " : "",
2439 nn
->cap
& NFP_NET_CFG_CTRL_CTAG_FILTER
? "CTAG_FILTER " : "",
2440 nn
->cap
& NFP_NET_CFG_CTRL_MSIXAUTO
? "AUTOMASK " : "",
2441 nn
->cap
& NFP_NET_CFG_CTRL_IRQMOD
? "IRQMOD " : "",
2442 nn
->cap
& NFP_NET_CFG_CTRL_TXRWB
? "TXRWB " : "",
2443 nn
->cap
& NFP_NET_CFG_CTRL_VEPA
? "VEPA " : "",
2444 nn
->cap
& NFP_NET_CFG_CTRL_VXLAN
? "VXLAN " : "",
2445 nn
->cap
& NFP_NET_CFG_CTRL_NVGRE
? "NVGRE " : "",
2446 nn
->cap
& NFP_NET_CFG_CTRL_CSUM_COMPLETE
?
2447 "RXCSUM_COMPLETE " : "",
2448 nn
->cap
& NFP_NET_CFG_CTRL_LIVE_ADDR
? "LIVE_ADDR " : "",
2449 nn
->cap_w1
& NFP_NET_CFG_CTRL_MCAST_FILTER
? "MULTICAST_FILTER " : "",
2450 nn
->cap_w1
& NFP_NET_CFG_CTRL_USO
? "USO " : "",
2451 nfp_app_extra_cap(nn
->app
, nn
));
2455 * nfp_net_alloc() - Allocate netdev and related structure
2457 * @dev_info: NFP ASIC params
2458 * @ctrl_bar: PCI IOMEM with vNIC config memory
2459 * @needs_netdev: Whether to allocate a netdev for this vNIC
2460 * @max_tx_rings: Maximum number of TX rings supported by device
2461 * @max_rx_rings: Maximum number of RX rings supported by device
2463 * This function allocates a netdev device and fills in the initial
2464 * part of the @struct nfp_net structure. In case of control device
2465 * nfp_net structure is allocated without the netdev.
2467 * Return: NFP Net device structure, or ERR_PTR on error.
2470 nfp_net_alloc(struct pci_dev
*pdev
, const struct nfp_dev_info
*dev_info
,
2471 void __iomem
*ctrl_bar
, bool needs_netdev
,
2472 unsigned int max_tx_rings
, unsigned int max_rx_rings
)
2474 u64 dma_mask
= dma_get_mask(&pdev
->dev
);
2479 struct net_device
*netdev
;
2481 netdev
= alloc_etherdev_mqs(sizeof(struct nfp_net
),
2482 max_tx_rings
, max_rx_rings
);
2484 return ERR_PTR(-ENOMEM
);
2486 SET_NETDEV_DEV(netdev
, &pdev
->dev
);
2487 nn
= netdev_priv(netdev
);
2488 nn
->dp
.netdev
= netdev
;
2490 nn
= vzalloc(sizeof(*nn
));
2492 return ERR_PTR(-ENOMEM
);
2495 nn
->dp
.dev
= &pdev
->dev
;
2496 nn
->dp
.ctrl_bar
= ctrl_bar
;
2497 nn
->dev_info
= dev_info
;
2499 nfp_net_get_fw_version(&nn
->fw_ver
, ctrl_bar
);
2501 switch (FIELD_GET(NFP_NET_CFG_VERSION_DP_MASK
, nn
->fw_ver
.extend
)) {
2502 case NFP_NET_CFG_VERSION_DP_NFD3
:
2503 nn
->dp
.ops
= &nfp_nfd3_ops
;
2505 case NFP_NET_CFG_VERSION_DP_NFDK
:
2506 if (nn
->fw_ver
.major
< 5) {
2508 "NFDK must use ABI 5 or newer, found: %d\n",
2513 nn
->dp
.ops
= &nfp_nfdk_ops
;
2520 if ((dma_mask
& nn
->dp
.ops
->dma_mask
) != dma_mask
) {
2522 "DMA mask of loaded firmware: %llx, required DMA mask: %llx\n",
2523 nn
->dp
.ops
->dma_mask
, dma_mask
);
2528 nn
->max_tx_rings
= max_tx_rings
;
2529 nn
->max_rx_rings
= max_rx_rings
;
2531 nn
->dp
.num_tx_rings
= min_t(unsigned int,
2532 max_tx_rings
, num_online_cpus());
2533 nn
->dp
.num_rx_rings
= min_t(unsigned int, max_rx_rings
,
2534 netif_get_num_default_rss_queues());
2536 nn
->dp
.num_r_vecs
= max(nn
->dp
.num_tx_rings
, nn
->dp
.num_rx_rings
);
2537 nn
->dp
.num_r_vecs
= min_t(unsigned int,
2538 nn
->dp
.num_r_vecs
, num_online_cpus());
2539 nn
->max_r_vecs
= nn
->dp
.num_r_vecs
;
2541 nn
->dp
.xsk_pools
= kcalloc(nn
->max_r_vecs
, sizeof(nn
->dp
.xsk_pools
),
2543 if (!nn
->dp
.xsk_pools
) {
2548 nn
->dp
.txd_cnt
= NFP_NET_TX_DESCS_DEFAULT
;
2549 nn
->dp
.rxd_cnt
= NFP_NET_RX_DESCS_DEFAULT
;
2551 sema_init(&nn
->bar_lock
, 1);
2553 spin_lock_init(&nn
->reconfig_lock
);
2554 spin_lock_init(&nn
->link_status_lock
);
2556 timer_setup(&nn
->reconfig_timer
, nfp_net_reconfig_timer
, 0);
2558 err
= nfp_net_tlv_caps_parse(&nn
->pdev
->dev
, nn
->dp
.ctrl_bar
,
2563 err
= nfp_ccm_mbox_alloc(nn
);
2571 free_netdev(nn
->dp
.netdev
);
2574 return ERR_PTR(err
);
2578 * nfp_net_free() - Undo what @nfp_net_alloc() did
2579 * @nn: NFP Net device to reconfigure
2581 void nfp_net_free(struct nfp_net
*nn
)
2583 WARN_ON(timer_pending(&nn
->reconfig_timer
) || nn
->reconfig_posted
);
2584 nfp_ccm_mbox_free(nn
);
2586 kfree(nn
->dp
.xsk_pools
);
2588 free_netdev(nn
->dp
.netdev
);
2594 * nfp_net_rss_key_sz() - Get current size of the RSS key
2595 * @nn: NFP Net device instance
2597 * Return: size of the RSS key for currently selected hash function.
2599 unsigned int nfp_net_rss_key_sz(struct nfp_net
*nn
)
2601 switch (nn
->rss_hfunc
) {
2602 case ETH_RSS_HASH_TOP
:
2603 return NFP_NET_CFG_RSS_KEY_SZ
;
2604 case ETH_RSS_HASH_XOR
:
2606 case ETH_RSS_HASH_CRC32
:
2610 nn_warn(nn
, "Unknown hash function: %u\n", nn
->rss_hfunc
);
2615 * nfp_net_rss_init() - Set the initial RSS parameters
2616 * @nn: NFP Net device to reconfigure
2618 static void nfp_net_rss_init(struct nfp_net
*nn
)
2620 unsigned long func_bit
, rss_cap_hfunc
;
2623 /* Read the RSS function capability and select first supported func */
2624 reg
= nn_readl(nn
, NFP_NET_CFG_RSS_CAP
);
2625 rss_cap_hfunc
= FIELD_GET(NFP_NET_CFG_RSS_CAP_HFUNC
, reg
);
2627 rss_cap_hfunc
= FIELD_GET(NFP_NET_CFG_RSS_CAP_HFUNC
,
2628 NFP_NET_CFG_RSS_TOEPLITZ
);
2630 func_bit
= find_first_bit(&rss_cap_hfunc
, NFP_NET_CFG_RSS_HFUNCS
);
2631 if (func_bit
== NFP_NET_CFG_RSS_HFUNCS
) {
2632 dev_warn(nn
->dp
.dev
,
2633 "Bad RSS config, defaulting to Toeplitz hash\n");
2634 func_bit
= ETH_RSS_HASH_TOP_BIT
;
2636 nn
->rss_hfunc
= 1 << func_bit
;
2638 netdev_rss_key_fill(nn
->rss_key
, nfp_net_rss_key_sz(nn
));
2640 nfp_net_rss_init_itbl(nn
);
2642 /* Enable IPv4/IPv6 TCP by default */
2643 nn
->rss_cfg
= NFP_NET_CFG_RSS_IPV4_TCP
|
2644 NFP_NET_CFG_RSS_IPV6_TCP
|
2645 NFP_NET_CFG_RSS_IPV4_UDP
|
2646 NFP_NET_CFG_RSS_IPV6_UDP
|
2647 FIELD_PREP(NFP_NET_CFG_RSS_HFUNC
, nn
->rss_hfunc
) |
2648 NFP_NET_CFG_RSS_MASK
;
2652 * nfp_net_irqmod_init() - Set the initial IRQ moderation parameters
2653 * @nn: NFP Net device to reconfigure
2655 static void nfp_net_irqmod_init(struct nfp_net
*nn
)
2657 nn
->rx_coalesce_usecs
= 50;
2658 nn
->rx_coalesce_max_frames
= 64;
2659 nn
->tx_coalesce_usecs
= 50;
2660 nn
->tx_coalesce_max_frames
= 64;
2662 nn
->rx_coalesce_adapt_on
= true;
2663 nn
->tx_coalesce_adapt_on
= true;
2666 static void nfp_net_netdev_init(struct nfp_net
*nn
)
2668 struct net_device
*netdev
= nn
->dp
.netdev
;
2670 nfp_net_write_mac_addr(nn
, nn
->dp
.netdev
->dev_addr
);
2672 netdev
->mtu
= nn
->dp
.mtu
;
2674 /* Advertise/enable offloads based on capabilities
2676 * Note: netdev->features show the currently enabled features
2677 * and netdev->hw_features advertises which features are
2678 * supported. By default we enable most features.
2680 if (nn
->cap
& NFP_NET_CFG_CTRL_LIVE_ADDR
)
2681 netdev
->priv_flags
|= IFF_LIVE_ADDR_CHANGE
;
2683 netdev
->hw_features
= NETIF_F_HIGHDMA
;
2684 if (nn
->cap
& NFP_NET_CFG_CTRL_RXCSUM_ANY
) {
2685 netdev
->hw_features
|= NETIF_F_RXCSUM
;
2686 nn
->dp
.ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_RXCSUM_ANY
;
2688 if (nn
->cap
& NFP_NET_CFG_CTRL_TXCSUM
) {
2689 netdev
->hw_features
|= NETIF_F_IP_CSUM
| NETIF_F_IPV6_CSUM
;
2690 nn
->dp
.ctrl
|= NFP_NET_CFG_CTRL_TXCSUM
;
2692 if (nn
->cap
& NFP_NET_CFG_CTRL_GATHER
) {
2693 netdev
->hw_features
|= NETIF_F_SG
;
2694 nn
->dp
.ctrl
|= NFP_NET_CFG_CTRL_GATHER
;
2696 if ((nn
->cap
& NFP_NET_CFG_CTRL_LSO
&& nn
->fw_ver
.major
> 2) ||
2697 nn
->cap
& NFP_NET_CFG_CTRL_LSO2
) {
2698 netdev
->hw_features
|= NETIF_F_TSO
| NETIF_F_TSO6
;
2699 if (nn
->cap_w1
& NFP_NET_CFG_CTRL_USO
)
2700 netdev
->hw_features
|= NETIF_F_GSO_UDP_L4
;
2701 nn
->dp
.ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_LSO2
?:
2702 NFP_NET_CFG_CTRL_LSO
;
2704 if (nn
->cap
& NFP_NET_CFG_CTRL_RSS_ANY
)
2705 netdev
->hw_features
|= NETIF_F_RXHASH
;
2707 #ifdef CONFIG_NFP_NET_IPSEC
2708 if (nn
->cap_w1
& NFP_NET_CFG_CTRL_IPSEC
)
2709 netdev
->hw_features
|= NETIF_F_HW_ESP
| NETIF_F_HW_ESP_TX_CSUM
;
2712 if (nn
->cap
& NFP_NET_CFG_CTRL_VXLAN
) {
2713 if (nn
->cap
& NFP_NET_CFG_CTRL_LSO
) {
2714 netdev
->hw_features
|= NETIF_F_GSO_UDP_TUNNEL
|
2715 NETIF_F_GSO_UDP_TUNNEL_CSUM
|
2716 NETIF_F_GSO_PARTIAL
;
2717 netdev
->gso_partial_features
= NETIF_F_GSO_UDP_TUNNEL_CSUM
;
2719 netdev
->udp_tunnel_nic_info
= &nfp_udp_tunnels
;
2720 nn
->dp
.ctrl
|= NFP_NET_CFG_CTRL_VXLAN
;
2722 if (nn
->cap
& NFP_NET_CFG_CTRL_NVGRE
) {
2723 if (nn
->cap
& NFP_NET_CFG_CTRL_LSO
)
2724 netdev
->hw_features
|= NETIF_F_GSO_GRE
;
2725 nn
->dp
.ctrl
|= NFP_NET_CFG_CTRL_NVGRE
;
2727 if (nn
->cap
& (NFP_NET_CFG_CTRL_VXLAN
| NFP_NET_CFG_CTRL_NVGRE
))
2728 netdev
->hw_enc_features
= netdev
->hw_features
;
2730 netdev
->vlan_features
= netdev
->hw_features
;
2732 if (nn
->cap
& NFP_NET_CFG_CTRL_RXVLAN_ANY
) {
2733 netdev
->hw_features
|= NETIF_F_HW_VLAN_CTAG_RX
;
2734 nn
->dp
.ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_RXVLAN_V2
?:
2735 NFP_NET_CFG_CTRL_RXVLAN
;
2737 if (nn
->cap
& NFP_NET_CFG_CTRL_TXVLAN_ANY
) {
2738 if (nn
->cap
& NFP_NET_CFG_CTRL_LSO2
) {
2739 nn_warn(nn
, "Device advertises both TSO2 and TXVLAN. Refusing to enable TXVLAN.\n");
2741 netdev
->hw_features
|= NETIF_F_HW_VLAN_CTAG_TX
;
2742 nn
->dp
.ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_TXVLAN_V2
?:
2743 NFP_NET_CFG_CTRL_TXVLAN
;
2746 if (nn
->cap
& NFP_NET_CFG_CTRL_CTAG_FILTER
) {
2747 netdev
->hw_features
|= NETIF_F_HW_VLAN_CTAG_FILTER
;
2748 nn
->dp
.ctrl
|= NFP_NET_CFG_CTRL_CTAG_FILTER
;
2750 if (nn
->cap
& NFP_NET_CFG_CTRL_RXQINQ
) {
2751 netdev
->hw_features
|= NETIF_F_HW_VLAN_STAG_RX
;
2752 nn
->dp
.ctrl
|= NFP_NET_CFG_CTRL_RXQINQ
;
2755 netdev
->features
= netdev
->hw_features
;
2757 if (nfp_app_has_tc(nn
->app
) && nn
->port
)
2758 netdev
->hw_features
|= NETIF_F_HW_TC
;
2760 /* C-Tag strip and S-Tag strip can't be supported simultaneously,
2761 * so enable C-Tag strip and disable S-Tag strip by default.
2763 netdev
->features
&= ~NETIF_F_HW_VLAN_STAG_RX
;
2764 nn
->dp
.ctrl
&= ~NFP_NET_CFG_CTRL_RXQINQ
;
2766 netdev
->xdp_features
= NETDEV_XDP_ACT_BASIC
;
2767 if (nn
->app
&& nn
->app
->type
->id
== NFP_APP_BPF_NIC
)
2768 netdev
->xdp_features
|= NETDEV_XDP_ACT_HW_OFFLOAD
;
2770 /* Finalise the netdev setup */
2771 switch (nn
->dp
.ops
->version
) {
2772 case NFP_NFD_VER_NFD3
:
2773 netdev
->netdev_ops
= &nfp_nfd3_netdev_ops
;
2774 netdev
->xdp_features
|= NETDEV_XDP_ACT_XSK_ZEROCOPY
;
2775 netdev
->xdp_features
|= NETDEV_XDP_ACT_REDIRECT
;
2777 case NFP_NFD_VER_NFDK
:
2778 netdev
->netdev_ops
= &nfp_nfdk_netdev_ops
;
2782 netdev
->watchdog_timeo
= msecs_to_jiffies(5 * 1000);
2784 /* MTU range: 68 - hw-specific max */
2785 netdev
->min_mtu
= ETH_MIN_MTU
;
2786 netdev
->max_mtu
= nn
->max_mtu
;
2788 netif_set_tso_max_segs(netdev
, NFP_NET_LSO_MAX_SEGS
);
2790 netif_carrier_off(netdev
);
2792 nfp_net_set_ethtool_ops(netdev
);
2795 static int nfp_net_read_caps(struct nfp_net
*nn
)
2797 /* Get some of the read-only fields from the BAR */
2798 nn
->cap
= nn_readl(nn
, NFP_NET_CFG_CAP
);
2799 nn
->cap_w1
= nn_readl(nn
, NFP_NET_CFG_CAP_WORD1
);
2800 nn
->max_mtu
= nn_readl(nn
, NFP_NET_CFG_MAX_MTU
);
2802 /* ABI 4.x and ctrl vNIC always use chained metadata, in other cases
2803 * we allow use of non-chained metadata if RSS(v1) is the only
2804 * advertised capability requiring metadata.
2806 nn
->dp
.chained_metadata_format
= nn
->fw_ver
.major
== 4 ||
2808 !(nn
->cap
& NFP_NET_CFG_CTRL_RSS
) ||
2809 nn
->cap
& NFP_NET_CFG_CTRL_CHAIN_META
;
2810 /* RSS(v1) uses non-chained metadata format, except in ABI 4.x where
2811 * it has the same meaning as RSSv2.
2813 if (nn
->dp
.chained_metadata_format
&& nn
->fw_ver
.major
!= 4)
2814 nn
->cap
&= ~NFP_NET_CFG_CTRL_RSS
;
2816 /* Determine RX packet/metadata boundary offset */
2817 if (nn
->fw_ver
.major
>= 2) {
2820 reg
= nn_readl(nn
, NFP_NET_CFG_RX_OFFSET
);
2821 if (reg
> NFP_NET_MAX_PREPEND
) {
2822 nn_err(nn
, "Invalid rx offset: %d\n", reg
);
2825 nn
->dp
.rx_offset
= reg
;
2827 nn
->dp
.rx_offset
= NFP_NET_RX_OFFSET
;
2830 /* Mask out NFD-version-specific features */
2831 nn
->cap
&= nn
->dp
.ops
->cap_mask
;
2833 /* For control vNICs mask out the capabilities app doesn't want. */
2835 nn
->cap
&= nn
->app
->type
->ctrl_cap_mask
;
2841 * nfp_net_init() - Initialise/finalise the nfp_net structure
2842 * @nn: NFP Net device structure
2844 * Return: 0 on success or negative errno on error.
2846 int nfp_net_init(struct nfp_net
*nn
)
2850 nn
->dp
.rx_dma_dir
= DMA_FROM_DEVICE
;
2852 err
= nfp_net_read_caps(nn
);
2856 /* Set default MTU and Freelist buffer size */
2857 if (!nfp_net_is_data_vnic(nn
) && nn
->app
->ctrl_mtu
) {
2858 nn
->dp
.mtu
= min(nn
->app
->ctrl_mtu
, nn
->max_mtu
);
2859 } else if (nn
->max_mtu
< NFP_NET_DEFAULT_MTU
) {
2860 nn
->dp
.mtu
= nn
->max_mtu
;
2862 nn
->dp
.mtu
= NFP_NET_DEFAULT_MTU
;
2864 nn
->dp
.fl_bufsz
= nfp_net_calc_fl_bufsz(&nn
->dp
);
2866 if (nfp_app_ctrl_uses_data_vnics(nn
->app
))
2867 nn
->dp
.ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_CMSG_DATA
;
2869 if (nn
->cap
& NFP_NET_CFG_CTRL_RSS_ANY
) {
2870 nfp_net_rss_init(nn
);
2871 nn
->dp
.ctrl
|= nn
->cap
& NFP_NET_CFG_CTRL_RSS2
?:
2872 NFP_NET_CFG_CTRL_RSS
;
2875 /* Allow L2 Broadcast and Multicast through by default, if supported */
2876 if (nn
->cap
& NFP_NET_CFG_CTRL_L2BC
)
2877 nn
->dp
.ctrl
|= NFP_NET_CFG_CTRL_L2BC
;
2879 /* Allow IRQ moderation, if supported */
2880 if (nn
->cap
& NFP_NET_CFG_CTRL_IRQMOD
) {
2881 nfp_net_irqmod_init(nn
);
2882 nn
->dp
.ctrl
|= NFP_NET_CFG_CTRL_IRQMOD
;
2885 /* Enable TX pointer writeback, if supported */
2886 if (nn
->cap
& NFP_NET_CFG_CTRL_TXRWB
)
2887 nn
->dp
.ctrl
|= NFP_NET_CFG_CTRL_TXRWB
;
2889 if (nn
->cap_w1
& NFP_NET_CFG_CTRL_MCAST_FILTER
)
2890 nn
->dp
.ctrl_w1
|= NFP_NET_CFG_CTRL_MCAST_FILTER
;
2892 /* Stash the re-configuration queue away. First odd queue in TX Bar */
2893 nn
->qcp_cfg
= nn
->tx_bar
+ NFP_QCP_QUEUE_ADDR_SZ
;
2895 /* Make sure the FW knows the netdev is supposed to be disabled here */
2896 nn_writel(nn
, NFP_NET_CFG_CTRL
, 0);
2897 nn_writeq(nn
, NFP_NET_CFG_TXRS_ENABLE
, 0);
2898 nn_writeq(nn
, NFP_NET_CFG_RXRS_ENABLE
, 0);
2899 nn_writel(nn
, NFP_NET_CFG_CTRL_WORD1
, 0);
2900 err
= nfp_net_reconfig(nn
, NFP_NET_CFG_UPDATE_RING
|
2901 NFP_NET_CFG_UPDATE_GEN
);
2905 if (nn
->dp
.netdev
) {
2906 nfp_net_netdev_init(nn
);
2908 err
= nfp_ccm_mbox_init(nn
);
2912 err
= nfp_net_tls_init(nn
);
2914 goto err_clean_mbox
;
2916 nfp_net_ipsec_init(nn
);
2919 nfp_net_vecs_init(nn
);
2924 spin_lock_init(&nn
->mbox_amsg
.lock
);
2925 INIT_LIST_HEAD(&nn
->mbox_amsg
.list
);
2926 INIT_WORK(&nn
->mbox_amsg
.work
, nfp_net_mbox_amsg_work
);
2928 INIT_LIST_HEAD(&nn
->fs
.list
);
2930 return register_netdev(nn
->dp
.netdev
);
2933 nfp_ccm_mbox_clean(nn
);
2938 * nfp_net_clean() - Undo what nfp_net_init() did.
2939 * @nn: NFP Net device structure
2941 void nfp_net_clean(struct nfp_net
*nn
)
2946 unregister_netdev(nn
->dp
.netdev
);
2947 nfp_net_ipsec_clean(nn
);
2948 nfp_ccm_mbox_clean(nn
);
2949 nfp_net_fs_clean(nn
);
2950 flush_work(&nn
->mbox_amsg
.work
);
2951 nfp_net_reconfig_wait_posted(nn
);