mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 21:21:37 +00:00
dtoc: Move the output code into its own function
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> Tested-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
parent
ff71f9ac33
commit
49eec8c7f1
1 changed files with 52 additions and 44 deletions
|
@ -301,6 +301,57 @@ class DtbPlatdata:
|
||||||
self.Out(';\n')
|
self.Out(';\n')
|
||||||
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):
|
def GenerateTables(self):
|
||||||
"""Generate device defintions for the platform data
|
"""Generate device defintions for the platform data
|
||||||
|
|
||||||
|
@ -314,50 +365,7 @@ class DtbPlatdata:
|
||||||
self.Out('\n')
|
self.Out('\n')
|
||||||
node_txt_list = []
|
node_txt_list = []
|
||||||
for node in self._valid_nodes:
|
for node in self._valid_nodes:
|
||||||
struct_name = self.GetCompatName(node)
|
self.OutputNode(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')
|
|
||||||
|
|
||||||
# Output phandle target nodes first, since they may be referenced
|
# Output phandle target nodes first, since they may be referenced
|
||||||
# by others
|
# by others
|
||||||
|
|
Loading…
Add table
Reference in a new issue