diff options
author | Florian Fainelli <f.fainelli@gmail.com> | 2019-02-06 12:45:41 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-02-06 17:16:12 -0500 |
commit | a5084bb71fa4cc2a70a3a5775ccd0447dbcb32f3 (patch) | |
tree | c53f01d033e8676a1597f7dee1bdb84ab35297b6 | |
parent | 751302c35ea0ae5aac9918e85199eb9f56a5afac (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.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_net_repr.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_port.c | 22 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_port.h | 4 |
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 | ||
278 | void | 278 | void |
@@ -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 | ||
34 | static int | 34 | int nfp_port_get_port_parent_id(struct net_device *netdev, |
35 | nfp_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 | ||
58 | const struct switchdev_ops nfp_port_switchdev_ops = { | ||
59 | .switchdev_port_attr_get = nfp_port_attr_get, | ||
60 | }; | ||
61 | |||
62 | int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type, | 50 | int 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 | ||
9 | struct net_device; | 9 | struct net_device; |
10 | struct netdev_phys_item_id; | ||
10 | struct nfp_app; | 11 | struct nfp_app; |
11 | struct nfp_pf; | 12 | struct nfp_pf; |
12 | struct nfp_port; | 13 | struct nfp_port; |
@@ -90,7 +91,6 @@ struct nfp_port { | |||
90 | }; | 91 | }; |
91 | 92 | ||
92 | extern const struct ethtool_ops nfp_port_ethtool_ops; | 93 | extern const struct ethtool_ops nfp_port_ethtool_ops; |
93 | extern 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 | |||
106 | nfp_port_set_features(struct net_device *netdev, netdev_features_t features); | 106 | nfp_port_set_features(struct net_device *netdev, netdev_features_t features); |
107 | 107 | ||
108 | struct nfp_port *nfp_port_from_netdev(struct net_device *netdev); | 108 | struct nfp_port *nfp_port_from_netdev(struct net_device *netdev); |
109 | int nfp_port_get_port_parent_id(struct net_device *netdev, | ||
110 | struct netdev_phys_item_id *ppid); | ||
109 | struct nfp_port * | 111 | struct nfp_port * |
110 | nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id); | 112 | nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id); |
111 | struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port); | 113 | struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port); |