nix_bp_cfg_rsp) \
 M(NIX_BP_DISABLE,      0x8017, nix_bp_disable, nix_bp_cfg_req, msg_rsp) \
 M(NIX_GET_MAC_ADDR, 0x8018, nix_get_mac_addr, msg_req, nix_get_mac_addr_rsp) \
-M(NIX_CN10K_AQ_ENQ,    0x8019, nix_cn10k_aq_enq, nix_cn10k_aq_enq_req, \
+M(NIX_CN10K_AQ_ENQ,    0x801b, nix_cn10k_aq_enq, nix_cn10k_aq_enq_req, \
                                nix_cn10k_aq_enq_rsp)                   \
 M(NIX_GET_HW_INFO,     0x801c, nix_get_hw_info, msg_req, nix_hw_info)  \
 M(NIX_BANDPROF_ALLOC,  0x801d, nix_bandprof_alloc, nix_bandprof_alloc_req, \
 
 struct lmtst_tbl_setup_req {
        struct mbox_msghdr hdr;
+       u64 dis_sched_early_comp :1;
+       u64 sch_ena              :1;
+       u64 dis_line_pref        :1;
+       u64 ssow_pf_func         :13;
        u16 base_pcifunc;
        u8  use_local_lmt_region;
        u64 lmt_iova;
 
        u8      nix_tx_intf; /* NIX0_TX/NIX1_TX interface to NPC */
        u8      lbkid;       /* NIX0/1 lbk link ID */
        u64     lmt_base_addr; /* Preseving the pcifunc's lmtst base addr*/
+       u64     lmt_map_ent_w1; /* Preseving the word1 of lmtst map table entry*/
        unsigned long flags;
        struct  sdp_node_info *sdp_info;
 };
  */
 #define PCI_REVISION_ID_96XX           0x00
 #define PCI_REVISION_ID_95XX           0x10
-#define PCI_REVISION_ID_LOKI           0x20
+#define PCI_REVISION_ID_95XXN          0x20
 #define PCI_REVISION_ID_98XX           0x30
 #define PCI_REVISION_ID_95XXMM         0x40
+#define PCI_REVISION_ID_95XXO          0xE0
 
 static inline bool is_rvu_otx2(struct rvu *rvu)
 {
        u8 midr = pdev->revision & 0xF0;
 
        return (midr == PCI_REVISION_ID_96XX || midr == PCI_REVISION_ID_95XX ||
-               midr == PCI_REVISION_ID_LOKI || midr == PCI_REVISION_ID_98XX ||
-               midr == PCI_REVISION_ID_95XXMM);
+               midr == PCI_REVISION_ID_95XXN || midr == PCI_REVISION_ID_98XX ||
+               midr == PCI_REVISION_ID_95XXMM || midr == PCI_REVISION_ID_95XXO);
 }
 
 static inline u16 rvu_nix_chan_cgx(struct rvu *rvu, u8 cgxid,
 
        return 0;
 }
 
+#define LMT_MAP_TBL_W1_OFF  8
 static u32 rvu_get_lmtst_tbl_index(struct rvu *rvu, u16 pcifunc)
 {
        return ((rvu_get_pf(pcifunc) * rvu->hw->total_vfs) +
                                     struct lmtst_tbl_setup_req *req,
                                     struct msg_rsp *rsp)
 {
-       u64 lmt_addr, val;
-       u32 pri_tbl_idx;
+       struct rvu_pfvf *pfvf = rvu_get_pfvf(rvu, req->hdr.pcifunc);
+       u32 pri_tbl_idx, tbl_idx;
+       u64 lmt_addr;
        int err = 0;
+       u64 val;
 
        /* Check if PF_FUNC wants to use it's own local memory as LMTLINE
         * region, if so, convert that IOVA to physical address and
                        dev_err(rvu->dev,
                                "Failed to read LMT map table: index 0x%x err %d\n",
                                pri_tbl_idx, err);
-                       return err;
+                       goto error;
                }
 
                /* Update the base lmt addr of secondary with primary's base
                        return err;
        }
 
-       return 0;
+       /* This mailbox can also be used to update word1 of APR_LMT_MAP_ENTRY_S
+        * like enabling scheduled LMTST, disable LMTLINE prefetch, disable
+        * early completion for ordered LMTST.
+        */
+       if (req->sch_ena || req->dis_sched_early_comp || req->dis_line_pref) {
+               tbl_idx = rvu_get_lmtst_tbl_index(rvu, req->hdr.pcifunc);
+               err = lmtst_map_table_ops(rvu, tbl_idx + LMT_MAP_TBL_W1_OFF,
+                                         &val, LMT_TBL_OP_READ);
+               if (err) {
+                       dev_err(rvu->dev,
+                               "Failed to read LMT map table: index 0x%x err %d\n",
+                               tbl_idx + LMT_MAP_TBL_W1_OFF, err);
+                       goto error;
+               }
+
+               /* Storing lmt map table entry word1 default value as this needs
+                * to be reverted in FLR. Also making sure this default value
+                * doesn't get overwritten on multiple calls to this mailbox.
+                */
+               if (!pfvf->lmt_map_ent_w1)
+                       pfvf->lmt_map_ent_w1 = val;
+
+               /* Disable early completion for Ordered LMTSTs. */
+               if (req->dis_sched_early_comp)
+                       val |= (req->dis_sched_early_comp <<
+                               APR_LMT_MAP_ENT_DIS_SCH_CMP_SHIFT);
+               /* Enable scheduled LMTST */
+               if (req->sch_ena)
+                       val |= (req->sch_ena << APR_LMT_MAP_ENT_SCH_ENA_SHIFT) |
+                               req->ssow_pf_func;
+               /* Disables LMTLINE prefetch before receiving store data. */
+               if (req->dis_line_pref)
+                       val |= (req->dis_line_pref <<
+                               APR_LMT_MAP_ENT_DIS_LINE_PREF_SHIFT);
+
+               err = lmtst_map_table_ops(rvu, tbl_idx + LMT_MAP_TBL_W1_OFF,
+                                         &val, LMT_TBL_OP_WRITE);
+               if (err) {
+                       dev_err(rvu->dev,
+                               "Failed to update LMT map table: index 0x%x err %d\n",
+                               tbl_idx + LMT_MAP_TBL_W1_OFF, err);
+                       goto error;
+               }
+       }
+
+error:
+       return err;
 }
 
 /* Resetting the lmtst map table to original base addresses */
        if (is_rvu_otx2(rvu))
                return;
 
-       if (pfvf->lmt_base_addr) {
+       if (pfvf->lmt_base_addr || pfvf->lmt_map_ent_w1) {
                /* This corresponds to lmt map table index */
                tbl_idx = rvu_get_lmtst_tbl_index(rvu, pcifunc);
                /* Reverting back original lmt base addr for respective
                 * pcifunc.
                 */
-               err = lmtst_map_table_ops(rvu, tbl_idx, &pfvf->lmt_base_addr,
-                                         LMT_TBL_OP_WRITE);
-               if (err)
-                       dev_err(rvu->dev,
-                               "Failed to update LMT map table: index 0x%x err %d\n",
-                               tbl_idx, err);
-               pfvf->lmt_base_addr = 0;
+               if (pfvf->lmt_base_addr) {
+                       err = lmtst_map_table_ops(rvu, tbl_idx,
+                                                 &pfvf->lmt_base_addr,
+                                                 LMT_TBL_OP_WRITE);
+                       if (err)
+                               dev_err(rvu->dev,
+                                       "Failed to update LMT map table: index 0x%x err %d\n",
+                                       tbl_idx, err);
+                       pfvf->lmt_base_addr = 0;
+               }
+               /* Reverting back to orginal word1 val of lmtst map table entry
+                * which underwent changes.
+                */
+               if (pfvf->lmt_map_ent_w1) {
+                       err = lmtst_map_table_ops(rvu,
+                                                 tbl_idx + LMT_MAP_TBL_W1_OFF,
+                                                 &pfvf->lmt_map_ent_w1,
+                                                 LMT_TBL_OP_WRITE);
+                       if (err)
+                               dev_err(rvu->dev,
+                                       "Failed to update LMT map table: index 0x%x err %d\n",
+                                       tbl_idx + LMT_MAP_TBL_W1_OFF, err);
+                       pfvf->lmt_map_ent_w1 = 0;
+               }
        }
 }