From 527640d8bf120bec4ba590ecac805e7a434ce192 Mon Sep 17 00:00:00 2001 From: rhythmp <rhythmp@codeaurora.org> Date: Wed, 22 Mar 2017 17:32:33 -0700 Subject: [PATCH] ldrpv2: cachedumplib: Add support for sdm845. Add decoding information for LLC (System) cache. Included LLC parse function. Change-Id: Idd21a68eb6b8bf0cc63d79b640dc167fa78106a4 --- linux-ramdump-parser-v2/cachedumplib.py | 45 +++++++++++++++++++++++ linux-ramdump-parser-v2/debug_image_v2.py | 23 ++++++++++++ 2 files changed, 68 insertions(+) diff --git a/linux-ramdump-parser-v2/cachedumplib.py b/linux-ramdump-parser-v2/cachedumplib.py index 62b0fea..2892cc1 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 5092498..d1cf46e 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' -- GitLab