octeontx2-pf: Fix algorithm index in MCAM rules with RSS action
authorSunil Goutham <sgoutham@marvell.com>
Sun, 22 Aug 2021 12:02:26 +0000 (17:32 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Sep 2021 08:02:26 +0000 (10:02 +0200)
[ Upstream commit e7938365459f3a6d4edf212f435c4ad635621450 ]

Otherthan setting action as RSS in NPC MCAM entry, RSS flowkey
algorithm index also needs to be set. Otherwise whatever algorithm
is defined at flowkey index '0' will be considered by HW and pkt
flows will be distributed as such.

Fix this by saving the flowkey index sent by admin function while
initializing RSS and then use it when framing MCAM rules.

Fixes: 81a4362016e7 ("octeontx2-pf: Add RSS multi group support")
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c

index 6920997930056c68b234eef798902025cb012a04..a6210b020a57679b6fe0accef3679e0cedbe50c5 100644 (file)
@@ -269,6 +269,7 @@ int otx2_config_pause_frm(struct otx2_nic *pfvf)
 int otx2_set_flowkey_cfg(struct otx2_nic *pfvf)
 {
        struct otx2_rss_info *rss = &pfvf->hw.rss_info;
+       struct nix_rss_flowkey_cfg_rsp *rsp;
        struct nix_rss_flowkey_cfg *req;
        int err;
 
@@ -283,6 +284,16 @@ int otx2_set_flowkey_cfg(struct otx2_nic *pfvf)
        req->group = DEFAULT_RSS_CONTEXT_GROUP;
 
        err = otx2_sync_mbox_msg(&pfvf->mbox);
+       if (err)
+               goto fail;
+
+       rsp = (struct nix_rss_flowkey_cfg_rsp *)
+                       otx2_mbox_get_rsp(&pfvf->mbox.mbox, 0, &req->hdr);
+       if (IS_ERR(rsp))
+               goto fail;
+
+       pfvf->hw.flowkey_alg_idx = rsp->alg_idx;
+fail:
        mutex_unlock(&pfvf->mbox.lock);
        return err;
 }
index 8fd58cd07f50b8ce9f690d24d30d616b2175a3fa..8c602d27108a7642b6076b7f383ba42080d5a3d0 100644 (file)
@@ -196,6 +196,9 @@ struct otx2_hw {
        u8                      lso_udpv4_idx;
        u8                      lso_udpv6_idx;
 
+       /* RSS */
+       u8                      flowkey_alg_idx;
+
        /* MSI-X */
        u8                      cint_cnt; /* CQ interrupt count */
        u16                     npa_msixoff; /* Offset of NPA vectors */
index 4d9de525802d0060b1b5b5f7f57ea1b219123bc6..fdd27c4fea86d30a37fe55982f7aa7bd2fb0facd 100644 (file)
@@ -858,6 +858,7 @@ static int otx2_add_flow_msg(struct otx2_nic *pfvf, struct otx2_flow *flow)
                if (flow->flow_spec.flow_type & FLOW_RSS) {
                        req->op = NIX_RX_ACTIONOP_RSS;
                        req->index = flow->rss_ctx_id;
+                       req->flow_key_alg = pfvf->hw.flowkey_alg_idx;
                } else {
                        req->op = NIX_RX_ACTIONOP_UCAST;
                        req->index = ethtool_get_flow_spec_ring(ring_cookie);