xref: /openbmc/linux/drivers/net/ethernet/netronome/nfp/nfdk/dp.c (revision f019679ea5f2ab650c3348a79e7d9c3625f62899)
1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 /* Copyright (C) 2015-2019 Netronome Systems, Inc. */
3 
4 #include <linux/bpf_trace.h>
5 #include <linux/netdevice.h>
6 #include <linux/overflow.h>
7 #include <linux/sizes.h>
8 #include <linux/bitfield.h>
9 
10 #include "../nfp_app.h"
11 #include "../nfp_net.h"
12 #include "../nfp_net_dp.h"
13 #include "../crypto/crypto.h"
14 #include "../crypto/fw.h"
15 #include "nfdk.h"
16 
17 static int nfp_nfdk_tx_ring_should_wake(struct nfp_net_tx_ring *tx_ring)
18 {
19 	return !nfp_net_tx_full(tx_ring, NFDK_TX_DESC_STOP_CNT * 2);
20 }
21 
22 static int nfp_nfdk_tx_ring_should_stop(struct nfp_net_tx_ring *tx_ring)
23 {
24 	return nfp_net_tx_full(tx_ring, NFDK_TX_DESC_STOP_CNT);
25 }
26 
27 static void nfp_nfdk_tx_ring_stop(struct netdev_queue *nd_q,
28 				  struct nfp_net_tx_ring *tx_ring)
29 {
30 	netif_tx_stop_queue(nd_q);
31 
32 	/* We can race with the TX completion out of NAPI so recheck */
33 	smp_mb();
34 	if (unlikely(nfp_nfdk_tx_ring_should_wake(tx_ring)))
35 		netif_tx_start_queue(nd_q);
36 }
37 
38 static __le64
39 nfp_nfdk_tx_tso(struct nfp_net_r_vector *r_vec, struct nfp_nfdk_tx_buf *txbuf,
40 		struct sk_buff *skb)
41 {
42 	u32 segs, hdrlen, l3_offset, l4_offset;
43 	struct nfp_nfdk_tx_desc txd;
44 	u16 mss;
45 
46 	if (!skb->encapsulation) {
47 		l3_offset = skb_network_offset(skb);
48 		l4_offset = skb_transport_offset(skb);
49 		hdrlen = skb_tcp_all_headers(skb);
50 	} else {
51 		l3_offset = skb_inner_network_offset(skb);
52 		l4_offset = skb_inner_transport_offset(skb);
53 		hdrlen = skb_inner_tcp_all_headers(skb);
54 	}
55 
56 	segs = skb_shinfo(skb)->gso_segs;
57 	mss = skb_shinfo(skb)->gso_size & NFDK_DESC_TX_MSS_MASK;
58 
59 	/* Note: TSO of the packet with metadata prepended to skb is not
60 	 * supported yet, in which case l3/l4_offset and lso_hdrlen need
61 	 * be correctly handled here.
62 	 * Concern:
63 	 * The driver doesn't have md_bytes easily available at this point.
64 	 * The PCI.IN PD ME won't have md_bytes bytes to add to lso_hdrlen,
65 	 * so it needs the full length there.  The app MEs might prefer
66 	 * l3_offset and l4_offset relative to the start of packet data,
67 	 * but could probably cope with it being relative to the CTM buf
68 	 * data offset.
69 	 */
70 	txd.l3_offset = l3_offset;
71 	txd.l4_offset = l4_offset;
72 	txd.lso_meta_res = 0;
73 	txd.mss = cpu_to_le16(mss);
74 	txd.lso_hdrlen = hdrlen;
75 	txd.lso_totsegs = segs;
76 
77 	txbuf->pkt_cnt = segs;
78 	txbuf->real_len = skb->len + hdrlen * (txbuf->pkt_cnt - 1);
79 
80 	u64_stats_update_begin(&r_vec->tx_sync);
81 	r_vec->tx_lso++;
82 	u64_stats_update_end(&r_vec->tx_sync);
83 
84 	return txd.raw;
85 }
86 
87 static u8
88 nfp_nfdk_tx_csum(struct nfp_net_dp *dp, struct nfp_net_r_vector *r_vec,
89 		 unsigned int pkt_cnt, struct sk_buff *skb, u64 flags)
90 {
91 	struct ipv6hdr *ipv6h;
92 	struct iphdr *iph;
93 
94 	if (!(dp->ctrl & NFP_NET_CFG_CTRL_TXCSUM))
95 		return flags;
96 
97 	if (skb->ip_summed != CHECKSUM_PARTIAL)
98 		return flags;
99 
100 	flags |= NFDK_DESC_TX_L4_CSUM;
101 
102 	iph = skb->encapsulation ? inner_ip_hdr(skb) : ip_hdr(skb);
103 	ipv6h = skb->encapsulation ? inner_ipv6_hdr(skb) : ipv6_hdr(skb);
104 
105 	/* L3 checksum offloading flag is not required for ipv6 */
106 	if (iph->version == 4) {
107 		flags |= NFDK_DESC_TX_L3_CSUM;
108 	} else if (ipv6h->version != 6) {
109 		nn_dp_warn(dp, "partial checksum but ipv=%x!\n", iph->version);
110 		return flags;
111 	}
112 
113 	u64_stats_update_begin(&r_vec->tx_sync);
114 	if (!skb->encapsulation) {
115 		r_vec->hw_csum_tx += pkt_cnt;
116 	} else {
117 		flags |= NFDK_DESC_TX_ENCAP;
118 		r_vec->hw_csum_tx_inner += pkt_cnt;
119 	}
120 	u64_stats_update_end(&r_vec->tx_sync);
121 
122 	return flags;
123 }
124 
125 static int
126 nfp_nfdk_tx_maybe_close_block(struct nfp_net_tx_ring *tx_ring,
127 			      unsigned int nr_frags, struct sk_buff *skb)
128 {
129 	unsigned int n_descs, wr_p, nop_slots;
130 	const skb_frag_t *frag, *fend;
131 	struct nfp_nfdk_tx_desc *txd;
132 	unsigned int wr_idx;
133 	int err;
134 
135 recount_descs:
136 	n_descs = nfp_nfdk_headlen_to_segs(skb_headlen(skb));
137 
138 	frag = skb_shinfo(skb)->frags;
139 	fend = frag + nr_frags;
140 	for (; frag < fend; frag++)
141 		n_descs += DIV_ROUND_UP(skb_frag_size(frag),
142 					NFDK_TX_MAX_DATA_PER_DESC);
143 
144 	if (unlikely(n_descs > NFDK_TX_DESC_GATHER_MAX)) {
145 		if (skb_is_nonlinear(skb)) {
146 			err = skb_linearize(skb);
147 			if (err)
148 				return err;
149 			goto recount_descs;
150 		}
151 		return -EINVAL;
152 	}
153 
154 	/* Under count by 1 (don't count meta) for the round down to work out */
155 	n_descs += !!skb_is_gso(skb);
156 
157 	if (round_down(tx_ring->wr_p, NFDK_TX_DESC_BLOCK_CNT) !=
158 	    round_down(tx_ring->wr_p + n_descs, NFDK_TX_DESC_BLOCK_CNT))
159 		goto close_block;
160 
161 	if ((u32)tx_ring->data_pending + skb->len > NFDK_TX_MAX_DATA_PER_BLOCK)
162 		goto close_block;
163 
164 	return 0;
165 
166 close_block:
167 	wr_p = tx_ring->wr_p;
168 	nop_slots = D_BLOCK_CPL(wr_p);
169 
170 	wr_idx = D_IDX(tx_ring, wr_p);
171 	tx_ring->ktxbufs[wr_idx].skb = NULL;
172 	txd = &tx_ring->ktxds[wr_idx];
173 
174 	memset(txd, 0, array_size(nop_slots, sizeof(struct nfp_nfdk_tx_desc)));
175 
176 	tx_ring->data_pending = 0;
177 	tx_ring->wr_p += nop_slots;
178 	tx_ring->wr_ptr_add += nop_slots;
179 
180 	return 0;
181 }
182 
183 static int nfp_nfdk_prep_port_id(struct sk_buff *skb)
184 {
185 	struct metadata_dst *md_dst = skb_metadata_dst(skb);
186 	unsigned char *data;
187 
188 	if (likely(!md_dst))
189 		return 0;
190 	if (unlikely(md_dst->type != METADATA_HW_PORT_MUX))
191 		return 0;
192 
193 	/* Note: Unsupported case when TSO a skb with metedata prepended.
194 	 * See the comments in `nfp_nfdk_tx_tso` for details.
195 	 */
196 	if (unlikely(md_dst && skb_is_gso(skb)))
197 		return -EOPNOTSUPP;
198 
199 	if (unlikely(skb_cow_head(skb, sizeof(md_dst->u.port_info.port_id))))
200 		return -ENOMEM;
201 
202 	data = skb_push(skb, sizeof(md_dst->u.port_info.port_id));
203 	put_unaligned_be32(md_dst->u.port_info.port_id, data);
204 
205 	return sizeof(md_dst->u.port_info.port_id);
206 }
207 
208 static int
209 nfp_nfdk_prep_tx_meta(struct nfp_app *app, struct sk_buff *skb,
210 		      struct nfp_net_r_vector *r_vec)
211 {
212 	unsigned char *data;
213 	int res, md_bytes;
214 	u32 meta_id = 0;
215 
216 	res = nfp_nfdk_prep_port_id(skb);
217 	if (unlikely(res <= 0))
218 		return res;
219 
220 	md_bytes = res;
221 	meta_id = NFP_NET_META_PORTID;
222 
223 	if (unlikely(skb_cow_head(skb, sizeof(meta_id))))
224 		return -ENOMEM;
225 
226 	md_bytes += sizeof(meta_id);
227 
228 	meta_id = FIELD_PREP(NFDK_META_LEN, md_bytes) |
229 		  FIELD_PREP(NFDK_META_FIELDS, meta_id);
230 
231 	data = skb_push(skb, sizeof(meta_id));
232 	put_unaligned_be32(meta_id, data);
233 
234 	return NFDK_DESC_TX_CHAIN_META;
235 }
236 
237 /**
238  * nfp_nfdk_tx() - Main transmit entry point
239  * @skb:    SKB to transmit
240  * @netdev: netdev structure
241  *
242  * Return: NETDEV_TX_OK on success.
243  */
244 netdev_tx_t nfp_nfdk_tx(struct sk_buff *skb, struct net_device *netdev)
245 {
246 	struct nfp_net *nn = netdev_priv(netdev);
247 	struct nfp_nfdk_tx_buf *txbuf, *etxbuf;
248 	u32 cnt, tmp_dlen, dlen_type = 0;
249 	struct nfp_net_tx_ring *tx_ring;
250 	struct nfp_net_r_vector *r_vec;
251 	const skb_frag_t *frag, *fend;
252 	struct nfp_nfdk_tx_desc *txd;
253 	unsigned int real_len, qidx;
254 	unsigned int dma_len, type;
255 	struct netdev_queue *nd_q;
256 	struct nfp_net_dp *dp;
257 	int nr_frags, wr_idx;
258 	dma_addr_t dma_addr;
259 	u64 metadata;
260 
261 	dp = &nn->dp;
262 	qidx = skb_get_queue_mapping(skb);
263 	tx_ring = &dp->tx_rings[qidx];
264 	r_vec = tx_ring->r_vec;
265 	nd_q = netdev_get_tx_queue(dp->netdev, qidx);
266 
267 	/* Don't bother counting frags, assume the worst */
268 	if (unlikely(nfp_net_tx_full(tx_ring, NFDK_TX_DESC_STOP_CNT))) {
269 		nn_dp_warn(dp, "TX ring %d busy. wrp=%u rdp=%u\n",
270 			   qidx, tx_ring->wr_p, tx_ring->rd_p);
271 		netif_tx_stop_queue(nd_q);
272 		nfp_net_tx_xmit_more_flush(tx_ring);
273 		u64_stats_update_begin(&r_vec->tx_sync);
274 		r_vec->tx_busy++;
275 		u64_stats_update_end(&r_vec->tx_sync);
276 		return NETDEV_TX_BUSY;
277 	}
278 
279 	metadata = nfp_nfdk_prep_tx_meta(nn->app, skb, r_vec);
280 	if (unlikely((int)metadata < 0))
281 		goto err_flush;
282 
283 	nr_frags = skb_shinfo(skb)->nr_frags;
284 	if (nfp_nfdk_tx_maybe_close_block(tx_ring, nr_frags, skb))
285 		goto err_flush;
286 
287 	/* DMA map all */
288 	wr_idx = D_IDX(tx_ring, tx_ring->wr_p);
289 	txd = &tx_ring->ktxds[wr_idx];
290 	txbuf = &tx_ring->ktxbufs[wr_idx];
291 
292 	dma_len = skb_headlen(skb);
293 	if (skb_is_gso(skb))
294 		type = NFDK_DESC_TX_TYPE_TSO;
295 	else if (!nr_frags && dma_len < NFDK_TX_MAX_DATA_PER_HEAD)
296 		type = NFDK_DESC_TX_TYPE_SIMPLE;
297 	else
298 		type = NFDK_DESC_TX_TYPE_GATHER;
299 
300 	dma_addr = dma_map_single(dp->dev, skb->data, dma_len, DMA_TO_DEVICE);
301 	if (dma_mapping_error(dp->dev, dma_addr))
302 		goto err_warn_dma;
303 
304 	txbuf->skb = skb;
305 	txbuf++;
306 
307 	txbuf->dma_addr = dma_addr;
308 	txbuf++;
309 
310 	/* FIELD_PREP() implicitly truncates to chunk */
311 	dma_len -= 1;
312 	dlen_type = FIELD_PREP(NFDK_DESC_TX_DMA_LEN_HEAD, dma_len) |
313 		    FIELD_PREP(NFDK_DESC_TX_TYPE_HEAD, type);
314 
315 	txd->dma_len_type = cpu_to_le16(dlen_type);
316 	nfp_desc_set_dma_addr_48b(txd, dma_addr);
317 
318 	/* starts at bit 0 */
319 	BUILD_BUG_ON(!(NFDK_DESC_TX_DMA_LEN_HEAD & 1));
320 
321 	/* Preserve the original dlen_type, this way below the EOP logic
322 	 * can use dlen_type.
323 	 */
324 	tmp_dlen = dlen_type & NFDK_DESC_TX_DMA_LEN_HEAD;
325 	dma_len -= tmp_dlen;
326 	dma_addr += tmp_dlen + 1;
327 	txd++;
328 
329 	/* The rest of the data (if any) will be in larger dma descritors
330 	 * and is handled with the fragment loop.
331 	 */
332 	frag = skb_shinfo(skb)->frags;
333 	fend = frag + nr_frags;
334 
335 	while (true) {
336 		while (dma_len > 0) {
337 			dma_len -= 1;
338 			dlen_type = FIELD_PREP(NFDK_DESC_TX_DMA_LEN, dma_len);
339 
340 			txd->dma_len_type = cpu_to_le16(dlen_type);
341 			nfp_desc_set_dma_addr_48b(txd, dma_addr);
342 
343 			dma_len -= dlen_type;
344 			dma_addr += dlen_type + 1;
345 			txd++;
346 		}
347 
348 		if (frag >= fend)
349 			break;
350 
351 		dma_len = skb_frag_size(frag);
352 		dma_addr = skb_frag_dma_map(dp->dev, frag, 0, dma_len,
353 					    DMA_TO_DEVICE);
354 		if (dma_mapping_error(dp->dev, dma_addr))
355 			goto err_unmap;
356 
357 		txbuf->dma_addr = dma_addr;
358 		txbuf++;
359 
360 		frag++;
361 	}
362 
363 	(txd - 1)->dma_len_type = cpu_to_le16(dlen_type | NFDK_DESC_TX_EOP);
364 
365 	if (!skb_is_gso(skb)) {
366 		real_len = skb->len;
367 		/* Metadata desc */
368 		metadata = nfp_nfdk_tx_csum(dp, r_vec, 1, skb, metadata);
369 		txd->raw = cpu_to_le64(metadata);
370 		txd++;
371 	} else {
372 		/* lso desc should be placed after metadata desc */
373 		(txd + 1)->raw = nfp_nfdk_tx_tso(r_vec, txbuf, skb);
374 		real_len = txbuf->real_len;
375 		/* Metadata desc */
376 		metadata = nfp_nfdk_tx_csum(dp, r_vec, txbuf->pkt_cnt, skb, metadata);
377 		txd->raw = cpu_to_le64(metadata);
378 		txd += 2;
379 		txbuf++;
380 	}
381 
382 	cnt = txd - tx_ring->ktxds - wr_idx;
383 	if (unlikely(round_down(wr_idx, NFDK_TX_DESC_BLOCK_CNT) !=
384 		     round_down(wr_idx + cnt - 1, NFDK_TX_DESC_BLOCK_CNT)))
385 		goto err_warn_overflow;
386 
387 	skb_tx_timestamp(skb);
388 
389 	tx_ring->wr_p += cnt;
390 	if (tx_ring->wr_p % NFDK_TX_DESC_BLOCK_CNT)
391 		tx_ring->data_pending += skb->len;
392 	else
393 		tx_ring->data_pending = 0;
394 
395 	if (nfp_nfdk_tx_ring_should_stop(tx_ring))
396 		nfp_nfdk_tx_ring_stop(nd_q, tx_ring);
397 
398 	tx_ring->wr_ptr_add += cnt;
399 	if (__netdev_tx_sent_queue(nd_q, real_len, netdev_xmit_more()))
400 		nfp_net_tx_xmit_more_flush(tx_ring);
401 
402 	return NETDEV_TX_OK;
403 
404 err_warn_overflow:
405 	WARN_ONCE(1, "unable to fit packet into a descriptor wr_idx:%d head:%d frags:%d cnt:%d",
406 		  wr_idx, skb_headlen(skb), nr_frags, cnt);
407 	if (skb_is_gso(skb))
408 		txbuf--;
409 err_unmap:
410 	/* txbuf pointed to the next-to-use */
411 	etxbuf = txbuf;
412 	/* first txbuf holds the skb */
413 	txbuf = &tx_ring->ktxbufs[wr_idx + 1];
414 	if (txbuf < etxbuf) {
415 		dma_unmap_single(dp->dev, txbuf->dma_addr,
416 				 skb_headlen(skb), DMA_TO_DEVICE);
417 		txbuf->raw = 0;
418 		txbuf++;
419 	}
420 	frag = skb_shinfo(skb)->frags;
421 	while (etxbuf < txbuf) {
422 		dma_unmap_page(dp->dev, txbuf->dma_addr,
423 			       skb_frag_size(frag), DMA_TO_DEVICE);
424 		txbuf->raw = 0;
425 		frag++;
426 		txbuf++;
427 	}
428 err_warn_dma:
429 	nn_dp_warn(dp, "Failed to map DMA TX buffer\n");
430 err_flush:
431 	nfp_net_tx_xmit_more_flush(tx_ring);
432 	u64_stats_update_begin(&r_vec->tx_sync);
433 	r_vec->tx_errors++;
434 	u64_stats_update_end(&r_vec->tx_sync);
435 	dev_kfree_skb_any(skb);
436 	return NETDEV_TX_OK;
437 }
438 
439 /**
440  * nfp_nfdk_tx_complete() - Handled completed TX packets
441  * @tx_ring:	TX ring structure
442  * @budget:	NAPI budget (only used as bool to determine if in NAPI context)
443  */
444 static void nfp_nfdk_tx_complete(struct nfp_net_tx_ring *tx_ring, int budget)
445 {
446 	struct nfp_net_r_vector *r_vec = tx_ring->r_vec;
447 	struct nfp_net_dp *dp = &r_vec->nfp_net->dp;
448 	u32 done_pkts = 0, done_bytes = 0;
449 	struct nfp_nfdk_tx_buf *ktxbufs;
450 	struct device *dev = dp->dev;
451 	struct netdev_queue *nd_q;
452 	u32 rd_p, qcp_rd_p;
453 	int todo;
454 
455 	rd_p = tx_ring->rd_p;
456 	if (tx_ring->wr_p == rd_p)
457 		return;
458 
459 	/* Work out how many descriptors have been transmitted */
460 	qcp_rd_p = nfp_net_read_tx_cmpl(tx_ring, dp);
461 
462 	if (qcp_rd_p == tx_ring->qcp_rd_p)
463 		return;
464 
465 	todo = D_IDX(tx_ring, qcp_rd_p - tx_ring->qcp_rd_p);
466 	ktxbufs = tx_ring->ktxbufs;
467 
468 	while (todo > 0) {
469 		const skb_frag_t *frag, *fend;
470 		unsigned int size, n_descs = 1;
471 		struct nfp_nfdk_tx_buf *txbuf;
472 		struct sk_buff *skb;
473 
474 		txbuf = &ktxbufs[D_IDX(tx_ring, rd_p)];
475 		skb = txbuf->skb;
476 		txbuf++;
477 
478 		/* Closed block */
479 		if (!skb) {
480 			n_descs = D_BLOCK_CPL(rd_p);
481 			goto next;
482 		}
483 
484 		/* Unmap head */
485 		size = skb_headlen(skb);
486 		n_descs += nfp_nfdk_headlen_to_segs(size);
487 		dma_unmap_single(dev, txbuf->dma_addr, size, DMA_TO_DEVICE);
488 		txbuf++;
489 
490 		/* Unmap frags */
491 		frag = skb_shinfo(skb)->frags;
492 		fend = frag + skb_shinfo(skb)->nr_frags;
493 		for (; frag < fend; frag++) {
494 			size = skb_frag_size(frag);
495 			n_descs += DIV_ROUND_UP(size,
496 						NFDK_TX_MAX_DATA_PER_DESC);
497 			dma_unmap_page(dev, txbuf->dma_addr,
498 				       skb_frag_size(frag), DMA_TO_DEVICE);
499 			txbuf++;
500 		}
501 
502 		if (!skb_is_gso(skb)) {
503 			done_bytes += skb->len;
504 			done_pkts++;
505 		} else {
506 			done_bytes += txbuf->real_len;
507 			done_pkts += txbuf->pkt_cnt;
508 			n_descs++;
509 		}
510 
511 		napi_consume_skb(skb, budget);
512 next:
513 		rd_p += n_descs;
514 		todo -= n_descs;
515 	}
516 
517 	tx_ring->rd_p = rd_p;
518 	tx_ring->qcp_rd_p = qcp_rd_p;
519 
520 	u64_stats_update_begin(&r_vec->tx_sync);
521 	r_vec->tx_bytes += done_bytes;
522 	r_vec->tx_pkts += done_pkts;
523 	u64_stats_update_end(&r_vec->tx_sync);
524 
525 	if (!dp->netdev)
526 		return;
527 
528 	nd_q = netdev_get_tx_queue(dp->netdev, tx_ring->idx);
529 	netdev_tx_completed_queue(nd_q, done_pkts, done_bytes);
530 	if (nfp_nfdk_tx_ring_should_wake(tx_ring)) {
531 		/* Make sure TX thread will see updated tx_ring->rd_p */
532 		smp_mb();
533 
534 		if (unlikely(netif_tx_queue_stopped(nd_q)))
535 			netif_tx_wake_queue(nd_q);
536 	}
537 
538 	WARN_ONCE(tx_ring->wr_p - tx_ring->rd_p > tx_ring->cnt,
539 		  "TX ring corruption rd_p=%u wr_p=%u cnt=%u\n",
540 		  tx_ring->rd_p, tx_ring->wr_p, tx_ring->cnt);
541 }
542 
543 /* Receive processing */
544 static void *
545 nfp_nfdk_napi_alloc_one(struct nfp_net_dp *dp, dma_addr_t *dma_addr)
546 {
547 	void *frag;
548 
549 	if (!dp->xdp_prog) {
550 		frag = napi_alloc_frag(dp->fl_bufsz);
551 		if (unlikely(!frag))
552 			return NULL;
553 	} else {
554 		struct page *page;
555 
556 		page = dev_alloc_page();
557 		if (unlikely(!page))
558 			return NULL;
559 		frag = page_address(page);
560 	}
561 
562 	*dma_addr = nfp_net_dma_map_rx(dp, frag);
563 	if (dma_mapping_error(dp->dev, *dma_addr)) {
564 		nfp_net_free_frag(frag, dp->xdp_prog);
565 		nn_dp_warn(dp, "Failed to map DMA RX buffer\n");
566 		return NULL;
567 	}
568 
569 	return frag;
570 }
571 
572 /**
573  * nfp_nfdk_rx_give_one() - Put mapped skb on the software and hardware rings
574  * @dp:		NFP Net data path struct
575  * @rx_ring:	RX ring structure
576  * @frag:	page fragment buffer
577  * @dma_addr:	DMA address of skb mapping
578  */
579 static void
580 nfp_nfdk_rx_give_one(const struct nfp_net_dp *dp,
581 		     struct nfp_net_rx_ring *rx_ring,
582 		     void *frag, dma_addr_t dma_addr)
583 {
584 	unsigned int wr_idx;
585 
586 	wr_idx = D_IDX(rx_ring, rx_ring->wr_p);
587 
588 	nfp_net_dma_sync_dev_rx(dp, dma_addr);
589 
590 	/* Stash SKB and DMA address away */
591 	rx_ring->rxbufs[wr_idx].frag = frag;
592 	rx_ring->rxbufs[wr_idx].dma_addr = dma_addr;
593 
594 	/* Fill freelist descriptor */
595 	rx_ring->rxds[wr_idx].fld.reserved = 0;
596 	rx_ring->rxds[wr_idx].fld.meta_len_dd = 0;
597 	nfp_desc_set_dma_addr_48b(&rx_ring->rxds[wr_idx].fld,
598 				  dma_addr + dp->rx_dma_off);
599 
600 	rx_ring->wr_p++;
601 	if (!(rx_ring->wr_p % NFP_NET_FL_BATCH)) {
602 		/* Update write pointer of the freelist queue. Make
603 		 * sure all writes are flushed before telling the hardware.
604 		 */
605 		wmb();
606 		nfp_qcp_wr_ptr_add(rx_ring->qcp_fl, NFP_NET_FL_BATCH);
607 	}
608 }
609 
610 /**
611  * nfp_nfdk_rx_ring_fill_freelist() - Give buffers from the ring to FW
612  * @dp:	     NFP Net data path struct
613  * @rx_ring: RX ring to fill
614  */
615 void nfp_nfdk_rx_ring_fill_freelist(struct nfp_net_dp *dp,
616 				    struct nfp_net_rx_ring *rx_ring)
617 {
618 	unsigned int i;
619 
620 	for (i = 0; i < rx_ring->cnt - 1; i++)
621 		nfp_nfdk_rx_give_one(dp, rx_ring, rx_ring->rxbufs[i].frag,
622 				     rx_ring->rxbufs[i].dma_addr);
623 }
624 
625 /**
626  * nfp_nfdk_rx_csum_has_errors() - group check if rxd has any csum errors
627  * @flags: RX descriptor flags field in CPU byte order
628  */
629 static int nfp_nfdk_rx_csum_has_errors(u16 flags)
630 {
631 	u16 csum_all_checked, csum_all_ok;
632 
633 	csum_all_checked = flags & __PCIE_DESC_RX_CSUM_ALL;
634 	csum_all_ok = flags & __PCIE_DESC_RX_CSUM_ALL_OK;
635 
636 	return csum_all_checked != (csum_all_ok << PCIE_DESC_RX_CSUM_OK_SHIFT);
637 }
638 
639 /**
640  * nfp_nfdk_rx_csum() - set SKB checksum field based on RX descriptor flags
641  * @dp:  NFP Net data path struct
642  * @r_vec: per-ring structure
643  * @rxd: Pointer to RX descriptor
644  * @meta: Parsed metadata prepend
645  * @skb: Pointer to SKB
646  */
647 static void
648 nfp_nfdk_rx_csum(struct nfp_net_dp *dp, struct nfp_net_r_vector *r_vec,
649 		 struct nfp_net_rx_desc *rxd, struct nfp_meta_parsed *meta,
650 		 struct sk_buff *skb)
651 {
652 	skb_checksum_none_assert(skb);
653 
654 	if (!(dp->netdev->features & NETIF_F_RXCSUM))
655 		return;
656 
657 	if (meta->csum_type) {
658 		skb->ip_summed = meta->csum_type;
659 		skb->csum = meta->csum;
660 		u64_stats_update_begin(&r_vec->rx_sync);
661 		r_vec->hw_csum_rx_complete++;
662 		u64_stats_update_end(&r_vec->rx_sync);
663 		return;
664 	}
665 
666 	if (nfp_nfdk_rx_csum_has_errors(le16_to_cpu(rxd->rxd.flags))) {
667 		u64_stats_update_begin(&r_vec->rx_sync);
668 		r_vec->hw_csum_rx_error++;
669 		u64_stats_update_end(&r_vec->rx_sync);
670 		return;
671 	}
672 
673 	/* Assume that the firmware will never report inner CSUM_OK unless outer
674 	 * L4 headers were successfully parsed. FW will always report zero UDP
675 	 * checksum as CSUM_OK.
676 	 */
677 	if (rxd->rxd.flags & PCIE_DESC_RX_TCP_CSUM_OK ||
678 	    rxd->rxd.flags & PCIE_DESC_RX_UDP_CSUM_OK) {
679 		__skb_incr_checksum_unnecessary(skb);
680 		u64_stats_update_begin(&r_vec->rx_sync);
681 		r_vec->hw_csum_rx_ok++;
682 		u64_stats_update_end(&r_vec->rx_sync);
683 	}
684 
685 	if (rxd->rxd.flags & PCIE_DESC_RX_I_TCP_CSUM_OK ||
686 	    rxd->rxd.flags & PCIE_DESC_RX_I_UDP_CSUM_OK) {
687 		__skb_incr_checksum_unnecessary(skb);
688 		u64_stats_update_begin(&r_vec->rx_sync);
689 		r_vec->hw_csum_rx_inner_ok++;
690 		u64_stats_update_end(&r_vec->rx_sync);
691 	}
692 }
693 
694 static void
695 nfp_nfdk_set_hash(struct net_device *netdev, struct nfp_meta_parsed *meta,
696 		  unsigned int type, __be32 *hash)
697 {
698 	if (!(netdev->features & NETIF_F_RXHASH))
699 		return;
700 
701 	switch (type) {
702 	case NFP_NET_RSS_IPV4:
703 	case NFP_NET_RSS_IPV6:
704 	case NFP_NET_RSS_IPV6_EX:
705 		meta->hash_type = PKT_HASH_TYPE_L3;
706 		break;
707 	default:
708 		meta->hash_type = PKT_HASH_TYPE_L4;
709 		break;
710 	}
711 
712 	meta->hash = get_unaligned_be32(hash);
713 }
714 
715 static bool
716 nfp_nfdk_parse_meta(struct net_device *netdev, struct nfp_meta_parsed *meta,
717 		    void *data, void *pkt, unsigned int pkt_len, int meta_len)
718 {
719 	u32 meta_info;
720 
721 	meta_info = get_unaligned_be32(data);
722 	data += 4;
723 
724 	while (meta_info) {
725 		switch (meta_info & NFP_NET_META_FIELD_MASK) {
726 		case NFP_NET_META_HASH:
727 			meta_info >>= NFP_NET_META_FIELD_SIZE;
728 			nfp_nfdk_set_hash(netdev, meta,
729 					  meta_info & NFP_NET_META_FIELD_MASK,
730 					  (__be32 *)data);
731 			data += 4;
732 			break;
733 		case NFP_NET_META_MARK:
734 			meta->mark = get_unaligned_be32(data);
735 			data += 4;
736 			break;
737 		case NFP_NET_META_PORTID:
738 			meta->portid = get_unaligned_be32(data);
739 			data += 4;
740 			break;
741 		case NFP_NET_META_CSUM:
742 			meta->csum_type = CHECKSUM_COMPLETE;
743 			meta->csum =
744 				(__force __wsum)__get_unaligned_cpu32(data);
745 			data += 4;
746 			break;
747 		case NFP_NET_META_RESYNC_INFO:
748 			if (nfp_net_tls_rx_resync_req(netdev, data, pkt,
749 						      pkt_len))
750 				return false;
751 			data += sizeof(struct nfp_net_tls_resync_req);
752 			break;
753 		default:
754 			return true;
755 		}
756 
757 		meta_info >>= NFP_NET_META_FIELD_SIZE;
758 	}
759 
760 	return data != pkt;
761 }
762 
763 static void
764 nfp_nfdk_rx_drop(const struct nfp_net_dp *dp, struct nfp_net_r_vector *r_vec,
765 		 struct nfp_net_rx_ring *rx_ring, struct nfp_net_rx_buf *rxbuf,
766 		 struct sk_buff *skb)
767 {
768 	u64_stats_update_begin(&r_vec->rx_sync);
769 	r_vec->rx_drops++;
770 	/* If we have both skb and rxbuf the replacement buffer allocation
771 	 * must have failed, count this as an alloc failure.
772 	 */
773 	if (skb && rxbuf)
774 		r_vec->rx_replace_buf_alloc_fail++;
775 	u64_stats_update_end(&r_vec->rx_sync);
776 
777 	/* skb is build based on the frag, free_skb() would free the frag
778 	 * so to be able to reuse it we need an extra ref.
779 	 */
780 	if (skb && rxbuf && skb->head == rxbuf->frag)
781 		page_ref_inc(virt_to_head_page(rxbuf->frag));
782 	if (rxbuf)
783 		nfp_nfdk_rx_give_one(dp, rx_ring, rxbuf->frag, rxbuf->dma_addr);
784 	if (skb)
785 		dev_kfree_skb_any(skb);
786 }
787 
788 static bool nfp_nfdk_xdp_complete(struct nfp_net_tx_ring *tx_ring)
789 {
790 	struct nfp_net_r_vector *r_vec = tx_ring->r_vec;
791 	struct nfp_net_dp *dp = &r_vec->nfp_net->dp;
792 	struct nfp_net_rx_ring *rx_ring;
793 	u32 qcp_rd_p, done = 0;
794 	bool done_all;
795 	int todo;
796 
797 	/* Work out how many descriptors have been transmitted */
798 	qcp_rd_p = nfp_net_read_tx_cmpl(tx_ring, dp);
799 	if (qcp_rd_p == tx_ring->qcp_rd_p)
800 		return true;
801 
802 	todo = D_IDX(tx_ring, qcp_rd_p - tx_ring->qcp_rd_p);
803 
804 	done_all = todo <= NFP_NET_XDP_MAX_COMPLETE;
805 	todo = min(todo, NFP_NET_XDP_MAX_COMPLETE);
806 
807 	rx_ring = r_vec->rx_ring;
808 	while (todo > 0) {
809 		int idx = D_IDX(tx_ring, tx_ring->rd_p + done);
810 		struct nfp_nfdk_tx_buf *txbuf;
811 		unsigned int step = 1;
812 
813 		txbuf = &tx_ring->ktxbufs[idx];
814 		if (!txbuf->raw)
815 			goto next;
816 
817 		if (NFDK_TX_BUF_INFO(txbuf->val) != NFDK_TX_BUF_INFO_SOP) {
818 			WARN_ONCE(1, "Unexpected TX buffer in XDP TX ring\n");
819 			goto next;
820 		}
821 
822 		/* Two successive txbufs are used to stash virtual and dma
823 		 * address respectively, recycle and clean them here.
824 		 */
825 		nfp_nfdk_rx_give_one(dp, rx_ring,
826 				     (void *)NFDK_TX_BUF_PTR(txbuf[0].val),
827 				     txbuf[1].dma_addr);
828 		txbuf[0].raw = 0;
829 		txbuf[1].raw = 0;
830 		step = 2;
831 
832 		u64_stats_update_begin(&r_vec->tx_sync);
833 		/* Note: tx_bytes not accumulated. */
834 		r_vec->tx_pkts++;
835 		u64_stats_update_end(&r_vec->tx_sync);
836 next:
837 		todo -= step;
838 		done += step;
839 	}
840 
841 	tx_ring->qcp_rd_p = D_IDX(tx_ring, tx_ring->qcp_rd_p + done);
842 	tx_ring->rd_p += done;
843 
844 	WARN_ONCE(tx_ring->wr_p - tx_ring->rd_p > tx_ring->cnt,
845 		  "XDP TX ring corruption rd_p=%u wr_p=%u cnt=%u\n",
846 		  tx_ring->rd_p, tx_ring->wr_p, tx_ring->cnt);
847 
848 	return done_all;
849 }
850 
851 static bool
852 nfp_nfdk_tx_xdp_buf(struct nfp_net_dp *dp, struct nfp_net_rx_ring *rx_ring,
853 		    struct nfp_net_tx_ring *tx_ring,
854 		    struct nfp_net_rx_buf *rxbuf, unsigned int dma_off,
855 		    unsigned int pkt_len, bool *completed)
856 {
857 	unsigned int dma_map_sz = dp->fl_bufsz - NFP_NET_RX_BUF_NON_DATA;
858 	unsigned int dma_len, type, cnt, dlen_type, tmp_dlen;
859 	struct nfp_nfdk_tx_buf *txbuf;
860 	struct nfp_nfdk_tx_desc *txd;
861 	unsigned int n_descs;
862 	dma_addr_t dma_addr;
863 	int wr_idx;
864 
865 	/* Reject if xdp_adjust_tail grow packet beyond DMA area */
866 	if (pkt_len + dma_off > dma_map_sz)
867 		return false;
868 
869 	/* Make sure there's still at least one block available after
870 	 * aligning to block boundary, so that the txds used below
871 	 * won't wrap around the tx_ring.
872 	 */
873 	if (unlikely(nfp_net_tx_full(tx_ring, NFDK_TX_DESC_STOP_CNT))) {
874 		if (!*completed) {
875 			nfp_nfdk_xdp_complete(tx_ring);
876 			*completed = true;
877 		}
878 
879 		if (unlikely(nfp_net_tx_full(tx_ring, NFDK_TX_DESC_STOP_CNT))) {
880 			nfp_nfdk_rx_drop(dp, rx_ring->r_vec, rx_ring, rxbuf,
881 					 NULL);
882 			return false;
883 		}
884 	}
885 
886 	/* Check if cross block boundary */
887 	n_descs = nfp_nfdk_headlen_to_segs(pkt_len);
888 	if ((round_down(tx_ring->wr_p, NFDK_TX_DESC_BLOCK_CNT) !=
889 	     round_down(tx_ring->wr_p + n_descs, NFDK_TX_DESC_BLOCK_CNT)) ||
890 	    ((u32)tx_ring->data_pending + pkt_len >
891 	     NFDK_TX_MAX_DATA_PER_BLOCK)) {
892 		unsigned int nop_slots = D_BLOCK_CPL(tx_ring->wr_p);
893 
894 		wr_idx = D_IDX(tx_ring, tx_ring->wr_p);
895 		txd = &tx_ring->ktxds[wr_idx];
896 		memset(txd, 0,
897 		       array_size(nop_slots, sizeof(struct nfp_nfdk_tx_desc)));
898 
899 		tx_ring->data_pending = 0;
900 		tx_ring->wr_p += nop_slots;
901 		tx_ring->wr_ptr_add += nop_slots;
902 	}
903 
904 	wr_idx = D_IDX(tx_ring, tx_ring->wr_p);
905 
906 	txbuf = &tx_ring->ktxbufs[wr_idx];
907 
908 	txbuf[0].val = (unsigned long)rxbuf->frag | NFDK_TX_BUF_INFO_SOP;
909 	txbuf[1].dma_addr = rxbuf->dma_addr;
910 	/* Note: pkt len not stored */
911 
912 	dma_sync_single_for_device(dp->dev, rxbuf->dma_addr + dma_off,
913 				   pkt_len, DMA_BIDIRECTIONAL);
914 
915 	/* Build TX descriptor */
916 	txd = &tx_ring->ktxds[wr_idx];
917 	dma_len = pkt_len;
918 	dma_addr = rxbuf->dma_addr + dma_off;
919 
920 	if (dma_len < NFDK_TX_MAX_DATA_PER_HEAD)
921 		type = NFDK_DESC_TX_TYPE_SIMPLE;
922 	else
923 		type = NFDK_DESC_TX_TYPE_GATHER;
924 
925 	/* FIELD_PREP() implicitly truncates to chunk */
926 	dma_len -= 1;
927 	dlen_type = FIELD_PREP(NFDK_DESC_TX_DMA_LEN_HEAD, dma_len) |
928 		    FIELD_PREP(NFDK_DESC_TX_TYPE_HEAD, type);
929 
930 	txd->dma_len_type = cpu_to_le16(dlen_type);
931 	nfp_desc_set_dma_addr_48b(txd, dma_addr);
932 
933 	tmp_dlen = dlen_type & NFDK_DESC_TX_DMA_LEN_HEAD;
934 	dma_len -= tmp_dlen;
935 	dma_addr += tmp_dlen + 1;
936 	txd++;
937 
938 	while (dma_len > 0) {
939 		dma_len -= 1;
940 		dlen_type = FIELD_PREP(NFDK_DESC_TX_DMA_LEN, dma_len);
941 		txd->dma_len_type = cpu_to_le16(dlen_type);
942 		nfp_desc_set_dma_addr_48b(txd, dma_addr);
943 
944 		dlen_type &= NFDK_DESC_TX_DMA_LEN;
945 		dma_len -= dlen_type;
946 		dma_addr += dlen_type + 1;
947 		txd++;
948 	}
949 
950 	(txd - 1)->dma_len_type = cpu_to_le16(dlen_type | NFDK_DESC_TX_EOP);
951 
952 	/* Metadata desc */
953 	txd->raw = 0;
954 	txd++;
955 
956 	cnt = txd - tx_ring->ktxds - wr_idx;
957 	tx_ring->wr_p += cnt;
958 	if (tx_ring->wr_p % NFDK_TX_DESC_BLOCK_CNT)
959 		tx_ring->data_pending += pkt_len;
960 	else
961 		tx_ring->data_pending = 0;
962 
963 	tx_ring->wr_ptr_add += cnt;
964 	return true;
965 }
966 
967 /**
968  * nfp_nfdk_rx() - receive up to @budget packets on @rx_ring
969  * @rx_ring:   RX ring to receive from
970  * @budget:    NAPI budget
971  *
972  * Note, this function is separated out from the napi poll function to
973  * more cleanly separate packet receive code from other bookkeeping
974  * functions performed in the napi poll function.
975  *
976  * Return: Number of packets received.
977  */
978 static int nfp_nfdk_rx(struct nfp_net_rx_ring *rx_ring, int budget)
979 {
980 	struct nfp_net_r_vector *r_vec = rx_ring->r_vec;
981 	struct nfp_net_dp *dp = &r_vec->nfp_net->dp;
982 	struct nfp_net_tx_ring *tx_ring;
983 	struct bpf_prog *xdp_prog;
984 	bool xdp_tx_cmpl = false;
985 	unsigned int true_bufsz;
986 	struct sk_buff *skb;
987 	int pkts_polled = 0;
988 	struct xdp_buff xdp;
989 	int idx;
990 
991 	xdp_prog = READ_ONCE(dp->xdp_prog);
992 	true_bufsz = xdp_prog ? PAGE_SIZE : dp->fl_bufsz;
993 	xdp_init_buff(&xdp, PAGE_SIZE - NFP_NET_RX_BUF_HEADROOM,
994 		      &rx_ring->xdp_rxq);
995 	tx_ring = r_vec->xdp_ring;
996 
997 	while (pkts_polled < budget) {
998 		unsigned int meta_len, data_len, meta_off, pkt_len, pkt_off;
999 		struct nfp_net_rx_buf *rxbuf;
1000 		struct nfp_net_rx_desc *rxd;
1001 		struct nfp_meta_parsed meta;
1002 		bool redir_egress = false;
1003 		struct net_device *netdev;
1004 		dma_addr_t new_dma_addr;
1005 		u32 meta_len_xdp = 0;
1006 		void *new_frag;
1007 
1008 		idx = D_IDX(rx_ring, rx_ring->rd_p);
1009 
1010 		rxd = &rx_ring->rxds[idx];
1011 		if (!(rxd->rxd.meta_len_dd & PCIE_DESC_RX_DD))
1012 			break;
1013 
1014 		/* Memory barrier to ensure that we won't do other reads
1015 		 * before the DD bit.
1016 		 */
1017 		dma_rmb();
1018 
1019 		memset(&meta, 0, sizeof(meta));
1020 
1021 		rx_ring->rd_p++;
1022 		pkts_polled++;
1023 
1024 		rxbuf =	&rx_ring->rxbufs[idx];
1025 		/*         < meta_len >
1026 		 *  <-- [rx_offset] -->
1027 		 *  ---------------------------------------------------------
1028 		 * | [XX] |  metadata  |             packet           | XXXX |
1029 		 *  ---------------------------------------------------------
1030 		 *         <---------------- data_len --------------->
1031 		 *
1032 		 * The rx_offset is fixed for all packets, the meta_len can vary
1033 		 * on a packet by packet basis. If rx_offset is set to zero
1034 		 * (_RX_OFFSET_DYNAMIC) metadata starts at the beginning of the
1035 		 * buffer and is immediately followed by the packet (no [XX]).
1036 		 */
1037 		meta_len = rxd->rxd.meta_len_dd & PCIE_DESC_RX_META_LEN_MASK;
1038 		data_len = le16_to_cpu(rxd->rxd.data_len);
1039 		pkt_len = data_len - meta_len;
1040 
1041 		pkt_off = NFP_NET_RX_BUF_HEADROOM + dp->rx_dma_off;
1042 		if (dp->rx_offset == NFP_NET_CFG_RX_OFFSET_DYNAMIC)
1043 			pkt_off += meta_len;
1044 		else
1045 			pkt_off += dp->rx_offset;
1046 		meta_off = pkt_off - meta_len;
1047 
1048 		/* Stats update */
1049 		u64_stats_update_begin(&r_vec->rx_sync);
1050 		r_vec->rx_pkts++;
1051 		r_vec->rx_bytes += pkt_len;
1052 		u64_stats_update_end(&r_vec->rx_sync);
1053 
1054 		if (unlikely(meta_len > NFP_NET_MAX_PREPEND ||
1055 			     (dp->rx_offset && meta_len > dp->rx_offset))) {
1056 			nn_dp_warn(dp, "oversized RX packet metadata %u\n",
1057 				   meta_len);
1058 			nfp_nfdk_rx_drop(dp, r_vec, rx_ring, rxbuf, NULL);
1059 			continue;
1060 		}
1061 
1062 		nfp_net_dma_sync_cpu_rx(dp, rxbuf->dma_addr + meta_off,
1063 					data_len);
1064 
1065 		if (meta_len) {
1066 			if (unlikely(nfp_nfdk_parse_meta(dp->netdev, &meta,
1067 							 rxbuf->frag + meta_off,
1068 							 rxbuf->frag + pkt_off,
1069 							 pkt_len, meta_len))) {
1070 				nn_dp_warn(dp, "invalid RX packet metadata\n");
1071 				nfp_nfdk_rx_drop(dp, r_vec, rx_ring, rxbuf,
1072 						 NULL);
1073 				continue;
1074 			}
1075 		}
1076 
1077 		if (xdp_prog && !meta.portid) {
1078 			void *orig_data = rxbuf->frag + pkt_off;
1079 			unsigned int dma_off;
1080 			int act;
1081 
1082 			xdp_prepare_buff(&xdp,
1083 					 rxbuf->frag + NFP_NET_RX_BUF_HEADROOM,
1084 					 pkt_off - NFP_NET_RX_BUF_HEADROOM,
1085 					 pkt_len, true);
1086 
1087 			act = bpf_prog_run_xdp(xdp_prog, &xdp);
1088 
1089 			pkt_len = xdp.data_end - xdp.data;
1090 			pkt_off += xdp.data - orig_data;
1091 
1092 			switch (act) {
1093 			case XDP_PASS:
1094 				meta_len_xdp = xdp.data - xdp.data_meta;
1095 				break;
1096 			case XDP_TX:
1097 				dma_off = pkt_off - NFP_NET_RX_BUF_HEADROOM;
1098 				if (unlikely(!nfp_nfdk_tx_xdp_buf(dp, rx_ring,
1099 								  tx_ring,
1100 								  rxbuf,
1101 								  dma_off,
1102 								  pkt_len,
1103 								  &xdp_tx_cmpl)))
1104 					trace_xdp_exception(dp->netdev,
1105 							    xdp_prog, act);
1106 				continue;
1107 			default:
1108 				bpf_warn_invalid_xdp_action(dp->netdev, xdp_prog, act);
1109 				fallthrough;
1110 			case XDP_ABORTED:
1111 				trace_xdp_exception(dp->netdev, xdp_prog, act);
1112 				fallthrough;
1113 			case XDP_DROP:
1114 				nfp_nfdk_rx_give_one(dp, rx_ring, rxbuf->frag,
1115 						     rxbuf->dma_addr);
1116 				continue;
1117 			}
1118 		}
1119 
1120 		if (likely(!meta.portid)) {
1121 			netdev = dp->netdev;
1122 		} else if (meta.portid == NFP_META_PORT_ID_CTRL) {
1123 			struct nfp_net *nn = netdev_priv(dp->netdev);
1124 
1125 			nfp_app_ctrl_rx_raw(nn->app, rxbuf->frag + pkt_off,
1126 					    pkt_len);
1127 			nfp_nfdk_rx_give_one(dp, rx_ring, rxbuf->frag,
1128 					     rxbuf->dma_addr);
1129 			continue;
1130 		} else {
1131 			struct nfp_net *nn;
1132 
1133 			nn = netdev_priv(dp->netdev);
1134 			netdev = nfp_app_dev_get(nn->app, meta.portid,
1135 						 &redir_egress);
1136 			if (unlikely(!netdev)) {
1137 				nfp_nfdk_rx_drop(dp, r_vec, rx_ring, rxbuf,
1138 						 NULL);
1139 				continue;
1140 			}
1141 
1142 			if (nfp_netdev_is_nfp_repr(netdev))
1143 				nfp_repr_inc_rx_stats(netdev, pkt_len);
1144 		}
1145 
1146 		skb = build_skb(rxbuf->frag, true_bufsz);
1147 		if (unlikely(!skb)) {
1148 			nfp_nfdk_rx_drop(dp, r_vec, rx_ring, rxbuf, NULL);
1149 			continue;
1150 		}
1151 		new_frag = nfp_nfdk_napi_alloc_one(dp, &new_dma_addr);
1152 		if (unlikely(!new_frag)) {
1153 			nfp_nfdk_rx_drop(dp, r_vec, rx_ring, rxbuf, skb);
1154 			continue;
1155 		}
1156 
1157 		nfp_net_dma_unmap_rx(dp, rxbuf->dma_addr);
1158 
1159 		nfp_nfdk_rx_give_one(dp, rx_ring, new_frag, new_dma_addr);
1160 
1161 		skb_reserve(skb, pkt_off);
1162 		skb_put(skb, pkt_len);
1163 
1164 		skb->mark = meta.mark;
1165 		skb_set_hash(skb, meta.hash, meta.hash_type);
1166 
1167 		skb_record_rx_queue(skb, rx_ring->idx);
1168 		skb->protocol = eth_type_trans(skb, netdev);
1169 
1170 		nfp_nfdk_rx_csum(dp, r_vec, rxd, &meta, skb);
1171 
1172 		if (rxd->rxd.flags & PCIE_DESC_RX_VLAN)
1173 			__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
1174 					       le16_to_cpu(rxd->rxd.vlan));
1175 		if (meta_len_xdp)
1176 			skb_metadata_set(skb, meta_len_xdp);
1177 
1178 		if (likely(!redir_egress)) {
1179 			napi_gro_receive(&rx_ring->r_vec->napi, skb);
1180 		} else {
1181 			skb->dev = netdev;
1182 			skb_reset_network_header(skb);
1183 			__skb_push(skb, ETH_HLEN);
1184 			dev_queue_xmit(skb);
1185 		}
1186 	}
1187 
1188 	if (xdp_prog) {
1189 		if (tx_ring->wr_ptr_add)
1190 			nfp_net_tx_xmit_more_flush(tx_ring);
1191 		else if (unlikely(tx_ring->wr_p != tx_ring->rd_p) &&
1192 			 !xdp_tx_cmpl)
1193 			if (!nfp_nfdk_xdp_complete(tx_ring))
1194 				pkts_polled = budget;
1195 	}
1196 
1197 	return pkts_polled;
1198 }
1199 
1200 /**
1201  * nfp_nfdk_poll() - napi poll function
1202  * @napi:    NAPI structure
1203  * @budget:  NAPI budget
1204  *
1205  * Return: number of packets polled.
1206  */
1207 int nfp_nfdk_poll(struct napi_struct *napi, int budget)
1208 {
1209 	struct nfp_net_r_vector *r_vec =
1210 		container_of(napi, struct nfp_net_r_vector, napi);
1211 	unsigned int pkts_polled = 0;
1212 
1213 	if (r_vec->tx_ring)
1214 		nfp_nfdk_tx_complete(r_vec->tx_ring, budget);
1215 	if (r_vec->rx_ring)
1216 		pkts_polled = nfp_nfdk_rx(r_vec->rx_ring, budget);
1217 
1218 	if (pkts_polled < budget)
1219 		if (napi_complete_done(napi, pkts_polled))
1220 			nfp_net_irq_unmask(r_vec->nfp_net, r_vec->irq_entry);
1221 
1222 	if (r_vec->nfp_net->rx_coalesce_adapt_on && r_vec->rx_ring) {
1223 		struct dim_sample dim_sample = {};
1224 		unsigned int start;
1225 		u64 pkts, bytes;
1226 
1227 		do {
1228 			start = u64_stats_fetch_begin(&r_vec->rx_sync);
1229 			pkts = r_vec->rx_pkts;
1230 			bytes = r_vec->rx_bytes;
1231 		} while (u64_stats_fetch_retry(&r_vec->rx_sync, start));
1232 
1233 		dim_update_sample(r_vec->event_ctr, pkts, bytes, &dim_sample);
1234 		net_dim(&r_vec->rx_dim, dim_sample);
1235 	}
1236 
1237 	if (r_vec->nfp_net->tx_coalesce_adapt_on && r_vec->tx_ring) {
1238 		struct dim_sample dim_sample = {};
1239 		unsigned int start;
1240 		u64 pkts, bytes;
1241 
1242 		do {
1243 			start = u64_stats_fetch_begin(&r_vec->tx_sync);
1244 			pkts = r_vec->tx_pkts;
1245 			bytes = r_vec->tx_bytes;
1246 		} while (u64_stats_fetch_retry(&r_vec->tx_sync, start));
1247 
1248 		dim_update_sample(r_vec->event_ctr, pkts, bytes, &dim_sample);
1249 		net_dim(&r_vec->tx_dim, dim_sample);
1250 	}
1251 
1252 	return pkts_polled;
1253 }
1254 
1255 /* Control device data path
1256  */
1257 
1258 bool
1259 nfp_nfdk_ctrl_tx_one(struct nfp_net *nn, struct nfp_net_r_vector *r_vec,
1260 		     struct sk_buff *skb, bool old)
1261 {
1262 	u32 cnt, tmp_dlen, dlen_type = 0;
1263 	struct nfp_net_tx_ring *tx_ring;
1264 	struct nfp_nfdk_tx_buf *txbuf;
1265 	struct nfp_nfdk_tx_desc *txd;
1266 	unsigned int dma_len, type;
1267 	struct nfp_net_dp *dp;
1268 	dma_addr_t dma_addr;
1269 	u64 metadata = 0;
1270 	int wr_idx;
1271 
1272 	dp = &r_vec->nfp_net->dp;
1273 	tx_ring = r_vec->tx_ring;
1274 
1275 	if (WARN_ON_ONCE(skb_shinfo(skb)->nr_frags)) {
1276 		nn_dp_warn(dp, "Driver's CTRL TX does not implement gather\n");
1277 		goto err_free;
1278 	}
1279 
1280 	/* Don't bother counting frags, assume the worst */
1281 	if (unlikely(nfp_net_tx_full(tx_ring, NFDK_TX_DESC_STOP_CNT))) {
1282 		u64_stats_update_begin(&r_vec->tx_sync);
1283 		r_vec->tx_busy++;
1284 		u64_stats_update_end(&r_vec->tx_sync);
1285 		if (!old)
1286 			__skb_queue_tail(&r_vec->queue, skb);
1287 		else
1288 			__skb_queue_head(&r_vec->queue, skb);
1289 		return NETDEV_TX_BUSY;
1290 	}
1291 
1292 	if (nfp_app_ctrl_has_meta(nn->app)) {
1293 		if (unlikely(skb_headroom(skb) < 8)) {
1294 			nn_dp_warn(dp, "CTRL TX on skb without headroom\n");
1295 			goto err_free;
1296 		}
1297 		metadata = NFDK_DESC_TX_CHAIN_META;
1298 		put_unaligned_be32(NFP_META_PORT_ID_CTRL, skb_push(skb, 4));
1299 		put_unaligned_be32(FIELD_PREP(NFDK_META_LEN, 8) |
1300 				   FIELD_PREP(NFDK_META_FIELDS,
1301 					      NFP_NET_META_PORTID),
1302 				   skb_push(skb, 4));
1303 	}
1304 
1305 	if (nfp_nfdk_tx_maybe_close_block(tx_ring, 0, skb))
1306 		goto err_free;
1307 
1308 	/* DMA map all */
1309 	wr_idx = D_IDX(tx_ring, tx_ring->wr_p);
1310 	txd = &tx_ring->ktxds[wr_idx];
1311 	txbuf = &tx_ring->ktxbufs[wr_idx];
1312 
1313 	dma_len = skb_headlen(skb);
1314 	if (dma_len < NFDK_TX_MAX_DATA_PER_HEAD)
1315 		type = NFDK_DESC_TX_TYPE_SIMPLE;
1316 	else
1317 		type = NFDK_DESC_TX_TYPE_GATHER;
1318 
1319 	dma_addr = dma_map_single(dp->dev, skb->data, dma_len, DMA_TO_DEVICE);
1320 	if (dma_mapping_error(dp->dev, dma_addr))
1321 		goto err_warn_dma;
1322 
1323 	txbuf->skb = skb;
1324 	txbuf++;
1325 
1326 	txbuf->dma_addr = dma_addr;
1327 	txbuf++;
1328 
1329 	dma_len -= 1;
1330 	dlen_type = FIELD_PREP(NFDK_DESC_TX_DMA_LEN_HEAD, dma_len) |
1331 		    FIELD_PREP(NFDK_DESC_TX_TYPE_HEAD, type);
1332 
1333 	txd->dma_len_type = cpu_to_le16(dlen_type);
1334 	nfp_desc_set_dma_addr_48b(txd, dma_addr);
1335 
1336 	tmp_dlen = dlen_type & NFDK_DESC_TX_DMA_LEN_HEAD;
1337 	dma_len -= tmp_dlen;
1338 	dma_addr += tmp_dlen + 1;
1339 	txd++;
1340 
1341 	while (dma_len > 0) {
1342 		dma_len -= 1;
1343 		dlen_type = FIELD_PREP(NFDK_DESC_TX_DMA_LEN, dma_len);
1344 		txd->dma_len_type = cpu_to_le16(dlen_type);
1345 		nfp_desc_set_dma_addr_48b(txd, dma_addr);
1346 
1347 		dlen_type &= NFDK_DESC_TX_DMA_LEN;
1348 		dma_len -= dlen_type;
1349 		dma_addr += dlen_type + 1;
1350 		txd++;
1351 	}
1352 
1353 	(txd - 1)->dma_len_type = cpu_to_le16(dlen_type | NFDK_DESC_TX_EOP);
1354 
1355 	/* Metadata desc */
1356 	txd->raw = cpu_to_le64(metadata);
1357 	txd++;
1358 
1359 	cnt = txd - tx_ring->ktxds - wr_idx;
1360 	if (unlikely(round_down(wr_idx, NFDK_TX_DESC_BLOCK_CNT) !=
1361 		     round_down(wr_idx + cnt - 1, NFDK_TX_DESC_BLOCK_CNT)))
1362 		goto err_warn_overflow;
1363 
1364 	tx_ring->wr_p += cnt;
1365 	if (tx_ring->wr_p % NFDK_TX_DESC_BLOCK_CNT)
1366 		tx_ring->data_pending += skb->len;
1367 	else
1368 		tx_ring->data_pending = 0;
1369 
1370 	tx_ring->wr_ptr_add += cnt;
1371 	nfp_net_tx_xmit_more_flush(tx_ring);
1372 
1373 	return NETDEV_TX_OK;
1374 
1375 err_warn_overflow:
1376 	WARN_ONCE(1, "unable to fit packet into a descriptor wr_idx:%d head:%d frags:%d cnt:%d",
1377 		  wr_idx, skb_headlen(skb), 0, cnt);
1378 	txbuf--;
1379 	dma_unmap_single(dp->dev, txbuf->dma_addr,
1380 			 skb_headlen(skb), DMA_TO_DEVICE);
1381 	txbuf->raw = 0;
1382 err_warn_dma:
1383 	nn_dp_warn(dp, "Failed to map DMA TX buffer\n");
1384 err_free:
1385 	u64_stats_update_begin(&r_vec->tx_sync);
1386 	r_vec->tx_errors++;
1387 	u64_stats_update_end(&r_vec->tx_sync);
1388 	dev_kfree_skb_any(skb);
1389 	return NETDEV_TX_OK;
1390 }
1391 
1392 static void __nfp_ctrl_tx_queued(struct nfp_net_r_vector *r_vec)
1393 {
1394 	struct sk_buff *skb;
1395 
1396 	while ((skb = __skb_dequeue(&r_vec->queue)))
1397 		if (nfp_nfdk_ctrl_tx_one(r_vec->nfp_net, r_vec, skb, true))
1398 			return;
1399 }
1400 
1401 static bool
1402 nfp_ctrl_meta_ok(struct nfp_net *nn, void *data, unsigned int meta_len)
1403 {
1404 	u32 meta_type, meta_tag;
1405 
1406 	if (!nfp_app_ctrl_has_meta(nn->app))
1407 		return !meta_len;
1408 
1409 	if (meta_len != 8)
1410 		return false;
1411 
1412 	meta_type = get_unaligned_be32(data);
1413 	meta_tag = get_unaligned_be32(data + 4);
1414 
1415 	return (meta_type == NFP_NET_META_PORTID &&
1416 		meta_tag == NFP_META_PORT_ID_CTRL);
1417 }
1418 
1419 static bool
1420 nfp_ctrl_rx_one(struct nfp_net *nn, struct nfp_net_dp *dp,
1421 		struct nfp_net_r_vector *r_vec, struct nfp_net_rx_ring *rx_ring)
1422 {
1423 	unsigned int meta_len, data_len, meta_off, pkt_len, pkt_off;
1424 	struct nfp_net_rx_buf *rxbuf;
1425 	struct nfp_net_rx_desc *rxd;
1426 	dma_addr_t new_dma_addr;
1427 	struct sk_buff *skb;
1428 	void *new_frag;
1429 	int idx;
1430 
1431 	idx = D_IDX(rx_ring, rx_ring->rd_p);
1432 
1433 	rxd = &rx_ring->rxds[idx];
1434 	if (!(rxd->rxd.meta_len_dd & PCIE_DESC_RX_DD))
1435 		return false;
1436 
1437 	/* Memory barrier to ensure that we won't do other reads
1438 	 * before the DD bit.
1439 	 */
1440 	dma_rmb();
1441 
1442 	rx_ring->rd_p++;
1443 
1444 	rxbuf =	&rx_ring->rxbufs[idx];
1445 	meta_len = rxd->rxd.meta_len_dd & PCIE_DESC_RX_META_LEN_MASK;
1446 	data_len = le16_to_cpu(rxd->rxd.data_len);
1447 	pkt_len = data_len - meta_len;
1448 
1449 	pkt_off = NFP_NET_RX_BUF_HEADROOM + dp->rx_dma_off;
1450 	if (dp->rx_offset == NFP_NET_CFG_RX_OFFSET_DYNAMIC)
1451 		pkt_off += meta_len;
1452 	else
1453 		pkt_off += dp->rx_offset;
1454 	meta_off = pkt_off - meta_len;
1455 
1456 	/* Stats update */
1457 	u64_stats_update_begin(&r_vec->rx_sync);
1458 	r_vec->rx_pkts++;
1459 	r_vec->rx_bytes += pkt_len;
1460 	u64_stats_update_end(&r_vec->rx_sync);
1461 
1462 	nfp_net_dma_sync_cpu_rx(dp, rxbuf->dma_addr + meta_off,	data_len);
1463 
1464 	if (unlikely(!nfp_ctrl_meta_ok(nn, rxbuf->frag + meta_off, meta_len))) {
1465 		nn_dp_warn(dp, "incorrect metadata for ctrl packet (%d)\n",
1466 			   meta_len);
1467 		nfp_nfdk_rx_drop(dp, r_vec, rx_ring, rxbuf, NULL);
1468 		return true;
1469 	}
1470 
1471 	skb = build_skb(rxbuf->frag, dp->fl_bufsz);
1472 	if (unlikely(!skb)) {
1473 		nfp_nfdk_rx_drop(dp, r_vec, rx_ring, rxbuf, NULL);
1474 		return true;
1475 	}
1476 	new_frag = nfp_nfdk_napi_alloc_one(dp, &new_dma_addr);
1477 	if (unlikely(!new_frag)) {
1478 		nfp_nfdk_rx_drop(dp, r_vec, rx_ring, rxbuf, skb);
1479 		return true;
1480 	}
1481 
1482 	nfp_net_dma_unmap_rx(dp, rxbuf->dma_addr);
1483 
1484 	nfp_nfdk_rx_give_one(dp, rx_ring, new_frag, new_dma_addr);
1485 
1486 	skb_reserve(skb, pkt_off);
1487 	skb_put(skb, pkt_len);
1488 
1489 	nfp_app_ctrl_rx(nn->app, skb);
1490 
1491 	return true;
1492 }
1493 
1494 static bool nfp_ctrl_rx(struct nfp_net_r_vector *r_vec)
1495 {
1496 	struct nfp_net_rx_ring *rx_ring = r_vec->rx_ring;
1497 	struct nfp_net *nn = r_vec->nfp_net;
1498 	struct nfp_net_dp *dp = &nn->dp;
1499 	unsigned int budget = 512;
1500 
1501 	while (nfp_ctrl_rx_one(nn, dp, r_vec, rx_ring) && budget--)
1502 		continue;
1503 
1504 	return budget;
1505 }
1506 
1507 void nfp_nfdk_ctrl_poll(struct tasklet_struct *t)
1508 {
1509 	struct nfp_net_r_vector *r_vec = from_tasklet(r_vec, t, tasklet);
1510 
1511 	spin_lock(&r_vec->lock);
1512 	nfp_nfdk_tx_complete(r_vec->tx_ring, 0);
1513 	__nfp_ctrl_tx_queued(r_vec);
1514 	spin_unlock(&r_vec->lock);
1515 
1516 	if (nfp_ctrl_rx(r_vec)) {
1517 		nfp_net_irq_unmask(r_vec->nfp_net, r_vec->irq_entry);
1518 	} else {
1519 		tasklet_schedule(&r_vec->tasklet);
1520 		nn_dp_warn(&r_vec->nfp_net->dp,
1521 			   "control message budget exceeded!\n");
1522 	}
1523 }
1524