drivers: enable keep flow rule device capability for cnxk
PATCH 1/1 drivers: enable keep flow rule device capability for cnxk
From: Kiran Kumar K <[email protected]>
Adding changes to enable keep flow rule device capability. With this change, flow rules will be kept across device restart.
--- drivers/common/cnxk/roc_npc.c | 8 ++++++++ drivers/common/cnxk/roc_npc.h | 2 ++ drivers/common/cnxk/roc_npc_mcam.c | 20 ++++++++++++++++++++ drivers/common/cnxk/roc_npc_priv.h | 1 + drivers/common/cnxk/version.map | 1 + drivers/net/cnxk/cnxk_ethdev.c | 15 +++++++++++++-- drivers/net/cnxk/cnxk_ethdev_ops.c | 4 ++-- drivers/net/cnxk/cnxk_rte_flow.c | 7 +++++++ 8 files changed, 54 insertions(+), 4 deletions(-)
drivers/common/cnxk/roc_npc.c +8 -0
@@ -74,6 +74,14 @@ roc_npc_mcam_alloc_entries(struct roc_npc *roc_npc, int ref_entry, priority, resp_count); } +int +roc_npc_mcam_enable_all_entries (struct roc_npc *roc_npc,bool enable) +{ +struct npc *npc =roc_npc_to_npc_priv (roc_npc); + +return npc_flow_enable_all_entries (npc, enable); +} + int roc_npc_mcam_alloc_entry(struct roc_npc *roc_npc, struct roc_npc_flow *mcam, struct roc_npc_flow *ref_mcam, int prio,
drivers/common/cnxk/roc_npc.h +2 -0
@@ -309,6 +309,8 @@ roc_npc_flow_create(struct roc_npc *roc_npc, const struct roc_npc_attr *attr, int __roc_api roc_npc_flow_destroy(struct roc_npc *roc_npc,struct roc_npc_flow *flow); int __roc_api roc_npc_mcam_free_entry(struct roc_npc *roc_npc, uint32_t entry); +int __roc_api roc_npc_mcam_enable_all_entries(struct roc_npc *roc_npc, +bool enable); int __roc_api roc_npc_mcam_alloc_entry(struct roc_npc *roc_npc, struct roc_npc_flow *mcam, struct roc_npc_flow *ref_mcam, int prio,
drivers/common/cnxk/roc_npc_mcam.c +20 -0
@@ -780,6 +780,26 @@ npc_program_mcam(struct npc *npc, struct npc_parse_state *pst, bool mcam_alloc)return 0 ; } +int +npc_flow_enable_all_entries (struct npc *npc,bool enable) +{ +struct npc_flow_list *list; +struct roc_npc_flow *flow; +int rc =0 , idx; + +/* Free any MCAM counters and delete flow list */ +for (idx =0 ; idx < npc->flow_max_priority; idx++) { + list = &npc->flow_list[idx]; + TAILQ_FOREACH(flow, list, next) { + flow->enable = enable; + rc =npc_mcam_write_entry (npc, flow); +if (rc) +return rc; + } + } +return rc; +} +int npc_flow_free_all_resources (struct npc *npc) {
drivers/common/cnxk/roc_npc_priv.h +1 -0
@@ -413,6 +413,7 @@ int npc_mcam_alloc_entries(struct npc *npc, int ref_mcam, int *alloc_entry,int npc_mcam_ena_dis_entry (struct npc *npc,struct roc_npc_flow *mcam,bool enable);int npc_mcam_write_entry (struct npc *npc,struct roc_npc_flow *mcam); +int npc_flow_enable_all_entries (struct npc *npc,bool enable);int npc_update_parse_state (struct npc_parse_state *pst,struct npc_parse_item_info *info,int lid,int lt,uint8_t flags);
drivers/common/cnxk/version.map +1 -0
@@ -311,6 +311,7 @@ INTERNAL { roc_npc_mcam_alloc_entries; roc_npc_mcam_alloc_entry; roc_npc_mcam_clear_counter; + roc_npc_mcam_enable_all_entries; roc_npc_mcam_ena_dis_entry; roc_npc_mcam_free_all_resources; roc_npc_mcam_free_counter;
drivers/net/cnxk/cnxk_ethdev.c +13 -2
@@ -1407,8 +1407,10 @@ cnxk_nix_dev_stop(struct rte_eth_dev *eth_dev)int count, i, j, rc;void *rxq; -/* Disable switch hdr pkind */ -roc_nix_switch_hdr_set (&dev->nix,0 ,0 ,0 ,0 ); +/* Disable all the NPC entries */ + rc =roc_npc_mcam_enable_all_entries (&dev->npc,0 ); +if (rc) +return rc;/* Stop link change events */ if (!roc_nix_is_vf_or_sdp (&dev->nix))
@@ -1483,6 +1485,12 @@ cnxk_nix_dev_start(struct rte_eth_dev *eth_dev)return rc; } + rc =roc_npc_mcam_enable_all_entries (&dev->npc,1 ); +if (rc) { +plt_err ("Failed to enable NPC entries %d" , rc); +return rc; + } +cnxk_nix_toggle_flag_link_cfg (dev, true);/* Start link change events */
@@ -1733,6 +1741,9 @@ cnxk_eth_dev_uninit(struct rte_eth_dev *eth_dev, bool reset)struct roc_nix *nix = &dev->nix;int rc, i; +/* Disable switch hdr pkind */ +roc_nix_switch_hdr_set (&dev->nix,0 ,0 ,0 ,0 ); +plt_free (eth_dev->security_ctx); eth_dev->security_ctx =NULL ;
drivers/net/cnxk/cnxk_ethdev_ops.c +2 -2
@@ -67,8 +67,8 @@ cnxk_nix_info_get(struct rte_eth_dev *eth_dev, struct rte_eth_dev_info *devinfo) devinfo->speed_capa = dev->speed_capa; devinfo->dev_capa =RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP | -RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP ; - devinfo->dev_capa &= ~RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP ; +RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP | +RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP ;return 0 ; }
drivers/net/cnxk/cnxk_rte_flow.c +7 -0
@@ -315,6 +315,13 @@ cnxk_flow_create(struct rte_eth_dev *eth_dev, const struct rte_flow_attr *attr,int errcode =0 ;int rc; +if (eth_dev->data->dev_started ==0 ) { +rte_flow_error_set (error,ENODEV , +RTE_FLOW_ERROR_TYPE_UNSPECIFIED ,NULL , +"port not started" ); +return NULL ; + } + rc =cnxk_map_flow_data (eth_dev, attr, pattern, actions, &in_attr, in_pattern, in_actions, &npc->flowkey_cfg_state);
Signature · 1 line
2.25.4
Quoted 7 lines · [email protected] writes:
From: Kiran Kumar K <[email protected]>
Adding changes to enable keep flow rule device capability. With this change, flow rules will be kept across device restart.
Signed-off-by Kiran Kumar K <[email protected]>Reviewed-by Satheesh Paul <[email protected]>
Quoted 11 lines
--- drivers/common/cnxk/roc_npc.c | 8 ++++++++ drivers/common/cnxk/roc_npc.h | 2 ++ drivers/common/cnxk/roc_npc_mcam.c | 20 ++++++++++++++++++++ drivers/common/cnxk/roc_npc_priv.h | 1 + drivers/common/cnxk/version.map | 1 + drivers/net/cnxk/cnxk_ethdev.c | 15 +++++++++++++-- drivers/net/cnxk/cnxk_ethdev_ops.c | 4 ++-- drivers/net/cnxk/cnxk_rte_flow.c | 7 +++++++ 8 files changed, 54 insertions(+), 4 deletions(-)
PATCH v2 1/1 drivers: enable keep flow rule device capability for cnxk
In reply to [email protected]From: Kiran Kumar K <[email protected]>
Adding changes to enable keep flow rule device capability. With this change, flow rules will be kept across device restart.
---
v2:
* Allow creating flow rule before device start.
drivers/common/cnxk/roc_npc.c | 8 ++++++++ drivers/common/cnxk/roc_npc.h | 2 ++ drivers/common/cnxk/roc_npc_mcam.c | 20 ++++++++++++++++++++ drivers/common/cnxk/roc_npc_priv.h | 1 + drivers/common/cnxk/version.map | 1 + drivers/net/cnxk/cnxk_ethdev.c | 15 +++++++++++++-- drivers/net/cnxk/cnxk_ethdev_ops.c | 4 ++-- 7 files changed, 47 insertions(+), 4 deletions(-)
drivers/common/cnxk/roc_npc.c +8 -0
@@ -74,6 +74,14 @@ roc_npc_mcam_alloc_entries(struct roc_npc *roc_npc, int ref_entry, priority, resp_count); } +int +roc_npc_mcam_enable_all_entries (struct roc_npc *roc_npc,bool enable) +{ +struct npc *npc =roc_npc_to_npc_priv (roc_npc); + +return npc_flow_enable_all_entries (npc, enable); +} + int roc_npc_mcam_alloc_entry(struct roc_npc *roc_npc, struct roc_npc_flow *mcam, struct roc_npc_flow *ref_mcam, int prio,
drivers/common/cnxk/roc_npc.h +2 -0
@@ -309,6 +309,8 @@ roc_npc_flow_create(struct roc_npc *roc_npc, const struct roc_npc_attr *attr, int __roc_api roc_npc_flow_destroy(struct roc_npc *roc_npc,struct roc_npc_flow *flow); int __roc_api roc_npc_mcam_free_entry(struct roc_npc *roc_npc, uint32_t entry); +int __roc_api roc_npc_mcam_enable_all_entries(struct roc_npc *roc_npc, +bool enable); int __roc_api roc_npc_mcam_alloc_entry(struct roc_npc *roc_npc, struct roc_npc_flow *mcam, struct roc_npc_flow *ref_mcam, int prio,
drivers/common/cnxk/roc_npc_mcam.c +20 -0
@@ -780,6 +780,26 @@ npc_program_mcam(struct npc *npc, struct npc_parse_state *pst, bool mcam_alloc)return 0 ; } +int +npc_flow_enable_all_entries (struct npc *npc,bool enable) +{ +struct npc_flow_list *list; +struct roc_npc_flow *flow; +int rc =0 , idx; + +/* Free any MCAM counters and delete flow list */ +for (idx =0 ; idx < npc->flow_max_priority; idx++) { + list = &npc->flow_list[idx]; + TAILQ_FOREACH(flow, list, next) { + flow->enable = enable; + rc =npc_mcam_write_entry (npc, flow); +if (rc) +return rc; + } + } +return rc; +} +int npc_flow_free_all_resources (struct npc *npc) {
drivers/common/cnxk/roc_npc_priv.h +1 -0
@@ -413,6 +413,7 @@ int npc_mcam_alloc_entries(struct npc *npc, int ref_mcam, int *alloc_entry,int npc_mcam_ena_dis_entry (struct npc *npc,struct roc_npc_flow *mcam,bool enable);int npc_mcam_write_entry (struct npc *npc,struct roc_npc_flow *mcam); +int npc_flow_enable_all_entries (struct npc *npc,bool enable);int npc_update_parse_state (struct npc_parse_state *pst,struct npc_parse_item_info *info,int lid,int lt,uint8_t flags);
drivers/common/cnxk/version.map +1 -0
@@ -312,6 +312,7 @@ INTERNAL { roc_npc_mcam_alloc_entries; roc_npc_mcam_alloc_entry; roc_npc_mcam_clear_counter; + roc_npc_mcam_enable_all_entries; roc_npc_mcam_ena_dis_entry; roc_npc_mcam_free_all_resources; roc_npc_mcam_free_counter;
drivers/net/cnxk/cnxk_ethdev.c +13 -2
@@ -1407,8 +1407,10 @@ cnxk_nix_dev_stop(struct rte_eth_dev *eth_dev)int count, i, j, rc;void *rxq; -/* Disable switch hdr pkind */ -roc_nix_switch_hdr_set (&dev->nix,0 ,0 ,0 ,0 ); +/* Disable all the NPC entries */ + rc =roc_npc_mcam_enable_all_entries (&dev->npc,0 ); +if (rc) +return rc;/* Stop link change events */ if (!roc_nix_is_vf_or_sdp (&dev->nix))
@@ -1483,6 +1485,12 @@ cnxk_nix_dev_start(struct rte_eth_dev *eth_dev)return rc; } + rc =roc_npc_mcam_enable_all_entries (&dev->npc,1 ); +if (rc) { +plt_err ("Failed to enable NPC entries %d" , rc); +return rc; + } +cnxk_nix_toggle_flag_link_cfg (dev, true);/* Start link change events */
@@ -1733,6 +1741,9 @@ cnxk_eth_dev_uninit(struct rte_eth_dev *eth_dev, bool reset)struct roc_nix *nix = &dev->nix;int rc, i; +/* Disable switch hdr pkind */ +roc_nix_switch_hdr_set (&dev->nix,0 ,0 ,0 ,0 ); +plt_free (eth_dev->security_ctx); eth_dev->security_ctx =NULL ;
drivers/net/cnxk/cnxk_ethdev_ops.c +2 -2
@@ -67,8 +67,8 @@ cnxk_nix_info_get(struct rte_eth_dev *eth_dev, struct rte_eth_dev_info *devinfo) devinfo->speed_capa = dev->speed_capa; devinfo->dev_capa =RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP | -RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP ; - devinfo->dev_capa &= ~RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP ; +RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP | +RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP ;return 0 ; }
Signature · 1 line
2.25.4
Quoted 11 lines · [email protected] writes:
From: Kiran Kumar K <[email protected]>
Adding changes to enable keep flow rule device capability. With this change, flow rules will be kept across device restart.
Signed-off-by Kiran Kumar K <[email protected]>Reviewed-by Satheesh Paul <[email protected]>---
v2:
* Allow creating flow rule before device start.
Quoted 9 lines
drivers/common/cnxk/roc_npc.c | 8 ++++++++ drivers/common/cnxk/roc_npc.h | 2 ++ drivers/common/cnxk/roc_npc_mcam.c | 20 ++++++++++++++++++++ drivers/common/cnxk/roc_npc_priv.h | 1 + drivers/common/cnxk/version.map | 1 + drivers/net/cnxk/cnxk_ethdev.c | 15 +++++++++++++-- drivers/net/cnxk/cnxk_ethdev_ops.c | 4 ++-- 7 files changed, 47 insertions(+), 4 deletions(-)
Signature · 1 line
Regards, Ray K
Jerin Jacob
AppliedQuoted 25 lines · Ray Kinsella
Quoted 11 lines · [email protected] writes:
From: Kiran Kumar K <[email protected]>
Adding changes to enable keep flow rule device capability. With this change, flow rules will be kept across device restart.
Signed-off-by Kiran Kumar K <[email protected]>Reviewed-by Satheesh Paul <[email protected]>---
v2:
* Allow creating flow rule before device start.Quoted 9 lines
drivers/common/cnxk/roc_npc.c | 8 ++++++++ drivers/common/cnxk/roc_npc.h | 2 ++ drivers/common/cnxk/roc_npc_mcam.c | 20 ++++++++++++++++++++ drivers/common/cnxk/roc_npc_priv.h | 1 + drivers/common/cnxk/version.map | 1 + drivers/net/cnxk/cnxk_ethdev.c | 15 +++++++++++++-- drivers/net/cnxk/cnxk_ethdev_ops.c | 4 ++-- 7 files changed, 47 insertions(+), 4 deletions(-)
Quoted 1 line
Acked-by Ray Kinsella <[email protected]>
Applied to dpdk-next-net-mrvl/for-next-net. Thanks
Quoted 3 lines
--
Regards, Ray K