diff mbox

[U-Boot,1/2] dtoc: Move the output code into its own function

Message ID 20170423004222.5720-1-sjg@chromium.org
State Accepted
Commit 49eec8c7f1ce6773c733950e2fb300a8a8f4562b
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass April 23, 2017, 12:42 a.m. UTC
The code to generate the tables is quite long. Move the node-output code
into its own function.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 tools/dtoc/dtoc.py | 96 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 52 insertions(+), 44 deletions(-)

Comments

Kever Yang April 24, 2017, 2:13 a.m. UTC | #1
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@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@rock-chips.com>

Thanks,
- Kever
Simon Glass May 2, 2017, 11:12 a.m. UTC | #2
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@chromium.org>
> ---
>
>   tools/dtoc/dtoc.py | 96 +++++++++++++++++++++++++++++-------------------------
>   1 file changed, 52 insertions(+), 44 deletions(-)
>
Applied to u-boot-rockchip/next, thanks!
diff mbox

Patch

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