From: Simon Glass Date: Tue, 29 Dec 2020 03:35:02 +0000 (-0700) Subject: dtoc: Add the method for each command to OutputFile X-Git-Url: http://git.dujemihanovic.xyz/login.html?a=commitdiff_plain;h=a7d5f96ef1cf13b83a143d6977e2937bcc1b6c75;p=u-boot.git dtoc: Add the method for each command to OutputFile Rather than the if/else construct, update OutputFile with the method to call to process each command. This is easier to maintain as the number of commands increases. Rename generate_tables to generate_plat since it better describes what is being generated ('plat' is the U-Boot name for platform data). With this, each output method needs to have the same signature. Store the output structures in a member variable instead of using parameters, to accomplish this. Signed-off-by: Simon Glass --- diff --git a/tools/dtoc/dtb_platdata.py b/tools/dtoc/dtb_platdata.py index e07a5d3a1c..4696ff6309 100644 --- a/tools/dtoc/dtb_platdata.py +++ b/tools/dtoc/dtb_platdata.py @@ -59,7 +59,7 @@ class Ftype(IntEnum): # fname: Filename excluding directory, e.g. 'dt-plat.c' # hdr_comment: Comment explaining the purpose of the file OutputFile = collections.namedtuple('OutputFile', - ['ftype', 'fname', 'hdr_comment']) + ['ftype', 'fname', 'method', 'hdr_comment']) # This holds information about a property which includes phandles. # @@ -194,6 +194,11 @@ class DtbPlatdata(): _drivers_additional: List of additional drivers to use during scanning _dirname: Directory to hold output files, or None for none (all files go to stdout) + _struct_data (dict): OrderedDict of dtplat structures to output + key (str): Node name, as a C identifier + value: dict containing structure fields: + key (str): Field name + value: Prop object with field information """ def __init__(self, dtb_fname, include_disabled, warning_disabled, drivers_additional=None): @@ -208,6 +213,7 @@ class DtbPlatdata(): self._driver_aliases = {} self._drivers_additional = drivers_additional or [] self._dirnames = [None] * len(Ftype) + self._struct_data = collections.OrderedDict() def get_normalized_compat_name(self, node): """Get a node's normalized compat name @@ -570,14 +576,9 @@ class DtbPlatdata(): Once the widest property is determined, all other properties are updated to match that width. - Returns: - dict of dict: dict containing structures: - key (str): Node name, as a C identifier - value: dict containing structure fields: - key (str): Field name - value: Prop object with field information + The results are written to self._struct_data """ - structs = collections.OrderedDict() + structs = self._struct_data for node in self._valid_nodes: node_name, _ = self.get_normalized_compat_name(node) fields = {} @@ -608,8 +609,6 @@ class DtbPlatdata(): if name not in PROP_IGNORE_LIST and name[0] != '#': prop.Widen(struct[name]) - return structs - def scan_phandles(self): """Figure out what phandles each node uses @@ -638,21 +637,14 @@ class DtbPlatdata(): pos += 1 + args - def generate_structs(self, structs): + def generate_structs(self): """Generate struct defintions for the platform data This writes out the body of a header file consisting of structure definitions for node in self._valid_nodes. See the documentation in doc/driver-model/of-plat.rst for more information. - - Args: - structs (dict): dict containing structures: - key (str): Node name, as a C identifier - value: dict containing structure fields: - key (str): Field name - value: Prop object with field information - """ + structs = self._struct_data self.out('#include \n') self.out('#include \n') @@ -785,7 +777,7 @@ class DtbPlatdata(): self.out(''.join(self.get_buf())) - def generate_tables(self): + def generate_plat(self): """Generate device defintions for the platform data This writes out C platform data initialisation data and @@ -830,9 +822,10 @@ class DtbPlatdata(): OUTPUT_FILES = { 'struct': OutputFile(Ftype.HEADER, 'dt-structs-gen.h', + DtbPlatdata.generate_structs, 'Defines the structs used to hold devicetree data'), 'platdata': - OutputFile(Ftype.SOURCE, 'dt-plat.c', + OutputFile(Ftype.SOURCE, 'dt-plat.c', DtbPlatdata.generate_plat, 'Declares the U_BOOT_DRIVER() records and platform data'), } @@ -868,7 +861,7 @@ def run_steps(args, dtb_file, include_disabled, output, output_dirs, plat.scan_tree() plat.scan_reg_sizes() plat.setup_output_dirs(output_dirs) - structs = plat.scan_structs() + plat.scan_structs() plat.scan_phandles() cmds = args[0].split(',') @@ -882,8 +875,5 @@ def run_steps(args, dtb_file, include_disabled, output, output_dirs, plat.setup_output(outfile.ftype, outfile.fname if output_dirs else output) plat.out_header(outfile) - if cmd == 'struct': - plat.generate_structs(structs) - elif cmd == 'platdata': - plat.generate_tables() + outfile.method(plat) plat.finish_output()