diff --git a/linux-ramdump-parser-v2/cachedumplib.py b/linux-ramdump-parser-v2/cachedumplib.py
index 62b0fea050341880612677e5b8f2cfceb5c24708..2892cc1bfed18d4384e107a1771d202d0577a075 100644
--- a/linux-ramdump-parser-v2/cachedumplib.py
+++ b/linux-ramdump-parser-v2/cachedumplib.py
@@ -567,6 +567,45 @@ class L1_ICache_KRYO3XX_GOLD(CacheDumpType_v1):
         output.append(ns)
         output.append(addr)
 
+class LLC_SYSTEM_CACHE_KRYO3XX(CacheDumpType_v1):
+    """Refer to documentation:LLC_HDD"""
+    def __init__(self):
+        super(LLC_SYSTEM_CACHE_KRYO3XX, self).__init__()
+        self.tableformat.addColumn('G0 Valid')
+        self.tableformat.addColumn('G0 Dirty')
+        self.tableformat.addColumn('G1 Valid')
+        self.tableformat.addColumn('G1 Dirty')
+        self.tableformat.addColumn('SCID')
+        self.tableformat.addColumn('ECC')
+        self.tableformat.addColumn('Tag address')
+        self.unsupported_header_offset = 0
+        self.TagSize = 2
+        self.LineSize = 16
+        self.NumSets = 0x400
+        self.NumWays = 12
+
+    def parse_tag_fn(self, output, data, nset, nway):
+        if self.TagSize != 2:
+            raise Exception('cache tag size mismatch')
+
+        G0_valid = data[0] & 0x1
+        G1_valid = (data[0] >> 2) & 0x1
+        G0_dirty = (data[0] >> 3) & 0x1
+        G1_dirty = (data[0] >> 4) & 0x1
+        SCID = (data[0] >> 7) & 0x1f
+        ECC_bits = (data[0] >> 14) & 0x7f
+
+        DONE_bit = (data[1] >> 28) & 0x1
+        addr = data[1] & 0x3fffffff
+
+        output.append(G0_valid)
+        output.append(G0_dirty)
+        output.append(G1_valid)
+        output.append(G1_dirty)
+        output.append(SCID)
+        output.append(ECC_bits)
+        output.append(addr)
+
 L1_DCache_KRYO2XX_SILVER = L1_DCache_A53
 L1_ICache_KYRO2XX_SILVER = L1_ICache_A53
 
@@ -590,6 +629,12 @@ lookuptable[("sdm845", 0x65, 0x14)] = L1_ICache_KRYO3XX_GOLD()
 lookuptable[("sdm845", 0x66, 0x14)] = L1_ICache_KRYO3XX_GOLD()
 lookuptable[("sdm845", 0x67, 0x14)] = L1_ICache_KRYO3XX_GOLD()
 
+
+lookuptable[("sdm845", 0x121, 0x14)] = LLC_SYSTEM_CACHE_KRYO3XX()
+lookuptable[("sdm845", 0x122, 0x14)] = LLC_SYSTEM_CACHE_KRYO3XX()
+lookuptable[("sdm845", 0x123, 0x14)] = LLC_SYSTEM_CACHE_KRYO3XX()
+lookuptable[("sdm845", 0x124, 0x14)] = LLC_SYSTEM_CACHE_KRYO3XX()
+
 # "msmcobalt"
 lookuptable[("cobalt", 0x80, 0x14)] = L1_DCache_KRYO2XX_SILVER()
 lookuptable[("cobalt", 0x81, 0x14)] = L1_DCache_KRYO2XX_SILVER()
diff --git a/linux-ramdump-parser-v2/debug_image_v2.py b/linux-ramdump-parser-v2/debug_image_v2.py
index 509249899a8e3fb9861aac0585eb1a534bfb76e0..d1cf46ebaa1f49090b79a34df44bca83098b568d 100755
--- a/linux-ramdump-parser-v2/debug_image_v2.py
+++ b/linux-ramdump-parser-v2/debug_image_v2.py
@@ -52,6 +52,7 @@ class client(object):
     MSM_DUMP_DATA_LOG_BUF = 0x110
     MSM_DUMP_DATA_LOG_BUF_FIRST_IDX = 0x111
     MSM_DUMP_DATA_L2_TLB = 0x120
+    MSM_DUMP_DATA_LLC_CACHE = 0x121
     MSM_DUMP_DATA_SCANDUMP = 0xEB
     MSM_DUMP_DATA_MAX = MAX_NUM_ENTRIES
 
@@ -74,6 +75,7 @@ client_types = [
     ('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_LLC_CACHE', 'parse_system_cache_common'),
 ]
 
 qdss_tag_to_field_name = {
@@ -213,6 +215,23 @@ class DebugImage_v2():
             print_out_exception()
         outfile.close()
 
+    def parse_system_cache_common(self, version, start, end, client_id, ramdump):
+        client_name = self.dump_data_id_lookup_table[client_id]
+        bank_number = client_id - client.MSM_DUMP_DATA_LLC_CACHE
+
+        filename = '{0}_0x{1:x}'.format(client_name, bank_number)
+        outfile = ramdump.open_file(filename)
+        cache_type = lookup_cache_type(ramdump.hw_id, client_id, version)
+        try:
+            cache_type.parse(start, end, ramdump, outfile)
+        except NotImplementedError:
+            print_out_str('System cache dumping not supported'
+                          % client_name)
+        except:
+            print_out_str('!!! Unhandled exception while running {0}'.format(client_name))
+            print_out_exception()
+        outfile.close()
+
     def parse_tlb_common(self, version, start, end, client_id, ramdump):
         client_name = self.dump_data_id_lookup_table[client_id]
         core = client_id & 0xF
@@ -488,6 +507,10 @@ class DebugImage_v2():
                     client.MSM_DUMP_DATA_L2_CACHE + i] = 'MSM_DUMP_DATA_L2_CACHE'
                 self.dump_data_id_lookup_table[
                     client.MSM_DUMP_DATA_ETM_REG + i] = 'MSM_DUMP_DATA_ETM_REG'
+
+        for i in range(0, 4):
+                self.dump_data_id_lookup_table[
+                    client.MSM_DUMP_DATA_LLC_CACHE + i] = 'MSM_DUMP_DATA_LLC_CACHE'
         # 0x100 - tmc-etr registers and 0x101 - for tmc-etf registers
         self.dump_data_id_lookup_table[
             client.MSM_DUMP_DATA_TMC_REG + 1] = 'MSM_DUMP_DATA_TMC_REG'