From a05a8e409b63c4c1b2a4514678dd83e00a2c407d Mon Sep 17 00:00:00 2001 From: Ivan Malov Date: Fri, 12 Aug 2022 22:18:19 +0300 Subject: [PATCH] net/cnxk: support represented port flow action There has been support for similar action PORT_ID for some time already, but this action will be deprecated. Support action REPRESENTED_PORT before the transition. Signed-off-by: Ivan Malov Reviewed-by: Andrew Rybchenko --- doc/guides/nics/cnxk.rst | 5 +++++ doc/guides/nics/features/cnxk.ini | 1 + doc/guides/rel_notes/release_22_11.rst | 4 ++++ drivers/net/cnxk/cnxk_flow.c | 9 +++++++-- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/cnxk.rst b/doc/guides/nics/cnxk.rst index eeaa3fa1cc..a1e3a4a965 100644 --- a/doc/guides/nics/cnxk.rst +++ b/doc/guides/nics/cnxk.rst @@ -398,6 +398,11 @@ RTE flow GRE support - ``RTE_FLOW_ITEM_TYPE_GRE_KEY`` works only when checksum and routing bits in the GRE header are equal to 0. +RTE flow action represented_port support +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- ``RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT`` only works between a PF and its VFs. + RTE flow action port_id support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/guides/nics/features/cnxk.ini b/doc/guides/nics/features/cnxk.ini index 1876fe86c7..5f14b3be08 100644 --- a/doc/guides/nics/features/cnxk.ini +++ b/doc/guides/nics/features/cnxk.ini @@ -90,6 +90,7 @@ of_set_vlan_vid = Y pf = Y port_id = Y queue = Y +represented_port = Y rss = Y security = Y vf = Y diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index 67d05a654f..0a1ca55486 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -55,6 +55,10 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Updated Marvell cnxk driver.** + + * Added support for flow action REPRESENTED_PORT. + * **Updated NXP dpaa2 driver.** * Added support for flow action REPRESENTED_PORT. diff --git a/drivers/net/cnxk/cnxk_flow.c b/drivers/net/cnxk/cnxk_flow.c index 06301b9ecb..6d155d924c 100644 --- a/drivers/net/cnxk/cnxk_flow.c +++ b/drivers/net/cnxk/cnxk_flow.c @@ -115,6 +115,7 @@ cnxk_map_actions(struct rte_eth_dev *eth_dev, const struct rte_flow_attr *attr, struct roc_npc_action in_actions[], uint32_t *flowkey_cfg) { struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); + const struct rte_flow_action_ethdev *act_ethdev; const struct rte_flow_action_port_id *port_act; const struct rte_flow_action_queue *act_q; struct roc_npc *roc_npc_src = &dev->npc; @@ -157,13 +158,17 @@ cnxk_map_actions(struct rte_eth_dev *eth_dev, const struct rte_flow_attr *attr, in_actions[i].conf = actions->conf; break; + case RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT: case RTE_FLOW_ACTION_TYPE_PORT_ID: in_actions[i].type = ROC_NPC_ACTION_TYPE_PORT_ID; in_actions[i].conf = actions->conf; + act_ethdev = (const struct rte_flow_action_ethdev *) + actions->conf; port_act = (const struct rte_flow_action_port_id *) actions->conf; - if (rte_eth_dev_get_name_by_port(port_act->id, - if_name)) { + if (rte_eth_dev_get_name_by_port( + actions->type != RTE_FLOW_ACTION_TYPE_PORT_ID ? + act_ethdev->port_id : port_act->id, if_name)) { plt_err("Name not found for output port id"); goto err_exit; }