1 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later
2 /*
3 * Copyright 2008 - 2016 Freescale Semiconductor Inc.
4 * Copyright 2020 NXP
5 */
6
7 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
8
9 #include <linux/init.h>
10 #include <linux/module.h>
11 #include <linux/of_mdio.h>
12 #include <linux/of_net.h>
13 #include <linux/io.h>
14 #include <linux/if_arp.h>
15 #include <linux/if_vlan.h>
16 #include <linux/icmp.h>
17 #include <linux/ip.h>
18 #include <linux/ipv6.h>
19 #include <linux/platform_device.h>
20 #include <linux/udp.h>
21 #include <linux/tcp.h>
22 #include <linux/net.h>
23 #include <linux/skbuff.h>
24 #include <linux/etherdevice.h>
25 #include <linux/if_ether.h>
26 #include <linux/highmem.h>
27 #include <linux/percpu.h>
28 #include <linux/dma-mapping.h>
29 #include <linux/sort.h>
30 #include <linux/bpf.h>
31 #include <linux/bpf_trace.h>
32 #include <soc/fsl/bman.h>
33 #include <soc/fsl/qman.h>
34 #include "fman.h"
35 #include "fman_port.h"
36 #include "mac.h"
37 #include "dpaa_eth.h"
38
39 /* CREATE_TRACE_POINTS only needs to be defined once. Other dpaa files
40 * using trace events only need to #include <trace/events/sched.h>
41 */
42 #define CREATE_TRACE_POINTS
43 #include "dpaa_eth_trace.h"
44
45 static int debug = -1;
46 module_param(debug, int, 0444);
47 MODULE_PARM_DESC(debug, "Module/Driver verbosity level (0=none,...,16=all)");
48
49 static u16 tx_timeout = 1000;
50 module_param(tx_timeout, ushort, 0444);
51 MODULE_PARM_DESC(tx_timeout, "The Tx timeout in ms");
52
53 #define FM_FD_STAT_RX_ERRORS \
54 (FM_FD_ERR_DMA | FM_FD_ERR_PHYSICAL | \
55 FM_FD_ERR_SIZE | FM_FD_ERR_CLS_DISCARD | \
56 FM_FD_ERR_EXTRACTION | FM_FD_ERR_NO_SCHEME | \
57 FM_FD_ERR_PRS_TIMEOUT | FM_FD_ERR_PRS_ILL_INSTRUCT | \
58 FM_FD_ERR_PRS_HDR_ERR)
59
60 #define FM_FD_STAT_TX_ERRORS \
61 (FM_FD_ERR_UNSUPPORTED_FORMAT | \
62 FM_FD_ERR_LENGTH | FM_FD_ERR_DMA)
63
64 #define DPAA_MSG_DEFAULT (NETIF_MSG_DRV | NETIF_MSG_PROBE | \
65 NETIF_MSG_LINK | NETIF_MSG_IFUP | \
66 NETIF_MSG_IFDOWN | NETIF_MSG_HW)
67
68 #define DPAA_INGRESS_CS_THRESHOLD 0x10000000
69 /* Ingress congestion threshold on FMan ports
70 * The size in bytes of the ingress tail-drop threshold on FMan ports.
71 * Traffic piling up above this value will be rejected by QMan and discarded
72 * by FMan.
73 */
74
75 /* Size in bytes of the FQ taildrop threshold */
76 #define DPAA_FQ_TD 0x200000
77
78 #define DPAA_CS_THRESHOLD_1G 0x06000000
79 /* Egress congestion threshold on 1G ports, range 0x1000 .. 0x10000000
80 * The size in bytes of the egress Congestion State notification threshold on
81 * 1G ports. The 1G dTSECs can quite easily be flooded by cores doing Tx in a
82 * tight loop (e.g. by sending UDP datagrams at "while(1) speed"),
83 * and the larger the frame size, the more acute the problem.
84 * So we have to find a balance between these factors:
85 * - avoiding the device staying congested for a prolonged time (risking
86 * the netdev watchdog to fire - see also the tx_timeout module param);
87 * - affecting performance of protocols such as TCP, which otherwise
88 * behave well under the congestion notification mechanism;
89 * - preventing the Tx cores from tightly-looping (as if the congestion
90 * threshold was too low to be effective);
91 * - running out of memory if the CS threshold is set too high.
92 */
93
94 #define DPAA_CS_THRESHOLD_10G 0x10000000
95 /* The size in bytes of the egress Congestion State notification threshold on
96 * 10G ports, range 0x1000 .. 0x10000000
97 */
98
99 /* Largest value that the FQD's OAL field can hold */
100 #define FSL_QMAN_MAX_OAL 127
101
102 /* Default alignment for start of data in an Rx FD */
103 #ifdef CONFIG_DPAA_ERRATUM_A050385
104 /* aligning data start to 64 avoids DMA transaction splits, unless the buffer
105 * is crossing a 4k page boundary
106 */
107 #define DPAA_FD_DATA_ALIGNMENT (fman_has_errata_a050385() ? 64 : 16)
108 /* aligning to 256 avoids DMA transaction splits caused by 4k page boundary
109 * crossings; also, all SG fragments except the last must have a size multiple
110 * of 256 to avoid DMA transaction splits
111 */
112 #define DPAA_A050385_ALIGN 256
113 #define DPAA_FD_RX_DATA_ALIGNMENT (fman_has_errata_a050385() ? \
114 DPAA_A050385_ALIGN : 16)
115 #else
116 #define DPAA_FD_DATA_ALIGNMENT 16
117 #define DPAA_FD_RX_DATA_ALIGNMENT DPAA_FD_DATA_ALIGNMENT
118 #endif
119
120 /* The DPAA requires 256 bytes reserved and mapped for the SGT */
121 #define DPAA_SGT_SIZE 256
122
123 /* Values for the L3R field of the FM Parse Results
124 */
125 /* L3 Type field: First IP Present IPv4 */
126 #define FM_L3_PARSE_RESULT_IPV4 0x8000
127 /* L3 Type field: First IP Present IPv6 */
128 #define FM_L3_PARSE_RESULT_IPV6 0x4000
129 /* Values for the L4R field of the FM Parse Results */
130 /* L4 Type field: UDP */
131 #define FM_L4_PARSE_RESULT_UDP 0x40
132 /* L4 Type field: TCP */
133 #define FM_L4_PARSE_RESULT_TCP 0x20
134
135 /* FD status field indicating whether the FM Parser has attempted to validate
136 * the L4 csum of the frame.
137 * Note that having this bit set doesn't necessarily imply that the checksum
138 * is valid. One would have to check the parse results to find that out.
139 */
140 #define FM_FD_STAT_L4CV 0x00000004
141
142 #define DPAA_SGT_MAX_ENTRIES 16 /* maximum number of entries in SG Table */
143 #define DPAA_BUFF_RELEASE_MAX 8 /* maximum number of buffers released at once */
144
145 #define FSL_DPAA_BPID_INV 0xff
146 #define FSL_DPAA_ETH_MAX_BUF_COUNT 128
147 #define FSL_DPAA_ETH_REFILL_THRESHOLD 80
148
149 #define DPAA_TX_PRIV_DATA_SIZE 16
150 #define DPAA_PARSE_RESULTS_SIZE sizeof(struct fman_prs_result)
151 #define DPAA_TIME_STAMP_SIZE 8
152 #define DPAA_HASH_RESULTS_SIZE 8
153 #define DPAA_HWA_SIZE (DPAA_PARSE_RESULTS_SIZE + DPAA_TIME_STAMP_SIZE \
154 + DPAA_HASH_RESULTS_SIZE)
155 #define DPAA_RX_PRIV_DATA_DEFAULT_SIZE (DPAA_TX_PRIV_DATA_SIZE + \
156 XDP_PACKET_HEADROOM - DPAA_HWA_SIZE)
157 #ifdef CONFIG_DPAA_ERRATUM_A050385
158 #define DPAA_RX_PRIV_DATA_A050385_SIZE (DPAA_A050385_ALIGN - DPAA_HWA_SIZE)
159 #define DPAA_RX_PRIV_DATA_SIZE (fman_has_errata_a050385() ? \
160 DPAA_RX_PRIV_DATA_A050385_SIZE : \
161 DPAA_RX_PRIV_DATA_DEFAULT_SIZE)
162 #else
163 #define DPAA_RX_PRIV_DATA_SIZE DPAA_RX_PRIV_DATA_DEFAULT_SIZE
164 #endif
165
166 #define DPAA_ETH_PCD_RXQ_NUM 128
167
168 #define DPAA_ENQUEUE_RETRIES 100000
169
170 enum port_type {RX, TX};
171
172 struct fm_port_fqs {
173 struct dpaa_fq *tx_defq;
174 struct dpaa_fq *tx_errq;
175 struct dpaa_fq *rx_defq;
176 struct dpaa_fq *rx_errq;
177 struct dpaa_fq *rx_pcdq;
178 };
179
180 /* All the dpa bps in use at any moment */
181 static struct dpaa_bp *dpaa_bp_array[BM_MAX_NUM_OF_POOLS];
182
183 #define DPAA_BP_RAW_SIZE 4096
184
185 #ifdef CONFIG_DPAA_ERRATUM_A050385
186 #define dpaa_bp_size(raw_size) (SKB_WITH_OVERHEAD(raw_size) & \
187 ~(DPAA_A050385_ALIGN - 1))
188 #else
189 #define dpaa_bp_size(raw_size) SKB_WITH_OVERHEAD(raw_size)
190 #endif
191
192 static int dpaa_max_frm;
193
194 static int dpaa_rx_extra_headroom;
195
196 #define dpaa_get_max_mtu() \
197 (dpaa_max_frm - (VLAN_ETH_HLEN + ETH_FCS_LEN))
198
199 static void dpaa_eth_cgr_set_speed(struct mac_device *mac_dev, int speed);
200
dpaa_netdev_init(struct net_device * net_dev,const struct net_device_ops * dpaa_ops,u16 tx_timeout)201 static int dpaa_netdev_init(struct net_device *net_dev,
202 const struct net_device_ops *dpaa_ops,
203 u16 tx_timeout)
204 {
205 struct dpaa_priv *priv = netdev_priv(net_dev);
206 struct device *dev = net_dev->dev.parent;
207 struct mac_device *mac_dev = priv->mac_dev;
208 struct dpaa_percpu_priv *percpu_priv;
209 const u8 *mac_addr;
210 int i, err;
211
212 /* Although we access another CPU's private data here
213 * we do it at initialization so it is safe
214 */
215 for_each_possible_cpu(i) {
216 percpu_priv = per_cpu_ptr(priv->percpu_priv, i);
217 percpu_priv->net_dev = net_dev;
218 }
219
220 net_dev->netdev_ops = dpaa_ops;
221 mac_addr = mac_dev->addr;
222
223 net_dev->mem_start = (unsigned long)priv->mac_dev->res->start;
224 net_dev->mem_end = (unsigned long)priv->mac_dev->res->end;
225
226 net_dev->min_mtu = ETH_MIN_MTU;
227 net_dev->max_mtu = dpaa_get_max_mtu();
228
229 net_dev->hw_features |= (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
230 NETIF_F_RXHASH);
231
232 net_dev->hw_features |= NETIF_F_SG | NETIF_F_HIGHDMA;
233 /* The kernels enables GSO automatically, if we declare NETIF_F_SG.
234 * For conformity, we'll still declare GSO explicitly.
235 */
236 net_dev->features |= NETIF_F_GSO;
237 net_dev->features |= NETIF_F_RXCSUM;
238
239 net_dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
240 net_dev->lltx = true;
241 /* we do not want shared skbs on TX */
242 net_dev->priv_flags &= ~IFF_TX_SKB_SHARING;
243
244 net_dev->features |= net_dev->hw_features;
245 net_dev->vlan_features = net_dev->features;
246
247 net_dev->xdp_features = NETDEV_XDP_ACT_BASIC |
248 NETDEV_XDP_ACT_REDIRECT |
249 NETDEV_XDP_ACT_NDO_XMIT;
250
251 if (is_valid_ether_addr(mac_addr)) {
252 memcpy(net_dev->perm_addr, mac_addr, net_dev->addr_len);
253 eth_hw_addr_set(net_dev, mac_addr);
254 } else {
255 eth_hw_addr_random(net_dev);
256 err = mac_dev->change_addr(mac_dev->fman_mac,
257 (const enet_addr_t *)net_dev->dev_addr);
258 if (err) {
259 dev_err(dev, "Failed to set random MAC address\n");
260 return -EINVAL;
261 }
262 dev_info(dev, "Using random MAC address: %pM\n",
263 net_dev->dev_addr);
264 }
265
266 net_dev->ethtool_ops = &dpaa_ethtool_ops;
267
268 net_dev->needed_headroom = priv->tx_headroom;
269 net_dev->watchdog_timeo = msecs_to_jiffies(tx_timeout);
270
271 /* The rest of the config is filled in by the mac device already */
272 mac_dev->phylink_config.dev = &net_dev->dev;
273 mac_dev->phylink_config.type = PHYLINK_NETDEV;
274 mac_dev->update_speed = dpaa_eth_cgr_set_speed;
275 mac_dev->phylink = phylink_create(&mac_dev->phylink_config,
276 dev_fwnode(mac_dev->dev),
277 mac_dev->phy_if,
278 mac_dev->phylink_ops);
279 if (IS_ERR(mac_dev->phylink)) {
280 err = PTR_ERR(mac_dev->phylink);
281 dev_err_probe(dev, err, "Could not create phylink\n");
282 return err;
283 }
284
285 /* start without the RUNNING flag, phylib controls it later */
286 netif_carrier_off(net_dev);
287
288 err = register_netdev(net_dev);
289 if (err < 0) {
290 dev_err(dev, "register_netdev() = %d\n", err);
291 phylink_destroy(mac_dev->phylink);
292 return err;
293 }
294
295 return 0;
296 }
297
dpaa_stop(struct net_device * net_dev)298 static int dpaa_stop(struct net_device *net_dev)
299 {
300 struct mac_device *mac_dev;
301 struct dpaa_priv *priv;
302 int i, error;
303 int err = 0;
304
305 priv = netdev_priv(net_dev);
306 mac_dev = priv->mac_dev;
307
308 netif_tx_stop_all_queues(net_dev);
309 /* Allow the Fman (Tx) port to process in-flight frames before we
310 * try switching it off.
311 */
312 msleep(200);
313
314 phylink_stop(mac_dev->phylink);
315 mac_dev->disable(mac_dev->fman_mac);
316
317 for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++) {
318 error = fman_port_disable(mac_dev->port[i]);
319 if (error)
320 err = error;
321 }
322
323 phylink_disconnect_phy(mac_dev->phylink);
324 net_dev->phydev = NULL;
325
326 msleep(200);
327
328 return err;
329 }
330
dpaa_tx_timeout(struct net_device * net_dev,unsigned int txqueue)331 static void dpaa_tx_timeout(struct net_device *net_dev, unsigned int txqueue)
332 {
333 struct dpaa_percpu_priv *percpu_priv;
334 const struct dpaa_priv *priv;
335
336 priv = netdev_priv(net_dev);
337 percpu_priv = this_cpu_ptr(priv->percpu_priv);
338
339 netif_crit(priv, timer, net_dev, "Transmit timeout latency: %u ms\n",
340 jiffies_to_msecs(jiffies - dev_trans_start(net_dev)));
341
342 percpu_priv->stats.tx_errors++;
343 }
344
345 /* Calculates the statistics for the given device by adding the statistics
346 * collected by each CPU.
347 */
dpaa_get_stats64(struct net_device * net_dev,struct rtnl_link_stats64 * s)348 static void dpaa_get_stats64(struct net_device *net_dev,
349 struct rtnl_link_stats64 *s)
350 {
351 int numstats = sizeof(struct rtnl_link_stats64) / sizeof(u64);
352 struct dpaa_priv *priv = netdev_priv(net_dev);
353 struct dpaa_percpu_priv *percpu_priv;
354 u64 *netstats = (u64 *)s;
355 u64 *cpustats;
356 int i, j;
357
358 for_each_possible_cpu(i) {
359 percpu_priv = per_cpu_ptr(priv->percpu_priv, i);
360
361 cpustats = (u64 *)&percpu_priv->stats;
362
363 /* add stats from all CPUs */
364 for (j = 0; j < numstats; j++)
365 netstats[j] += cpustats[j];
366 }
367 }
368
dpaa_setup_tc(struct net_device * net_dev,enum tc_setup_type type,void * type_data)369 static int dpaa_setup_tc(struct net_device *net_dev, enum tc_setup_type type,
370 void *type_data)
371 {
372 struct dpaa_priv *priv = netdev_priv(net_dev);
373 int num_txqs_per_tc = dpaa_num_txqs_per_tc();
374 struct tc_mqprio_qopt *mqprio = type_data;
375 u8 num_tc;
376 int i;
377
378 if (type != TC_SETUP_QDISC_MQPRIO)
379 return -EOPNOTSUPP;
380
381 mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
382 num_tc = mqprio->num_tc;
383
384 if (num_tc == priv->num_tc)
385 return 0;
386
387 if (!num_tc) {
388 netdev_reset_tc(net_dev);
389 goto out;
390 }
391
392 if (num_tc > DPAA_TC_NUM) {
393 netdev_err(net_dev, "Too many traffic classes: max %d supported.\n",
394 DPAA_TC_NUM);
395 return -EINVAL;
396 }
397
398 netdev_set_num_tc(net_dev, num_tc);
399
400 for (i = 0; i < num_tc; i++)
401 netdev_set_tc_queue(net_dev, i, num_txqs_per_tc,
402 i * num_txqs_per_tc);
403
404 out:
405 priv->num_tc = num_tc ? : 1;
406 netif_set_real_num_tx_queues(net_dev, priv->num_tc * num_txqs_per_tc);
407 return 0;
408 }
409
dpaa_mac_dev_get(struct platform_device * pdev)410 static struct mac_device *dpaa_mac_dev_get(struct platform_device *pdev)
411 {
412 struct dpaa_eth_data *eth_data;
413 struct device *dpaa_dev;
414 struct mac_device *mac_dev;
415
416 dpaa_dev = &pdev->dev;
417 eth_data = dpaa_dev->platform_data;
418 if (!eth_data) {
419 dev_err(dpaa_dev, "eth_data missing\n");
420 return ERR_PTR(-ENODEV);
421 }
422 mac_dev = eth_data->mac_dev;
423 if (!mac_dev) {
424 dev_err(dpaa_dev, "mac_dev missing\n");
425 return ERR_PTR(-EINVAL);
426 }
427
428 return mac_dev;
429 }
430
dpaa_set_mac_address(struct net_device * net_dev,void * addr)431 static int dpaa_set_mac_address(struct net_device *net_dev, void *addr)
432 {
433 const struct dpaa_priv *priv;
434 struct mac_device *mac_dev;
435 struct sockaddr old_addr;
436 int err;
437
438 priv = netdev_priv(net_dev);
439
440 memcpy(old_addr.sa_data, net_dev->dev_addr, ETH_ALEN);
441
442 err = eth_mac_addr(net_dev, addr);
443 if (err < 0) {
444 netif_err(priv, drv, net_dev, "eth_mac_addr() = %d\n", err);
445 return err;
446 }
447
448 mac_dev = priv->mac_dev;
449
450 err = mac_dev->change_addr(mac_dev->fman_mac,
451 (const enet_addr_t *)net_dev->dev_addr);
452 if (err < 0) {
453 netif_err(priv, drv, net_dev, "mac_dev->change_addr() = %d\n",
454 err);
455 /* reverting to previous address */
456 eth_mac_addr(net_dev, &old_addr);
457
458 return err;
459 }
460
461 return 0;
462 }
463
dpaa_addr_sync(struct net_device * net_dev,const u8 * addr)464 static int dpaa_addr_sync(struct net_device *net_dev, const u8 *addr)
465 {
466 const struct dpaa_priv *priv = netdev_priv(net_dev);
467
468 return priv->mac_dev->add_hash_mac_addr(priv->mac_dev->fman_mac,
469 (enet_addr_t *)addr);
470 }
471
dpaa_addr_unsync(struct net_device * net_dev,const u8 * addr)472 static int dpaa_addr_unsync(struct net_device *net_dev, const u8 *addr)
473 {
474 const struct dpaa_priv *priv = netdev_priv(net_dev);
475
476 return priv->mac_dev->remove_hash_mac_addr(priv->mac_dev->fman_mac,
477 (enet_addr_t *)addr);
478 }
479
dpaa_set_rx_mode(struct net_device * net_dev)480 static void dpaa_set_rx_mode(struct net_device *net_dev)
481 {
482 const struct dpaa_priv *priv;
483 int err;
484
485 priv = netdev_priv(net_dev);
486
487 if (!!(net_dev->flags & IFF_PROMISC) != priv->mac_dev->promisc) {
488 priv->mac_dev->promisc = !priv->mac_dev->promisc;
489 err = priv->mac_dev->set_promisc(priv->mac_dev->fman_mac,
490 priv->mac_dev->promisc);
491 if (err < 0)
492 netif_err(priv, drv, net_dev,
493 "mac_dev->set_promisc() = %d\n",
494 err);
495 }
496
497 if (!!(net_dev->flags & IFF_ALLMULTI) != priv->mac_dev->allmulti) {
498 priv->mac_dev->allmulti = !priv->mac_dev->allmulti;
499 err = priv->mac_dev->set_allmulti(priv->mac_dev->fman_mac,
500 priv->mac_dev->allmulti);
501 if (err < 0)
502 netif_err(priv, drv, net_dev,
503 "mac_dev->set_allmulti() = %d\n",
504 err);
505 }
506
507 err = __dev_mc_sync(net_dev, dpaa_addr_sync, dpaa_addr_unsync);
508 if (err < 0)
509 netif_err(priv, drv, net_dev, "dpaa_addr_sync() = %d\n",
510 err);
511 }
512
dpaa_bpid2pool(int bpid)513 static struct dpaa_bp *dpaa_bpid2pool(int bpid)
514 {
515 if (WARN_ON(bpid < 0 || bpid >= BM_MAX_NUM_OF_POOLS))
516 return NULL;
517
518 return dpaa_bp_array[bpid];
519 }
520
521 /* checks if this bpool is already allocated */
dpaa_bpid2pool_use(int bpid)522 static bool dpaa_bpid2pool_use(int bpid)
523 {
524 if (dpaa_bpid2pool(bpid)) {
525 refcount_inc(&dpaa_bp_array[bpid]->refs);
526 return true;
527 }
528
529 return false;
530 }
531
532 /* called only once per bpid by dpaa_bp_alloc_pool() */
dpaa_bpid2pool_map(int bpid,struct dpaa_bp * dpaa_bp)533 static void dpaa_bpid2pool_map(int bpid, struct dpaa_bp *dpaa_bp)
534 {
535 dpaa_bp_array[bpid] = dpaa_bp;
536 refcount_set(&dpaa_bp->refs, 1);
537 }
538
dpaa_bp_alloc_pool(struct dpaa_bp * dpaa_bp)539 static int dpaa_bp_alloc_pool(struct dpaa_bp *dpaa_bp)
540 {
541 int err;
542
543 if (dpaa_bp->size == 0 || dpaa_bp->config_count == 0) {
544 pr_err("%s: Buffer pool is not properly initialized! Missing size or initial number of buffers\n",
545 __func__);
546 return -EINVAL;
547 }
548
549 /* If the pool is already specified, we only create one per bpid */
550 if (dpaa_bp->bpid != FSL_DPAA_BPID_INV &&
551 dpaa_bpid2pool_use(dpaa_bp->bpid))
552 return 0;
553
554 if (dpaa_bp->bpid == FSL_DPAA_BPID_INV) {
555 dpaa_bp->pool = bman_new_pool();
556 if (!dpaa_bp->pool) {
557 pr_err("%s: bman_new_pool() failed\n",
558 __func__);
559 return -ENODEV;
560 }
561
562 dpaa_bp->bpid = (u8)bman_get_bpid(dpaa_bp->pool);
563 }
564
565 if (dpaa_bp->seed_cb) {
566 err = dpaa_bp->seed_cb(dpaa_bp);
567 if (err)
568 goto pool_seed_failed;
569 }
570
571 dpaa_bpid2pool_map(dpaa_bp->bpid, dpaa_bp);
572
573 return 0;
574
575 pool_seed_failed:
576 pr_err("%s: pool seeding failed\n", __func__);
577 bman_free_pool(dpaa_bp->pool);
578
579 return err;
580 }
581
582 /* remove and free all the buffers from the given buffer pool */
dpaa_bp_drain(struct dpaa_bp * bp)583 static void dpaa_bp_drain(struct dpaa_bp *bp)
584 {
585 u8 num = 8;
586 int ret;
587
588 do {
589 struct bm_buffer bmb[8];
590 int i;
591
592 ret = bman_acquire(bp->pool, bmb, num);
593 if (ret < 0) {
594 if (num == 8) {
595 /* we have less than 8 buffers left;
596 * drain them one by one
597 */
598 num = 1;
599 ret = 1;
600 continue;
601 } else {
602 /* Pool is fully drained */
603 break;
604 }
605 }
606
607 if (bp->free_buf_cb)
608 for (i = 0; i < num; i++)
609 bp->free_buf_cb(bp, &bmb[i]);
610 } while (ret > 0);
611 }
612
dpaa_bp_free(struct dpaa_bp * dpaa_bp)613 static void dpaa_bp_free(struct dpaa_bp *dpaa_bp)
614 {
615 struct dpaa_bp *bp = dpaa_bpid2pool(dpaa_bp->bpid);
616
617 /* the mapping between bpid and dpaa_bp is done very late in the
618 * allocation procedure; if something failed before the mapping, the bp
619 * was not configured, therefore we don't need the below instructions
620 */
621 if (!bp)
622 return;
623
624 if (!refcount_dec_and_test(&bp->refs))
625 return;
626
627 if (bp->free_buf_cb)
628 dpaa_bp_drain(bp);
629
630 dpaa_bp_array[bp->bpid] = NULL;
631 bman_free_pool(bp->pool);
632 }
633
dpaa_bps_free(struct dpaa_priv * priv)634 static void dpaa_bps_free(struct dpaa_priv *priv)
635 {
636 dpaa_bp_free(priv->dpaa_bp);
637 }
638
639 /* Use multiple WQs for FQ assignment:
640 * - Tx Confirmation queues go to WQ1.
641 * - Rx Error and Tx Error queues go to WQ5 (giving them a better chance
642 * to be scheduled, in case there are many more FQs in WQ6).
643 * - Rx Default goes to WQ6.
644 * - Tx queues go to different WQs depending on their priority. Equal
645 * chunks of NR_CPUS queues go to WQ6 (lowest priority), WQ2, WQ1 and
646 * WQ0 (highest priority).
647 * This ensures that Tx-confirmed buffers are timely released. In particular,
648 * it avoids congestion on the Tx Confirm FQs, which can pile up PFDRs if they
649 * are greatly outnumbered by other FQs in the system, while
650 * dequeue scheduling is round-robin.
651 */
dpaa_assign_wq(struct dpaa_fq * fq,int idx)652 static inline void dpaa_assign_wq(struct dpaa_fq *fq, int idx)
653 {
654 switch (fq->fq_type) {
655 case FQ_TYPE_TX_CONFIRM:
656 case FQ_TYPE_TX_CONF_MQ:
657 fq->wq = 1;
658 break;
659 case FQ_TYPE_RX_ERROR:
660 case FQ_TYPE_TX_ERROR:
661 fq->wq = 5;
662 break;
663 case FQ_TYPE_RX_DEFAULT:
664 case FQ_TYPE_RX_PCD:
665 fq->wq = 6;
666 break;
667 case FQ_TYPE_TX:
668 switch (idx / dpaa_num_txqs_per_tc()) {
669 case 0:
670 /* Low priority (best effort) */
671 fq->wq = 6;
672 break;
673 case 1:
674 /* Medium priority */
675 fq->wq = 2;
676 break;
677 case 2:
678 /* High priority */
679 fq->wq = 1;
680 break;
681 case 3:
682 /* Very high priority */
683 fq->wq = 0;
684 break;
685 default:
686 WARN(1, "Too many TX FQs: more than %zu!\n",
687 dpaa_max_num_txqs());
688 }
689 break;
690 default:
691 WARN(1, "Invalid FQ type %d for FQID %d!\n",
692 fq->fq_type, fq->fqid);
693 }
694 }
695
dpaa_fq_alloc(struct device * dev,u32 start,u32 count,struct list_head * list,enum dpaa_fq_type fq_type)696 static struct dpaa_fq *dpaa_fq_alloc(struct device *dev,
697 u32 start, u32 count,
698 struct list_head *list,
699 enum dpaa_fq_type fq_type)
700 {
701 struct dpaa_fq *dpaa_fq;
702 int i;
703
704 dpaa_fq = devm_kcalloc(dev, count, sizeof(*dpaa_fq),
705 GFP_KERNEL);
706 if (!dpaa_fq)
707 return NULL;
708
709 for (i = 0; i < count; i++) {
710 dpaa_fq[i].fq_type = fq_type;
711 dpaa_fq[i].fqid = start ? start + i : 0;
712 list_add_tail(&dpaa_fq[i].list, list);
713 }
714
715 for (i = 0; i < count; i++)
716 dpaa_assign_wq(dpaa_fq + i, i);
717
718 return dpaa_fq;
719 }
720
dpaa_alloc_all_fqs(struct device * dev,struct list_head * list,struct fm_port_fqs * port_fqs)721 static int dpaa_alloc_all_fqs(struct device *dev, struct list_head *list,
722 struct fm_port_fqs *port_fqs)
723 {
724 struct dpaa_fq *dpaa_fq;
725 u32 fq_base, fq_base_aligned, i;
726
727 dpaa_fq = dpaa_fq_alloc(dev, 0, 1, list, FQ_TYPE_RX_ERROR);
728 if (!dpaa_fq)
729 goto fq_alloc_failed;
730
731 port_fqs->rx_errq = &dpaa_fq[0];
732
733 dpaa_fq = dpaa_fq_alloc(dev, 0, 1, list, FQ_TYPE_RX_DEFAULT);
734 if (!dpaa_fq)
735 goto fq_alloc_failed;
736
737 port_fqs->rx_defq = &dpaa_fq[0];
738
739 /* the PCD FQIDs range needs to be aligned for correct operation */
740 if (qman_alloc_fqid_range(&fq_base, 2 * DPAA_ETH_PCD_RXQ_NUM))
741 goto fq_alloc_failed;
742
743 fq_base_aligned = ALIGN(fq_base, DPAA_ETH_PCD_RXQ_NUM);
744
745 for (i = fq_base; i < fq_base_aligned; i++)
746 qman_release_fqid(i);
747
748 for (i = fq_base_aligned + DPAA_ETH_PCD_RXQ_NUM;
749 i < (fq_base + 2 * DPAA_ETH_PCD_RXQ_NUM); i++)
750 qman_release_fqid(i);
751
752 dpaa_fq = dpaa_fq_alloc(dev, fq_base_aligned, DPAA_ETH_PCD_RXQ_NUM,
753 list, FQ_TYPE_RX_PCD);
754 if (!dpaa_fq)
755 goto fq_alloc_failed;
756
757 port_fqs->rx_pcdq = &dpaa_fq[0];
758
759 if (!dpaa_fq_alloc(dev, 0, dpaa_max_num_txqs(), list,
760 FQ_TYPE_TX_CONF_MQ))
761 goto fq_alloc_failed;
762
763 dpaa_fq = dpaa_fq_alloc(dev, 0, 1, list, FQ_TYPE_TX_ERROR);
764 if (!dpaa_fq)
765 goto fq_alloc_failed;
766
767 port_fqs->tx_errq = &dpaa_fq[0];
768
769 dpaa_fq = dpaa_fq_alloc(dev, 0, 1, list, FQ_TYPE_TX_CONFIRM);
770 if (!dpaa_fq)
771 goto fq_alloc_failed;
772
773 port_fqs->tx_defq = &dpaa_fq[0];
774
775 if (!dpaa_fq_alloc(dev, 0, dpaa_max_num_txqs(), list, FQ_TYPE_TX))
776 goto fq_alloc_failed;
777
778 return 0;
779
780 fq_alloc_failed:
781 dev_err(dev, "dpaa_fq_alloc() failed\n");
782 return -ENOMEM;
783 }
784
785 static u32 rx_pool_channel;
786 static DEFINE_SPINLOCK(rx_pool_channel_init);
787
dpaa_get_channel(void)788 static int dpaa_get_channel(void)
789 {
790 spin_lock(&rx_pool_channel_init);
791 if (!rx_pool_channel) {
792 u32 pool;
793 int ret;
794
795 ret = qman_alloc_pool(&pool);
796
797 if (!ret)
798 rx_pool_channel = pool;
799 }
800 spin_unlock(&rx_pool_channel_init);
801 if (!rx_pool_channel)
802 return -ENOMEM;
803 return rx_pool_channel;
804 }
805
dpaa_release_channel(void)806 static void dpaa_release_channel(void)
807 {
808 qman_release_pool(rx_pool_channel);
809 }
810
dpaa_eth_add_channel(u16 channel,struct device * dev)811 static void dpaa_eth_add_channel(u16 channel, struct device *dev)
812 {
813 u32 pool = QM_SDQCR_CHANNELS_POOL_CONV(channel);
814 const cpumask_t *cpus = qman_affine_cpus();
815 struct qman_portal *portal;
816 int cpu;
817
818 for_each_cpu_and(cpu, cpus, cpu_online_mask) {
819 portal = qman_get_affine_portal(cpu);
820 qman_p_static_dequeue_add(portal, pool);
821 qman_start_using_portal(portal, dev);
822 }
823 }
824
825 /* Congestion group state change notification callback.
826 * Stops the device's egress queues while they are congested and
827 * wakes them upon exiting congested state.
828 * Also updates some CGR-related stats.
829 */
dpaa_eth_cgscn(struct qman_portal * qm,struct qman_cgr * cgr,int congested)830 static void dpaa_eth_cgscn(struct qman_portal *qm, struct qman_cgr *cgr,
831 int congested)
832 {
833 struct dpaa_priv *priv = (struct dpaa_priv *)container_of(cgr,
834 struct dpaa_priv, cgr_data.cgr);
835
836 if (congested) {
837 priv->cgr_data.congestion_start_jiffies = jiffies;
838 netif_tx_stop_all_queues(priv->net_dev);
839 priv->cgr_data.cgr_congested_count++;
840 } else {
841 priv->cgr_data.congested_jiffies +=
842 (jiffies - priv->cgr_data.congestion_start_jiffies);
843 netif_tx_wake_all_queues(priv->net_dev);
844 }
845 }
846
dpaa_eth_cgr_init(struct dpaa_priv * priv)847 static int dpaa_eth_cgr_init(struct dpaa_priv *priv)
848 {
849 struct qm_mcc_initcgr initcgr;
850 u32 cs_th;
851 int err;
852
853 err = qman_alloc_cgrid(&priv->cgr_data.cgr.cgrid);
854 if (err < 0) {
855 if (netif_msg_drv(priv))
856 pr_err("%s: Error %d allocating CGR ID\n",
857 __func__, err);
858 goto out_error;
859 }
860 priv->cgr_data.cgr.cb = dpaa_eth_cgscn;
861
862 /* Enable Congestion State Change Notifications and CS taildrop */
863 memset(&initcgr, 0, sizeof(initcgr));
864 initcgr.we_mask = cpu_to_be16(QM_CGR_WE_CSCN_EN | QM_CGR_WE_CS_THRES);
865 initcgr.cgr.cscn_en = QM_CGR_EN;
866
867 /* Set different thresholds based on the configured MAC speed.
868 * This may turn suboptimal if the MAC is reconfigured at another
869 * speed, so MACs must call dpaa_eth_cgr_set_speed in their link_up
870 * callback.
871 */
872 if (priv->mac_dev->phylink_config.mac_capabilities & MAC_10000FD)
873 cs_th = DPAA_CS_THRESHOLD_10G;
874 else
875 cs_th = DPAA_CS_THRESHOLD_1G;
876 qm_cgr_cs_thres_set64(&initcgr.cgr.cs_thres, cs_th, 1);
877
878 initcgr.we_mask |= cpu_to_be16(QM_CGR_WE_CSTD_EN);
879 initcgr.cgr.cstd_en = QM_CGR_EN;
880
881 err = qman_create_cgr(&priv->cgr_data.cgr, QMAN_CGR_FLAG_USE_INIT,
882 &initcgr);
883 if (err < 0) {
884 if (netif_msg_drv(priv))
885 pr_err("%s: Error %d creating CGR with ID %d\n",
886 __func__, err, priv->cgr_data.cgr.cgrid);
887 qman_release_cgrid(priv->cgr_data.cgr.cgrid);
888 goto out_error;
889 }
890 if (netif_msg_drv(priv))
891 pr_debug("Created CGR %d for netdev with hwaddr %pM on QMan channel %d\n",
892 priv->cgr_data.cgr.cgrid, priv->mac_dev->addr,
893 priv->cgr_data.cgr.chan);
894
895 out_error:
896 return err;
897 }
898
dpaa_eth_cgr_set_speed(struct mac_device * mac_dev,int speed)899 static void dpaa_eth_cgr_set_speed(struct mac_device *mac_dev, int speed)
900 {
901 struct net_device *net_dev = to_net_dev(mac_dev->phylink_config.dev);
902 struct dpaa_priv *priv = netdev_priv(net_dev);
903 struct qm_mcc_initcgr opts = { };
904 u32 cs_th;
905 int err;
906
907 opts.we_mask = cpu_to_be16(QM_CGR_WE_CS_THRES);
908 switch (speed) {
909 case SPEED_10000:
910 cs_th = DPAA_CS_THRESHOLD_10G;
911 break;
912 case SPEED_1000:
913 default:
914 cs_th = DPAA_CS_THRESHOLD_1G;
915 break;
916 }
917 qm_cgr_cs_thres_set64(&opts.cgr.cs_thres, cs_th, 1);
918
919 err = qman_update_cgr_safe(&priv->cgr_data.cgr, &opts);
920 if (err)
921 netdev_err(net_dev, "could not update speed: %d\n", err);
922 }
923
dpaa_setup_ingress(const struct dpaa_priv * priv,struct dpaa_fq * fq,const struct qman_fq * template)924 static inline void dpaa_setup_ingress(const struct dpaa_priv *priv,
925 struct dpaa_fq *fq,
926 const struct qman_fq *template)
927 {
928 fq->fq_base = *template;
929 fq->net_dev = priv->net_dev;
930
931 fq->flags = QMAN_FQ_FLAG_NO_ENQUEUE;
932 fq->channel = priv->channel;
933 }
934
dpaa_setup_egress(const struct dpaa_priv * priv,struct dpaa_fq * fq,struct fman_port * port,const struct qman_fq * template)935 static inline void dpaa_setup_egress(const struct dpaa_priv *priv,
936 struct dpaa_fq *fq,
937 struct fman_port *port,
938 const struct qman_fq *template)
939 {
940 fq->fq_base = *template;
941 fq->net_dev = priv->net_dev;
942
943 if (port) {
944 fq->flags = QMAN_FQ_FLAG_TO_DCPORTAL;
945 fq->channel = (u16)fman_port_get_qman_channel_id(port);
946 } else {
947 fq->flags = QMAN_FQ_FLAG_NO_MODIFY;
948 }
949 }
950
dpaa_fq_setup(struct dpaa_priv * priv,const struct dpaa_fq_cbs * fq_cbs,struct fman_port * tx_port)951 static int dpaa_fq_setup(struct dpaa_priv *priv,
952 const struct dpaa_fq_cbs *fq_cbs,
953 struct fman_port *tx_port)
954 {
955 int egress_cnt = 0, conf_cnt = 0, num_portals = 0, portal_cnt = 0, cpu;
956 const cpumask_t *affine_cpus = qman_affine_cpus();
957 struct dpaa_fq *fq;
958 u16 *channels;
959
960 channels = kcalloc(num_possible_cpus(), sizeof(u16), GFP_KERNEL);
961 if (!channels)
962 return -ENOMEM;
963
964 for_each_cpu_and(cpu, affine_cpus, cpu_online_mask)
965 channels[num_portals++] = qman_affine_channel(cpu);
966
967 if (num_portals == 0)
968 dev_err(priv->net_dev->dev.parent,
969 "No Qman software (affine) channels found\n");
970
971 /* Initialize each FQ in the list */
972 list_for_each_entry(fq, &priv->dpaa_fq_list, list) {
973 switch (fq->fq_type) {
974 case FQ_TYPE_RX_DEFAULT:
975 dpaa_setup_ingress(priv, fq, &fq_cbs->rx_defq);
976 break;
977 case FQ_TYPE_RX_ERROR:
978 dpaa_setup_ingress(priv, fq, &fq_cbs->rx_errq);
979 break;
980 case FQ_TYPE_RX_PCD:
981 if (!num_portals)
982 continue;
983 dpaa_setup_ingress(priv, fq, &fq_cbs->rx_defq);
984 fq->channel = channels[portal_cnt++ % num_portals];
985 break;
986 case FQ_TYPE_TX:
987 dpaa_setup_egress(priv, fq, tx_port,
988 &fq_cbs->egress_ern);
989 priv->egress_fqs[egress_cnt++] = &fq->fq_base;
990 break;
991 case FQ_TYPE_TX_CONF_MQ:
992 priv->conf_fqs[conf_cnt++] = &fq->fq_base;
993 fallthrough;
994 case FQ_TYPE_TX_CONFIRM:
995 dpaa_setup_ingress(priv, fq, &fq_cbs->tx_defq);
996 break;
997 case FQ_TYPE_TX_ERROR:
998 dpaa_setup_ingress(priv, fq, &fq_cbs->tx_errq);
999 break;
1000 default:
1001 dev_warn(priv->net_dev->dev.parent,
1002 "Unknown FQ type detected!\n");
1003 break;
1004 }
1005 }
1006
1007 kfree(channels);
1008
1009 return 0;
1010 }
1011
dpaa_tx_fq_to_id(const struct dpaa_priv * priv,struct qman_fq * tx_fq)1012 static inline int dpaa_tx_fq_to_id(const struct dpaa_priv *priv,
1013 struct qman_fq *tx_fq)
1014 {
1015 int i;
1016
1017 for (i = 0; i < dpaa_max_num_txqs(); i++)
1018 if (priv->egress_fqs[i] == tx_fq)
1019 return i;
1020
1021 return -EINVAL;
1022 }
1023
dpaa_fq_init(struct dpaa_fq * dpaa_fq,bool td_enable)1024 static int dpaa_fq_init(struct dpaa_fq *dpaa_fq, bool td_enable)
1025 {
1026 const struct dpaa_priv *priv;
1027 struct qman_fq *confq = NULL;
1028 struct qm_mcc_initfq initfq;
1029 struct device *dev;
1030 struct qman_fq *fq;
1031 int queue_id;
1032 int err;
1033
1034 priv = netdev_priv(dpaa_fq->net_dev);
1035 dev = dpaa_fq->net_dev->dev.parent;
1036
1037 if (dpaa_fq->fqid == 0)
1038 dpaa_fq->flags |= QMAN_FQ_FLAG_DYNAMIC_FQID;
1039
1040 dpaa_fq->init = !(dpaa_fq->flags & QMAN_FQ_FLAG_NO_MODIFY);
1041
1042 err = qman_create_fq(dpaa_fq->fqid, dpaa_fq->flags, &dpaa_fq->fq_base);
1043 if (err) {
1044 dev_err(dev, "qman_create_fq() failed\n");
1045 return err;
1046 }
1047 fq = &dpaa_fq->fq_base;
1048
1049 if (dpaa_fq->init) {
1050 memset(&initfq, 0, sizeof(initfq));
1051
1052 initfq.we_mask = cpu_to_be16(QM_INITFQ_WE_FQCTRL);
1053 /* Note: we may get to keep an empty FQ in cache */
1054 initfq.fqd.fq_ctrl = cpu_to_be16(QM_FQCTRL_PREFERINCACHE);
1055
1056 /* Try to reduce the number of portal interrupts for
1057 * Tx Confirmation FQs.
1058 */
1059 if (dpaa_fq->fq_type == FQ_TYPE_TX_CONFIRM)
1060 initfq.fqd.fq_ctrl |= cpu_to_be16(QM_FQCTRL_AVOIDBLOCK);
1061
1062 /* FQ placement */
1063 initfq.we_mask |= cpu_to_be16(QM_INITFQ_WE_DESTWQ);
1064
1065 qm_fqd_set_destwq(&initfq.fqd, dpaa_fq->channel, dpaa_fq->wq);
1066
1067 /* Put all egress queues in a congestion group of their own.
1068 * Sensu stricto, the Tx confirmation queues are Rx FQs,
1069 * rather than Tx - but they nonetheless account for the
1070 * memory footprint on behalf of egress traffic. We therefore
1071 * place them in the netdev's CGR, along with the Tx FQs.
1072 */
1073 if (dpaa_fq->fq_type == FQ_TYPE_TX ||
1074 dpaa_fq->fq_type == FQ_TYPE_TX_CONFIRM ||
1075 dpaa_fq->fq_type == FQ_TYPE_TX_CONF_MQ) {
1076 initfq.we_mask |= cpu_to_be16(QM_INITFQ_WE_CGID);
1077 initfq.fqd.fq_ctrl |= cpu_to_be16(QM_FQCTRL_CGE);
1078 initfq.fqd.cgid = (u8)priv->cgr_data.cgr.cgrid;
1079 /* Set a fixed overhead accounting, in an attempt to
1080 * reduce the impact of fixed-size skb shells and the
1081 * driver's needed headroom on system memory. This is
1082 * especially the case when the egress traffic is
1083 * composed of small datagrams.
1084 * Unfortunately, QMan's OAL value is capped to an
1085 * insufficient value, but even that is better than
1086 * no overhead accounting at all.
1087 */
1088 initfq.we_mask |= cpu_to_be16(QM_INITFQ_WE_OAC);
1089 qm_fqd_set_oac(&initfq.fqd, QM_OAC_CG);
1090 qm_fqd_set_oal(&initfq.fqd,
1091 min(sizeof(struct sk_buff) +
1092 priv->tx_headroom,
1093 (size_t)FSL_QMAN_MAX_OAL));
1094 }
1095
1096 if (td_enable) {
1097 initfq.we_mask |= cpu_to_be16(QM_INITFQ_WE_TDTHRESH);
1098 qm_fqd_set_taildrop(&initfq.fqd, DPAA_FQ_TD, 1);
1099 initfq.fqd.fq_ctrl = cpu_to_be16(QM_FQCTRL_TDE);
1100 }
1101
1102 if (dpaa_fq->fq_type == FQ_TYPE_TX) {
1103 queue_id = dpaa_tx_fq_to_id(priv, &dpaa_fq->fq_base);
1104 if (queue_id >= 0)
1105 confq = priv->conf_fqs[queue_id];
1106 if (confq) {
1107 initfq.we_mask |=
1108 cpu_to_be16(QM_INITFQ_WE_CONTEXTA);
1109 /* ContextA: OVOM=1(use contextA2 bits instead of ICAD)
1110 * A2V=1 (contextA A2 field is valid)
1111 * A0V=1 (contextA A0 field is valid)
1112 * B0V=1 (contextB field is valid)
1113 * ContextA A2: EBD=1 (deallocate buffers inside FMan)
1114 * ContextB B0(ASPID): 0 (absolute Virtual Storage ID)
1115 */
1116 qm_fqd_context_a_set64(&initfq.fqd,
1117 0x1e00000080000000ULL);
1118 }
1119 }
1120
1121 /* Put all the ingress queues in our "ingress CGR". */
1122 if (priv->use_ingress_cgr &&
1123 (dpaa_fq->fq_type == FQ_TYPE_RX_DEFAULT ||
1124 dpaa_fq->fq_type == FQ_TYPE_RX_ERROR ||
1125 dpaa_fq->fq_type == FQ_TYPE_RX_PCD)) {
1126 initfq.we_mask |= cpu_to_be16(QM_INITFQ_WE_CGID);
1127 initfq.fqd.fq_ctrl |= cpu_to_be16(QM_FQCTRL_CGE);
1128 initfq.fqd.cgid = (u8)priv->ingress_cgr.cgrid;
1129 /* Set a fixed overhead accounting, just like for the
1130 * egress CGR.
1131 */
1132 initfq.we_mask |= cpu_to_be16(QM_INITFQ_WE_OAC);
1133 qm_fqd_set_oac(&initfq.fqd, QM_OAC_CG);
1134 qm_fqd_set_oal(&initfq.fqd,
1135 min(sizeof(struct sk_buff) +
1136 priv->tx_headroom,
1137 (size_t)FSL_QMAN_MAX_OAL));
1138 }
1139
1140 /* Initialization common to all ingress queues */
1141 if (dpaa_fq->flags & QMAN_FQ_FLAG_NO_ENQUEUE) {
1142 initfq.we_mask |= cpu_to_be16(QM_INITFQ_WE_CONTEXTA);
1143 initfq.fqd.fq_ctrl |= cpu_to_be16(QM_FQCTRL_HOLDACTIVE |
1144 QM_FQCTRL_CTXASTASHING);
1145 initfq.fqd.context_a.stashing.exclusive =
1146 QM_STASHING_EXCL_DATA | QM_STASHING_EXCL_CTX |
1147 QM_STASHING_EXCL_ANNOTATION;
1148 qm_fqd_set_stashing(&initfq.fqd, 1, 2,
1149 DIV_ROUND_UP(sizeof(struct qman_fq),
1150 64));
1151 }
1152
1153 err = qman_init_fq(fq, QMAN_INITFQ_FLAG_SCHED, &initfq);
1154 if (err < 0) {
1155 dev_err(dev, "qman_init_fq(%u) = %d\n",
1156 qman_fq_fqid(fq), err);
1157 qman_destroy_fq(fq);
1158 return err;
1159 }
1160 }
1161
1162 dpaa_fq->fqid = qman_fq_fqid(fq);
1163
1164 if (dpaa_fq->fq_type == FQ_TYPE_RX_DEFAULT ||
1165 dpaa_fq->fq_type == FQ_TYPE_RX_PCD) {
1166 err = xdp_rxq_info_reg(&dpaa_fq->xdp_rxq, dpaa_fq->net_dev,
1167 dpaa_fq->fqid, 0);
1168 if (err) {
1169 dev_err(dev, "xdp_rxq_info_reg() = %d\n", err);
1170 return err;
1171 }
1172
1173 err = xdp_rxq_info_reg_mem_model(&dpaa_fq->xdp_rxq,
1174 MEM_TYPE_PAGE_ORDER0, NULL);
1175 if (err) {
1176 dev_err(dev, "xdp_rxq_info_reg_mem_model() = %d\n",
1177 err);
1178 xdp_rxq_info_unreg(&dpaa_fq->xdp_rxq);
1179 return err;
1180 }
1181 }
1182
1183 return 0;
1184 }
1185
dpaa_fq_free_entry(struct device * dev,struct qman_fq * fq)1186 static int dpaa_fq_free_entry(struct device *dev, struct qman_fq *fq)
1187 {
1188 const struct dpaa_priv *priv;
1189 struct dpaa_fq *dpaa_fq;
1190 int err, error;
1191
1192 err = 0;
1193
1194 dpaa_fq = container_of(fq, struct dpaa_fq, fq_base);
1195 priv = netdev_priv(dpaa_fq->net_dev);
1196
1197 if (dpaa_fq->init) {
1198 err = qman_retire_fq(fq, NULL);
1199 if (err < 0 && netif_msg_drv(priv))
1200 dev_err(dev, "qman_retire_fq(%u) = %d\n",
1201 qman_fq_fqid(fq), err);
1202
1203 error = qman_oos_fq(fq);
1204 if (error < 0 && netif_msg_drv(priv)) {
1205 dev_err(dev, "qman_oos_fq(%u) = %d\n",
1206 qman_fq_fqid(fq), error);
1207 if (err >= 0)
1208 err = error;
1209 }
1210 }
1211
1212 if ((dpaa_fq->fq_type == FQ_TYPE_RX_DEFAULT ||
1213 dpaa_fq->fq_type == FQ_TYPE_RX_PCD) &&
1214 xdp_rxq_info_is_reg(&dpaa_fq->xdp_rxq))
1215 xdp_rxq_info_unreg(&dpaa_fq->xdp_rxq);
1216
1217 qman_destroy_fq(fq);
1218 list_del(&dpaa_fq->list);
1219
1220 return err;
1221 }
1222
dpaa_fq_free(struct device * dev,struct list_head * list)1223 static int dpaa_fq_free(struct device *dev, struct list_head *list)
1224 {
1225 struct dpaa_fq *dpaa_fq, *tmp;
1226 int err, error;
1227
1228 err = 0;
1229 list_for_each_entry_safe(dpaa_fq, tmp, list, list) {
1230 error = dpaa_fq_free_entry(dev, (struct qman_fq *)dpaa_fq);
1231 if (error < 0 && err >= 0)
1232 err = error;
1233 }
1234
1235 return err;
1236 }
1237
dpaa_eth_init_tx_port(struct fman_port * port,struct dpaa_fq * errq,struct dpaa_fq * defq,struct dpaa_buffer_layout * buf_layout)1238 static int dpaa_eth_init_tx_port(struct fman_port *port, struct dpaa_fq *errq,
1239 struct dpaa_fq *defq,
1240 struct dpaa_buffer_layout *buf_layout)
1241 {
1242 struct fman_buffer_prefix_content buf_prefix_content;
1243 struct fman_port_params params;
1244 int err;
1245
1246 memset(¶ms, 0, sizeof(params));
1247 memset(&buf_prefix_content, 0, sizeof(buf_prefix_content));
1248
1249 buf_prefix_content.priv_data_size = buf_layout->priv_data_size;
1250 buf_prefix_content.pass_prs_result = true;
1251 buf_prefix_content.pass_hash_result = true;
1252 buf_prefix_content.pass_time_stamp = true;
1253 buf_prefix_content.data_align = DPAA_FD_DATA_ALIGNMENT;
1254
1255 params.specific_params.non_rx_params.err_fqid = errq->fqid;
1256 params.specific_params.non_rx_params.dflt_fqid = defq->fqid;
1257
1258 err = fman_port_config(port, ¶ms);
1259 if (err) {
1260 pr_err("%s: fman_port_config failed\n", __func__);
1261 return err;
1262 }
1263
1264 err = fman_port_cfg_buf_prefix_content(port, &buf_prefix_content);
1265 if (err) {
1266 pr_err("%s: fman_port_cfg_buf_prefix_content failed\n",
1267 __func__);
1268 return err;
1269 }
1270
1271 err = fman_port_init(port);
1272 if (err)
1273 pr_err("%s: fm_port_init failed\n", __func__);
1274
1275 return err;
1276 }
1277
dpaa_eth_init_rx_port(struct fman_port * port,struct dpaa_bp * bp,struct dpaa_fq * errq,struct dpaa_fq * defq,struct dpaa_fq * pcdq,struct dpaa_buffer_layout * buf_layout)1278 static int dpaa_eth_init_rx_port(struct fman_port *port, struct dpaa_bp *bp,
1279 struct dpaa_fq *errq,
1280 struct dpaa_fq *defq, struct dpaa_fq *pcdq,
1281 struct dpaa_buffer_layout *buf_layout)
1282 {
1283 struct fman_buffer_prefix_content buf_prefix_content;
1284 struct fman_port_rx_params *rx_p;
1285 struct fman_port_params params;
1286 int err;
1287
1288 memset(¶ms, 0, sizeof(params));
1289 memset(&buf_prefix_content, 0, sizeof(buf_prefix_content));
1290
1291 buf_prefix_content.priv_data_size = buf_layout->priv_data_size;
1292 buf_prefix_content.pass_prs_result = true;
1293 buf_prefix_content.pass_hash_result = true;
1294 buf_prefix_content.pass_time_stamp = true;
1295 buf_prefix_content.data_align = DPAA_FD_RX_DATA_ALIGNMENT;
1296
1297 rx_p = ¶ms.specific_params.rx_params;
1298 rx_p->err_fqid = errq->fqid;
1299 rx_p->dflt_fqid = defq->fqid;
1300 if (pcdq) {
1301 rx_p->pcd_base_fqid = pcdq->fqid;
1302 rx_p->pcd_fqs_count = DPAA_ETH_PCD_RXQ_NUM;
1303 }
1304
1305 rx_p->ext_buf_pools.num_of_pools_used = 1;
1306 rx_p->ext_buf_pools.ext_buf_pool[0].id = bp->bpid;
1307 rx_p->ext_buf_pools.ext_buf_pool[0].size = (u16)bp->size;
1308
1309 err = fman_port_config(port, ¶ms);
1310 if (err) {
1311 pr_err("%s: fman_port_config failed\n", __func__);
1312 return err;
1313 }
1314
1315 err = fman_port_cfg_buf_prefix_content(port, &buf_prefix_content);
1316 if (err) {
1317 pr_err("%s: fman_port_cfg_buf_prefix_content failed\n",
1318 __func__);
1319 return err;
1320 }
1321
1322 err = fman_port_init(port);
1323 if (err)
1324 pr_err("%s: fm_port_init failed\n", __func__);
1325
1326 return err;
1327 }
1328
dpaa_eth_init_ports(struct mac_device * mac_dev,struct dpaa_bp * bp,struct fm_port_fqs * port_fqs,struct dpaa_buffer_layout * buf_layout,struct device * dev)1329 static int dpaa_eth_init_ports(struct mac_device *mac_dev,
1330 struct dpaa_bp *bp,
1331 struct fm_port_fqs *port_fqs,
1332 struct dpaa_buffer_layout *buf_layout,
1333 struct device *dev)
1334 {
1335 struct fman_port *rxport = mac_dev->port[RX];
1336 struct fman_port *txport = mac_dev->port[TX];
1337 int err;
1338
1339 err = dpaa_eth_init_tx_port(txport, port_fqs->tx_errq,
1340 port_fqs->tx_defq, &buf_layout[TX]);
1341 if (err)
1342 return err;
1343
1344 err = dpaa_eth_init_rx_port(rxport, bp, port_fqs->rx_errq,
1345 port_fqs->rx_defq, port_fqs->rx_pcdq,
1346 &buf_layout[RX]);
1347
1348 return err;
1349 }
1350
dpaa_bman_release(const struct dpaa_bp * dpaa_bp,struct bm_buffer * bmb,int cnt)1351 static int dpaa_bman_release(const struct dpaa_bp *dpaa_bp,
1352 struct bm_buffer *bmb, int cnt)
1353 {
1354 int err;
1355
1356 err = bman_release(dpaa_bp->pool, bmb, cnt);
1357 /* Should never occur, address anyway to avoid leaking the buffers */
1358 if (WARN_ON(err) && dpaa_bp->free_buf_cb)
1359 while (cnt-- > 0)
1360 dpaa_bp->free_buf_cb(dpaa_bp, &bmb[cnt]);
1361
1362 return cnt;
1363 }
1364
dpaa_release_sgt_members(struct qm_sg_entry * sgt)1365 static void dpaa_release_sgt_members(struct qm_sg_entry *sgt)
1366 {
1367 struct bm_buffer bmb[DPAA_BUFF_RELEASE_MAX];
1368 struct dpaa_bp *dpaa_bp;
1369 int i = 0, j;
1370
1371 memset(bmb, 0, sizeof(bmb));
1372
1373 do {
1374 dpaa_bp = dpaa_bpid2pool(sgt[i].bpid);
1375 if (!dpaa_bp)
1376 return;
1377
1378 j = 0;
1379 do {
1380 WARN_ON(qm_sg_entry_is_ext(&sgt[i]));
1381
1382 bm_buffer_set64(&bmb[j], qm_sg_entry_get64(&sgt[i]));
1383
1384 j++; i++;
1385 } while (j < ARRAY_SIZE(bmb) &&
1386 !qm_sg_entry_is_final(&sgt[i - 1]) &&
1387 sgt[i - 1].bpid == sgt[i].bpid);
1388
1389 dpaa_bman_release(dpaa_bp, bmb, j);
1390 } while (!qm_sg_entry_is_final(&sgt[i - 1]));
1391 }
1392
dpaa_fd_release(const struct net_device * net_dev,const struct qm_fd * fd)1393 static void dpaa_fd_release(const struct net_device *net_dev,
1394 const struct qm_fd *fd)
1395 {
1396 struct qm_sg_entry *sgt;
1397 struct dpaa_bp *dpaa_bp;
1398 struct bm_buffer bmb;
1399 dma_addr_t addr;
1400 void *vaddr;
1401
1402 bmb.data = 0;
1403 bm_buffer_set64(&bmb, qm_fd_addr(fd));
1404
1405 dpaa_bp = dpaa_bpid2pool(fd->bpid);
1406 if (!dpaa_bp)
1407 return;
1408
1409 if (qm_fd_get_format(fd) == qm_fd_sg) {
1410 vaddr = phys_to_virt(qm_fd_addr(fd));
1411 sgt = vaddr + qm_fd_get_offset(fd);
1412
1413 dma_unmap_page(dpaa_bp->priv->rx_dma_dev, qm_fd_addr(fd),
1414 DPAA_BP_RAW_SIZE, DMA_FROM_DEVICE);
1415
1416 dpaa_release_sgt_members(sgt);
1417
1418 addr = dma_map_page(dpaa_bp->priv->rx_dma_dev,
1419 virt_to_page(vaddr), 0, DPAA_BP_RAW_SIZE,
1420 DMA_FROM_DEVICE);
1421 if (dma_mapping_error(dpaa_bp->priv->rx_dma_dev, addr)) {
1422 netdev_err(net_dev, "DMA mapping failed\n");
1423 return;
1424 }
1425 bm_buffer_set64(&bmb, addr);
1426 }
1427
1428 dpaa_bman_release(dpaa_bp, &bmb, 1);
1429 }
1430
count_ern(struct dpaa_percpu_priv * percpu_priv,const union qm_mr_entry * msg)1431 static void count_ern(struct dpaa_percpu_priv *percpu_priv,
1432 const union qm_mr_entry *msg)
1433 {
1434 switch (msg->ern.rc & QM_MR_RC_MASK) {
1435 case QM_MR_RC_CGR_TAILDROP:
1436 percpu_priv->ern_cnt.cg_tdrop++;
1437 break;
1438 case QM_MR_RC_WRED:
1439 percpu_priv->ern_cnt.wred++;
1440 break;
1441 case QM_MR_RC_ERROR:
1442 percpu_priv->ern_cnt.err_cond++;
1443 break;
1444 case QM_MR_RC_ORPWINDOW_EARLY:
1445 percpu_priv->ern_cnt.early_window++;
1446 break;
1447 case QM_MR_RC_ORPWINDOW_LATE:
1448 percpu_priv->ern_cnt.late_window++;
1449 break;
1450 case QM_MR_RC_FQ_TAILDROP:
1451 percpu_priv->ern_cnt.fq_tdrop++;
1452 break;
1453 case QM_MR_RC_ORPWINDOW_RETIRED:
1454 percpu_priv->ern_cnt.fq_retired++;
1455 break;
1456 case QM_MR_RC_ORP_ZERO:
1457 percpu_priv->ern_cnt.orp_zero++;
1458 break;
1459 }
1460 }
1461
1462 /* Turn on HW checksum computation for this outgoing frame.
1463 * If the current protocol is not something we support in this regard
1464 * (or if the stack has already computed the SW checksum), we do nothing.
1465 *
1466 * Returns 0 if all goes well (or HW csum doesn't apply), and a negative value
1467 * otherwise.
1468 *
1469 * Note that this function may modify the fd->cmd field and the skb data buffer
1470 * (the Parse Results area).
1471 */
dpaa_enable_tx_csum(struct dpaa_priv * priv,struct sk_buff * skb,struct qm_fd * fd,void * parse_results)1472 static int dpaa_enable_tx_csum(struct dpaa_priv *priv,
1473 struct sk_buff *skb,
1474 struct qm_fd *fd,
1475 void *parse_results)
1476 {
1477 struct fman_prs_result *parse_result;
1478 u16 ethertype = ntohs(skb->protocol);
1479 struct ipv6hdr *ipv6h = NULL;
1480 struct iphdr *iph;
1481 int retval = 0;
1482 u8 l4_proto;
1483
1484 if (skb->ip_summed != CHECKSUM_PARTIAL)
1485 return 0;
1486
1487 /* Note: L3 csum seems to be already computed in sw, but we can't choose
1488 * L4 alone from the FM configuration anyway.
1489 */
1490
1491 /* Fill in some fields of the Parse Results array, so the FMan
1492 * can find them as if they came from the FMan Parser.
1493 */
1494 parse_result = (struct fman_prs_result *)parse_results;
1495
1496 /* If we're dealing with VLAN, get the real Ethernet type */
1497 if (ethertype == ETH_P_8021Q)
1498 ethertype = ntohs(skb_vlan_eth_hdr(skb)->h_vlan_encapsulated_proto);
1499
1500 /* Fill in the relevant L3 parse result fields
1501 * and read the L4 protocol type
1502 */
1503 switch (ethertype) {
1504 case ETH_P_IP:
1505 parse_result->l3r = cpu_to_be16(FM_L3_PARSE_RESULT_IPV4);
1506 iph = ip_hdr(skb);
1507 WARN_ON(!iph);
1508 l4_proto = iph->protocol;
1509 break;
1510 case ETH_P_IPV6:
1511 parse_result->l3r = cpu_to_be16(FM_L3_PARSE_RESULT_IPV6);
1512 ipv6h = ipv6_hdr(skb);
1513 WARN_ON(!ipv6h);
1514 l4_proto = ipv6h->nexthdr;
1515 break;
1516 default:
1517 /* We shouldn't even be here */
1518 if (net_ratelimit())
1519 netif_alert(priv, tx_err, priv->net_dev,
1520 "Can't compute HW csum for L3 proto 0x%x\n",
1521 ntohs(skb->protocol));
1522 retval = -EIO;
1523 goto return_error;
1524 }
1525
1526 /* Fill in the relevant L4 parse result fields */
1527 switch (l4_proto) {
1528 case IPPROTO_UDP:
1529 parse_result->l4r = FM_L4_PARSE_RESULT_UDP;
1530 break;
1531 case IPPROTO_TCP:
1532 parse_result->l4r = FM_L4_PARSE_RESULT_TCP;
1533 break;
1534 default:
1535 if (net_ratelimit())
1536 netif_alert(priv, tx_err, priv->net_dev,
1537 "Can't compute HW csum for L4 proto 0x%x\n",
1538 l4_proto);
1539 retval = -EIO;
1540 goto return_error;
1541 }
1542
1543 /* At index 0 is IPOffset_1 as defined in the Parse Results */
1544 parse_result->ip_off[0] = (u8)skb_network_offset(skb);
1545 parse_result->l4_off = (u8)skb_transport_offset(skb);
1546
1547 /* Enable L3 (and L4, if TCP or UDP) HW checksum. */
1548 fd->cmd |= cpu_to_be32(FM_FD_CMD_RPD | FM_FD_CMD_DTC);
1549
1550 /* On P1023 and similar platforms fd->cmd interpretation could
1551 * be disabled by setting CONTEXT_A bit ICMD; currently this bit
1552 * is not set so we do not need to check; in the future, if/when
1553 * using context_a we need to check this bit
1554 */
1555
1556 return_error:
1557 return retval;
1558 }
1559
dpaa_bp_add_8_bufs(const struct dpaa_bp * dpaa_bp)1560 static int dpaa_bp_add_8_bufs(const struct dpaa_bp *dpaa_bp)
1561 {
1562 struct net_device *net_dev = dpaa_bp->priv->net_dev;
1563 struct bm_buffer bmb[8];
1564 dma_addr_t addr;
1565 struct page *p;
1566 u8 i;
1567
1568 for (i = 0; i < 8; i++) {
1569 p = dev_alloc_pages(0);
1570 if (unlikely(!p)) {
1571 netdev_err(net_dev, "dev_alloc_pages() failed\n");
1572 goto release_previous_buffs;
1573 }
1574
1575 addr = dma_map_page(dpaa_bp->priv->rx_dma_dev, p, 0,
1576 DPAA_BP_RAW_SIZE, DMA_FROM_DEVICE);
1577 if (unlikely(dma_mapping_error(dpaa_bp->priv->rx_dma_dev,
1578 addr))) {
1579 netdev_err(net_dev, "DMA map failed\n");
1580 goto release_previous_buffs;
1581 }
1582
1583 bmb[i].data = 0;
1584 bm_buffer_set64(&bmb[i], addr);
1585 }
1586
1587 release_bufs:
1588 return dpaa_bman_release(dpaa_bp, bmb, i);
1589
1590 release_previous_buffs:
1591 WARN_ONCE(1, "dpaa_eth: failed to add buffers on Rx\n");
1592
1593 bm_buffer_set64(&bmb[i], 0);
1594 /* Avoid releasing a completely null buffer; bman_release() requires
1595 * at least one buffer.
1596 */
1597 if (likely(i))
1598 goto release_bufs;
1599
1600 return 0;
1601 }
1602
dpaa_bp_seed(struct dpaa_bp * dpaa_bp)1603 static int dpaa_bp_seed(struct dpaa_bp *dpaa_bp)
1604 {
1605 int i;
1606
1607 /* Give each CPU an allotment of "config_count" buffers */
1608 for_each_possible_cpu(i) {
1609 int *count_ptr = per_cpu_ptr(dpaa_bp->percpu_count, i);
1610 int j;
1611
1612 /* Although we access another CPU's counters here
1613 * we do it at boot time so it is safe
1614 */
1615 for (j = 0; j < dpaa_bp->config_count; j += 8)
1616 *count_ptr += dpaa_bp_add_8_bufs(dpaa_bp);
1617 }
1618 return 0;
1619 }
1620
1621 /* Add buffers/(pages) for Rx processing whenever bpool count falls below
1622 * REFILL_THRESHOLD.
1623 */
dpaa_eth_refill_bpool(struct dpaa_bp * dpaa_bp,int * countptr)1624 static int dpaa_eth_refill_bpool(struct dpaa_bp *dpaa_bp, int *countptr)
1625 {
1626 int count = *countptr;
1627 int new_bufs;
1628
1629 if (unlikely(count < FSL_DPAA_ETH_REFILL_THRESHOLD)) {
1630 do {
1631 new_bufs = dpaa_bp_add_8_bufs(dpaa_bp);
1632 if (unlikely(!new_bufs)) {
1633 /* Avoid looping forever if we've temporarily
1634 * run out of memory. We'll try again at the
1635 * next NAPI cycle.
1636 */
1637 break;
1638 }
1639 count += new_bufs;
1640 } while (count < FSL_DPAA_ETH_MAX_BUF_COUNT);
1641
1642 *countptr = count;
1643 if (unlikely(count < FSL_DPAA_ETH_MAX_BUF_COUNT))
1644 return -ENOMEM;
1645 }
1646
1647 return 0;
1648 }
1649
dpaa_eth_refill_bpools(struct dpaa_priv * priv)1650 static int dpaa_eth_refill_bpools(struct dpaa_priv *priv)
1651 {
1652 struct dpaa_bp *dpaa_bp;
1653 int *countptr;
1654
1655 dpaa_bp = priv->dpaa_bp;
1656 if (!dpaa_bp)
1657 return -EINVAL;
1658 countptr = this_cpu_ptr(dpaa_bp->percpu_count);
1659
1660 return dpaa_eth_refill_bpool(dpaa_bp, countptr);
1661 }
1662
1663 /* Cleanup function for outgoing frame descriptors that were built on Tx path,
1664 * either contiguous frames or scatter/gather ones.
1665 * Skb freeing is not handled here.
1666 *
1667 * This function may be called on error paths in the Tx function, so guard
1668 * against cases when not all fd relevant fields were filled in. To avoid
1669 * reading the invalid transmission timestamp for the error paths set ts to
1670 * false.
1671 *
1672 * Return the skb backpointer, since for S/G frames the buffer containing it
1673 * gets freed here.
1674 *
1675 * No skb backpointer is set when transmitting XDP frames. Cleanup the buffer
1676 * and return NULL in this case.
1677 */
dpaa_cleanup_tx_fd(const struct dpaa_priv * priv,const struct qm_fd * fd,bool ts)1678 static struct sk_buff *dpaa_cleanup_tx_fd(const struct dpaa_priv *priv,
1679 const struct qm_fd *fd, bool ts)
1680 {
1681 const enum dma_data_direction dma_dir = DMA_TO_DEVICE;
1682 struct device *dev = priv->net_dev->dev.parent;
1683 struct skb_shared_hwtstamps shhwtstamps;
1684 dma_addr_t addr = qm_fd_addr(fd);
1685 void *vaddr = phys_to_virt(addr);
1686 const struct qm_sg_entry *sgt;
1687 struct dpaa_eth_swbp *swbp;
1688 struct sk_buff *skb;
1689 u64 ns;
1690 int i;
1691
1692 if (unlikely(qm_fd_get_format(fd) == qm_fd_sg)) {
1693 dma_unmap_page(priv->tx_dma_dev, addr,
1694 qm_fd_get_offset(fd) + DPAA_SGT_SIZE,
1695 dma_dir);
1696
1697 /* The sgt buffer has been allocated with netdev_alloc_frag(),
1698 * it's from lowmem.
1699 */
1700 sgt = vaddr + qm_fd_get_offset(fd);
1701
1702 /* sgt[0] is from lowmem, was dma_map_single()-ed */
1703 dma_unmap_single(priv->tx_dma_dev, qm_sg_addr(&sgt[0]),
1704 qm_sg_entry_get_len(&sgt[0]), dma_dir);
1705
1706 /* remaining pages were mapped with skb_frag_dma_map() */
1707 for (i = 1; (i < DPAA_SGT_MAX_ENTRIES) &&
1708 !qm_sg_entry_is_final(&sgt[i - 1]); i++) {
1709 WARN_ON(qm_sg_entry_is_ext(&sgt[i]));
1710
1711 dma_unmap_page(priv->tx_dma_dev, qm_sg_addr(&sgt[i]),
1712 qm_sg_entry_get_len(&sgt[i]), dma_dir);
1713 }
1714 } else {
1715 dma_unmap_single(priv->tx_dma_dev, addr,
1716 qm_fd_get_offset(fd) + qm_fd_get_length(fd),
1717 dma_dir);
1718 }
1719
1720 swbp = (struct dpaa_eth_swbp *)vaddr;
1721 skb = swbp->skb;
1722
1723 /* No skb backpointer is set when running XDP. An xdp_frame
1724 * backpointer is saved instead.
1725 */
1726 if (!skb) {
1727 xdp_return_frame(swbp->xdpf);
1728 return NULL;
1729 }
1730
1731 /* DMA unmapping is required before accessing the HW provided info */
1732 if (ts && priv->tx_tstamp &&
1733 skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) {
1734 memset(&shhwtstamps, 0, sizeof(shhwtstamps));
1735
1736 if (!fman_port_get_tstamp(priv->mac_dev->port[TX], vaddr,
1737 &ns)) {
1738 shhwtstamps.hwtstamp = ns_to_ktime(ns);
1739 skb_tstamp_tx(skb, &shhwtstamps);
1740 } else {
1741 dev_warn(dev, "fman_port_get_tstamp failed!\n");
1742 }
1743 }
1744
1745 if (qm_fd_get_format(fd) == qm_fd_sg)
1746 /* Free the page that we allocated on Tx for the SGT */
1747 free_pages((unsigned long)vaddr, 0);
1748
1749 return skb;
1750 }
1751
rx_csum_offload(const struct dpaa_priv * priv,const struct qm_fd * fd)1752 static u8 rx_csum_offload(const struct dpaa_priv *priv, const struct qm_fd *fd)
1753 {
1754 /* The parser has run and performed L4 checksum validation.
1755 * We know there were no parser errors (and implicitly no
1756 * L4 csum error), otherwise we wouldn't be here.
1757 */
1758 if ((priv->net_dev->features & NETIF_F_RXCSUM) &&
1759 (be32_to_cpu(fd->status) & FM_FD_STAT_L4CV))
1760 return CHECKSUM_UNNECESSARY;
1761
1762 /* We're here because either the parser didn't run or the L4 checksum
1763 * was not verified. This may include the case of a UDP frame with
1764 * checksum zero or an L4 proto other than TCP/UDP
1765 */
1766 return CHECKSUM_NONE;
1767 }
1768
1769 #define PTR_IS_ALIGNED(x, a) (IS_ALIGNED((unsigned long)(x), (a)))
1770
1771 /* Build a linear skb around the received buffer.
1772 * We are guaranteed there is enough room at the end of the data buffer to
1773 * accommodate the shared info area of the skb.
1774 */
contig_fd_to_skb(const struct dpaa_priv * priv,const struct qm_fd * fd)1775 static struct sk_buff *contig_fd_to_skb(const struct dpaa_priv *priv,
1776 const struct qm_fd *fd)
1777 {
1778 ssize_t fd_off = qm_fd_get_offset(fd);
1779 dma_addr_t addr = qm_fd_addr(fd);
1780 struct dpaa_bp *dpaa_bp;
1781 struct sk_buff *skb;
1782 void *vaddr;
1783
1784 vaddr = phys_to_virt(addr);
1785 WARN_ON(!IS_ALIGNED((unsigned long)vaddr, SMP_CACHE_BYTES));
1786
1787 dpaa_bp = dpaa_bpid2pool(fd->bpid);
1788 if (!dpaa_bp)
1789 goto free_buffer;
1790
1791 skb = build_skb(vaddr, dpaa_bp->size +
1792 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)));
1793 if (WARN_ONCE(!skb, "Build skb failure on Rx\n"))
1794 goto free_buffer;
1795 skb_reserve(skb, fd_off);
1796 skb_put(skb, qm_fd_get_length(fd));
1797
1798 skb->ip_summed = rx_csum_offload(priv, fd);
1799
1800 return skb;
1801
1802 free_buffer:
1803 free_pages((unsigned long)vaddr, 0);
1804 return NULL;
1805 }
1806
1807 /* Build an skb with the data of the first S/G entry in the linear portion and
1808 * the rest of the frame as skb fragments.
1809 *
1810 * The page fragment holding the S/G Table is recycled here.
1811 */
sg_fd_to_skb(const struct dpaa_priv * priv,const struct qm_fd * fd)1812 static struct sk_buff *sg_fd_to_skb(const struct dpaa_priv *priv,
1813 const struct qm_fd *fd)
1814 {
1815 ssize_t fd_off = qm_fd_get_offset(fd);
1816 dma_addr_t addr = qm_fd_addr(fd);
1817 const struct qm_sg_entry *sgt;
1818 struct page *page, *head_page;
1819 struct dpaa_bp *dpaa_bp;
1820 void *vaddr, *sg_vaddr;
1821 struct sk_buff *skb;
1822 dma_addr_t sg_addr;
1823 int page_offset;
1824 unsigned int sz;
1825 int *count_ptr;
1826 int i, j;
1827
1828 vaddr = phys_to_virt(addr);
1829 WARN_ON(!IS_ALIGNED((unsigned long)vaddr, SMP_CACHE_BYTES));
1830
1831 /* Iterate through the SGT entries and add data buffers to the skb */
1832 sgt = vaddr + fd_off;
1833 skb = NULL;
1834 for (i = 0; i < DPAA_SGT_MAX_ENTRIES; i++) {
1835 /* Extension bit is not supported */
1836 WARN_ON(qm_sg_entry_is_ext(&sgt[i]));
1837
1838 sg_addr = qm_sg_addr(&sgt[i]);
1839 sg_vaddr = phys_to_virt(sg_addr);
1840 WARN_ON(!PTR_IS_ALIGNED(sg_vaddr, SMP_CACHE_BYTES));
1841
1842 dma_unmap_page(priv->rx_dma_dev, sg_addr,
1843 DPAA_BP_RAW_SIZE, DMA_FROM_DEVICE);
1844
1845 /* We may use multiple Rx pools */
1846 dpaa_bp = dpaa_bpid2pool(sgt[i].bpid);
1847 if (!dpaa_bp)
1848 goto free_buffers;
1849
1850 if (!skb) {
1851 sz = dpaa_bp->size +
1852 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
1853 skb = build_skb(sg_vaddr, sz);
1854 if (WARN_ON(!skb))
1855 goto free_buffers;
1856
1857 skb->ip_summed = rx_csum_offload(priv, fd);
1858
1859 /* Make sure forwarded skbs will have enough space
1860 * on Tx, if extra headers are added.
1861 */
1862 WARN_ON(fd_off != priv->rx_headroom);
1863 /* The offset to data start within the buffer holding
1864 * the SGT should always be equal to the offset to data
1865 * start within the first buffer holding the frame.
1866 */
1867 WARN_ON_ONCE(fd_off != qm_sg_entry_get_off(&sgt[i]));
1868 skb_reserve(skb, fd_off);
1869 skb_put(skb, qm_sg_entry_get_len(&sgt[i]));
1870 } else {
1871 /* Not the first S/G entry; all data from buffer will
1872 * be added in an skb fragment; fragment index is offset
1873 * by one since first S/G entry was incorporated in the
1874 * linear part of the skb.
1875 *
1876 * Caution: 'page' may be a tail page.
1877 */
1878 page = virt_to_page(sg_vaddr);
1879 head_page = virt_to_head_page(sg_vaddr);
1880
1881 /* Compute offset of sg_vaddr in (possibly tail) page */
1882 page_offset = ((unsigned long)sg_vaddr &
1883 (PAGE_SIZE - 1)) +
1884 (page_address(page) - page_address(head_page));
1885
1886 /* Non-initial SGT entries should not have a buffer
1887 * offset.
1888 */
1889 WARN_ON_ONCE(qm_sg_entry_get_off(&sgt[i]));
1890
1891 /* skb_add_rx_frag() does no checking on the page; if
1892 * we pass it a tail page, we'll end up with
1893 * bad page accounting and eventually with segfaults.
1894 */
1895 skb_add_rx_frag(skb, i - 1, head_page, page_offset,
1896 qm_sg_entry_get_len(&sgt[i]),
1897 dpaa_bp->size);
1898 }
1899
1900 /* Update the pool count for the current {cpu x bpool} */
1901 count_ptr = this_cpu_ptr(dpaa_bp->percpu_count);
1902 (*count_ptr)--;
1903
1904 if (qm_sg_entry_is_final(&sgt[i]))
1905 break;
1906 }
1907 WARN_ONCE(i == DPAA_SGT_MAX_ENTRIES, "No final bit on SGT\n");
1908
1909 /* free the SG table buffer */
1910 free_pages((unsigned long)vaddr, 0);
1911
1912 return skb;
1913
1914 free_buffers:
1915 /* free all the SG entries */
1916 for (j = 0; j < DPAA_SGT_MAX_ENTRIES ; j++) {
1917 sg_addr = qm_sg_addr(&sgt[j]);
1918 sg_vaddr = phys_to_virt(sg_addr);
1919 /* all pages 0..i were unmaped */
1920 if (j > i)
1921 dma_unmap_page(priv->rx_dma_dev, qm_sg_addr(&sgt[j]),
1922 DPAA_BP_RAW_SIZE, DMA_FROM_DEVICE);
1923 free_pages((unsigned long)sg_vaddr, 0);
1924 /* counters 0..i-1 were decremented */
1925 if (j >= i) {
1926 dpaa_bp = dpaa_bpid2pool(sgt[j].bpid);
1927 if (dpaa_bp) {
1928 count_ptr = this_cpu_ptr(dpaa_bp->percpu_count);
1929 (*count_ptr)--;
1930 }
1931 }
1932
1933 if (qm_sg_entry_is_final(&sgt[j]))
1934 break;
1935 }
1936 /* free the SGT fragment */
1937 free_pages((unsigned long)vaddr, 0);
1938
1939 return NULL;
1940 }
1941
skb_to_contig_fd(struct dpaa_priv * priv,struct sk_buff * skb,struct qm_fd * fd,int * offset)1942 static int skb_to_contig_fd(struct dpaa_priv *priv,
1943 struct sk_buff *skb, struct qm_fd *fd,
1944 int *offset)
1945 {
1946 struct net_device *net_dev = priv->net_dev;
1947 enum dma_data_direction dma_dir;
1948 struct dpaa_eth_swbp *swbp;
1949 unsigned char *buff_start;
1950 dma_addr_t addr;
1951 int err;
1952
1953 /* We are guaranteed to have at least tx_headroom bytes
1954 * available, so just use that for offset.
1955 */
1956 fd->bpid = FSL_DPAA_BPID_INV;
1957 buff_start = skb->data - priv->tx_headroom;
1958 dma_dir = DMA_TO_DEVICE;
1959
1960 swbp = (struct dpaa_eth_swbp *)buff_start;
1961 swbp->skb = skb;
1962
1963 /* Enable L3/L4 hardware checksum computation.
1964 *
1965 * We must do this before dma_map_single(DMA_TO_DEVICE), because we may
1966 * need to write into the skb.
1967 */
1968 err = dpaa_enable_tx_csum(priv, skb, fd,
1969 buff_start + DPAA_TX_PRIV_DATA_SIZE);
1970 if (unlikely(err < 0)) {
1971 if (net_ratelimit())
1972 netif_err(priv, tx_err, net_dev, "HW csum error: %d\n",
1973 err);
1974 return err;
1975 }
1976
1977 /* Fill in the rest of the FD fields */
1978 qm_fd_set_contig(fd, priv->tx_headroom, skb->len);
1979 fd->cmd |= cpu_to_be32(FM_FD_CMD_FCO);
1980
1981 /* Map the entire buffer size that may be seen by FMan, but no more */
1982 addr = dma_map_single(priv->tx_dma_dev, buff_start,
1983 priv->tx_headroom + skb->len, dma_dir);
1984 if (unlikely(dma_mapping_error(priv->tx_dma_dev, addr))) {
1985 if (net_ratelimit())
1986 netif_err(priv, tx_err, net_dev, "dma_map_single() failed\n");
1987 return -EINVAL;
1988 }
1989 qm_fd_addr_set64(fd, addr);
1990
1991 return 0;
1992 }
1993
skb_to_sg_fd(struct dpaa_priv * priv,struct sk_buff * skb,struct qm_fd * fd)1994 static int skb_to_sg_fd(struct dpaa_priv *priv,
1995 struct sk_buff *skb, struct qm_fd *fd)
1996 {
1997 const enum dma_data_direction dma_dir = DMA_TO_DEVICE;
1998 const int nr_frags = skb_shinfo(skb)->nr_frags;
1999 struct net_device *net_dev = priv->net_dev;
2000 struct dpaa_eth_swbp *swbp;
2001 struct qm_sg_entry *sgt;
2002 void *buff_start;
2003 skb_frag_t *frag;
2004 dma_addr_t addr;
2005 size_t frag_len;
2006 struct page *p;
2007 int i, j, err;
2008
2009 /* get a page to store the SGTable */
2010 p = dev_alloc_pages(0);
2011 if (unlikely(!p)) {
2012 netdev_err(net_dev, "dev_alloc_pages() failed\n");
2013 return -ENOMEM;
2014 }
2015 buff_start = page_address(p);
2016
2017 /* Enable L3/L4 hardware checksum computation.
2018 *
2019 * We must do this before dma_map_single(DMA_TO_DEVICE), because we may
2020 * need to write into the skb.
2021 */
2022 err = dpaa_enable_tx_csum(priv, skb, fd,
2023 buff_start + DPAA_TX_PRIV_DATA_SIZE);
2024 if (unlikely(err < 0)) {
2025 if (net_ratelimit())
2026 netif_err(priv, tx_err, net_dev, "HW csum error: %d\n",
2027 err);
2028 goto csum_failed;
2029 }
2030
2031 /* SGT[0] is used by the linear part */
2032 sgt = (struct qm_sg_entry *)(buff_start + priv->tx_headroom);
2033 frag_len = skb_headlen(skb);
2034 qm_sg_entry_set_len(&sgt[0], frag_len);
2035 sgt[0].bpid = FSL_DPAA_BPID_INV;
2036 sgt[0].offset = 0;
2037 addr = dma_map_single(priv->tx_dma_dev, skb->data,
2038 skb_headlen(skb), dma_dir);
2039 if (unlikely(dma_mapping_error(priv->tx_dma_dev, addr))) {
2040 netdev_err(priv->net_dev, "DMA mapping failed\n");
2041 err = -EINVAL;
2042 goto sg0_map_failed;
2043 }
2044 qm_sg_entry_set64(&sgt[0], addr);
2045
2046 /* populate the rest of SGT entries */
2047 for (i = 0; i < nr_frags; i++) {
2048 frag = &skb_shinfo(skb)->frags[i];
2049 frag_len = skb_frag_size(frag);
2050 WARN_ON(!skb_frag_page(frag));
2051 addr = skb_frag_dma_map(priv->tx_dma_dev, frag, 0,
2052 frag_len, dma_dir);
2053 if (unlikely(dma_mapping_error(priv->tx_dma_dev, addr))) {
2054 netdev_err(priv->net_dev, "DMA mapping failed\n");
2055 err = -EINVAL;
2056 goto sg_map_failed;
2057 }
2058
2059 qm_sg_entry_set_len(&sgt[i + 1], frag_len);
2060 sgt[i + 1].bpid = FSL_DPAA_BPID_INV;
2061 sgt[i + 1].offset = 0;
2062
2063 /* keep the offset in the address */
2064 qm_sg_entry_set64(&sgt[i + 1], addr);
2065 }
2066
2067 /* Set the final bit in the last used entry of the SGT */
2068 qm_sg_entry_set_f(&sgt[nr_frags], frag_len);
2069
2070 /* set fd offset to priv->tx_headroom */
2071 qm_fd_set_sg(fd, priv->tx_headroom, skb->len);
2072
2073 /* DMA map the SGT page */
2074 swbp = (struct dpaa_eth_swbp *)buff_start;
2075 swbp->skb = skb;
2076
2077 addr = dma_map_page(priv->tx_dma_dev, p, 0,
2078 priv->tx_headroom + DPAA_SGT_SIZE, dma_dir);
2079 if (unlikely(dma_mapping_error(priv->tx_dma_dev, addr))) {
2080 netdev_err(priv->net_dev, "DMA mapping failed\n");
2081 err = -EINVAL;
2082 goto sgt_map_failed;
2083 }
2084
2085 fd->bpid = FSL_DPAA_BPID_INV;
2086 fd->cmd |= cpu_to_be32(FM_FD_CMD_FCO);
2087 qm_fd_addr_set64(fd, addr);
2088
2089 return 0;
2090
2091 sgt_map_failed:
2092 sg_map_failed:
2093 for (j = 0; j < i; j++)
2094 dma_unmap_page(priv->tx_dma_dev, qm_sg_addr(&sgt[j]),
2095 qm_sg_entry_get_len(&sgt[j]), dma_dir);
2096 sg0_map_failed:
2097 csum_failed:
2098 free_pages((unsigned long)buff_start, 0);
2099
2100 return err;
2101 }
2102
dpaa_xmit(struct dpaa_priv * priv,struct rtnl_link_stats64 * percpu_stats,int queue,struct qm_fd * fd)2103 static inline int dpaa_xmit(struct dpaa_priv *priv,
2104 struct rtnl_link_stats64 *percpu_stats,
2105 int queue,
2106 struct qm_fd *fd)
2107 {
2108 struct qman_fq *egress_fq;
2109 int err, i;
2110
2111 egress_fq = priv->egress_fqs[queue];
2112 if (fd->bpid == FSL_DPAA_BPID_INV)
2113 fd->cmd |= cpu_to_be32(qman_fq_fqid(priv->conf_fqs[queue]));
2114
2115 /* Trace this Tx fd */
2116 trace_dpaa_tx_fd(priv->net_dev, egress_fq, fd);
2117
2118 for (i = 0; i < DPAA_ENQUEUE_RETRIES; i++) {
2119 err = qman_enqueue(egress_fq, fd);
2120 if (err != -EBUSY)
2121 break;
2122 }
2123
2124 if (unlikely(err < 0)) {
2125 percpu_stats->tx_fifo_errors++;
2126 return err;
2127 }
2128
2129 percpu_stats->tx_packets++;
2130 percpu_stats->tx_bytes += qm_fd_get_length(fd);
2131
2132 return 0;
2133 }
2134
2135 #ifdef CONFIG_DPAA_ERRATUM_A050385
dpaa_a050385_wa_skb(struct net_device * net_dev,struct sk_buff ** s)2136 static int dpaa_a050385_wa_skb(struct net_device *net_dev, struct sk_buff **s)
2137 {
2138 struct dpaa_priv *priv = netdev_priv(net_dev);
2139 struct sk_buff *new_skb, *skb = *s;
2140 unsigned char *start, i;
2141
2142 /* check linear buffer alignment */
2143 if (!PTR_IS_ALIGNED(skb->data, DPAA_A050385_ALIGN))
2144 goto workaround;
2145
2146 /* linear buffers just need to have an aligned start */
2147 if (!skb_is_nonlinear(skb))
2148 return 0;
2149
2150 /* linear data size for nonlinear skbs needs to be aligned */
2151 if (!IS_ALIGNED(skb_headlen(skb), DPAA_A050385_ALIGN))
2152 goto workaround;
2153
2154 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2155 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2156
2157 /* all fragments need to have aligned start addresses */
2158 if (!IS_ALIGNED(skb_frag_off(frag), DPAA_A050385_ALIGN))
2159 goto workaround;
2160
2161 /* all but last fragment need to have aligned sizes */
2162 if (!IS_ALIGNED(skb_frag_size(frag), DPAA_A050385_ALIGN) &&
2163 (i < skb_shinfo(skb)->nr_frags - 1))
2164 goto workaround;
2165 }
2166
2167 return 0;
2168
2169 workaround:
2170 /* copy all the skb content into a new linear buffer */
2171 new_skb = netdev_alloc_skb(net_dev, skb->len + DPAA_A050385_ALIGN - 1 +
2172 priv->tx_headroom);
2173 if (!new_skb)
2174 return -ENOMEM;
2175
2176 /* NET_SKB_PAD bytes already reserved, adding up to tx_headroom */
2177 skb_reserve(new_skb, priv->tx_headroom - NET_SKB_PAD);
2178
2179 /* Workaround for DPAA_A050385 requires data start to be aligned */
2180 start = PTR_ALIGN(new_skb->data, DPAA_A050385_ALIGN);
2181 if (start - new_skb->data)
2182 skb_reserve(new_skb, start - new_skb->data);
2183
2184 skb_put(new_skb, skb->len);
2185 skb_copy_bits(skb, 0, new_skb->data, skb->len);
2186 skb_copy_header(new_skb, skb);
2187 new_skb->dev = skb->dev;
2188
2189 /* Copy relevant timestamp info from the old skb to the new */
2190 if (priv->tx_tstamp) {
2191 skb_shinfo(new_skb)->tx_flags = skb_shinfo(skb)->tx_flags;
2192 skb_shinfo(new_skb)->hwtstamps = skb_shinfo(skb)->hwtstamps;
2193 skb_shinfo(new_skb)->tskey = skb_shinfo(skb)->tskey;
2194 if (skb->sk)
2195 skb_set_owner_w(new_skb, skb->sk);
2196 }
2197
2198 /* We move the headroom when we align it so we have to reset the
2199 * network and transport header offsets relative to the new data
2200 * pointer. The checksum offload relies on these offsets.
2201 */
2202 skb_set_network_header(new_skb, skb_network_offset(skb));
2203 skb_set_transport_header(new_skb, skb_transport_offset(skb));
2204
2205 dev_kfree_skb(skb);
2206 *s = new_skb;
2207
2208 return 0;
2209 }
2210
dpaa_a050385_wa_xdpf(struct dpaa_priv * priv,struct xdp_frame ** init_xdpf)2211 static int dpaa_a050385_wa_xdpf(struct dpaa_priv *priv,
2212 struct xdp_frame **init_xdpf)
2213 {
2214 struct xdp_frame *new_xdpf, *xdpf = *init_xdpf;
2215 void *new_buff, *aligned_data;
2216 struct page *p;
2217 u32 data_shift;
2218 int headroom;
2219
2220 /* Check the data alignment and make sure the headroom is large
2221 * enough to store the xdpf backpointer. Use an aligned headroom
2222 * value.
2223 *
2224 * Due to alignment constraints, we give XDP access to the full 256
2225 * byte frame headroom. If the XDP program uses all of it, copy the
2226 * data to a new buffer and make room for storing the backpointer.
2227 */
2228 if (PTR_IS_ALIGNED(xdpf->data, DPAA_FD_DATA_ALIGNMENT) &&
2229 xdpf->headroom >= priv->tx_headroom) {
2230 xdpf->headroom = priv->tx_headroom;
2231 return 0;
2232 }
2233
2234 /* Try to move the data inside the buffer just enough to align it and
2235 * store the xdpf backpointer. If the available headroom isn't large
2236 * enough, resort to allocating a new buffer and copying the data.
2237 */
2238 aligned_data = PTR_ALIGN_DOWN(xdpf->data, DPAA_FD_DATA_ALIGNMENT);
2239 data_shift = xdpf->data - aligned_data;
2240
2241 /* The XDP frame's headroom needs to be large enough to accommodate
2242 * shifting the data as well as storing the xdpf backpointer.
2243 */
2244 if (xdpf->headroom >= data_shift + priv->tx_headroom) {
2245 memmove(aligned_data, xdpf->data, xdpf->len);
2246 xdpf->data = aligned_data;
2247 xdpf->headroom = priv->tx_headroom;
2248 return 0;
2249 }
2250
2251 /* The new xdp_frame is stored in the new buffer. Reserve enough space
2252 * in the headroom for storing it along with the driver's private
2253 * info. The headroom needs to be aligned to DPAA_FD_DATA_ALIGNMENT to
2254 * guarantee the data's alignment in the buffer.
2255 */
2256 headroom = ALIGN(sizeof(*new_xdpf) + priv->tx_headroom,
2257 DPAA_FD_DATA_ALIGNMENT);
2258
2259 /* Assure the extended headroom and data don't overflow the buffer,
2260 * while maintaining the mandatory tailroom.
2261 */
2262 if (headroom + xdpf->len > DPAA_BP_RAW_SIZE -
2263 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
2264 return -ENOMEM;
2265
2266 p = dev_alloc_pages(0);
2267 if (unlikely(!p))
2268 return -ENOMEM;
2269
2270 /* Copy the data to the new buffer at a properly aligned offset */
2271 new_buff = page_address(p);
2272 memcpy(new_buff + headroom, xdpf->data, xdpf->len);
2273
2274 /* Create an XDP frame around the new buffer in a similar fashion
2275 * to xdp_convert_buff_to_frame.
2276 */
2277 new_xdpf = new_buff;
2278 new_xdpf->data = new_buff + headroom;
2279 new_xdpf->len = xdpf->len;
2280 new_xdpf->headroom = priv->tx_headroom;
2281 new_xdpf->frame_sz = DPAA_BP_RAW_SIZE;
2282 new_xdpf->mem_type = MEM_TYPE_PAGE_ORDER0;
2283
2284 /* Release the initial buffer */
2285 xdp_return_frame_rx_napi(xdpf);
2286
2287 *init_xdpf = new_xdpf;
2288 return 0;
2289 }
2290 #endif
2291
2292 static netdev_tx_t
dpaa_start_xmit(struct sk_buff * skb,struct net_device * net_dev)2293 dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
2294 {
2295 const int queue_mapping = skb_get_queue_mapping(skb);
2296 struct rtnl_link_stats64 *percpu_stats;
2297 struct dpaa_percpu_priv *percpu_priv;
2298 struct netdev_queue *txq;
2299 struct dpaa_priv *priv;
2300 struct qm_fd fd;
2301 bool nonlinear;
2302 int offset = 0;
2303 int err = 0;
2304
2305 priv = netdev_priv(net_dev);
2306 percpu_priv = this_cpu_ptr(priv->percpu_priv);
2307 percpu_stats = &percpu_priv->stats;
2308
2309 qm_fd_clear_fd(&fd);
2310
2311 /* Packet data is always read as 32-bit words, so zero out any part of
2312 * the skb which might be sent if we have to pad the packet
2313 */
2314 if (__skb_put_padto(skb, ETH_ZLEN, false))
2315 goto enomem;
2316
2317 nonlinear = skb_is_nonlinear(skb);
2318 if (!nonlinear) {
2319 /* We're going to store the skb backpointer at the beginning
2320 * of the data buffer, so we need a privately owned skb
2321 *
2322 * We've made sure skb is not shared in dev->priv_flags,
2323 * we need to verify the skb head is not cloned
2324 */
2325 if (skb_cow_head(skb, priv->tx_headroom))
2326 goto enomem;
2327
2328 WARN_ON(skb_is_nonlinear(skb));
2329 }
2330
2331 /* MAX_SKB_FRAGS is equal or larger than our dpaa_SGT_MAX_ENTRIES;
2332 * make sure we don't feed FMan with more fragments than it supports.
2333 */
2334 if (unlikely(nonlinear &&
2335 (skb_shinfo(skb)->nr_frags >= DPAA_SGT_MAX_ENTRIES))) {
2336 /* If the egress skb contains more fragments than we support
2337 * we have no choice but to linearize it ourselves.
2338 */
2339 if (__skb_linearize(skb))
2340 goto enomem;
2341
2342 nonlinear = skb_is_nonlinear(skb);
2343 }
2344
2345 #ifdef CONFIG_DPAA_ERRATUM_A050385
2346 if (unlikely(fman_has_errata_a050385())) {
2347 if (dpaa_a050385_wa_skb(net_dev, &skb))
2348 goto enomem;
2349 nonlinear = skb_is_nonlinear(skb);
2350 }
2351 #endif
2352
2353 if (nonlinear) {
2354 /* Just create a S/G fd based on the skb */
2355 err = skb_to_sg_fd(priv, skb, &fd);
2356 percpu_priv->tx_frag_skbuffs++;
2357 } else {
2358 /* Create a contig FD from this skb */
2359 err = skb_to_contig_fd(priv, skb, &fd, &offset);
2360 }
2361 if (unlikely(err < 0))
2362 goto skb_to_fd_failed;
2363
2364 txq = netdev_get_tx_queue(net_dev, queue_mapping);
2365
2366 /* LLTX requires to do our own update of trans_start */
2367 txq_trans_cond_update(txq);
2368
2369 if (priv->tx_tstamp && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) {
2370 fd.cmd |= cpu_to_be32(FM_FD_CMD_UPD);
2371 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
2372 }
2373
2374 if (likely(dpaa_xmit(priv, percpu_stats, queue_mapping, &fd) == 0))
2375 return NETDEV_TX_OK;
2376
2377 dpaa_cleanup_tx_fd(priv, &fd, false);
2378 skb_to_fd_failed:
2379 enomem:
2380 percpu_stats->tx_errors++;
2381 dev_kfree_skb(skb);
2382 return NETDEV_TX_OK;
2383 }
2384
dpaa_rx_error(struct net_device * net_dev,const struct dpaa_priv * priv,struct dpaa_percpu_priv * percpu_priv,const struct qm_fd * fd,u32 fqid)2385 static void dpaa_rx_error(struct net_device *net_dev,
2386 const struct dpaa_priv *priv,
2387 struct dpaa_percpu_priv *percpu_priv,
2388 const struct qm_fd *fd,
2389 u32 fqid)
2390 {
2391 if (net_ratelimit())
2392 netif_err(priv, hw, net_dev, "Err FD status = 0x%08x\n",
2393 be32_to_cpu(fd->status) & FM_FD_STAT_RX_ERRORS);
2394
2395 percpu_priv->stats.rx_errors++;
2396
2397 if (be32_to_cpu(fd->status) & FM_FD_ERR_DMA)
2398 percpu_priv->rx_errors.dme++;
2399 if (be32_to_cpu(fd->status) & FM_FD_ERR_PHYSICAL)
2400 percpu_priv->rx_errors.fpe++;
2401 if (be32_to_cpu(fd->status) & FM_FD_ERR_SIZE)
2402 percpu_priv->rx_errors.fse++;
2403 if (be32_to_cpu(fd->status) & FM_FD_ERR_PRS_HDR_ERR)
2404 percpu_priv->rx_errors.phe++;
2405
2406 dpaa_fd_release(net_dev, fd);
2407 }
2408
dpaa_tx_error(struct net_device * net_dev,const struct dpaa_priv * priv,struct dpaa_percpu_priv * percpu_priv,const struct qm_fd * fd,u32 fqid)2409 static void dpaa_tx_error(struct net_device *net_dev,
2410 const struct dpaa_priv *priv,
2411 struct dpaa_percpu_priv *percpu_priv,
2412 const struct qm_fd *fd,
2413 u32 fqid)
2414 {
2415 struct sk_buff *skb;
2416
2417 if (net_ratelimit())
2418 netif_warn(priv, hw, net_dev, "FD status = 0x%08x\n",
2419 be32_to_cpu(fd->status) & FM_FD_STAT_TX_ERRORS);
2420
2421 percpu_priv->stats.tx_errors++;
2422
2423 skb = dpaa_cleanup_tx_fd(priv, fd, false);
2424 dev_kfree_skb(skb);
2425 }
2426
dpaa_eth_poll(struct napi_struct * napi,int budget)2427 static int dpaa_eth_poll(struct napi_struct *napi, int budget)
2428 {
2429 struct dpaa_napi_portal *np =
2430 container_of(napi, struct dpaa_napi_portal, napi);
2431 int cleaned;
2432
2433 np->xdp_act = 0;
2434
2435 cleaned = qman_p_poll_dqrr(np->p, budget);
2436
2437 if (np->xdp_act & XDP_REDIRECT)
2438 xdp_do_flush();
2439
2440 if (cleaned < budget) {
2441 napi_complete_done(napi, cleaned);
2442 qman_p_irqsource_add(np->p, QM_PIRQ_DQRI);
2443 } else if (np->down) {
2444 qman_p_irqsource_add(np->p, QM_PIRQ_DQRI);
2445 }
2446
2447 return cleaned;
2448 }
2449
dpaa_tx_conf(struct net_device * net_dev,const struct dpaa_priv * priv,struct dpaa_percpu_priv * percpu_priv,const struct qm_fd * fd,u32 fqid)2450 static void dpaa_tx_conf(struct net_device *net_dev,
2451 const struct dpaa_priv *priv,
2452 struct dpaa_percpu_priv *percpu_priv,
2453 const struct qm_fd *fd,
2454 u32 fqid)
2455 {
2456 struct sk_buff *skb;
2457
2458 if (unlikely(be32_to_cpu(fd->status) & FM_FD_STAT_TX_ERRORS)) {
2459 if (net_ratelimit())
2460 netif_warn(priv, hw, net_dev, "FD status = 0x%08x\n",
2461 be32_to_cpu(fd->status) &
2462 FM_FD_STAT_TX_ERRORS);
2463
2464 percpu_priv->stats.tx_errors++;
2465 }
2466
2467 percpu_priv->tx_confirm++;
2468
2469 skb = dpaa_cleanup_tx_fd(priv, fd, true);
2470
2471 consume_skb(skb);
2472 }
2473
dpaa_eth_napi_schedule(struct dpaa_percpu_priv * percpu_priv,struct qman_portal * portal,bool sched_napi)2474 static inline int dpaa_eth_napi_schedule(struct dpaa_percpu_priv *percpu_priv,
2475 struct qman_portal *portal, bool sched_napi)
2476 {
2477 if (sched_napi) {
2478 /* Disable QMan IRQ and invoke NAPI */
2479 qman_p_irqsource_remove(portal, QM_PIRQ_DQRI);
2480
2481 percpu_priv->np.p = portal;
2482 napi_schedule(&percpu_priv->np.napi);
2483 percpu_priv->in_interrupt++;
2484 return 1;
2485 }
2486 return 0;
2487 }
2488
rx_error_dqrr(struct qman_portal * portal,struct qman_fq * fq,const struct qm_dqrr_entry * dq,bool sched_napi)2489 static enum qman_cb_dqrr_result rx_error_dqrr(struct qman_portal *portal,
2490 struct qman_fq *fq,
2491 const struct qm_dqrr_entry *dq,
2492 bool sched_napi)
2493 {
2494 struct dpaa_fq *dpaa_fq = container_of(fq, struct dpaa_fq, fq_base);
2495 struct dpaa_percpu_priv *percpu_priv;
2496 struct net_device *net_dev;
2497 struct dpaa_bp *dpaa_bp;
2498 struct dpaa_priv *priv;
2499
2500 net_dev = dpaa_fq->net_dev;
2501 priv = netdev_priv(net_dev);
2502 dpaa_bp = dpaa_bpid2pool(dq->fd.bpid);
2503 if (!dpaa_bp)
2504 return qman_cb_dqrr_consume;
2505
2506 percpu_priv = this_cpu_ptr(priv->percpu_priv);
2507
2508 if (dpaa_eth_napi_schedule(percpu_priv, portal, sched_napi))
2509 return qman_cb_dqrr_stop;
2510
2511 dpaa_eth_refill_bpools(priv);
2512 dpaa_rx_error(net_dev, priv, percpu_priv, &dq->fd, fq->fqid);
2513
2514 return qman_cb_dqrr_consume;
2515 }
2516
dpaa_xdp_xmit_frame(struct net_device * net_dev,struct xdp_frame * xdpf)2517 static int dpaa_xdp_xmit_frame(struct net_device *net_dev,
2518 struct xdp_frame *xdpf)
2519 {
2520 struct dpaa_priv *priv = netdev_priv(net_dev);
2521 struct rtnl_link_stats64 *percpu_stats;
2522 struct dpaa_percpu_priv *percpu_priv;
2523 struct dpaa_eth_swbp *swbp;
2524 struct netdev_queue *txq;
2525 void *buff_start;
2526 struct qm_fd fd;
2527 dma_addr_t addr;
2528 int err;
2529
2530 percpu_priv = this_cpu_ptr(priv->percpu_priv);
2531 percpu_stats = &percpu_priv->stats;
2532
2533 #ifdef CONFIG_DPAA_ERRATUM_A050385
2534 if (unlikely(fman_has_errata_a050385())) {
2535 if (dpaa_a050385_wa_xdpf(priv, &xdpf)) {
2536 err = -ENOMEM;
2537 goto out_error;
2538 }
2539 }
2540 #endif
2541
2542 if (xdpf->headroom < DPAA_TX_PRIV_DATA_SIZE) {
2543 err = -EINVAL;
2544 goto out_error;
2545 }
2546
2547 buff_start = xdpf->data - xdpf->headroom;
2548
2549 /* Leave empty the skb backpointer at the start of the buffer.
2550 * Save the XDP frame for easy cleanup on confirmation.
2551 */
2552 swbp = (struct dpaa_eth_swbp *)buff_start;
2553 swbp->skb = NULL;
2554 swbp->xdpf = xdpf;
2555
2556 qm_fd_clear_fd(&fd);
2557 fd.bpid = FSL_DPAA_BPID_INV;
2558 fd.cmd |= cpu_to_be32(FM_FD_CMD_FCO);
2559 qm_fd_set_contig(&fd, xdpf->headroom, xdpf->len);
2560
2561 addr = dma_map_single(priv->tx_dma_dev, buff_start,
2562 xdpf->headroom + xdpf->len,
2563 DMA_TO_DEVICE);
2564 if (unlikely(dma_mapping_error(priv->tx_dma_dev, addr))) {
2565 err = -EINVAL;
2566 goto out_error;
2567 }
2568
2569 qm_fd_addr_set64(&fd, addr);
2570
2571 /* Bump the trans_start */
2572 txq = netdev_get_tx_queue(net_dev, smp_processor_id());
2573 txq_trans_cond_update(txq);
2574
2575 err = dpaa_xmit(priv, percpu_stats, smp_processor_id(), &fd);
2576 if (err) {
2577 dma_unmap_single(priv->tx_dma_dev, addr,
2578 qm_fd_get_offset(&fd) + qm_fd_get_length(&fd),
2579 DMA_TO_DEVICE);
2580 goto out_error;
2581 }
2582
2583 return 0;
2584
2585 out_error:
2586 percpu_stats->tx_errors++;
2587 return err;
2588 }
2589
dpaa_run_xdp(struct dpaa_priv * priv,struct qm_fd * fd,void * vaddr,struct dpaa_fq * dpaa_fq,unsigned int * xdp_meta_len)2590 static u32 dpaa_run_xdp(struct dpaa_priv *priv, struct qm_fd *fd, void *vaddr,
2591 struct dpaa_fq *dpaa_fq, unsigned int *xdp_meta_len)
2592 {
2593 ssize_t fd_off = qm_fd_get_offset(fd);
2594 struct bpf_prog *xdp_prog;
2595 struct xdp_frame *xdpf;
2596 struct xdp_buff xdp;
2597 u32 xdp_act;
2598 int err;
2599
2600 xdp_prog = READ_ONCE(priv->xdp_prog);
2601 if (!xdp_prog)
2602 return XDP_PASS;
2603
2604 xdp_init_buff(&xdp, DPAA_BP_RAW_SIZE - DPAA_TX_PRIV_DATA_SIZE,
2605 &dpaa_fq->xdp_rxq);
2606 xdp_prepare_buff(&xdp, vaddr + fd_off - XDP_PACKET_HEADROOM,
2607 XDP_PACKET_HEADROOM, qm_fd_get_length(fd), true);
2608
2609 /* We reserve a fixed headroom of 256 bytes under the erratum and we
2610 * offer it all to XDP programs to use. If no room is left for the
2611 * xdpf backpointer on TX, we will need to copy the data.
2612 * Disable metadata support since data realignments might be required
2613 * and the information can be lost.
2614 */
2615 #ifdef CONFIG_DPAA_ERRATUM_A050385
2616 if (unlikely(fman_has_errata_a050385())) {
2617 xdp_set_data_meta_invalid(&xdp);
2618 xdp.data_hard_start = vaddr;
2619 xdp.frame_sz = DPAA_BP_RAW_SIZE;
2620 }
2621 #endif
2622
2623 xdp_act = bpf_prog_run_xdp(xdp_prog, &xdp);
2624
2625 /* Update the length and the offset of the FD */
2626 qm_fd_set_contig(fd, xdp.data - vaddr, xdp.data_end - xdp.data);
2627
2628 switch (xdp_act) {
2629 case XDP_PASS:
2630 #ifdef CONFIG_DPAA_ERRATUM_A050385
2631 *xdp_meta_len = xdp_data_meta_unsupported(&xdp) ? 0 :
2632 xdp.data - xdp.data_meta;
2633 #else
2634 *xdp_meta_len = xdp.data - xdp.data_meta;
2635 #endif
2636 break;
2637 case XDP_TX:
2638 /* We can access the full headroom when sending the frame
2639 * back out
2640 */
2641 xdp.data_hard_start = vaddr;
2642 xdp.frame_sz = DPAA_BP_RAW_SIZE;
2643 xdpf = xdp_convert_buff_to_frame(&xdp);
2644 if (unlikely(!xdpf)) {
2645 free_pages((unsigned long)vaddr, 0);
2646 break;
2647 }
2648
2649 if (dpaa_xdp_xmit_frame(priv->net_dev, xdpf))
2650 xdp_return_frame_rx_napi(xdpf);
2651
2652 break;
2653 case XDP_REDIRECT:
2654 /* Allow redirect to use the full headroom */
2655 xdp.data_hard_start = vaddr;
2656 xdp.frame_sz = DPAA_BP_RAW_SIZE;
2657
2658 err = xdp_do_redirect(priv->net_dev, &xdp, xdp_prog);
2659 if (err) {
2660 trace_xdp_exception(priv->net_dev, xdp_prog, xdp_act);
2661 free_pages((unsigned long)vaddr, 0);
2662 }
2663 break;
2664 default:
2665 bpf_warn_invalid_xdp_action(priv->net_dev, xdp_prog, xdp_act);
2666 fallthrough;
2667 case XDP_ABORTED:
2668 trace_xdp_exception(priv->net_dev, xdp_prog, xdp_act);
2669 fallthrough;
2670 case XDP_DROP:
2671 /* Free the buffer */
2672 free_pages((unsigned long)vaddr, 0);
2673 break;
2674 }
2675
2676 return xdp_act;
2677 }
2678
rx_default_dqrr(struct qman_portal * portal,struct qman_fq * fq,const struct qm_dqrr_entry * dq,bool sched_napi)2679 static enum qman_cb_dqrr_result rx_default_dqrr(struct qman_portal *portal,
2680 struct qman_fq *fq,
2681 const struct qm_dqrr_entry *dq,
2682 bool sched_napi)
2683 {
2684 bool ts_valid = false, hash_valid = false;
2685 struct skb_shared_hwtstamps *shhwtstamps;
2686 unsigned int skb_len, xdp_meta_len = 0;
2687 struct rtnl_link_stats64 *percpu_stats;
2688 struct dpaa_percpu_priv *percpu_priv;
2689 const struct qm_fd *fd = &dq->fd;
2690 dma_addr_t addr = qm_fd_addr(fd);
2691 struct dpaa_napi_portal *np;
2692 enum qm_fd_format fd_format;
2693 struct net_device *net_dev;
2694 u32 fd_status, hash_offset;
2695 struct qm_sg_entry *sgt;
2696 struct dpaa_bp *dpaa_bp;
2697 struct dpaa_fq *dpaa_fq;
2698 struct dpaa_priv *priv;
2699 struct sk_buff *skb;
2700 int *count_ptr;
2701 u32 xdp_act;
2702 void *vaddr;
2703 u32 hash;
2704 u64 ns;
2705
2706 dpaa_fq = container_of(fq, struct dpaa_fq, fq_base);
2707 fd_status = be32_to_cpu(fd->status);
2708 fd_format = qm_fd_get_format(fd);
2709 net_dev = dpaa_fq->net_dev;
2710 priv = netdev_priv(net_dev);
2711 dpaa_bp = dpaa_bpid2pool(dq->fd.bpid);
2712 if (!dpaa_bp)
2713 return qman_cb_dqrr_consume;
2714
2715 /* Trace the Rx fd */
2716 trace_dpaa_rx_fd(net_dev, fq, &dq->fd);
2717
2718 percpu_priv = this_cpu_ptr(priv->percpu_priv);
2719 percpu_stats = &percpu_priv->stats;
2720 np = &percpu_priv->np;
2721
2722 if (unlikely(dpaa_eth_napi_schedule(percpu_priv, portal, sched_napi)))
2723 return qman_cb_dqrr_stop;
2724
2725 /* Make sure we didn't run out of buffers */
2726 if (unlikely(dpaa_eth_refill_bpools(priv))) {
2727 /* Unable to refill the buffer pool due to insufficient
2728 * system memory. Just release the frame back into the pool,
2729 * otherwise we'll soon end up with an empty buffer pool.
2730 */
2731 dpaa_fd_release(net_dev, &dq->fd);
2732 return qman_cb_dqrr_consume;
2733 }
2734
2735 if (unlikely(fd_status & FM_FD_STAT_RX_ERRORS) != 0) {
2736 if (net_ratelimit())
2737 netif_warn(priv, hw, net_dev, "FD status = 0x%08x\n",
2738 fd_status & FM_FD_STAT_RX_ERRORS);
2739
2740 percpu_stats->rx_errors++;
2741 dpaa_fd_release(net_dev, fd);
2742 return qman_cb_dqrr_consume;
2743 }
2744
2745 dma_unmap_page(dpaa_bp->priv->rx_dma_dev, addr, DPAA_BP_RAW_SIZE,
2746 DMA_FROM_DEVICE);
2747
2748 /* prefetch the first 64 bytes of the frame or the SGT start */
2749 vaddr = phys_to_virt(addr);
2750 prefetch(vaddr + qm_fd_get_offset(fd));
2751
2752 /* The only FD types that we may receive are contig and S/G */
2753 WARN_ON((fd_format != qm_fd_contig) && (fd_format != qm_fd_sg));
2754
2755 /* Account for either the contig buffer or the SGT buffer (depending on
2756 * which case we were in) having been removed from the pool.
2757 */
2758 count_ptr = this_cpu_ptr(dpaa_bp->percpu_count);
2759 (*count_ptr)--;
2760
2761 /* Extract the timestamp stored in the headroom before running XDP */
2762 if (priv->rx_tstamp) {
2763 if (!fman_port_get_tstamp(priv->mac_dev->port[RX], vaddr, &ns))
2764 ts_valid = true;
2765 else
2766 WARN_ONCE(1, "fman_port_get_tstamp failed!\n");
2767 }
2768
2769 /* Extract the hash stored in the headroom before running XDP */
2770 if (net_dev->features & NETIF_F_RXHASH && priv->keygen_in_use &&
2771 !fman_port_get_hash_result_offset(priv->mac_dev->port[RX],
2772 &hash_offset)) {
2773 hash = be32_to_cpu(*(__be32 *)(vaddr + hash_offset));
2774 hash_valid = true;
2775 }
2776
2777 if (likely(fd_format == qm_fd_contig)) {
2778 xdp_act = dpaa_run_xdp(priv, (struct qm_fd *)fd, vaddr,
2779 dpaa_fq, &xdp_meta_len);
2780 np->xdp_act |= xdp_act;
2781 if (xdp_act != XDP_PASS) {
2782 percpu_stats->rx_packets++;
2783 percpu_stats->rx_bytes += qm_fd_get_length(fd);
2784 return qman_cb_dqrr_consume;
2785 }
2786 skb = contig_fd_to_skb(priv, fd);
2787 } else {
2788 /* XDP doesn't support S/G frames. Return the fragments to the
2789 * buffer pool and release the SGT.
2790 */
2791 if (READ_ONCE(priv->xdp_prog)) {
2792 WARN_ONCE(1, "S/G frames not supported under XDP\n");
2793 sgt = vaddr + qm_fd_get_offset(fd);
2794 dpaa_release_sgt_members(sgt);
2795 free_pages((unsigned long)vaddr, 0);
2796 return qman_cb_dqrr_consume;
2797 }
2798 skb = sg_fd_to_skb(priv, fd);
2799 }
2800 if (!skb)
2801 return qman_cb_dqrr_consume;
2802
2803 if (xdp_meta_len)
2804 skb_metadata_set(skb, xdp_meta_len);
2805
2806 /* Set the previously extracted timestamp */
2807 if (ts_valid) {
2808 shhwtstamps = skb_hwtstamps(skb);
2809 memset(shhwtstamps, 0, sizeof(*shhwtstamps));
2810 shhwtstamps->hwtstamp = ns_to_ktime(ns);
2811 }
2812
2813 skb->protocol = eth_type_trans(skb, net_dev);
2814
2815 /* Set the previously extracted hash */
2816 if (hash_valid) {
2817 enum pkt_hash_types type;
2818
2819 /* if L4 exists, it was used in the hash generation */
2820 type = be32_to_cpu(fd->status) & FM_FD_STAT_L4CV ?
2821 PKT_HASH_TYPE_L4 : PKT_HASH_TYPE_L3;
2822 skb_set_hash(skb, hash, type);
2823 }
2824
2825 skb_len = skb->len;
2826
2827 if (unlikely(netif_receive_skb(skb) == NET_RX_DROP)) {
2828 percpu_stats->rx_dropped++;
2829 return qman_cb_dqrr_consume;
2830 }
2831
2832 percpu_stats->rx_packets++;
2833 percpu_stats->rx_bytes += skb_len;
2834
2835 return qman_cb_dqrr_consume;
2836 }
2837
conf_error_dqrr(struct qman_portal * portal,struct qman_fq * fq,const struct qm_dqrr_entry * dq,bool sched_napi)2838 static enum qman_cb_dqrr_result conf_error_dqrr(struct qman_portal *portal,
2839 struct qman_fq *fq,
2840 const struct qm_dqrr_entry *dq,
2841 bool sched_napi)
2842 {
2843 struct dpaa_percpu_priv *percpu_priv;
2844 struct net_device *net_dev;
2845 struct dpaa_priv *priv;
2846
2847 net_dev = ((struct dpaa_fq *)fq)->net_dev;
2848 priv = netdev_priv(net_dev);
2849
2850 percpu_priv = this_cpu_ptr(priv->percpu_priv);
2851
2852 if (dpaa_eth_napi_schedule(percpu_priv, portal, sched_napi))
2853 return qman_cb_dqrr_stop;
2854
2855 dpaa_tx_error(net_dev, priv, percpu_priv, &dq->fd, fq->fqid);
2856
2857 return qman_cb_dqrr_consume;
2858 }
2859
conf_dflt_dqrr(struct qman_portal * portal,struct qman_fq * fq,const struct qm_dqrr_entry * dq,bool sched_napi)2860 static enum qman_cb_dqrr_result conf_dflt_dqrr(struct qman_portal *portal,
2861 struct qman_fq *fq,
2862 const struct qm_dqrr_entry *dq,
2863 bool sched_napi)
2864 {
2865 struct dpaa_percpu_priv *percpu_priv;
2866 struct net_device *net_dev;
2867 struct dpaa_priv *priv;
2868
2869 net_dev = ((struct dpaa_fq *)fq)->net_dev;
2870 priv = netdev_priv(net_dev);
2871
2872 /* Trace the fd */
2873 trace_dpaa_tx_conf_fd(net_dev, fq, &dq->fd);
2874
2875 percpu_priv = this_cpu_ptr(priv->percpu_priv);
2876
2877 if (dpaa_eth_napi_schedule(percpu_priv, portal, sched_napi))
2878 return qman_cb_dqrr_stop;
2879
2880 dpaa_tx_conf(net_dev, priv, percpu_priv, &dq->fd, fq->fqid);
2881
2882 return qman_cb_dqrr_consume;
2883 }
2884
egress_ern(struct qman_portal * portal,struct qman_fq * fq,const union qm_mr_entry * msg)2885 static void egress_ern(struct qman_portal *portal,
2886 struct qman_fq *fq,
2887 const union qm_mr_entry *msg)
2888 {
2889 const struct qm_fd *fd = &msg->ern.fd;
2890 struct dpaa_percpu_priv *percpu_priv;
2891 const struct dpaa_priv *priv;
2892 struct net_device *net_dev;
2893 struct sk_buff *skb;
2894
2895 net_dev = ((struct dpaa_fq *)fq)->net_dev;
2896 priv = netdev_priv(net_dev);
2897 percpu_priv = this_cpu_ptr(priv->percpu_priv);
2898
2899 percpu_priv->stats.tx_dropped++;
2900 percpu_priv->stats.tx_fifo_errors++;
2901 count_ern(percpu_priv, msg);
2902
2903 skb = dpaa_cleanup_tx_fd(priv, fd, false);
2904 dev_kfree_skb_any(skb);
2905 }
2906
2907 static const struct dpaa_fq_cbs dpaa_fq_cbs = {
2908 .rx_defq = { .cb = { .dqrr = rx_default_dqrr } },
2909 .tx_defq = { .cb = { .dqrr = conf_dflt_dqrr } },
2910 .rx_errq = { .cb = { .dqrr = rx_error_dqrr } },
2911 .tx_errq = { .cb = { .dqrr = conf_error_dqrr } },
2912 .egress_ern = { .cb = { .ern = egress_ern } }
2913 };
2914
dpaa_eth_napi_enable(struct dpaa_priv * priv)2915 static void dpaa_eth_napi_enable(struct dpaa_priv *priv)
2916 {
2917 struct dpaa_percpu_priv *percpu_priv;
2918 int i;
2919
2920 for_each_online_cpu(i) {
2921 percpu_priv = per_cpu_ptr(priv->percpu_priv, i);
2922
2923 percpu_priv->np.down = false;
2924 napi_enable(&percpu_priv->np.napi);
2925 }
2926 }
2927
dpaa_eth_napi_disable(struct dpaa_priv * priv)2928 static void dpaa_eth_napi_disable(struct dpaa_priv *priv)
2929 {
2930 struct dpaa_percpu_priv *percpu_priv;
2931 int i;
2932
2933 for_each_online_cpu(i) {
2934 percpu_priv = per_cpu_ptr(priv->percpu_priv, i);
2935
2936 percpu_priv->np.down = true;
2937 napi_disable(&percpu_priv->np.napi);
2938 }
2939 }
2940
dpaa_open(struct net_device * net_dev)2941 static int dpaa_open(struct net_device *net_dev)
2942 {
2943 struct mac_device *mac_dev;
2944 struct dpaa_priv *priv;
2945 int err, i;
2946
2947 priv = netdev_priv(net_dev);
2948 mac_dev = priv->mac_dev;
2949 dpaa_eth_napi_enable(priv);
2950
2951 err = phylink_of_phy_connect(mac_dev->phylink,
2952 mac_dev->dev->of_node, 0);
2953 if (err)
2954 goto phy_init_failed;
2955
2956 for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++) {
2957 err = fman_port_enable(mac_dev->port[i]);
2958 if (err)
2959 goto mac_start_failed;
2960 }
2961
2962 err = priv->mac_dev->enable(mac_dev->fman_mac);
2963 if (err < 0) {
2964 netif_err(priv, ifup, net_dev, "mac_dev->enable() = %d\n", err);
2965 goto mac_start_failed;
2966 }
2967 phylink_start(mac_dev->phylink);
2968
2969 netif_tx_start_all_queues(net_dev);
2970
2971 return 0;
2972
2973 mac_start_failed:
2974 for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++)
2975 fman_port_disable(mac_dev->port[i]);
2976 phylink_disconnect_phy(mac_dev->phylink);
2977
2978 phy_init_failed:
2979 dpaa_eth_napi_disable(priv);
2980
2981 return err;
2982 }
2983
dpaa_eth_stop(struct net_device * net_dev)2984 static int dpaa_eth_stop(struct net_device *net_dev)
2985 {
2986 struct dpaa_priv *priv;
2987 int err;
2988
2989 err = dpaa_stop(net_dev);
2990
2991 priv = netdev_priv(net_dev);
2992 dpaa_eth_napi_disable(priv);
2993
2994 return err;
2995 }
2996
xdp_validate_mtu(struct dpaa_priv * priv,int mtu)2997 static bool xdp_validate_mtu(struct dpaa_priv *priv, int mtu)
2998 {
2999 int max_contig_data = priv->dpaa_bp->size - priv->rx_headroom;
3000
3001 /* We do not support S/G fragments when XDP is enabled.
3002 * Limit the MTU in relation to the buffer size.
3003 */
3004 if (mtu + VLAN_ETH_HLEN + ETH_FCS_LEN > max_contig_data) {
3005 dev_warn(priv->net_dev->dev.parent,
3006 "The maximum MTU for XDP is %d\n",
3007 max_contig_data - VLAN_ETH_HLEN - ETH_FCS_LEN);
3008 return false;
3009 }
3010
3011 return true;
3012 }
3013
dpaa_change_mtu(struct net_device * net_dev,int new_mtu)3014 static int dpaa_change_mtu(struct net_device *net_dev, int new_mtu)
3015 {
3016 struct dpaa_priv *priv = netdev_priv(net_dev);
3017
3018 if (priv->xdp_prog && !xdp_validate_mtu(priv, new_mtu))
3019 return -EINVAL;
3020
3021 WRITE_ONCE(net_dev->mtu, new_mtu);
3022 return 0;
3023 }
3024
dpaa_setup_xdp(struct net_device * net_dev,struct netdev_bpf * bpf)3025 static int dpaa_setup_xdp(struct net_device *net_dev, struct netdev_bpf *bpf)
3026 {
3027 struct dpaa_priv *priv = netdev_priv(net_dev);
3028 struct bpf_prog *old_prog;
3029 int err;
3030 bool up;
3031
3032 /* S/G fragments are not supported in XDP-mode */
3033 if (bpf->prog && !xdp_validate_mtu(priv, net_dev->mtu)) {
3034 NL_SET_ERR_MSG_MOD(bpf->extack, "MTU too large for XDP");
3035 return -EINVAL;
3036 }
3037
3038 up = netif_running(net_dev);
3039
3040 if (up)
3041 dpaa_eth_stop(net_dev);
3042
3043 old_prog = xchg(&priv->xdp_prog, bpf->prog);
3044 if (old_prog)
3045 bpf_prog_put(old_prog);
3046
3047 if (up) {
3048 err = dpaa_open(net_dev);
3049 if (err) {
3050 NL_SET_ERR_MSG_MOD(bpf->extack, "dpaa_open() failed");
3051 return err;
3052 }
3053 }
3054
3055 return 0;
3056 }
3057
dpaa_xdp(struct net_device * net_dev,struct netdev_bpf * xdp)3058 static int dpaa_xdp(struct net_device *net_dev, struct netdev_bpf *xdp)
3059 {
3060 switch (xdp->command) {
3061 case XDP_SETUP_PROG:
3062 return dpaa_setup_xdp(net_dev, xdp);
3063 default:
3064 return -EINVAL;
3065 }
3066 }
3067
dpaa_xdp_xmit(struct net_device * net_dev,int n,struct xdp_frame ** frames,u32 flags)3068 static int dpaa_xdp_xmit(struct net_device *net_dev, int n,
3069 struct xdp_frame **frames, u32 flags)
3070 {
3071 struct xdp_frame *xdpf;
3072 int i, nxmit = 0;
3073
3074 if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))
3075 return -EINVAL;
3076
3077 if (!netif_running(net_dev))
3078 return -ENETDOWN;
3079
3080 for (i = 0; i < n; i++) {
3081 xdpf = frames[i];
3082 if (dpaa_xdp_xmit_frame(net_dev, xdpf))
3083 break;
3084 nxmit++;
3085 }
3086
3087 return nxmit;
3088 }
3089
dpaa_hwtstamp_get(struct net_device * dev,struct kernel_hwtstamp_config * config)3090 static int dpaa_hwtstamp_get(struct net_device *dev,
3091 struct kernel_hwtstamp_config *config)
3092 {
3093 struct dpaa_priv *priv = netdev_priv(dev);
3094
3095 config->tx_type = priv->tx_tstamp ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
3096 config->rx_filter = priv->rx_tstamp ? HWTSTAMP_FILTER_ALL :
3097 HWTSTAMP_FILTER_NONE;
3098
3099 return 0;
3100 }
3101
dpaa_hwtstamp_set(struct net_device * dev,struct kernel_hwtstamp_config * config,struct netlink_ext_ack * extack)3102 static int dpaa_hwtstamp_set(struct net_device *dev,
3103 struct kernel_hwtstamp_config *config,
3104 struct netlink_ext_ack *extack)
3105 {
3106 struct dpaa_priv *priv = netdev_priv(dev);
3107
3108 switch (config->tx_type) {
3109 case HWTSTAMP_TX_OFF:
3110 /* Couldn't disable rx/tx timestamping separately.
3111 * Do nothing here.
3112 */
3113 priv->tx_tstamp = false;
3114 break;
3115 case HWTSTAMP_TX_ON:
3116 priv->mac_dev->set_tstamp(priv->mac_dev->fman_mac, true);
3117 priv->tx_tstamp = true;
3118 break;
3119 default:
3120 return -ERANGE;
3121 }
3122
3123 if (config->rx_filter == HWTSTAMP_FILTER_NONE) {
3124 /* Couldn't disable rx/tx timestamping separately.
3125 * Do nothing here.
3126 */
3127 priv->rx_tstamp = false;
3128 } else {
3129 priv->mac_dev->set_tstamp(priv->mac_dev->fman_mac, true);
3130 priv->rx_tstamp = true;
3131 /* TS is set for all frame types, not only those requested */
3132 config->rx_filter = HWTSTAMP_FILTER_ALL;
3133 }
3134
3135 return 0;
3136 }
3137
dpaa_ioctl(struct net_device * net_dev,struct ifreq * rq,int cmd)3138 static int dpaa_ioctl(struct net_device *net_dev, struct ifreq *rq, int cmd)
3139 {
3140 struct dpaa_priv *priv = netdev_priv(net_dev);
3141
3142 return phylink_mii_ioctl(priv->mac_dev->phylink, rq, cmd);
3143 }
3144
3145 static const struct net_device_ops dpaa_ops = {
3146 .ndo_open = dpaa_open,
3147 .ndo_start_xmit = dpaa_start_xmit,
3148 .ndo_stop = dpaa_eth_stop,
3149 .ndo_tx_timeout = dpaa_tx_timeout,
3150 .ndo_get_stats64 = dpaa_get_stats64,
3151 .ndo_set_mac_address = dpaa_set_mac_address,
3152 .ndo_validate_addr = eth_validate_addr,
3153 .ndo_set_rx_mode = dpaa_set_rx_mode,
3154 .ndo_eth_ioctl = dpaa_ioctl,
3155 .ndo_setup_tc = dpaa_setup_tc,
3156 .ndo_change_mtu = dpaa_change_mtu,
3157 .ndo_bpf = dpaa_xdp,
3158 .ndo_xdp_xmit = dpaa_xdp_xmit,
3159 .ndo_hwtstamp_get = dpaa_hwtstamp_get,
3160 .ndo_hwtstamp_set = dpaa_hwtstamp_set,
3161 };
3162
dpaa_napi_add(struct net_device * net_dev)3163 static int dpaa_napi_add(struct net_device *net_dev)
3164 {
3165 struct dpaa_priv *priv = netdev_priv(net_dev);
3166 struct dpaa_percpu_priv *percpu_priv;
3167 int cpu;
3168
3169 for_each_possible_cpu(cpu) {
3170 percpu_priv = per_cpu_ptr(priv->percpu_priv, cpu);
3171
3172 netif_napi_add(net_dev, &percpu_priv->np.napi, dpaa_eth_poll);
3173 }
3174
3175 return 0;
3176 }
3177
dpaa_napi_del(struct net_device * net_dev)3178 static void dpaa_napi_del(struct net_device *net_dev)
3179 {
3180 struct dpaa_priv *priv = netdev_priv(net_dev);
3181 struct dpaa_percpu_priv *percpu_priv;
3182 int cpu;
3183
3184 for_each_possible_cpu(cpu) {
3185 percpu_priv = per_cpu_ptr(priv->percpu_priv, cpu);
3186
3187 __netif_napi_del(&percpu_priv->np.napi);
3188 }
3189 synchronize_net();
3190 }
3191
dpaa_bp_free_pf(const struct dpaa_bp * bp,struct bm_buffer * bmb)3192 static inline void dpaa_bp_free_pf(const struct dpaa_bp *bp,
3193 struct bm_buffer *bmb)
3194 {
3195 dma_addr_t addr = bm_buf_addr(bmb);
3196
3197 dma_unmap_page(bp->priv->rx_dma_dev, addr, DPAA_BP_RAW_SIZE,
3198 DMA_FROM_DEVICE);
3199
3200 skb_free_frag(phys_to_virt(addr));
3201 }
3202
3203 /* Alloc the dpaa_bp struct and configure default values */
dpaa_bp_alloc(struct device * dev)3204 static struct dpaa_bp *dpaa_bp_alloc(struct device *dev)
3205 {
3206 struct dpaa_bp *dpaa_bp;
3207
3208 dpaa_bp = devm_kzalloc(dev, sizeof(*dpaa_bp), GFP_KERNEL);
3209 if (!dpaa_bp)
3210 return ERR_PTR(-ENOMEM);
3211
3212 dpaa_bp->bpid = FSL_DPAA_BPID_INV;
3213 dpaa_bp->percpu_count = devm_alloc_percpu(dev, *dpaa_bp->percpu_count);
3214 if (!dpaa_bp->percpu_count)
3215 return ERR_PTR(-ENOMEM);
3216
3217 dpaa_bp->config_count = FSL_DPAA_ETH_MAX_BUF_COUNT;
3218
3219 dpaa_bp->seed_cb = dpaa_bp_seed;
3220 dpaa_bp->free_buf_cb = dpaa_bp_free_pf;
3221
3222 return dpaa_bp;
3223 }
3224
3225 /* Place all ingress FQs (Rx Default, Rx Error) in a dedicated CGR.
3226 * We won't be sending congestion notifications to FMan; for now, we just use
3227 * this CGR to generate enqueue rejections to FMan in order to drop the frames
3228 * before they reach our ingress queues and eat up memory.
3229 */
dpaa_ingress_cgr_init(struct dpaa_priv * priv)3230 static int dpaa_ingress_cgr_init(struct dpaa_priv *priv)
3231 {
3232 struct qm_mcc_initcgr initcgr;
3233 u32 cs_th;
3234 int err;
3235
3236 err = qman_alloc_cgrid(&priv->ingress_cgr.cgrid);
3237 if (err < 0) {
3238 if (netif_msg_drv(priv))
3239 pr_err("Error %d allocating CGR ID\n", err);
3240 goto out_error;
3241 }
3242
3243 /* Enable CS TD, but disable Congestion State Change Notifications. */
3244 memset(&initcgr, 0, sizeof(initcgr));
3245 initcgr.we_mask = cpu_to_be16(QM_CGR_WE_CS_THRES);
3246 initcgr.cgr.cscn_en = QM_CGR_EN;
3247 cs_th = DPAA_INGRESS_CS_THRESHOLD;
3248 qm_cgr_cs_thres_set64(&initcgr.cgr.cs_thres, cs_th, 1);
3249
3250 initcgr.we_mask |= cpu_to_be16(QM_CGR_WE_CSTD_EN);
3251 initcgr.cgr.cstd_en = QM_CGR_EN;
3252
3253 /* This CGR will be associated with the SWP affined to the current CPU.
3254 * However, we'll place all our ingress FQs in it.
3255 */
3256 err = qman_create_cgr(&priv->ingress_cgr, QMAN_CGR_FLAG_USE_INIT,
3257 &initcgr);
3258 if (err < 0) {
3259 if (netif_msg_drv(priv))
3260 pr_err("Error %d creating ingress CGR with ID %d\n",
3261 err, priv->ingress_cgr.cgrid);
3262 qman_release_cgrid(priv->ingress_cgr.cgrid);
3263 goto out_error;
3264 }
3265 if (netif_msg_drv(priv))
3266 pr_debug("Created ingress CGR %d for netdev with hwaddr %pM\n",
3267 priv->ingress_cgr.cgrid, priv->mac_dev->addr);
3268
3269 priv->use_ingress_cgr = true;
3270
3271 out_error:
3272 return err;
3273 }
3274
dpaa_get_headroom(struct dpaa_buffer_layout * bl,enum port_type port)3275 static u16 dpaa_get_headroom(struct dpaa_buffer_layout *bl,
3276 enum port_type port)
3277 {
3278 u16 headroom;
3279
3280 /* The frame headroom must accommodate:
3281 * - the driver private data area
3282 * - parse results, hash results, timestamp if selected
3283 * If either hash results or time stamp are selected, both will
3284 * be copied to/from the frame headroom, as TS is located between PR and
3285 * HR in the IC and IC copy size has a granularity of 16bytes
3286 * (see description of FMBM_RICP and FMBM_TICP registers in DPAARM)
3287 *
3288 * Also make sure the headroom is a multiple of data_align bytes
3289 */
3290 headroom = (u16)(bl[port].priv_data_size + DPAA_HWA_SIZE);
3291
3292 if (port == RX) {
3293 #ifdef CONFIG_DPAA_ERRATUM_A050385
3294 if (unlikely(fman_has_errata_a050385()))
3295 headroom = XDP_PACKET_HEADROOM;
3296 #endif
3297
3298 return ALIGN(headroom, DPAA_FD_RX_DATA_ALIGNMENT);
3299 } else {
3300 return ALIGN(headroom, DPAA_FD_DATA_ALIGNMENT);
3301 }
3302 }
3303
dpaa_eth_probe(struct platform_device * pdev)3304 static int dpaa_eth_probe(struct platform_device *pdev)
3305 {
3306 struct net_device *net_dev = NULL;
3307 struct dpaa_bp *dpaa_bp = NULL;
3308 struct dpaa_fq *dpaa_fq, *tmp;
3309 struct dpaa_priv *priv = NULL;
3310 struct fm_port_fqs port_fqs;
3311 struct mac_device *mac_dev;
3312 int err = 0, channel;
3313 struct device *dev;
3314
3315 dev = &pdev->dev;
3316
3317 err = bman_is_probed();
3318 if (!err)
3319 return -EPROBE_DEFER;
3320 if (err < 0) {
3321 dev_err(dev, "failing probe due to bman probe error\n");
3322 return -ENODEV;
3323 }
3324 err = qman_is_probed();
3325 if (!err)
3326 return -EPROBE_DEFER;
3327 if (err < 0) {
3328 dev_err(dev, "failing probe due to qman probe error\n");
3329 return -ENODEV;
3330 }
3331 err = bman_portals_probed();
3332 if (!err)
3333 return -EPROBE_DEFER;
3334 if (err < 0) {
3335 dev_err(dev,
3336 "failing probe due to bman portals probe error\n");
3337 return -ENODEV;
3338 }
3339 err = qman_portals_probed();
3340 if (!err)
3341 return -EPROBE_DEFER;
3342 if (err < 0) {
3343 dev_err(dev,
3344 "failing probe due to qman portals probe error\n");
3345 return -ENODEV;
3346 }
3347
3348 /* Allocate this early, so we can store relevant information in
3349 * the private area
3350 */
3351 net_dev = alloc_etherdev_mq(sizeof(*priv), dpaa_max_num_txqs());
3352 if (!net_dev) {
3353 dev_err(dev, "alloc_etherdev_mq() failed\n");
3354 return -ENOMEM;
3355 }
3356
3357 /* Do this here, so we can be verbose early */
3358 SET_NETDEV_DEV(net_dev, dev->parent);
3359 dev_set_drvdata(dev, net_dev);
3360
3361 priv = netdev_priv(net_dev);
3362 priv->net_dev = net_dev;
3363
3364 priv->msg_enable = netif_msg_init(debug, DPAA_MSG_DEFAULT);
3365
3366 priv->egress_fqs = devm_kcalloc(dev, dpaa_max_num_txqs(),
3367 sizeof(*priv->egress_fqs),
3368 GFP_KERNEL);
3369 if (!priv->egress_fqs) {
3370 err = -ENOMEM;
3371 goto free_netdev;
3372 }
3373
3374 priv->conf_fqs = devm_kcalloc(dev, dpaa_max_num_txqs(),
3375 sizeof(*priv->conf_fqs),
3376 GFP_KERNEL);
3377 if (!priv->conf_fqs) {
3378 err = -ENOMEM;
3379 goto free_netdev;
3380 }
3381
3382 mac_dev = dpaa_mac_dev_get(pdev);
3383 if (IS_ERR(mac_dev)) {
3384 netdev_err(net_dev, "dpaa_mac_dev_get() failed\n");
3385 err = PTR_ERR(mac_dev);
3386 goto free_netdev;
3387 }
3388
3389 /* Devices used for DMA mapping */
3390 priv->rx_dma_dev = fman_port_get_device(mac_dev->port[RX]);
3391 priv->tx_dma_dev = fman_port_get_device(mac_dev->port[TX]);
3392 err = dma_coerce_mask_and_coherent(priv->rx_dma_dev, DMA_BIT_MASK(40));
3393 if (!err)
3394 err = dma_coerce_mask_and_coherent(priv->tx_dma_dev,
3395 DMA_BIT_MASK(40));
3396 if (err) {
3397 netdev_err(net_dev, "dma_coerce_mask_and_coherent() failed\n");
3398 goto free_netdev;
3399 }
3400
3401 /* If fsl_fm_max_frm is set to a higher value than the all-common 1500,
3402 * we choose conservatively and let the user explicitly set a higher
3403 * MTU via ifconfig. Otherwise, the user may end up with different MTUs
3404 * in the same LAN.
3405 * If on the other hand fsl_fm_max_frm has been chosen below 1500,
3406 * start with the maximum allowed.
3407 */
3408 net_dev->mtu = min(dpaa_get_max_mtu(), ETH_DATA_LEN);
3409
3410 netdev_dbg(net_dev, "Setting initial MTU on net device: %d\n",
3411 net_dev->mtu);
3412
3413 priv->buf_layout[RX].priv_data_size = DPAA_RX_PRIV_DATA_SIZE; /* Rx */
3414 priv->buf_layout[TX].priv_data_size = DPAA_TX_PRIV_DATA_SIZE; /* Tx */
3415
3416 /* bp init */
3417 dpaa_bp = dpaa_bp_alloc(dev);
3418 if (IS_ERR(dpaa_bp)) {
3419 err = PTR_ERR(dpaa_bp);
3420 goto free_dpaa_bps;
3421 }
3422 /* the raw size of the buffers used for reception */
3423 dpaa_bp->raw_size = DPAA_BP_RAW_SIZE;
3424 /* avoid runtime computations by keeping the usable size here */
3425 dpaa_bp->size = dpaa_bp_size(dpaa_bp->raw_size);
3426 dpaa_bp->priv = priv;
3427
3428 err = dpaa_bp_alloc_pool(dpaa_bp);
3429 if (err < 0)
3430 goto free_dpaa_bps;
3431 priv->dpaa_bp = dpaa_bp;
3432
3433 INIT_LIST_HEAD(&priv->dpaa_fq_list);
3434
3435 memset(&port_fqs, 0, sizeof(port_fqs));
3436
3437 err = dpaa_alloc_all_fqs(dev, &priv->dpaa_fq_list, &port_fqs);
3438 if (err < 0) {
3439 dev_err(dev, "dpaa_alloc_all_fqs() failed\n");
3440 goto free_dpaa_bps;
3441 }
3442
3443 priv->mac_dev = mac_dev;
3444
3445 channel = dpaa_get_channel();
3446 if (channel < 0) {
3447 dev_err(dev, "dpaa_get_channel() failed\n");
3448 err = channel;
3449 goto free_dpaa_bps;
3450 }
3451
3452 priv->channel = (u16)channel;
3453
3454 /* Walk the CPUs with affine portals
3455 * and add this pool channel to each's dequeue mask.
3456 */
3457 dpaa_eth_add_channel(priv->channel, &pdev->dev);
3458
3459 err = dpaa_fq_setup(priv, &dpaa_fq_cbs, priv->mac_dev->port[TX]);
3460 if (err)
3461 goto free_dpaa_bps;
3462
3463 /* Create a congestion group for this netdev, with
3464 * dynamically-allocated CGR ID.
3465 * Must be executed after probing the MAC, but before
3466 * assigning the egress FQs to the CGRs.
3467 */
3468 err = dpaa_eth_cgr_init(priv);
3469 if (err < 0) {
3470 dev_err(dev, "Error initializing CGR\n");
3471 goto free_dpaa_bps;
3472 }
3473
3474 err = dpaa_ingress_cgr_init(priv);
3475 if (err < 0) {
3476 dev_err(dev, "Error initializing ingress CGR\n");
3477 goto delete_egress_cgr;
3478 }
3479
3480 /* Add the FQs to the interface, and make them active */
3481 list_for_each_entry_safe(dpaa_fq, tmp, &priv->dpaa_fq_list, list) {
3482 err = dpaa_fq_init(dpaa_fq, false);
3483 if (err < 0)
3484 goto free_dpaa_fqs;
3485 }
3486
3487 priv->tx_headroom = dpaa_get_headroom(priv->buf_layout, TX);
3488 priv->rx_headroom = dpaa_get_headroom(priv->buf_layout, RX);
3489
3490 /* All real interfaces need their ports initialized */
3491 err = dpaa_eth_init_ports(mac_dev, dpaa_bp, &port_fqs,
3492 &priv->buf_layout[0], dev);
3493 if (err)
3494 goto free_dpaa_fqs;
3495
3496 /* Rx traffic distribution based on keygen hashing defaults to on */
3497 priv->keygen_in_use = true;
3498
3499 priv->percpu_priv = devm_alloc_percpu(dev, *priv->percpu_priv);
3500 if (!priv->percpu_priv) {
3501 dev_err(dev, "devm_alloc_percpu() failed\n");
3502 err = -ENOMEM;
3503 goto free_dpaa_fqs;
3504 }
3505
3506 priv->num_tc = 1;
3507 netif_set_real_num_tx_queues(net_dev,
3508 priv->num_tc * dpaa_num_txqs_per_tc());
3509
3510 /* Initialize NAPI */
3511 err = dpaa_napi_add(net_dev);
3512 if (err < 0)
3513 goto delete_dpaa_napi;
3514
3515 err = dpaa_netdev_init(net_dev, &dpaa_ops, tx_timeout);
3516 if (err < 0)
3517 goto delete_dpaa_napi;
3518
3519 dpaa_eth_sysfs_init(&net_dev->dev);
3520
3521 netif_info(priv, probe, net_dev, "Probed interface %s\n",
3522 net_dev->name);
3523
3524 return 0;
3525
3526 delete_dpaa_napi:
3527 dpaa_napi_del(net_dev);
3528 free_dpaa_fqs:
3529 dpaa_fq_free(dev, &priv->dpaa_fq_list);
3530 qman_delete_cgr_safe(&priv->ingress_cgr);
3531 qman_release_cgrid(priv->ingress_cgr.cgrid);
3532 delete_egress_cgr:
3533 qman_delete_cgr_safe(&priv->cgr_data.cgr);
3534 qman_release_cgrid(priv->cgr_data.cgr.cgrid);
3535 free_dpaa_bps:
3536 dpaa_bps_free(priv);
3537 free_netdev:
3538 dev_set_drvdata(dev, NULL);
3539 free_netdev(net_dev);
3540
3541 return err;
3542 }
3543
dpaa_remove(struct platform_device * pdev)3544 static void dpaa_remove(struct platform_device *pdev)
3545 {
3546 struct net_device *net_dev;
3547 struct dpaa_priv *priv;
3548 struct device *dev;
3549 int err;
3550
3551 dev = &pdev->dev;
3552 net_dev = dev_get_drvdata(dev);
3553
3554 priv = netdev_priv(net_dev);
3555
3556 dpaa_eth_sysfs_remove(dev);
3557
3558 dev_set_drvdata(dev, NULL);
3559 unregister_netdev(net_dev);
3560 phylink_destroy(priv->mac_dev->phylink);
3561
3562 err = dpaa_fq_free(dev, &priv->dpaa_fq_list);
3563 if (err)
3564 dev_err(dev, "Failed to free FQs on remove (%pE)\n",
3565 ERR_PTR(err));
3566
3567 qman_delete_cgr_safe(&priv->ingress_cgr);
3568 qman_release_cgrid(priv->ingress_cgr.cgrid);
3569 qman_delete_cgr_safe(&priv->cgr_data.cgr);
3570 qman_release_cgrid(priv->cgr_data.cgr.cgrid);
3571
3572 dpaa_napi_del(net_dev);
3573
3574 dpaa_bps_free(priv);
3575
3576 free_netdev(net_dev);
3577 }
3578
3579 static const struct platform_device_id dpaa_devtype[] = {
3580 {
3581 .name = "dpaa-ethernet",
3582 .driver_data = 0,
3583 }, {
3584 }
3585 };
3586 MODULE_DEVICE_TABLE(platform, dpaa_devtype);
3587
3588 static struct platform_driver dpaa_driver = {
3589 .driver = {
3590 .name = KBUILD_MODNAME,
3591 },
3592 .id_table = dpaa_devtype,
3593 .probe = dpaa_eth_probe,
3594 .remove = dpaa_remove
3595 };
3596
dpaa_load(void)3597 static int __init dpaa_load(void)
3598 {
3599 int err;
3600
3601 pr_debug("FSL DPAA Ethernet driver\n");
3602
3603 /* initialize dpaa_eth mirror values */
3604 dpaa_rx_extra_headroom = fman_get_rx_extra_headroom();
3605 dpaa_max_frm = fman_get_max_frm();
3606
3607 err = platform_driver_register(&dpaa_driver);
3608 if (err < 0)
3609 pr_err("Error, platform_driver_register() = %d\n", err);
3610
3611 return err;
3612 }
3613 module_init(dpaa_load);
3614
dpaa_unload(void)3615 static void __exit dpaa_unload(void)
3616 {
3617 platform_driver_unregister(&dpaa_driver);
3618
3619 /* Only one channel is used and needs to be released after all
3620 * interfaces are removed
3621 */
3622 dpaa_release_channel();
3623 }
3624 module_exit(dpaa_unload);
3625
3626 MODULE_LICENSE("Dual BSD/GPL");
3627 MODULE_DESCRIPTION("FSL DPAA Ethernet driver");
3628