From: Satheesh Paul Date: Mon, 2 May 2022 08:47:30 +0000 (+0530) Subject: common/cnxk: fix channel number setting in MCAM entries X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=670692191a938fb8aaa887aa268437aacc51de7d;p=dpdk.git 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 --- 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;