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);
 +
+ static void get_lf_str_list(struct rvu_block block, int pcifunc,
+                           char *lfs)
+ {
+       int lf = 0, seq = 0, len = 0, prev_lf = block.lf.max;
+ 
+       for_each_set_bit(lf, block.lf.bmap, block.lf.max) {
+               if (lf >= block.lf.max)
+                       break;
+ 
+               if (block.fn_map[lf] != pcifunc)
+                       continue;
+ 
+               if (lf == prev_lf + 1) {
+                       prev_lf = lf;
+                       seq = 1;
+                       continue;
+               }
+ 
+               if (seq)
+                       len += sprintf(lfs + len, "-%d,%d", prev_lf, lf);
+               else
+                       len += (len ? sprintf(lfs + len, ",%d", lf) :
+                                     sprintf(lfs + len, "%d", lf));
+ 
+               prev_lf = lf;
+               seq = 0;
+       }
+ 
+       if (seq)
+               len += sprintf(lfs + len, "-%d", prev_lf);
+ 
+       lfs[len] = '\0';
+ }
+ 
+ static int get_max_column_width(struct rvu *rvu)
+ {
+       int index, pf, vf, lf_str_size = 12, buf_size = 256;
+       struct rvu_block block;
+       u16 pcifunc;
+       char *buf;
+ 
+       buf = kzalloc(buf_size, GFP_KERNEL);
+       if (!buf)
+               return -ENOMEM;
+ 
+       for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
+               for (vf = 0; vf <= rvu->hw->total_vfs; vf++) {
+                       pcifunc = pf << 10 | vf;
+                       if (!pcifunc)
+                               continue;
+ 
+                       for (index = 0; index < BLK_COUNT; index++) {
+                               block = rvu->hw->block[index];
+                               if (!strlen(block.name))
+                                       continue;
+ 
+                               get_lf_str_list(block, pcifunc, buf);
+                               if (lf_str_size <= strlen(buf))
+                                       lf_str_size = strlen(buf) + 1;
+                       }
+               }
+       }
+ 
+       kfree(buf);
+       return lf_str_size;
+ }
+ 
  /* Dumps current provisioning status of all RVU block LFs */
  static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
                                          char __user *buffer,