aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2019-02-06 12:45:41 -0500
committerDavid S. Miller <davem@davemloft.net>2019-02-06 17:16:12 -0500
commita5084bb71fa4cc2a70a3a5775ccd0447dbcb32f3 (patch)
treec53f01d033e8676a1597f7dee1bdb84ab35297b6
parent751302c35ea0ae5aac9918e85199eb9f56a5afac (diff)
nfp: Implement ndo_get_port_parent_id()
NFP only supports SWITCHDEV_ATTR_ID_PORT_PARENT_ID, which makes it a great candidate to be converted to use the ndo_get_port_parent_id() NDO instead of implementing switchdev_port_attr_get(). Since NFP uses switchdev_port_same_parent_id() convert it to use netdev_port_same_parent_id(). Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/netronome/nfp/flower/action.c3
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_net_common.c4
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_net_repr.c4
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_port.c22
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_port.h4
5 files changed, 11 insertions, 26 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/flower/action.c b/drivers/net/ethernet/netronome/nfp/flower/action.c
index 6b1d56b021ac..583e97c99e68 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/action.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/action.c
@@ -3,7 +3,6 @@
3 3
4#include <linux/bitfield.h> 4#include <linux/bitfield.h>
5#include <net/pkt_cls.h> 5#include <net/pkt_cls.h>
6#include <net/switchdev.h>
7#include <net/tc_act/tc_csum.h> 6#include <net/tc_act/tc_csum.h>
8#include <net/tc_act/tc_gact.h> 7#include <net/tc_act/tc_gact.h>
9#include <net/tc_act/tc_mirred.h> 8#include <net/tc_act/tc_mirred.h>
@@ -138,7 +137,7 @@ nfp_fl_output(struct nfp_app *app, struct nfp_fl_output *output,
138 137
139 if (nfp_netdev_is_nfp_repr(in_dev)) { 138 if (nfp_netdev_is_nfp_repr(in_dev)) {
140 /* Confirm ingress and egress are on same device. */ 139 /* Confirm ingress and egress are on same device. */
141 if (!switchdev_port_same_parent_id(in_dev, out_dev)) 140 if (!netdev_port_same_parent_id(in_dev, out_dev))
142 return -EOPNOTSUPP; 141 return -EOPNOTSUPP;
143 } 142 }
144 143
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index 7d2d4241498f..776f6c07701b 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -36,7 +36,6 @@
36#include <linux/vmalloc.h> 36#include <linux/vmalloc.h>
37#include <linux/ktime.h> 37#include <linux/ktime.h>
38 38
39#include <net/switchdev.h>
40#include <net/vxlan.h> 39#include <net/vxlan.h>
41 40
42#include "nfpcore/nfp_nsp.h" 41#include "nfpcore/nfp_nsp.h"
@@ -3531,6 +3530,7 @@ const struct net_device_ops nfp_net_netdev_ops = {
3531 .ndo_udp_tunnel_add = nfp_net_add_vxlan_port, 3530 .ndo_udp_tunnel_add = nfp_net_add_vxlan_port,
3532 .ndo_udp_tunnel_del = nfp_net_del_vxlan_port, 3531 .ndo_udp_tunnel_del = nfp_net_del_vxlan_port,
3533 .ndo_bpf = nfp_net_xdp, 3532 .ndo_bpf = nfp_net_xdp,
3533 .ndo_get_port_parent_id = nfp_port_get_port_parent_id,
3534}; 3534};
3535 3535
3536/** 3536/**
@@ -3815,8 +3815,6 @@ static void nfp_net_netdev_init(struct nfp_net *nn)
3815 netdev->netdev_ops = &nfp_net_netdev_ops; 3815 netdev->netdev_ops = &nfp_net_netdev_ops;
3816 netdev->watchdog_timeo = msecs_to_jiffies(5 * 1000); 3816 netdev->watchdog_timeo = msecs_to_jiffies(5 * 1000);
3817 3817
3818 SWITCHDEV_SET_OPS(netdev, &nfp_port_switchdev_ops);
3819
3820 /* MTU range: 68 - hw-specific max */ 3818 /* MTU range: 68 - hw-specific max */
3821 netdev->min_mtu = ETH_MIN_MTU; 3819 netdev->min_mtu = ETH_MIN_MTU;
3822 netdev->max_mtu = nn->max_mtu; 3820 netdev->max_mtu = nn->max_mtu;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
index 69d7aebda09b..62839807e21e 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
@@ -5,7 +5,6 @@
5#include <linux/io-64-nonatomic-hi-lo.h> 5#include <linux/io-64-nonatomic-hi-lo.h>
6#include <linux/lockdep.h> 6#include <linux/lockdep.h>
7#include <net/dst_metadata.h> 7#include <net/dst_metadata.h>
8#include <net/switchdev.h>
9 8
10#include "nfpcore/nfp_cpp.h" 9#include "nfpcore/nfp_cpp.h"
11#include "nfpcore/nfp_nsp.h" 10#include "nfpcore/nfp_nsp.h"
@@ -273,6 +272,7 @@ const struct net_device_ops nfp_repr_netdev_ops = {
273 .ndo_fix_features = nfp_repr_fix_features, 272 .ndo_fix_features = nfp_repr_fix_features,
274 .ndo_set_features = nfp_port_set_features, 273 .ndo_set_features = nfp_port_set_features,
275 .ndo_set_mac_address = eth_mac_addr, 274 .ndo_set_mac_address = eth_mac_addr,
275 .ndo_get_port_parent_id = nfp_port_get_port_parent_id,
276}; 276};
277 277
278void 278void
@@ -336,8 +336,6 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
336 336
337 netdev->max_mtu = pf_netdev->max_mtu; 337 netdev->max_mtu = pf_netdev->max_mtu;
338 338
339 SWITCHDEV_SET_OPS(netdev, &nfp_port_switchdev_ops);
340
341 /* Set features the lower device can support with representors */ 339 /* Set features the lower device can support with representors */
342 if (repr_cap & NFP_NET_CFG_CTRL_LIVE_ADDR) 340 if (repr_cap & NFP_NET_CFG_CTRL_LIVE_ADDR)
343 netdev->priv_flags |= IFF_LIVE_ADDR_CHANGE; 341 netdev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_port.c b/drivers/net/ethernet/netronome/nfp/nfp_port.c
index 86bc149ca231..7e90880fa46b 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_port.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_port.c
@@ -31,34 +31,22 @@ struct nfp_port *nfp_port_from_netdev(struct net_device *netdev)
31 return NULL; 31 return NULL;
32} 32}
33 33
34static int 34int nfp_port_get_port_parent_id(struct net_device *netdev,
35nfp_port_attr_get(struct net_device *netdev, struct switchdev_attr *attr) 35 struct netdev_phys_item_id *ppid)
36{ 36{
37 struct nfp_port *port; 37 struct nfp_port *port;
38 const u8 *serial;
38 39
39 port = nfp_port_from_netdev(netdev); 40 port = nfp_port_from_netdev(netdev);
40 if (!port) 41 if (!port)
41 return -EOPNOTSUPP; 42 return -EOPNOTSUPP;
42 43
43 switch (attr->id) { 44 ppid->id_len = nfp_cpp_serial(port->app->cpp, &serial);
44 case SWITCHDEV_ATTR_ID_PORT_PARENT_ID: { 45 memcpy(&ppid->id, serial, ppid->id_len);
45 const u8 *serial;
46 /* N.B: attr->u.ppid.id is binary data */
47 attr->u.ppid.id_len = nfp_cpp_serial(port->app->cpp, &serial);
48 memcpy(&attr->u.ppid.id, serial, attr->u.ppid.id_len);
49 break;
50 }
51 default:
52 return -EOPNOTSUPP;
53 }
54 46
55 return 0; 47 return 0;
56} 48}
57 49
58const struct switchdev_ops nfp_port_switchdev_ops = {
59 .switchdev_port_attr_get = nfp_port_attr_get,
60};
61
62int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type, 50int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
63 void *type_data) 51 void *type_data)
64{ 52{
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_port.h b/drivers/net/ethernet/netronome/nfp/nfp_port.h
index b2479a2a49e5..90ae053f5c07 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_port.h
+++ b/drivers/net/ethernet/netronome/nfp/nfp_port.h
@@ -7,6 +7,7 @@
7#include <net/devlink.h> 7#include <net/devlink.h>
8 8
9struct net_device; 9struct net_device;
10struct netdev_phys_item_id;
10struct nfp_app; 11struct nfp_app;
11struct nfp_pf; 12struct nfp_pf;
12struct nfp_port; 13struct nfp_port;
@@ -90,7 +91,6 @@ struct nfp_port {
90}; 91};
91 92
92extern const struct ethtool_ops nfp_port_ethtool_ops; 93extern const struct ethtool_ops nfp_port_ethtool_ops;
93extern const struct switchdev_ops nfp_port_switchdev_ops;
94 94
95__printf(2, 3) u8 *nfp_pr_et(u8 *data, const char *fmt, ...); 95__printf(2, 3) u8 *nfp_pr_et(u8 *data, const char *fmt, ...);
96 96
@@ -106,6 +106,8 @@ int
106nfp_port_set_features(struct net_device *netdev, netdev_features_t features); 106nfp_port_set_features(struct net_device *netdev, netdev_features_t features);
107 107
108struct nfp_port *nfp_port_from_netdev(struct net_device *netdev); 108struct nfp_port *nfp_port_from_netdev(struct net_device *netdev);
109int nfp_port_get_port_parent_id(struct net_device *netdev,
110 struct netdev_phys_item_id *ppid);
109struct nfp_port * 111struct nfp_port *
110nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id); 112nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id);
111struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port); 113struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port);