[U-Boot] [PATCH 1/2] dtoc: Move the output code into its own function
Kever Yang
kever.yang at rock-chips.com
Mon Apr 24 02:13:46 UTC 2017
Hi Simon,
On 04/23/2017 08:42 AM, Simon Glass wrote:
> The code to generate the tables is quite long. Move the node-output code
> into its own function.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> tools/dtoc/dtoc.py | 96 +++++++++++++++++++++++++++++-------------------------
> 1 file changed, 52 insertions(+), 44 deletions(-)
>
> diff --git a/tools/dtoc/dtoc.py b/tools/dtoc/dtoc.py
> index afc5171c2a..0a111eced6 100755
> --- a/tools/dtoc/dtoc.py
> +++ b/tools/dtoc/dtoc.py
> @@ -301,6 +301,57 @@ class DtbPlatdata:
> self.Out(';\n')
> self.Out('};\n')
>
> + def OutputNode(self, node):
> + """Output the C code for a node
> +
> + Args:
> + node: node to output
> + """
> + struct_name = self.GetCompatName(node)
> + var_name = Conv_name_to_c(node.name)
> + self.Buf('static struct %s%s %s%s = {\n' %
> + (STRUCT_PREFIX, struct_name, VAL_PREFIX, var_name))
> + for pname, prop in node.props.items():
> + if pname in PROP_IGNORE_LIST or pname[0] == '#':
> + continue
> + ptype = TYPE_NAMES[prop.type]
> + member_name = Conv_name_to_c(prop.name)
> + self.Buf('\t%s= ' % TabTo(3, '.' + member_name))
> +
> + # Special handling for lists
> + if type(prop.value) == list:
> + self.Buf('{')
> + vals = []
> + # For phandles, output a reference to the platform data
> + # of the target node.
> + if self.IsPhandle(prop):
> + # Process the list as pairs of (phandle, id)
> + it = iter(prop.value)
> + for phandle_cell, id_cell in zip(it, it):
> + phandle = fdt_util.fdt32_to_cpu(phandle_cell)
> + id = fdt_util.fdt32_to_cpu(id_cell)
> + target_node = self._phandle_node[phandle]
> + name = Conv_name_to_c(target_node.name)
> + vals.append('{&%s%s, %d}' % (VAL_PREFIX, name, id))
> + else:
> + for val in prop.value:
> + vals.append(self.GetValue(prop.type, val))
> + self.Buf(', '.join(vals))
> + self.Buf('}')
> + else:
> + self.Buf(self.GetValue(prop.type, prop.value))
> + self.Buf(',\n')
> + self.Buf('};\n')
> +
> + # Add a device declaration
> + self.Buf('U_BOOT_DEVICE(%s) = {\n' % var_name)
> + self.Buf('\t.name\t\t= "%s",\n' % struct_name)
> + self.Buf('\t.platdata\t= &%s%s,\n' % (VAL_PREFIX, var_name))
> + self.Buf('\t.platdata_size\t= sizeof(%s%s),\n' %
> + (VAL_PREFIX, var_name))
> + self.Buf('};\n')
> + self.Buf('\n')
> +
> def GenerateTables(self):
> """Generate device defintions for the platform data
>
> @@ -314,50 +365,7 @@ class DtbPlatdata:
> self.Out('\n')
> node_txt_list = []
> for node in self._valid_nodes:
> - struct_name = self.GetCompatName(node)
> - var_name = Conv_name_to_c(node.name)
> - self.Buf('static struct %s%s %s%s = {\n' %
> - (STRUCT_PREFIX, struct_name, VAL_PREFIX, var_name))
> - for pname, prop in node.props.items():
> - if pname in PROP_IGNORE_LIST or pname[0] == '#':
> - continue
> - ptype = TYPE_NAMES[prop.type]
> - member_name = Conv_name_to_c(prop.name)
> - self.Buf('\t%s= ' % TabTo(3, '.' + member_name))
> -
> - # Special handling for lists
> - if type(prop.value) == list:
> - self.Buf('{')
> - vals = []
> - # For phandles, output a reference to the platform data
> - # of the target node.
> - if self.IsPhandle(prop):
> - # Process the list as pairs of (phandle, id)
> - it = iter(prop.value)
> - for phandle_cell, id_cell in zip(it, it):
> - phandle = fdt_util.fdt32_to_cpu(phandle_cell)
> - id = fdt_util.fdt32_to_cpu(id_cell)
> - target_node = self._phandle_node[phandle]
> - name = Conv_name_to_c(target_node.name)
> - vals.append('{&%s%s, %d}' % (VAL_PREFIX, name, id))
> - else:
> - for val in prop.value:
> - vals.append(self.GetValue(prop.type, val))
> - self.Buf(', '.join(vals))
> - self.Buf('}')
> - else:
> - self.Buf(self.GetValue(prop.type, prop.value))
> - self.Buf(',\n')
> - self.Buf('};\n')
> -
> - # Add a device declaration
> - self.Buf('U_BOOT_DEVICE(%s) = {\n' % var_name)
> - self.Buf('\t.name\t\t= "%s",\n' % struct_name)
> - self.Buf('\t.platdata\t= &%s%s,\n' % (VAL_PREFIX, var_name))
> - self.Buf('\t.platdata_size\t= sizeof(%s%s),\n' %
> - (VAL_PREFIX, var_name))
> - self.Buf('};\n')
> - self.Buf('\n')
> + self.OutputNode(node)
>
> # Output phandle target nodes first, since they may be referenced
> # by others
Tested-by: Kever Yang <kever.yang at rock-chips.com>
Thanks,
- Kever
More information about the U-Boot
mailing list