int blkaddr, ucast_idx, index;
        struct nix_rx_action action = { 0 };
        u64 relaxed_mask;
+       u8 flow_key_alg;
 
        if (!hw->cap.nix_rx_multicast && is_cgx_vf(rvu, pcifunc))
                return;
                action.op = NIX_RX_ACTIONOP_UCAST;
        }
 
+       flow_key_alg = action.flow_key_alg;
+
        /* RX_ACTION set to MCAST for CGX PF's */
        if (hw->cap.nix_rx_multicast && pfvf->use_mce_list &&
            is_pf_cgxmapped(rvu, rvu_get_pf(pcifunc))) {
        req.vf = pcifunc;
        req.index = action.index;
        req.match_id = action.match_id;
-       req.flow_key_alg = action.flow_key_alg;
+       req.flow_key_alg = flow_key_alg;
 
        rvu_mbox_handler_npc_install_flow(rvu, &req, &rsp);
 }
        u8 mac_addr[ETH_ALEN] = { 0 };
        struct nix_rx_action action = { 0 };
        struct rvu_pfvf *pfvf;
+       u8 flow_key_alg;
        u16 vf_func;
 
        /* Only CGX PF/VF can add allmulticast entry */
                *(u64 *)&action = npc_get_mcam_action(rvu, mcam,
                                                        blkaddr, ucast_idx);
 
+       flow_key_alg = action.flow_key_alg;
        if (action.op != NIX_RX_ACTIONOP_RSS) {
                *(u64 *)&action = 0;
                action.op = NIX_RX_ACTIONOP_UCAST;
        req.vf = pcifunc | vf_func;
        req.index = action.index;
        req.match_id = action.match_id;
-       req.flow_key_alg = action.flow_key_alg;
+       req.flow_key_alg = flow_key_alg;
 
        rvu_mbox_handler_npc_install_flow(rvu, &req, &rsp);
 }
        mutex_unlock(&mcam->lock);
 }
 
+static void npc_update_rx_action_with_alg_idx(struct rvu *rvu, struct nix_rx_action action,
+                                             struct rvu_pfvf *pfvf, int mcam_index, int blkaddr,
+                                             int alg_idx)
+
+{
+       struct npc_mcam *mcam = &rvu->hw->mcam;
+       struct rvu_hwinfo *hw = rvu->hw;
+       int bank, op_rss;
+
+       if (!is_mcam_entry_enabled(rvu, mcam, blkaddr, mcam_index))
+               return;
+
+       op_rss = (!hw->cap.nix_rx_multicast || !pfvf->use_mce_list);
+
+       bank = npc_get_bank(mcam, mcam_index);
+       mcam_index &= (mcam->banksize - 1);
+
+       /* If Rx action is MCAST update only RSS algorithm index */
+       if (!op_rss) {
+               *(u64 *)&action = rvu_read64(rvu, blkaddr,
+                               NPC_AF_MCAMEX_BANKX_ACTION(mcam_index, bank));
+
+               action.flow_key_alg = alg_idx;
+       }
+       rvu_write64(rvu, blkaddr,
+                   NPC_AF_MCAMEX_BANKX_ACTION(mcam_index, bank), *(u64 *)&action);
+}
+
 void rvu_npc_update_flowkey_alg_idx(struct rvu *rvu, u16 pcifunc, int nixlf,
                                    int group, int alg_idx, int mcam_index)
 {
        struct npc_mcam *mcam = &rvu->hw->mcam;
-       struct rvu_hwinfo *hw = rvu->hw;
        struct nix_rx_action action;
        int blkaddr, index, bank;
        struct rvu_pfvf *pfvf;
        /* If PF's promiscuous entry is enabled,
         * Set RSS action for that entry as well
         */
-       if ((!hw->cap.nix_rx_multicast || !pfvf->use_mce_list) &&
-           is_mcam_entry_enabled(rvu, mcam, blkaddr, index)) {
-               bank = npc_get_bank(mcam, index);
-               index &= (mcam->banksize - 1);
+       npc_update_rx_action_with_alg_idx(rvu, action, pfvf, index, blkaddr,
+                                         alg_idx);
 
-               rvu_write64(rvu, blkaddr,
-                           NPC_AF_MCAMEX_BANKX_ACTION(index, bank),
-                           *(u64 *)&action);
-       }
+       index = npc_get_nixlf_mcam_index(mcam, pcifunc,
+                                        nixlf, NIXLF_ALLMULTI_ENTRY);
+       /* If PF's allmulti  entry is enabled,
+        * Set RSS action for that entry as well
+        */
+       npc_update_rx_action_with_alg_idx(rvu, action, pfvf, index, blkaddr,
+                                         alg_idx);
 }
 
 void npc_enadis_default_mce_entry(struct rvu *rvu, u16 pcifunc,