From 670692191a938fb8aaa887aa268437aacc51de7d Mon Sep 17 00:00:00 2001 From: Satheesh Paul Date: Mon, 2 May 2022 14:17:30 +0530 Subject: [PATCH] common/cnxk: fix channel number setting in MCAM entries Adding changes to accommodate the following requirements while masking the channel number. 1. For CN10K device, channel number should not be masked for first pass rules with RTE_FLOW_ACTION_TYPE_SECURITY action. And channel number should be masked for all other flow rules. 2. For CN9K device channel number should not be masked. Fixes: 4968b362b639 ("common/cnxk: support CPT second pass flow rules") Cc: stable@dpdk.org Signed-off-by: Satheesh Paul Reviewed-by: Kiran Kumar K --- drivers/common/cnxk/roc_npc_mcam.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/common/cnxk/roc_npc_mcam.c b/drivers/common/cnxk/roc_npc_mcam.c index bccbaaa51f..0ae58da0ba 100644 --- a/drivers/common/cnxk/roc_npc_mcam.c +++ b/drivers/common/cnxk/roc_npc_mcam.c @@ -508,19 +508,25 @@ npc_mcam_set_channel(struct roc_npc_flow *flow, req->entry_data.kw_mask[0] &= ~(GENMASK(11, 0)); flow->mcam_data[0] &= ~(GENMASK(11, 0)); flow->mcam_mask[0] &= ~(GENMASK(11, 0)); + chan = channel; + mask = chan_mask; - if (is_second_pass) { - chan = (channel | NIX_CHAN_CPT_CH_START); - mask = (chan_mask | NIX_CHAN_CPT_CH_START); - } else { - /* - * Clear bits 10 & 11 corresponding to CPT - * channel. By default, rules should match - * both first pass packets and second pass - * packets from CPT. - */ - chan = (channel & NIX_CHAN_CPT_X2P_MASK); - mask = (chan_mask & NIX_CHAN_CPT_X2P_MASK); + if (roc_model_runtime_is_cn10k()) { + if (is_second_pass) { + chan = (channel | NIX_CHAN_CPT_CH_START); + mask = (chan_mask | NIX_CHAN_CPT_CH_START); + } else { + if (!(flow->npc_action & NIX_RX_ACTIONOP_UCAST_IPSEC)) { + /* + * Clear bits 10 & 11 corresponding to CPT + * channel. By default, rules should match + * both first pass packets and second pass + * packets from CPT. + */ + chan = (channel & NIX_CHAN_CPT_X2P_MASK); + mask = (chan_mask & NIX_CHAN_CPT_X2P_MASK); + } + } } req->entry_data.kw[0] |= (uint64_t)chan; -- 2.39.5