Skip to content
Snippets Groups Projects
Commit abb326b8 authored by Soumen Ghosh's avatar Soumen Ghosh
Browse files

lrdp-v2: parse cpuss and mhm scandump parsing added

To parse CPU subsstem register information parse_cpuss function added. Also MHM scandump data dumping from ramdump added

Change-Id: Ic5bf311c84485662825702a312cef91bf9151aa5
parent fe9f5741
Branches
No related tags found
No related merge requests found
......@@ -34,7 +34,7 @@ from sysregs import SysRegDump
from fcmdump import FCM_Dump
MEMDUMPV2_MAGIC = 0x42445953
MAX_NUM_ENTRIES = 0x150
MAX_NUM_ENTRIES = 0x162
IMEM_OFFSET_MEM_DUMP_TABLE = 0x3f010
class client(object):
......@@ -65,6 +65,7 @@ class client(object):
MSM_DUMP_DATA_CPUSS = 0xEF
MSM_DUMP_DATA_SCANDUMP_PER_CPU = 0x130
MSM_DUMP_DATA_LLC_CACHE = 0x140
MSM_DUMP_DATA_MHM = 0x161
MSM_DUMP_DATA_MAX = MAX_NUM_ENTRIES
# Client functions will be executed in top-to-bottom order
......@@ -72,6 +73,7 @@ client_types = [
('MSM_DUMP_DATA_SCANDUMP', 'parse_scandump'),
('MSM_DUMP_DATA_SCANDUMP_PER_CPU', 'parse_scandump'),
('MSM_DUMP_DATA_FCMDUMP', 'parse_fcmdump'),
('MSM_DUMP_DATA_CPUSS', 'parse_cpuss'),
('MSM_DUMP_DATA_CPU_CTX', 'parse_cpu_ctx'),
('MSM_DUMP_DATA_L1_INST_TLB', 'parse_tlb_common'),
('MSM_DUMP_DATA_L1_DATA_TLB', 'parse_tlb_common'),
......@@ -93,6 +95,7 @@ client_types = [
('MSM_DUMP_DATA_L2_TLB', 'parse_tlb_common'),
('MSM_DUMP_DATA_LLC_CACHE', 'parse_system_cache_common'),
('MSM_DUMP_DATA_MISC', 'parse_sysdbg_regs'),
('MSM_DUMP_DATA_MHM', 'parse_mhm_dump')
]
qdss_tag_to_field_name = {
......@@ -180,6 +183,27 @@ class DebugImage_v2():
sv2.dump_core_pc(ram_dump)
sv2.dump_all_regs(ram_dump)
return
def parse_cpuss(self, version, start, end, client_id, ram_dump):
client_name = self.dump_data_id_lookup_table[client_id]
cpuss_file_prefix = "cpuss_reg_dump.xml"
print_out_str(
'Parsing {0} context start {1:x} end {2:x}'.format(client_name, start, end))
try:
cpuss_parser_path = local_settings.cpuss_parser_path
cpuss_parser_json = local_settings.cpuss_parser_json
except AttributeError:
print_out_str('Could not find cpuss_parser_path . Please define cpuss_parser_path in local_settings')
return
offset = None
for eb_file in ram_dump.ebi_files:
if start >= eb_file[1] and start <= eb_file[2]:
input = eb_file[3]
offset = start - eb_file[1]
break
if offset is None:
print_out_str("parse_cpuss start address {0} not found".format(start))
print_out_str("parse_cpuss offset address = {0} input = {1} cpuss_parser_json = {2}".format(hex(int(offset)),input,cpuss_parser_json))
subprocess.call('python {0} -i {1} -O {2} -o {3} -j {4}'.format(cpuss_parser_path, input, hex(int(offset)), ram_dump.outdir, cpuss_parser_json))
def parse_fcmdump(self, version, start, end, client_id, ram_dump):
client_name = self.dump_data_id_lookup_table[client_id]
......@@ -646,7 +670,22 @@ class DebugImage_v2():
results.append((client_name, client_id,client_table[client_name], entry_pa_addr,end_addr))
return results
def parse_mhm_dump(self, version, start, end, client_id, ram_dump):
if ram_dump.arm64:
arch = "aarch64"
else:
arch = "aarch32"
if client_id == client.MSM_DUMP_DATA_MHM:
input = os.path.join(ram_dump.outdir, "mhm_scandump.bin")
print_out_str(
'Parsing mhm dump start {0:x} end {1:x} {2}'.format(start, end, input))
header_bin = ram_dump.open_file(input)
it = range(start, end)
for i in it:
val = ram_dump.read_byte(i, False)
header_bin.write(struct.pack("<B", val))
header_bin.close()
return
class MsmDumpTable(object):
def __init__(self):
self.name = "Anon"
......@@ -746,6 +785,8 @@ 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_MHM] = 'MSM_DUMP_DATA_MHM'
for i in range(0, cpus):
self.dump_data_id_lookup_table[
client.MSM_DUMP_DATA_L2_TLB + i] = 'MSM_DUMP_DATA_L2_TLB'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment