diff --git a/linux-ramdump-parser-v2/debug_image_v2.py b/linux-ramdump-parser-v2/debug_image_v2.py
index 7494ef84bec6b6d34529c184a1f9d3da720e06fd..96d8fd056cf10307b0fc00eff9e47f4aa88947e8 100644
--- a/linux-ramdump-parser-v2/debug_image_v2.py
+++ b/linux-ramdump-parser-v2/debug_image_v2.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
+# Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License version 2 and
@@ -82,7 +82,7 @@ client_types = [
     ('MSM_DUMP_DATA_DCC_SRAM', 'parse_dcc_sram'),
     ('MSM_DUMP_DATA_TMC_ETF', 'parse_qdss_common'),
     ('MSM_DUMP_DATA_TMC_REG', 'parse_qdss_common'),
-    ('MSM_DUMP_DATA_L2_TLB', 'parse_l2_tlb'),
+    ('MSM_DUMP_DATA_L2_TLB', 'parse_tlb_common'),
     ('MSM_DUMP_DATA_LLC_CACHE', 'parse_system_cache_common'),
     ('MSM_DUMP_DATA_MISC', 'parse_sysdbg_regs'),
 ]
@@ -315,7 +315,6 @@ class DebugImage_v2():
             print_out_exception()
         outfile.close()
 
-
     def ftrace_field_func(self, common_list, ram_dump):
         name_offset = ram_dump.field_offset('struct ftrace_event_field', 'name')
         type_offset = ram_dump.field_offset('struct ftrace_event_field', 'type')
@@ -674,8 +673,9 @@ class DebugImage_v2():
             client.MSM_DUMP_DATA_LOG_BUF] = 'MSM_DUMP_DATA_LOG_BUF'
         self.dump_data_id_lookup_table[
             client.MSM_DUMP_DATA_LOG_BUF_FIRST_IDX] = 'MSM_DUMP_DATA_LOG_BUF_FIRST_IDX'
