summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/netronome/nfp/flower/main.c
diff options
context:
space:
mode:
authorJohn Hurley2019-04-15 16:55:53 +0200
committerDavid S. Miller2019-04-16 00:45:36 +0200
commit2f2622f59c70de16277ed85db620fed884f75e6a (patch)
treea207b4038ef1ca1ff535518638a05aaf1f552992 /drivers/net/ethernet/netronome/nfp/flower/main.c
parentMerge branch 'hns3-next' (diff)
downloadkernel-qcow2-linux-2f2622f59c70de16277ed85db620fed884f75e6a.tar.gz
kernel-qcow2-linux-2f2622f59c70de16277ed85db620fed884f75e6a.tar.xz
kernel-qcow2-linux-2f2622f59c70de16277ed85db620fed884f75e6a.zip
nfp: flower: turn on recirc and merge hint support in firmware
Write to a FW symbol to indicate that the driver supports flow merging. If this symbol does not exist then flow merging and recirculation is not supported on the FW. If support is available, add a stub to deal with FW to kernel merge hint messages. Full flow merging requires the firmware to support of flow mods. If it does not, then do not attempt to 'turn on' flow merging. Signed-off-by: John Hurley <john.hurley@netronome.com> Signed-off-by: Simon Horman <simon.horman@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/netronome/nfp/flower/main.c')
-rw-r--r--drivers/net/ethernet/netronome/nfp/flower/main.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.c b/drivers/net/ethernet/netronome/nfp/flower/main.c
index 408089133599..1569fb6c2c36 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/main.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/main.c
@@ -641,11 +641,28 @@ static int nfp_flower_init(struct nfp_app *app)
goto err_cleanup_metadata;
}
+ if (app_priv->flower_ext_feats & NFP_FL_FEATS_FLOW_MOD) {
+ /* Tell the firmware that the driver supports flow merging. */
+ err = nfp_rtsym_write_le(app->pf->rtbl,
+ "_abi_flower_merge_hint_enable", 1);
+ if (!err)
+ app_priv->flower_ext_feats |= NFP_FL_FEATS_FLOW_MERGE;
+ else if (err == -ENOENT)
+ nfp_warn(app->cpp, "Flow merge not supported by FW.\n");
+ else
+ goto err_lag_clean;
+ } else {
+ nfp_warn(app->cpp, "Flow mod/merge not supported by FW.\n");
+ }
+
INIT_LIST_HEAD(&app_priv->indr_block_cb_priv);
INIT_LIST_HEAD(&app_priv->non_repr_priv);
return 0;
+err_lag_clean:
+ if (app_priv->flower_ext_feats & NFP_FL_FEATS_LAG)
+ nfp_flower_lag_cleanup(&app_priv->nfp_lag);
err_cleanup_metadata:
nfp_flower_metadata_cleanup(app);
err_free_app_priv: