nfp: Implement ndo_get_port_parent_id()
authorFlorian Fainelli <f.fainelli@gmail.com>
Wed, 6 Feb 2019 17:45:41 +0000 (09:45 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 6 Feb 2019 22:16:12 +0000 (14:16 -0800)
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>
drivers/net/ethernet/netronome/nfp/flower/action.c
drivers/net/ethernet/netronome/nfp/nfp_net_common.c
drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
drivers/net/ethernet/netronome/nfp/nfp_port.c
drivers/net/ethernet/netronome/nfp/nfp_port.h

index 6b1d56b021acaf426420ff48eab001d6fb41ebf7..583e97c99e6873ba961094f7cc952b6ed4e69058 100644 (file)
@@ -3,7 +3,6 @@
 
 #include <linux/bitfield.h>
 #include <net/pkt_cls.h>
-#include <net/switchdev.h>
 #include <net/tc_act/tc_csum.h>
 #include <net/tc_act/tc_gact.h>
 #include <net/tc_act/tc_mirred.h>
@@ -138,7 +137,7 @@ nfp_fl_output(struct nfp_app *app, struct nfp_fl_output *output,
 
                if (nfp_netdev_is_nfp_repr(in_dev)) {
                        /* 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;
                }
 
index 7d2d4241498f079641b3a561ee1b03424e9fc01f..776f6c07701b06b77ab39c0f06f6846f8111eb69 100644 (file)
@@ -36,7 +36,6 @@
 #include <linux/vmalloc.h>
 #include <linux/ktime.h>
 
-#include <net/switchdev.h>
 #include <net/vxlan.h>
 
 #include "nfpcore/nfp_nsp.h"
@@ -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_del     = nfp_net_del_vxlan_port,
        .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)
        netdev->netdev_ops = &nfp_net_netdev_ops;
        netdev->watchdog_timeo = msecs_to_jiffies(5 * 1000);
 
-       SWITCHDEV_SET_OPS(netdev, &nfp_port_switchdev_ops);
-
        /* MTU range: 68 - hw-specific max */
        netdev->min_mtu = ETH_MIN_MTU;
        netdev->max_mtu = nn->max_mtu;
index 69d7aebda09bd34aebc3563868c898d7a2228c4f..62839807e21ee723573273605ed43d9dea740a82 100644 (file)
@@ -5,7 +5,6 @@
 #include <linux/io-64-nonatomic-hi-lo.h>
 #include <linux/lockdep.h>
 #include <net/dst_metadata.h>
-#include <net/switchdev.h>
 
 #include "nfpcore/nfp_cpp.h"
 #include "nfpcore/nfp_nsp.h"
@@ -273,6 +272,7 @@ const struct net_device_ops nfp_repr_netdev_ops = {
        .ndo_fix_features       = nfp_repr_fix_features,
        .ndo_set_features       = nfp_port_set_features,
        .ndo_set_mac_address    = eth_mac_addr,
+       .ndo_get_port_parent_id = nfp_port_get_port_parent_id,
 };
 
 void
@@ -336,8 +336,6 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
 
        netdev->max_mtu = pf_netdev->max_mtu;
 
-       SWITCHDEV_SET_OPS(netdev, &nfp_port_switchdev_ops);
-
        /* Set features the lower device can support with representors */
        if (repr_cap & NFP_NET_CFG_CTRL_LIVE_ADDR)
                netdev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
index 86bc149ca231bfcf0350963d0ff2b93e9bdfaac6..7e90880fa46b96808fd4ea2878b4727cc81c1755 100644 (file)
@@ -31,34 +31,22 @@ struct nfp_port *nfp_port_from_netdev(struct net_device *netdev)
        return NULL;
 }
 
-static int
-nfp_port_attr_get(struct net_device *netdev, struct switchdev_attr *attr)
+int nfp_port_get_port_parent_id(struct net_device *netdev,
+                               struct netdev_phys_item_id *ppid)
 {
        struct nfp_port *port;
+       const u8 *serial;
 
        port = nfp_port_from_netdev(netdev);
        if (!port)
                return -EOPNOTSUPP;
 
-       switch (attr->id) {
-       case SWITCHDEV_ATTR_ID_PORT_PARENT_ID: {
-               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;
-       }
+       ppid->id_len = nfp_cpp_serial(port->app->cpp, &serial);
+       memcpy(&ppid->id, serial, ppid->id_len);
 
        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,
                      void *type_data)
 {
index b2479a2a49e568e0d90575b39a2424f883896a62..90ae053f5c07709140b2e34bc22d611c7fc21817 100644 (file)
@@ -7,6 +7,7 @@
 #include <net/devlink.h>
 
 struct net_device;
+struct netdev_phys_item_id;
 struct nfp_app;
 struct nfp_pf;
 struct nfp_port;
@@ -90,7 +91,6 @@ struct nfp_port {
 };
 
 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, ...);
 
@@ -106,6 +106,8 @@ int
 nfp_port_set_features(struct net_device *netdev, netdev_features_t features);
 
 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 *
 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);