-        self.dump_data_id_lookup_table[
-            client.MSM_DUMP_DATA_L2_TLB] = 'MSM_DUMP_DATA_L2_TLB'
+	for i in range(0, cpus):
+		self.dump_data_id_lookup_table[
+		    client.MSM_DUMP_DATA_L2_TLB + i] = 'MSM_DUMP_DATA_L2_TLB'
 
         if not ram_dump.minidump:
             dump_table_ptr_offset = ram_dump.field_offset(
diff --git a/linux-ramdump-parser-v2/tlbdumplib.py b/linux-ramdump-parser-v2/tlbdumplib.py
index 2a4d8c6b47f4d626d257c481d7b687b546086c6a..f6a4fe5c0420bbb2679f93d0bd748757dc3e27c2 100644
--- a/linux-ramdump-parser-v2/tlbdumplib.py
+++ b/linux-ramdump-parser-v2/tlbdumplib.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2017, The Linux Foundation. All rights reserved.
+# Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are
@@ -117,30 +117,23 @@ class TlbDumpType_v1(TlbDumpType):
         self.ramdump = ramdump
         self.add_table_data_columns()
 
-        for nset in range(self.NumSets):
-            for nway in range(self.NumWays):
+        offset = 0
+        for nway in range(self.NumWays):
+            for nset in range(self.NumSets):
                 if start > end:
                     raise Exception('past the end of array')
 
                 output = [nway, nset]
                 line = self.read_line(start)
+                self.parse_tag_fn(output, line, nset, nway, offset)
                 output.extend(line)
                 self.tableformat.printline(output, outfile)
                 start = start + self.LineSize * 0x4
+                offset = offset + self.LineSize * 0x4
 
 class TlbDumpType_v2(TlbDumpType):
     def __init__(self):
         super(TlbDumpType_v2, self).__init__()
-        self.tableformat.addColumn('RAM')
-        self.tableformat.addColumn('TYPE')
-        self.tableformat.addColumn('PA', '{0:016x}', 16)
-        self.tableformat.addColumn('VA', '{0:016x}', 16)
-        self.tableformat.addColumn('VALID')
-        self.tableformat.addColumn('VMID', '{0:02x}', 4)
-        self.tableformat.addColumn('ASID', '{0:04x}', 4)
-        self.tableformat.addColumn('S1_MODE', '{0:01x}', 7)
-        self.tableformat.addColumn('S1_LEVEL', '{0:01x}', 8)
-        self.tableformat.addColumn('SIZE')
 
     def parse(self, start, end, ramdump, outfile):
         self.ramdump = ramdump
@@ -162,10 +155,11 @@ class TlbDumpType_v2(TlbDumpType):
                 offset = offset + 0x1000
 
         ram = 1
-        for nway in range(self.NumWaysRam0):
+        for nway in range(self.NumWaysRam1):
             offset = 0
             for nset in range(self.NumSetsRam1):
                 if start > end:
+                    print [nway,nset]
                     raise Exception('past the end of array')
 
                 output = [nway, nset]
@@ -174,11 +168,21 @@ class TlbDumpType_v2(TlbDumpType):
                 output.extend(line)
                 self.tableformat.printline(output, outfile)
                 start = start + self.LineSize * 0x4
-                offset = (offset + 0x1000)
+                offset = offset + 0x1000
 
 class L1_TLB_KRYO2XX_GOLD(TlbDumpType_v2):
     def __init__(self):
         super(L1_TLB_KRYO2XX_GOLD, self).__init__()
+        self.tableformat.addColumn('RAM')
+        self.tableformat.addColumn('TYPE')
+        self.tableformat.addColumn('PA', '{0:016x}', 16)
+        self.tableformat.addColumn('VA', '{0:016x}', 16)
+        self.tableformat.addColumn('VALID')
+        self.tableformat.addColumn('VMID', '{0:02x}', 4)
+        self.tableformat.addColumn('ASID', '{0:04x}', 4)
+        self.tableformat.addColumn('S1_MODE', '{0:01x}', 7)
+        self.tableformat.addColumn('S1_LEVEL', '{0:01x}', 8)
+        self.tableformat.addColumn('SIZE')
         self.unsupported_header_offset = 0
         self.LineSize = 4
         self.NumSetsRam0 =  0x100
@@ -274,61 +278,89 @@ class L1_TLB_A53(TlbDumpType_v1):
         self.NumSets = 0x100
         self.NumWays = 4
 
-class L1_TLB_KRYO3XX_GOLD(TlbDumpType_v2):
+class L2_TLB_KRYO3XX_GOLD(TlbDumpType_v2):
     def __init__(self):
-        super(L1_TLB_KRYO3XX_GOLD, self).__init__()
+        super(L2_TLB_KRYO3XX_GOLD, self).__init__()
+        self.tableformat.addColumn('RAM')
+        self.tableformat.addColumn('TYPE')
+        self.tableformat.addColumn('VA/IPA[48:16]', '{0:016x}', 16)
+        self.tableformat.addColumn('PA[43:12]', '{0:016x}', 16)
+        self.tableformat.addColumn('VALID')
+        self.tableformat.addColumn('NS')
+        self.tableformat.addColumn('VMID', '{0:02x}', 4)
+        self.tableformat.addColumn('ASID', '{0:04x}', 4)
+        self.tableformat.addColumn('S1_MODE', '{0:01x}', 7)
+        self.tableformat.addColumn('S1_LEVEL', '{0:01x}', 8)
+        self.tableformat.addColumn('TRANS_REGIME', '{0:01x}', 2)
+        self.tableformat.addColumn('SIZE')
         self.unsupported_header_offset = 0
-        self.LineSize = 4
+        self.LineSize = 5
         self.NumSetsRam0 =  0x100
-        self.NumSetsRam1 =  0x3c
+        self.NumSetsRam1 =  0x80
         self.NumWaysRam0 = 4
         self.NumWaysRam1 = 2
 
     def parse_tag_fn(self, output, data, nset, nway, ram, offset):
-        #tlb_type = self.parse_tlb_type(data)
-
+        tlb_type = self.parse_tlb_type(data)
+        if ram == 0:
+            tlb_type = "REG"
         s1_mode = (data[0] >> 2) & 0x3
 
         s1_level = data[0] & 0x3
 
-        pa_l = data[2] >> 14
-        pa_h =  (data[3])& 0x1fff
-        pa = (pa_h << 18 | pa_l) * 0x1000
-        pa = pa + offset
+        pa = data[3] & 0xffffffff
+        pa = pa << 12
 
         va_l = (data[1] >> 10)
-        va_h = (data[2]) & 0x3ff
-        va = ((va_h << 22) | (va_l)) * 0x1000
-        va = va + offset
+        va_h = data[2] & 0x3ff
+        va = (va_h << 22) | va_l
 
-        if ((va >> 40) & 0xff )== 0xff:
+        #Add set to the VA
+        if ram == 0:
+            va = va >> 4
+            va = va << 8
+            va = va + nset
+            va = va << 12
+        else:
+            va = va >> 3
+            va = va << 3
+            va = va << 4
+            va = va + nset
+            va = va << 12
+        if (va >> 40) == 0xff:
             va = va + 0xffff000000000000
 
         valid = (data[2] >> 11) & 0x1
 
-        vmid_1 = (data[0] >> 26) & 0x3f
+        ns = data[4] & 0x1
+        vmid_1 = (data[0] >> 26)
         vmid_2 = data[1] & 0x3ff
         vmid = (vmid_2 << 6) | vmid_1
 
         asid = (data[0] >> 10) & 0xffff
 
+        regime = (data[0] >> 4) & 0x3
+
         size = self.parse_size(data, ram, tlb_type)
         output.append(ram)
-        output.append("N/A")
-        output.append(pa)
+        output.append(tlb_type)
         output.append(va)
+        output.append(pa)
         output.append(valid)
+        output.append(ns)
         output.append(vmid)
         output.append(asid)
         output.append(s1_mode)
         output.append(s1_level)
+        output.append(regime)
         output.append(size)
 
     def parse_tlb_type(self, data):
-        type_num = (data[3] >> 20) & 0x1
+        type_num = (data[4] >> 17) & 0x1
         if type_num == 0x0:
             s1_level = data[0] & 0x3
-            if s1_level == 0x3:
+            s1_mode = (data[0] >> 2) & 0x3
+            if s1_mode == 0x1 and s1_level == 0x2:
                 return "IPA"
             else:
                 return "REG"
@@ -358,43 +390,106 @@ class L1_TLB_KRYO3XX_GOLD(TlbDumpType_v2):
             else:
                 return "1GB"
 
-class L1_TLB_KRYO3XX_SILVER(TlbDumpType_v1):
+class L2_TLB_KRYO3XX_SILVER(TlbDumpType_v1):
     def __init__(self):
-        super(L1_TLB_KRYO3XX_SILVER, self).__init__()
+        super(L2_TLB_KRYO3XX_SILVER, self).__init__()
+        self.tableformat.addColumn('Type')
+        self.tableformat.addColumn('Valid')
+        self.tableformat.addColumn('NS')
+        self.tableformat.addColumn('ASID')
+        self.tableformat.addColumn('VMID')
+        self.tableformat.addColumn('VA/IPA', '{0:016x}', 16)
+        self.tableformat.addColumn('PA', '{0:016x}', 16)
+        self.tableformat.addColumn('DBM')
         self.unsupported_header_offset = 0
-        self.LineSize = 4
-        self.NumSets = 0x100
+        self.LineSize = 5
+        self.NumSets = 0x120
         self.NumWays = 4
 
+    def parse_tag_fn(self, output, data, nset, nway, offset):
+        # data[0-2] is tag
+        # data[3-4] is data
+        if offset >= 0x5500:
+            type = "IPA"
+        elif offset >= 0x5000:
+            type = "WALK"
+        else:
+            type = "MAIN"
+
+        valid = data[0] & 0x1
+        ns          = (data[0] >> 1) & 0x1
+        asid        = (data[0] >> 2) & 0xffff
+        vmid        = (data[0] >> 18) & 0xffff
+        if type is "MAIN":
+            size        = (data[1] >> 2) & 0x7
+            nG          = (data[1] >> 5) & 0x1
+            ap          = (data[1] >> 6) & 0x7
+            s2ap        = (data[1] >> 9) & 0x3
+            domain      = (data[1] >> 11) & 0xf
+            s1_size     = (data[1] >> 15) & 0x7
+            addr_sign   = (data[1] >> 18) & 0x1
+            va_l        = (data[1] >> 19) & 0x1fff
+            va_h        = data[2] & 0x7FFF
+            va          = (va_h << 13) | va_l
+            dbm         = (data[2] >> 15) & 0x1
+            parity      = (data[2] >> 16) & 0x3
+            pa_l = data[3] >> 17
+            pa_h = data[4] & 0x1fff
+            pa = (pa_h << 15) | pa_l
+        elif type is "WALK":
+            dbm = 0
+            va_l = (data[1] >> 14)
+            va_h = (data[2]) & 0x3f
+            va = (va_h << 18) | va_l
+            pa_l = data[3] >> 13
+            pa_h = data[4] & 0x7ff
+            pa = (pa_h << 19) | pa_l
+        else:
+              asid = 0
+              dbm = (data[0] >> 9) & 0x1
+              va = (data[1] >> 2) & 0xffffff
+              pa_l = (data[3] >> 10)
+              pa_h = data[4] & 0x3f
+              pa = (pa_h << 22) | pa_l
+
+        output.append(type)
+        output.append(valid)
+        output.append(ns)
+        output.append(asid)
+        output.append(vmid)
+        output.append(va)
+        output.append(pa)
+        output.append(dbm)
+
 # "sdm845"
-lookuptable[("sdm845", 0x20, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm845", 0x21, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm845", 0x22, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm845", 0x23, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm845", 0x24, 0x14)] = L1_TLB_KRYO3XX_GOLD()
-lookuptable[("sdm845", 0x25, 0x14)] = L1_TLB_KRYO3XX_GOLD()
-lookuptable[("sdm845", 0x26, 0x14)] = L1_TLB_KRYO3XX_GOLD()
-lookuptable[("sdm845", 0x27, 0x14)] = L1_TLB_KRYO3XX_GOLD()
+lookuptable[("sdm845", 0x120, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm845", 0x121, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm845", 0x122, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm845", 0x123, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm845", 0x124, 0x14)] = L2_TLB_KRYO3XX_GOLD()
+lookuptable[("sdm845", 0x125, 0x14)] = L2_TLB_KRYO3XX_GOLD()
+lookuptable[("sdm845", 0x126, 0x14)] = L2_TLB_KRYO3XX_GOLD()
+lookuptable[("sdm845", 0x127, 0x14)] = L2_TLB_KRYO3XX_GOLD()
 
 # "sdm670"
-lookuptable[("sdm670", 0x20, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm670", 0x21, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm670", 0x22, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm670", 0x23, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm670", 0x24, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm670", 0x25, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("sdm670", 0x26, 0x14)] = L1_TLB_KRYO3XX_GOLD()
-lookuptable[("sdm670", 0x27, 0x14)] = L1_TLB_KRYO3XX_GOLD()
+lookuptable[("sdm670", 0x120, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm670", 0x121, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm670", 0x122, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm670", 0x123, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm670", 0x124, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm670", 0x125, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("sdm670", 0x126, 0x14)] = L2_TLB_KRYO3XX_GOLD()
+lookuptable[("sdm670", 0x127, 0x14)] = L2_TLB_KRYO3XX_GOLD()
 
 # "qcs605"
-lookuptable[("qcs605", 0x20, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("qcs605", 0x21, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("qcs605", 0x22, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("qcs605", 0x23, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("qcs605", 0x24, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("qcs605", 0x25, 0x14)] = L1_TLB_KRYO3XX_SILVER()
-lookuptable[("qcs605", 0x26, 0x14)] = L1_TLB_KRYO3XX_GOLD()
-lookuptable[("qcs605", 0x27, 0x14)] = L1_TLB_KRYO3XX_GOLD()
+lookuptable[("qcs605", 0x120, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("qcs605", 0x121, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("qcs605", 0x122, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("qcs605", 0x123, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("qcs605", 0x124, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("qcs605", 0x125, 0x14)] = L2_TLB_KRYO3XX_SILVER()
+lookuptable[("qcs605", 0x126, 0x14)] = L2_TLB_KRYO3XX_GOLD()
+lookuptable[("qcs605", 0x127, 0x14)] = L2_TLB_KRYO3XX_GOLD()
 
 # "msm8998"
 lookuptable[("8998", 0x20, 0x14)] = L1_TLB_A53()