Commit a5084bb7 authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

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: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 751302c3
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
#include <linux/bitfield.h> #include <linux/bitfield.h>
#include <net/pkt_cls.h> #include <net/pkt_cls.h>
#include <net/switchdev.h>
#include <net/tc_act/tc_csum.h> #include <net/tc_act/tc_csum.h>
#include <net/tc_act/tc_gact.h> #include <net/tc_act/tc_gact.h>
#include <net/tc_act/tc_mirred.h> #include <net/tc_act/tc_mirred.h>
...@@ -138,7 +137,7 @@ nfp_fl_output(struct nfp_app *app, struct nfp_fl_output *output, ...@@ -138,7 +137,7 @@ nfp_fl_output(struct nfp_app *app, struct nfp_fl_output *output,
if (nfp_netdev_is_nfp_repr(in_dev)) { if (nfp_netdev_is_nfp_repr(in_dev)) {
/* Confirm ingress and egress are on same device. */ /* Confirm ingress and egress are on same device. */
if (!switchdev_port_same_parent_id(in_dev, out_dev)) if (!netdev_port_same_parent_id(in_dev, out_dev))
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
......
...@@ -36,7 +36,6 @@ ...@@ -36,7 +36,6 @@
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/ktime.h> #include <linux/ktime.h>
#include <net/switchdev.h>
#include <net/vxlan.h> #include <net/vxlan.h>
#include "nfpcore/nfp_nsp.h" #include "nfpcore/nfp_nsp.h"
...@@ -3531,6 +3530,7 @@ const struct net_device_ops nfp_net_netdev_ops = { ...@@ -3531,6 +3530,7 @@ const struct net_device_ops nfp_net_netdev_ops = {
.ndo_udp_tunnel_add = nfp_net_add_vxlan_port, .ndo_udp_tunnel_add = nfp_net_add_vxlan_port,
.ndo_udp_tunnel_del = nfp_net_del_vxlan_port, .ndo_udp_tunnel_del = nfp_net_del_vxlan_port,
.ndo_bpf = nfp_net_xdp, .ndo_bpf = nfp_net_xdp,
.ndo_get_port_parent_id = nfp_port_get_port_parent_id,
}; };
/** /**
...@@ -3815,8 +3815,6 @@ static void nfp_net_netdev_init(struct nfp_net *nn) ...@@ -3815,8 +3815,6 @@ static void nfp_net_netdev_init(struct nfp_net *nn)
netdev->netdev_ops = &nfp_net_netdev_ops; netdev->netdev_ops = &nfp_net_netdev_ops;
netdev->watchdog_timeo = msecs_to_jiffies(5 * 1000); netdev->watchdog_timeo = msecs_to_jiffies(5 * 1000);
SWITCHDEV_SET_OPS(netdev, &nfp_port_switchdev_ops);
/* MTU range: 68 - hw-specific max */ /* MTU range: 68 - hw-specific max */
netdev->min_mtu = ETH_MIN_MTU; netdev->min_mtu = ETH_MIN_MTU;
netdev->max_mtu = nn->max_mtu; netdev->max_mtu = nn->max_mtu;
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include <linux/io-64-nonatomic-hi-lo.h> #include <linux/io-64-nonatomic-hi-lo.h>
#include <linux/lockdep.h> #include <linux/lockdep.h>
#include <net/dst_metadata.h> #include <net/dst_metadata.h>
#include <net/switchdev.h>
#include "nfpcore/nfp_cpp.h" #include "nfpcore/nfp_cpp.h"
#include "nfpcore/nfp_nsp.h" #include "nfpcore/nfp_nsp.h"
...@@ -273,6 +272,7 @@ const struct net_device_ops nfp_repr_netdev_ops = { ...@@ -273,6 +272,7 @@ const struct net_device_ops nfp_repr_netdev_ops = {
.ndo_fix_features = nfp_repr_fix_features, .ndo_fix_features = nfp_repr_fix_features,
.ndo_set_features = nfp_port_set_features, .ndo_set_features = nfp_port_set_features,
.ndo_set_mac_address = eth_mac_addr, .ndo_set_mac_address = eth_mac_addr,
.ndo_get_port_parent_id = nfp_port_get_port_parent_id,
}; };
void void
...@@ -336,8 +336,6 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev, ...@@ -336,8 +336,6 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
netdev->max_mtu = pf_netdev->max_mtu; netdev->max_mtu = pf_netdev->max_mtu;
SWITCHDEV_SET_OPS(netdev, &nfp_port_switchdev_ops);
/* Set features the lower device can support with representors */ /* Set features the lower device can support with representors */
if (repr_cap & NFP_NET_CFG_CTRL_LIVE_ADDR) if (repr_cap & NFP_NET_CFG_CTRL_LIVE_ADDR)
netdev->priv_flags |= IFF_LIVE_ADDR_CHANGE; netdev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
......
...@@ -31,34 +31,22 @@ struct nfp_port *nfp_port_from_netdev(struct net_device *netdev) ...@@ -31,34 +31,22 @@ struct nfp_port *nfp_port_from_netdev(struct net_device *netdev)
return NULL; return NULL;
} }
static int int nfp_port_get_port_parent_id(struct net_device *netdev,
nfp_port_attr_get(struct net_device *netdev, struct switchdev_attr *attr) struct netdev_phys_item_id *ppid)
{ {
struct nfp_port *port; struct nfp_port *port;
const u8 *serial;
port = nfp_port_from_netdev(netdev); port = nfp_port_from_netdev(netdev);
if (!port) if (!port)
return -EOPNOTSUPP; return -EOPNOTSUPP;
switch (attr->id) { ppid->id_len = nfp_cpp_serial(port->app->cpp, &serial);
case SWITCHDEV_ATTR_ID_PORT_PARENT_ID: { memcpy(&ppid->id, serial, ppid->id_len);
const u8 *serial;
/* N.B: attr->u.ppid.id is binary data */
attr->u.ppid.id_len = nfp_cpp_serial(port->app->cpp, &serial);
memcpy(&attr->u.ppid.id, serial, attr->u.ppid.id_len);
break;
}
default:
return -EOPNOTSUPP;
}
return 0; return 0;
} }
const struct switchdev_ops nfp_port_switchdev_ops = {
.switchdev_port_attr_get = nfp_port_attr_get,
};
int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type, int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
void *type_data) void *type_data)
{ {
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <net/devlink.h> #include <net/devlink.h>
struct net_device; struct net_device;
struct netdev_phys_item_id;
struct nfp_app; struct nfp_app;
struct nfp_pf; struct nfp_pf;
struct nfp_port; struct nfp_port;
...@@ -90,7 +91,6 @@ struct nfp_port { ...@@ -90,7 +91,6 @@ struct nfp_port {
}; };
extern const struct ethtool_ops nfp_port_ethtool_ops; extern const struct ethtool_ops nfp_port_ethtool_ops;
extern const struct switchdev_ops nfp_port_switchdev_ops;
__printf(2, 3) u8 *nfp_pr_et(u8 *data, const char *fmt, ...); __printf(2, 3) u8 *nfp_pr_et(u8 *data, const char *fmt, ...);
...@@ -106,6 +106,8 @@ int ...@@ -106,6 +106,8 @@ int
nfp_port_set_features(struct net_device *netdev, netdev_features_t features); nfp_port_set_features(struct net_device *netdev, netdev_features_t features);
struct nfp_port *nfp_port_from_netdev(struct net_device *netdev); struct nfp_port *nfp_port_from_netdev(struct net_device *netdev);
int nfp_port_get_port_parent_id(struct net_device *netdev,
struct netdev_phys_item_id *ppid);
struct nfp_port * struct nfp_port *
nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id); nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id);
struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port); struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment