Message ID | 20170423004222.5720-1-sjg@chromium.org |
---|---|
State | Accepted |
Commit | 49eec8c7f1ce6773c733950e2fb300a8a8f4562b |
Delegated to: | Simon Glass |
Headers | show |
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
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 --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
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(-)