Merge tag 'trace-v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux...
[linux-block.git] / drivers / net / ethernet / sfc / ef100_rep.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /****************************************************************************
3  * Driver for Solarflare network controllers and boards
4  * Copyright 2019 Solarflare Communications Inc.
5  * Copyright 2020-2022 Xilinx Inc.
6  *
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License version 2 as published
9  * by the Free Software Foundation, incorporated herein by reference.
10  */
11
12 #include <linux/rhashtable.h>
13 #include "ef100_rep.h"
14 #include "ef100_netdev.h"
15 #include "ef100_nic.h"
16 #include "mae.h"
17 #include "rx_common.h"
18 #include "tc_bindings.h"
19 #include "efx_devlink.h"
20
21 #define EFX_EF100_REP_DRIVER    "efx_ef100_rep"
22
23 #define EFX_REP_DEFAULT_PSEUDO_RING_SIZE        64
24
25 static int efx_ef100_rep_poll(struct napi_struct *napi, int weight);
26
27 static int efx_ef100_rep_init_struct(struct efx_nic *efx, struct efx_rep *efv,
28                                      unsigned int i)
29 {
30         efv->parent = efx;
31         efv->idx = i;
32         INIT_LIST_HEAD(&efv->list);
33         efv->dflt.fw_id = MC_CMD_MAE_ACTION_RULE_INSERT_OUT_ACTION_RULE_ID_NULL;
34         INIT_LIST_HEAD(&efv->dflt.acts.list);
35         INIT_LIST_HEAD(&efv->rx_list);
36         spin_lock_init(&efv->rx_lock);
37         efv->msg_enable = NETIF_MSG_DRV | NETIF_MSG_PROBE |
38                           NETIF_MSG_LINK | NETIF_MSG_IFDOWN |
39                           NETIF_MSG_IFUP | NETIF_MSG_RX_ERR |
40                           NETIF_MSG_TX_ERR | NETIF_MSG_HW;
41         return 0;
42 }
43
44 static int efx_ef100_rep_open(struct net_device *net_dev)
45 {
46         struct efx_rep *efv = netdev_priv(net_dev);
47
48         netif_napi_add(net_dev, &efv->napi, efx_ef100_rep_poll);
49         napi_enable(&efv->napi);
50         return 0;
51 }
52
53 static int efx_ef100_rep_close(struct net_device *net_dev)
54 {
55         struct efx_rep *efv = netdev_priv(net_dev);
56
57         napi_disable(&efv->napi);
58         netif_napi_del(&efv->napi);
59         return 0;
60 }
61
62 static netdev_tx_t efx_ef100_rep_xmit(struct sk_buff *skb,
63                                       struct net_device *dev)
64 {
65         struct efx_rep *efv = netdev_priv(dev);
66         struct efx_nic *efx = efv->parent;
67         netdev_tx_t rc;
68
69         /* __ef100_hard_start_xmit() will always return success even in the
70          * case of TX drops, where it will increment efx's tx_dropped.  The
71          * efv stats really only count attempted TX, not success/failure.
72          */
73         atomic64_inc(&efv->stats.tx_packets);
74         atomic64_add(skb->len, &efv->stats.tx_bytes);
75         netif_tx_lock(efx->net_dev);
76         rc = __ef100_hard_start_xmit(skb, efx, dev, efv);
77         netif_tx_unlock(efx->net_dev);
78         return rc;
79 }
80
81 static int efx_ef100_rep_get_port_parent_id(struct net_device *dev,
82                                             struct netdev_phys_item_id *ppid)
83 {
84         struct efx_rep *efv = netdev_priv(dev);
85         struct efx_nic *efx = efv->parent;
86         struct ef100_nic_data *nic_data;
87
88         nic_data = efx->nic_data;
89         /* nic_data->port_id is a u8[] */
90         ppid->id_len = sizeof(nic_data->port_id);
91         memcpy(ppid->id, nic_data->port_id, sizeof(nic_data->port_id));
92         return 0;
93 }
94
95 static int efx_ef100_rep_get_phys_port_name(struct net_device *dev,
96                                             char *buf, size_t len)
97 {
98         struct efx_rep *efv = netdev_priv(dev);
99         struct efx_nic *efx = efv->parent;
100         struct ef100_nic_data *nic_data;
101         int ret;
102
103         nic_data = efx->nic_data;
104         ret = snprintf(buf, len, "p%upf%uvf%u", efx->port_num,
105                        nic_data->pf_index, efv->idx);
106         if (ret >= len)
107                 return -EOPNOTSUPP;
108
109         return 0;
110 }
111
112 static int efx_ef100_rep_setup_tc(struct net_device *net_dev,
113                                   enum tc_setup_type type, void *type_data)
114 {
115         struct efx_rep *efv = netdev_priv(net_dev);
116         struct efx_nic *efx = efv->parent;
117
118         if (type == TC_SETUP_CLSFLOWER)
119                 return efx_tc_flower(efx, net_dev, type_data, efv);
120         if (type == TC_SETUP_BLOCK)
121                 return efx_tc_setup_block(net_dev, efx, type_data, efv);
122
123         return -EOPNOTSUPP;
124 }
125
126 static void efx_ef100_rep_get_stats64(struct net_device *dev,
127                                       struct rtnl_link_stats64 *stats)
128 {
129         struct efx_rep *efv = netdev_priv(dev);
130
131         stats->rx_packets = atomic64_read(&efv->stats.rx_packets);
132         stats->tx_packets = atomic64_read(&efv->stats.tx_packets);
133         stats->rx_bytes = atomic64_read(&efv->stats.rx_bytes);
134         stats->tx_bytes = atomic64_read(&efv->stats.tx_bytes);
135         stats->rx_dropped = atomic64_read(&efv->stats.rx_dropped);
136         stats->tx_errors = atomic64_read(&efv->stats.tx_errors);
137 }
138
139 const struct net_device_ops efx_ef100_rep_netdev_ops = {
140         .ndo_open               = efx_ef100_rep_open,
141         .ndo_stop               = efx_ef100_rep_close,
142         .ndo_start_xmit         = efx_ef100_rep_xmit,
143         .ndo_get_port_parent_id = efx_ef100_rep_get_port_parent_id,
144         .ndo_get_phys_port_name = efx_ef100_rep_get_phys_port_name,
145         .ndo_get_stats64        = efx_ef100_rep_get_stats64,
146         .ndo_setup_tc           = efx_ef100_rep_setup_tc,
147 };
148
149 static void efx_ef100_rep_get_drvinfo(struct net_device *dev,
150                                       struct ethtool_drvinfo *drvinfo)
151 {
152         strscpy(drvinfo->driver, EFX_EF100_REP_DRIVER, sizeof(drvinfo->driver));
153 }
154
155 static u32 efx_ef100_rep_ethtool_get_msglevel(struct net_device *net_dev)
156 {
157         struct efx_rep *efv = netdev_priv(net_dev);
158
159         return efv->msg_enable;
160 }
161
162 static void efx_ef100_rep_ethtool_set_msglevel(struct net_device *net_dev,
163                                                u32 msg_enable)
164 {
165         struct efx_rep *efv = netdev_priv(net_dev);
166
167         efv->msg_enable = msg_enable;
168 }
169
170 static void efx_ef100_rep_ethtool_get_ringparam(struct net_device *net_dev,
171                                                 struct ethtool_ringparam *ring,
172                                                 struct kernel_ethtool_ringparam *kring,
173                                                 struct netlink_ext_ack *ext_ack)
174 {
175         struct efx_rep *efv = netdev_priv(net_dev);
176
177         ring->rx_max_pending = U32_MAX;
178         ring->rx_pending = efv->rx_pring_size;
179 }
180
181 static int efx_ef100_rep_ethtool_set_ringparam(struct net_device *net_dev,
182                                                struct ethtool_ringparam *ring,
183                                                struct kernel_ethtool_ringparam *kring,
184                                                struct netlink_ext_ack *ext_ack)
185 {
186         struct efx_rep *efv = netdev_priv(net_dev);
187
188         if (ring->rx_mini_pending || ring->rx_jumbo_pending || ring->tx_pending)
189                 return -EINVAL;
190
191         efv->rx_pring_size = ring->rx_pending;
192         return 0;
193 }
194
195 static const struct ethtool_ops efx_ef100_rep_ethtool_ops = {
196         .get_drvinfo            = efx_ef100_rep_get_drvinfo,
197         .get_msglevel           = efx_ef100_rep_ethtool_get_msglevel,
198         .set_msglevel           = efx_ef100_rep_ethtool_set_msglevel,
199         .get_ringparam          = efx_ef100_rep_ethtool_get_ringparam,
200         .set_ringparam          = efx_ef100_rep_ethtool_set_ringparam,
201 };
202
203 static struct efx_rep *efx_ef100_rep_create_netdev(struct efx_nic *efx,
204                                                    unsigned int i)
205 {
206         struct net_device *net_dev;
207         struct efx_rep *efv;
208         int rc;
209
210         net_dev = alloc_etherdev_mq(sizeof(*efv), 1);
211         if (!net_dev)
212                 return ERR_PTR(-ENOMEM);
213
214         efv = netdev_priv(net_dev);
215         rc = efx_ef100_rep_init_struct(efx, efv, i);
216         if (rc)
217                 goto fail1;
218         efv->net_dev = net_dev;
219         rtnl_lock();
220         spin_lock_bh(&efx->vf_reps_lock);
221         list_add_tail(&efv->list, &efx->vf_reps);
222         spin_unlock_bh(&efx->vf_reps_lock);
223         if (netif_running(efx->net_dev) && efx->state == STATE_NET_UP) {
224                 netif_device_attach(net_dev);
225                 netif_carrier_on(net_dev);
226         } else {
227                 netif_carrier_off(net_dev);
228                 netif_tx_stop_all_queues(net_dev);
229         }
230         rtnl_unlock();
231
232         net_dev->netdev_ops = &efx_ef100_rep_netdev_ops;
233         net_dev->ethtool_ops = &efx_ef100_rep_ethtool_ops;
234         net_dev->min_mtu = EFX_MIN_MTU;
235         net_dev->max_mtu = EFX_MAX_MTU;
236         net_dev->features |= NETIF_F_LLTX;
237         net_dev->hw_features |= NETIF_F_LLTX;
238         return efv;
239 fail1:
240         free_netdev(net_dev);
241         return ERR_PTR(rc);
242 }
243
244 static int efx_ef100_configure_rep(struct efx_rep *efv)
245 {
246         struct efx_nic *efx = efv->parent;
247         int rc;
248
249         efv->rx_pring_size = EFX_REP_DEFAULT_PSEUDO_RING_SIZE;
250         /* Look up actual mport ID */
251         rc = efx_mae_lookup_mport(efx, efv->idx, &efv->mport);
252         if (rc)
253                 return rc;
254         pci_dbg(efx->pci_dev, "VF %u has mport ID %#x\n", efv->idx, efv->mport);
255         /* mport label should fit in 16 bits */
256         WARN_ON(efv->mport >> 16);
257
258         return efx_tc_configure_default_rule_rep(efv);
259 }
260
261 static void efx_ef100_deconfigure_rep(struct efx_rep *efv)
262 {
263         struct efx_nic *efx = efv->parent;
264
265         efx_tc_deconfigure_default_rule(efx, &efv->dflt);
266 }
267
268 static void efx_ef100_rep_destroy_netdev(struct efx_rep *efv)
269 {
270         struct efx_nic *efx = efv->parent;
271
272         rtnl_lock();
273         spin_lock_bh(&efx->vf_reps_lock);
274         list_del(&efv->list);
275         spin_unlock_bh(&efx->vf_reps_lock);
276         rtnl_unlock();
277         synchronize_rcu();
278         free_netdev(efv->net_dev);
279 }
280
281 int efx_ef100_vfrep_create(struct efx_nic *efx, unsigned int i)
282 {
283         struct efx_rep *efv;
284         int rc;
285
286         efv = efx_ef100_rep_create_netdev(efx, i);
287         if (IS_ERR(efv)) {
288                 rc = PTR_ERR(efv);
289                 pci_err(efx->pci_dev,
290                         "Failed to create representor for VF %d, rc %d\n", i,
291                         rc);
292                 return rc;
293         }
294         rc = efx_ef100_configure_rep(efv);
295         if (rc) {
296                 pci_err(efx->pci_dev,
297                         "Failed to configure representor for VF %d, rc %d\n",
298                         i, rc);
299                 goto fail1;
300         }
301         ef100_rep_set_devlink_port(efv);
302         rc = register_netdev(efv->net_dev);
303         if (rc) {
304                 pci_err(efx->pci_dev,
305                         "Failed to register representor for VF %d, rc %d\n",
306                         i, rc);
307                 goto fail2;
308         }
309         pci_dbg(efx->pci_dev, "Representor for VF %d is %s\n", i,
310                 efv->net_dev->name);
311         return 0;
312 fail2:
313         ef100_rep_unset_devlink_port(efv);
314         efx_ef100_deconfigure_rep(efv);
315 fail1:
316         efx_ef100_rep_destroy_netdev(efv);
317         return rc;
318 }
319
320 void efx_ef100_vfrep_destroy(struct efx_nic *efx, struct efx_rep *efv)
321 {
322         struct net_device *rep_dev;
323
324         rep_dev = efv->net_dev;
325         if (!rep_dev)
326                 return;
327         netif_dbg(efx, drv, rep_dev, "Removing VF representor\n");
328         unregister_netdev(rep_dev);
329         ef100_rep_unset_devlink_port(efv);
330         efx_ef100_deconfigure_rep(efv);
331         efx_ef100_rep_destroy_netdev(efv);
332 }
333
334 void efx_ef100_fini_vfreps(struct efx_nic *efx)
335 {
336         struct ef100_nic_data *nic_data = efx->nic_data;
337         struct efx_rep *efv, *next;
338
339         if (!nic_data->grp_mae)
340                 return;
341
342         list_for_each_entry_safe(efv, next, &efx->vf_reps, list)
343                 efx_ef100_vfrep_destroy(efx, efv);
344 }
345
346 static bool ef100_mport_is_pcie_vnic(struct mae_mport_desc *mport_desc)
347 {
348         return mport_desc->mport_type == MAE_MPORT_DESC_MPORT_TYPE_VNIC &&
349                mport_desc->vnic_client_type == MAE_MPORT_DESC_VNIC_CLIENT_TYPE_FUNCTION;
350 }
351
352 bool ef100_mport_on_local_intf(struct efx_nic *efx,
353                                struct mae_mport_desc *mport_desc)
354 {
355         struct ef100_nic_data *nic_data = efx->nic_data;
356         bool pcie_func;
357
358         pcie_func = ef100_mport_is_pcie_vnic(mport_desc);
359
360         return nic_data->have_local_intf && pcie_func &&
361                      mport_desc->interface_idx == nic_data->local_mae_intf;
362 }
363
364 bool ef100_mport_is_vf(struct mae_mport_desc *mport_desc)
365 {
366         bool pcie_func;
367
368         pcie_func = ef100_mport_is_pcie_vnic(mport_desc);
369         return pcie_func && (mport_desc->vf_idx != MAE_MPORT_DESC_VF_IDX_NULL);
370 }
371
372 void efx_ef100_init_reps(struct efx_nic *efx)
373 {
374         struct ef100_nic_data *nic_data = efx->nic_data;
375         int rc;
376
377         nic_data->have_local_intf = false;
378         rc = efx_mae_enumerate_mports(efx);
379         if (rc)
380                 pci_warn(efx->pci_dev,
381                          "Could not enumerate mports (rc=%d), are we admin?",
382                          rc);
383 }
384
385 void efx_ef100_fini_reps(struct efx_nic *efx)
386 {
387         struct efx_mae *mae = efx->mae;
388
389         rhashtable_free_and_destroy(&mae->mports_ht, efx_mae_remove_mport,
390                                     NULL);
391 }
392
393 static int efx_ef100_rep_poll(struct napi_struct *napi, int weight)
394 {
395         struct efx_rep *efv = container_of(napi, struct efx_rep, napi);
396         unsigned int read_index;
397         struct list_head head;
398         struct sk_buff *skb;
399         bool need_resched;
400         int spent = 0;
401
402         INIT_LIST_HEAD(&head);
403         /* Grab up to 'weight' pending SKBs */
404         spin_lock_bh(&efv->rx_lock);
405         read_index = efv->write_index;
406         while (spent < weight && !list_empty(&efv->rx_list)) {
407                 skb = list_first_entry(&efv->rx_list, struct sk_buff, list);
408                 list_del(&skb->list);
409                 list_add_tail(&skb->list, &head);
410                 spent++;
411         }
412         spin_unlock_bh(&efv->rx_lock);
413         /* Receive them */
414         netif_receive_skb_list(&head);
415         if (spent < weight)
416                 if (napi_complete_done(napi, spent)) {
417                         spin_lock_bh(&efv->rx_lock);
418                         efv->read_index = read_index;
419                         /* If write_index advanced while we were doing the
420                          * RX, then storing our read_index won't re-prime the
421                          * fake-interrupt.  In that case, we need to schedule
422                          * NAPI again to consume the additional packet(s).
423                          */
424                         need_resched = efv->write_index != read_index;
425                         spin_unlock_bh(&efv->rx_lock);
426                         if (need_resched)
427                                 napi_schedule(&efv->napi);
428                 }
429         return spent;
430 }
431
432 void efx_ef100_rep_rx_packet(struct efx_rep *efv, struct efx_rx_buffer *rx_buf)
433 {
434         u8 *eh = efx_rx_buf_va(rx_buf);
435         struct sk_buff *skb;
436         bool primed;
437
438         /* Don't allow too many queued SKBs to build up, as they consume
439          * GFP_ATOMIC memory.  If we overrun, just start dropping.
440          */
441         if (efv->write_index - READ_ONCE(efv->read_index) > efv->rx_pring_size) {
442                 atomic64_inc(&efv->stats.rx_dropped);
443                 if (net_ratelimit())
444                         netif_dbg(efv->parent, rx_err, efv->net_dev,
445                                   "nodesc-dropped packet of length %u\n",
446                                   rx_buf->len);
447                 return;
448         }
449
450         skb = netdev_alloc_skb(efv->net_dev, rx_buf->len);
451         if (!skb) {
452                 atomic64_inc(&efv->stats.rx_dropped);
453                 if (net_ratelimit())
454                         netif_dbg(efv->parent, rx_err, efv->net_dev,
455                                   "noskb-dropped packet of length %u\n",
456                                   rx_buf->len);
457                 return;
458         }
459         memcpy(skb->data, eh, rx_buf->len);
460         __skb_put(skb, rx_buf->len);
461
462         skb_record_rx_queue(skb, 0); /* rep is single-queue */
463
464         /* Move past the ethernet header */
465         skb->protocol = eth_type_trans(skb, efv->net_dev);
466
467         skb_checksum_none_assert(skb);
468
469         atomic64_inc(&efv->stats.rx_packets);
470         atomic64_add(rx_buf->len, &efv->stats.rx_bytes);
471
472         /* Add it to the rx list */
473         spin_lock_bh(&efv->rx_lock);
474         primed = efv->read_index == efv->write_index;
475         list_add_tail(&skb->list, &efv->rx_list);
476         efv->write_index++;
477         spin_unlock_bh(&efv->rx_lock);
478         /* Trigger rx work */
479         if (primed)
480                 napi_schedule(&efv->napi);
481 }
482
483 struct efx_rep *efx_ef100_find_rep_by_mport(struct efx_nic *efx, u16 mport)
484 {
485         struct efx_rep *efv, *out = NULL;
486
487         /* spinlock guards against list mutation while we're walking it;
488          * but caller must also hold rcu_read_lock() to ensure the netdev
489          * isn't freed after we drop the spinlock.
490          */
491         spin_lock_bh(&efx->vf_reps_lock);
492         list_for_each_entry(efv, &efx->vf_reps, list)
493                 if (efv->mport == mport) {
494                         out = efv;
495                         break;
496                 }
497         spin_unlock_bh(&efx->vf_reps_lock);
498         return out;
499 }