static void print_nix_qsize(struct seq_file *filp, struct rvu_pfvf *pfvf);
 
+#define LMT_MAPTBL_ENTRY_SIZE 16
+/* Dump LMTST map table */
+static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp,
+                                              char __user *buffer,
+                                              size_t count, loff_t *ppos)
+{
+       struct rvu *rvu = filp->private_data;
+       u64 lmt_addr, val, tbl_base;
+       int pf, vf, num_vfs, hw_vfs;
+       void __iomem *lmt_map_base;
+       int index = 0, off = 0;
+       int bytes_not_copied;
+       int buf_size = 10240;
+       char *buf;
+
+       /* don't allow partial reads */
+       if (*ppos != 0)
+               return 0;
+
+       buf = kzalloc(buf_size, GFP_KERNEL);
+       if (!buf)
+               return -ENOSPC;
+
+       tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE);
+
+       lmt_map_base = ioremap_wc(tbl_base, 128 * 1024);
+       if (!lmt_map_base) {
+               dev_err(rvu->dev, "Failed to setup lmt map table mapping!!\n");
+               kfree(buf);
+               return false;
+       }
+
+       off +=  scnprintf(&buf[off], buf_size - 1 - off,
+                         "\n\t\t\t\t\tLmtst Map Table Entries");
+       off +=  scnprintf(&buf[off], buf_size - 1 - off,
+                         "\n\t\t\t\t\t=======================");
+       off +=  scnprintf(&buf[off], buf_size - 1 - off, "\nPcifunc\t\t\t");
+       off +=  scnprintf(&buf[off], buf_size - 1 - off, "Table Index\t\t");
+       off +=  scnprintf(&buf[off], buf_size - 1 - off,
+                         "Lmtline Base (word 0)\t\t");
+       off +=  scnprintf(&buf[off], buf_size - 1 - off,
+                         "Lmt Map Entry (word 1)");
+       off += scnprintf(&buf[off], buf_size - 1 - off, "\n");
+       for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
+               off += scnprintf(&buf[off], buf_size - 1 - off, "PF%d  \t\t\t",
+                                   pf);
+
+               index = pf * rvu->hw->total_vfs * LMT_MAPTBL_ENTRY_SIZE;
+               off += scnprintf(&buf[off], buf_size - 1 - off, " 0x%llx\t\t",
+                                (tbl_base + index));
+               lmt_addr = readq(lmt_map_base + index);
+               off += scnprintf(&buf[off], buf_size - 1 - off,
+                                " 0x%016llx\t\t", lmt_addr);
+               index += 8;
+               val = readq(lmt_map_base + index);
+               off += scnprintf(&buf[off], buf_size - 1 - off, " 0x%016llx\n",
+                                val);
+               /* Reading num of VFs per PF */
+               rvu_get_pf_numvfs(rvu, pf, &num_vfs, &hw_vfs);
+               for (vf = 0; vf < num_vfs; vf++) {
+                       index = (pf * rvu->hw->total_vfs * 16) +
+                               ((vf + 1)  * LMT_MAPTBL_ENTRY_SIZE);
+                       off += scnprintf(&buf[off], buf_size - 1 - off,
+                                           "PF%d:VF%d  \t\t", pf, vf);
+                       off += scnprintf(&buf[off], buf_size - 1 - off,
+                                        " 0x%llx\t\t", (tbl_base + index));
+                       lmt_addr = readq(lmt_map_base + index);
+                       off += scnprintf(&buf[off], buf_size - 1 - off,
+                                        " 0x%016llx\t\t", lmt_addr);
+                       index += 8;
+                       val = readq(lmt_map_base + index);
+                       off += scnprintf(&buf[off], buf_size - 1 - off,
+                                        " 0x%016llx\n", val);
+               }
+       }
+       off +=  scnprintf(&buf[off], buf_size - 1 - off, "\n");
+
+       bytes_not_copied = copy_to_user(buffer, buf, off);
+       kfree(buf);
+
+       iounmap(lmt_map_base);
+       if (bytes_not_copied)
+               return -EFAULT;
+
+       *ppos = off;
+       return off;
+}
+
+RVU_DEBUG_FOPS(lmtst_map_table, lmtst_map_table_display, NULL);
+
 /* Dumps current provisioning status of all RVU block LFs */
 static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
                                          char __user *buffer,
        debugfs_create_file("rsrc_alloc", 0444, rvu->rvu_dbg.root, rvu,
                            &rvu_dbg_rsrc_status_fops);
 
+       if (!is_rvu_otx2(rvu))
+               debugfs_create_file("lmtst_map_table", 0444, rvu->rvu_dbg.root,
+                                   rvu, &rvu_dbg_lmtst_map_table_fops);
+
        if (!cgx_get_cgxcnt_max())
                goto create;