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'