]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
nfp: flower: check for/turn on LAG support in firmware
authorJohn Hurley <john.hurley@netronome.com>
Thu, 24 May 2018 02:22:50 +0000 (19:22 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 May 2018 03:10:56 +0000 (23:10 -0400)
Check if the fw contains the _abi_flower_balance_sync_enable symbol. If it
does then write a 1 to this indicating that the driver is willing to
receive NIC to kernel LAG related control messages.

If the write is successful, update the list of extra features supported by
the fw and add a stub to accept LAG cmsgs.

Signed-off-by: John Hurley <john.hurley@netronome.com>
Reviewed-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/flower/cmsg.c
drivers/net/ethernet/netronome/nfp/flower/cmsg.h
drivers/net/ethernet/netronome/nfp/flower/main.c
drivers/net/ethernet/netronome/nfp/flower/main.h

index 577659f332e41e9b36befa3188d1644193466578..03aae2ed99836cc7848271bf1cde79a15274b89d 100644 (file)
@@ -239,6 +239,7 @@ nfp_flower_cmsg_portreify_rx(struct nfp_app *app, struct sk_buff *skb)
 static void
 nfp_flower_cmsg_process_one_rx(struct nfp_app *app, struct sk_buff *skb)
 {
+       struct nfp_flower_priv *app_priv = app->priv;
        struct nfp_flower_cmsg_hdr *cmsg_hdr;
        enum nfp_flower_cmsg_type_port type;
 
@@ -258,6 +259,10 @@ nfp_flower_cmsg_process_one_rx(struct nfp_app *app, struct sk_buff *skb)
        case NFP_FLOWER_CMSG_TYPE_ACTIVE_TUNS:
                nfp_tunnel_keep_alive(app, skb);
                break;
+       case NFP_FLOWER_CMSG_TYPE_LAG_CONFIG:
+               if (app_priv->flower_ext_feats & NFP_FL_FEATS_LAG)
+                       break;
+               /* fall through */
        default:
                nfp_flower_cmsg_warn(app, "Cannot handle invalid repr control type %u\n",
                                     type);
index bee4367a2c388810b8fa13098f719af6c39819b2..3a42a1fc55cbfa00f4cc39620f1599c0669cb8e5 100644 (file)
@@ -366,6 +366,7 @@ struct nfp_flower_cmsg_hdr {
 enum nfp_flower_cmsg_type_port {
        NFP_FLOWER_CMSG_TYPE_FLOW_ADD =         0,
        NFP_FLOWER_CMSG_TYPE_FLOW_DEL =         2,
+       NFP_FLOWER_CMSG_TYPE_LAG_CONFIG =       4,
        NFP_FLOWER_CMSG_TYPE_PORT_REIFY =       6,
        NFP_FLOWER_CMSG_TYPE_MAC_REPR =         7,
        NFP_FLOWER_CMSG_TYPE_PORT_MOD =         8,
index 4e67c0cbf9f08ce7c5c6e131130f382f57bb45c5..1910c3e2b3e5fbe6cbb023445023782a6e58bb12 100644 (file)
@@ -546,8 +546,20 @@ static int nfp_flower_init(struct nfp_app *app)
        else
                app_priv->flower_ext_feats = features;
 
+       /* Tell the firmware that the driver supports lag. */
+       err = nfp_rtsym_write_le(app->pf->rtbl,
+                                "_abi_flower_balance_sync_enable", 1);
+       if (!err)
+               app_priv->flower_ext_feats |= NFP_FL_FEATS_LAG;
+       else if (err == -ENOENT)
+               nfp_warn(app->cpp, "LAG not supported by FW.\n");
+       else
+               goto err_cleanup_metadata;
+
        return 0;
 
+err_cleanup_metadata:
+       nfp_flower_metadata_cleanup(app);
 err_free_app_priv:
        vfree(app->priv);
        return err;
index 733ff53cc6014742b8b57e121930d01144033b75..6e82aa4ed84b5501d4ed772d9cd61004c5e5ce87 100644 (file)
@@ -67,6 +67,7 @@ struct nfp_app;
 /* Extra features bitmap. */
 #define NFP_FL_FEATS_GENEVE            BIT(0)
 #define NFP_FL_NBI_MTU_SETTING         BIT(1)
+#define NFP_FL_FEATS_LAG               BIT(31)
 
 struct nfp_fl_mask_id {
        struct circ_buf mask_id_free_list;