From 68bfae1e98e0c6537ba3364bad07783d3a21525b Mon Sep 17 00:00:00 2001 From: Karol Trzcinski Date: Wed, 18 Mar 2020 14:27:21 +0100 Subject: [PATCH 1/2] tools: Reformat extended manifest parsing After reformat it will be easier to add new data of supported extended manifest. Signed-off-by: Karol Trzcinski --- tools/sof_ri_info/sof_ri_info.py | 37 ++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/tools/sof_ri_info/sof_ri_info.py b/tools/sof_ri_info/sof_ri_info.py index d3d3b120b4c3..0c97be180f43 100755 --- a/tools/sof_ri_info/sof_ri_info.py +++ b/tools/sof_ri_info/sof_ri_info.py @@ -250,22 +250,12 @@ def seg_flags_to_string(flags): # Parsers -def parse_extended_manifest(reader): - """ Parses extended manifest from sof binary - """ - ext_mft = ExtendedManifest() +def parse_extended_manifest_ae1(reader): + ext_mft = ExtendedManifestAE1() hdr = Component('ext_mft_hdr', 'Header', 0) ext_mft.add_comp(hdr) - # Try to detect signature first sig = reader.read_bytes(4).decode() - if sig != '$AE1': - reader.set_offset(0) - reader.info('info: Extended Manifest not found (sig = '+sig+')') - reader.ext_mft_length = 0 - hdr.add_a(Auint('length', reader.ext_mft_length)) - return ext_mft - reader.info('Extended Manifest (' + sig + ')', -4) hdr.add_a(Astring('sig', sig)) @@ -279,6 +269,25 @@ def parse_extended_manifest(reader): reader.ff_data(reader.ext_mft_length-16) return ext_mft +def parse_extended_manifest(reader): + """ Parses extended manifest from sof binary + """ + + # Try to detect signature first + sig = reader.read_bytes(4).decode() + reader.set_offset(0) + if sig == '$AE1': + ext_mft = parse_extended_manifest_ae1(reader) + else: + ext_mft = ExtendedManifestAE1() + hdr = Component('ext_mft_hdr', 'Header', 0) + ext_mft.add_comp(hdr) + reader.info('info: Extended Manifest not found (sig = '+sig+')') + reader.ext_mft_length = 0 + hdr.add_a(Auint('length', reader.ext_mft_length)) + + return ext_mft + def parse_cse_manifest(reader, add_module_entries): """ Parses CSE manifest form sof binary """ @@ -818,11 +827,11 @@ def dump_comp_info(self, pref, name_filter=''): print() comp.dump_info(pref + ' ') -class ExtendedManifest(Component): +class ExtendedManifestAE1(Component): """ Extended manifest """ def __init__(self): - super(ExtendedManifest, self).__init__('ext_mft', + super(ExtendedManifestAE1, self).__init__('ext_mft', 'Extended Manifest', 0) def dump_info(self, pref): From 82447b0d3bf22f562a0a5f7a9149ffbbb8e40e6d Mon Sep 17 00:00:00 2001 From: Karol Trzcinski Date: Wed, 18 Mar 2020 14:45:57 +0100 Subject: [PATCH 2/2] tools: ext_manifest: Read manifest from sof_ri_info script This tool must be able to read extended manifest content and move to next manifest in proper way. Signed-off-by: Karol Trzcinski --- tools/sof_ri_info/sof_ri_info.py | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tools/sof_ri_info/sof_ri_info.py b/tools/sof_ri_info/sof_ri_info.py index 0c97be180f43..2c1ad8fdf601 100755 --- a/tools/sof_ri_info/sof_ri_info.py +++ b/tools/sof_ri_info/sof_ri_info.py @@ -269,6 +269,32 @@ def parse_extended_manifest_ae1(reader): reader.ff_data(reader.ext_mft_length-16) return ext_mft +def parse_extended_manifest_xman(reader): + ext_mft = ExtendedManifestXMan() + hdr = Component('ext_mft_hdr', 'Header', 0) + ext_mft.add_comp(hdr) + + sig = reader.read_bytes(4).decode() + reader.info('Extended Manifest (' + sig + ')', -4) + hdr.add_a(Astring('sig', sig)) + + # Next dword is the total length of the extended manifest + # (need to use it for further parsing) + reader.ext_mft_length = reader.read_dw() + hdr_length = reader.read_dw() + hdr_ver = reader.read_dw() + + major = hdr_ver >> 24 + minor = (hdr_ver >> 12) & 0xFFF + patch = hdr_ver & 0xFFF + + hdr.add_a(Auint('length', reader.ext_mft_length)) + hdr.add_a(Astring('ver', '{}.{}.{}'.format(major, minor, patch))) + hdr.add_a(Auint('hdr_length', hdr_length)) + + reader.ff_data(reader.ext_mft_length-16) + return ext_mft + def parse_extended_manifest(reader): """ Parses extended manifest from sof binary """ @@ -278,6 +304,8 @@ def parse_extended_manifest(reader): reader.set_offset(0) if sig == '$AE1': ext_mft = parse_extended_manifest_ae1(reader) + elif sig == 'XMan': + ext_mft = parse_extended_manifest_xman(reader) else: ext_mft = ExtendedManifestAE1() hdr = Component('ext_mft_hdr', 'Header', 0) @@ -844,6 +872,23 @@ def dump_info(self, pref): print(out) self.dump_comp_info(pref, name_filter='Header') +class ExtendedManifestXMan(Component): + """ Extended manifest + """ + def __init__(self): + super(ExtendedManifestXMan, self).__init__('ext_mft', + 'Extended Manifest', 0) + + def dump_info(self, pref): + hdr = self.cdir['ext_mft_hdr'] + if hdr.adir['length'].val == 0: + return + out = '{}{}'.format(pref, self.name) + out += ' ver {}'.format(hdr.adir['ver']) + out += ' length {}'.format(hdr.adir['length'].val) + print(out) + self.dump_comp_info(pref, name_filter='Header') + class CseManifest(Component): """ CSE Manifest """