[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