mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-13 23:03:27 +08:00
dtoc: Extract inner loop from output_node()
This function is very long. Put the inner loop in a separate function to enhance readability. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
83187546ae
commit
26e408fe12
@ -560,6 +560,54 @@ class DtbPlatdata(object):
|
|||||||
Args:
|
Args:
|
||||||
node: node to output
|
node: node to output
|
||||||
"""
|
"""
|
||||||
|
def _output_list(node, prop):
|
||||||
|
"""Output the C code for a devicetree property that holds a list
|
||||||
|
|
||||||
|
Args:
|
||||||
|
node (fdt.Node): Node to output
|
||||||
|
prop (fdt.Prop): Prop to output
|
||||||
|
"""
|
||||||
|
self.buf('{')
|
||||||
|
vals = []
|
||||||
|
# For phandles, output a reference to the platform data
|
||||||
|
# of the target node.
|
||||||
|
info = self.get_phandle_argc(prop, node.name)
|
||||||
|
if info:
|
||||||
|
# Process the list as pairs of (phandle, id)
|
||||||
|
pos = 0
|
||||||
|
item = 0
|
||||||
|
for args in info.args:
|
||||||
|
phandle_cell = prop.value[pos]
|
||||||
|
phandle = fdt_util.fdt32_to_cpu(phandle_cell)
|
||||||
|
target_node = self._fdt.phandle_to_node[phandle]
|
||||||
|
name = conv_name_to_c(target_node.name)
|
||||||
|
arg_values = []
|
||||||
|
for i in range(args):
|
||||||
|
arg_values.append(str(fdt_util.fdt32_to_cpu(prop.value[pos + 1 + i])))
|
||||||
|
pos += 1 + args
|
||||||
|
# node member is filled with NULL as the real value
|
||||||
|
# will be update at run-time during dm_init_and_scan()
|
||||||
|
# by dm_populate_phandle_data()
|
||||||
|
vals.append('\t{NULL, {%s}}' % (', '.join(arg_values)))
|
||||||
|
var_node = '%s%s.%s[%d].node' % \
|
||||||
|
(VAL_PREFIX, var_name, member_name, item)
|
||||||
|
# Save the the link information to be use to define
|
||||||
|
# dm_populate_phandle_data()
|
||||||
|
self._links.append({'var_node': var_node, 'dev_name': name})
|
||||||
|
item += 1
|
||||||
|
for val in vals:
|
||||||
|
self.buf('\n\t\t%s,' % val)
|
||||||
|
else:
|
||||||
|
for val in prop.value:
|
||||||
|
vals.append(get_value(prop.type, val))
|
||||||
|
|
||||||
|
# Put 8 values per line to avoid very long lines.
|
||||||
|
for i in range(0, len(vals), 8):
|
||||||
|
if i:
|
||||||
|
self.buf(',\n\t\t')
|
||||||
|
self.buf(', '.join(vals[i:i + 8]))
|
||||||
|
self.buf('}')
|
||||||
|
|
||||||
struct_name, _ = self.get_normalized_compat_name(node)
|
struct_name, _ = self.get_normalized_compat_name(node)
|
||||||
var_name = conv_name_to_c(node.name)
|
var_name = conv_name_to_c(node.name)
|
||||||
self.buf('static struct %s%s %s%s = {\n' %
|
self.buf('static struct %s%s %s%s = {\n' %
|
||||||
@ -573,46 +621,7 @@ class DtbPlatdata(object):
|
|||||||
|
|
||||||
# Special handling for lists
|
# Special handling for lists
|
||||||
if isinstance(prop.value, list):
|
if isinstance(prop.value, list):
|
||||||
self.buf('{')
|
_output_list(node, prop)
|
||||||
vals = []
|
|
||||||
# For phandles, output a reference to the platform data
|
|
||||||
# of the target node.
|
|
||||||
info = self.get_phandle_argc(prop, node.name)
|
|
||||||
if info:
|
|
||||||
# Process the list as pairs of (phandle, id)
|
|
||||||
pos = 0
|
|
||||||
item = 0
|
|
||||||
for args in info.args:
|
|
||||||
phandle_cell = prop.value[pos]
|
|
||||||
phandle = fdt_util.fdt32_to_cpu(phandle_cell)
|
|
||||||
target_node = self._fdt.phandle_to_node[phandle]
|
|
||||||
name = conv_name_to_c(target_node.name)
|
|
||||||
arg_values = []
|
|
||||||
for i in range(args):
|
|
||||||
arg_values.append(str(fdt_util.fdt32_to_cpu(prop.value[pos + 1 + i])))
|
|
||||||
pos += 1 + args
|
|
||||||
# node member is filled with NULL as the real value
|
|
||||||
# will be update at run-time during dm_init_and_scan()
|
|
||||||
# by dm_populate_phandle_data()
|
|
||||||
vals.append('\t{NULL, {%s}}' % (', '.join(arg_values)))
|
|
||||||
var_node = '%s%s.%s[%d].node' % \
|
|
||||||
(VAL_PREFIX, var_name, member_name, item)
|
|
||||||
# Save the the link information to be use to define
|
|
||||||
# dm_populate_phandle_data()
|
|
||||||
self._links.append({'var_node': var_node, 'dev_name': name})
|
|
||||||
item += 1
|
|
||||||
for val in vals:
|
|
||||||
self.buf('\n\t\t%s,' % val)
|
|
||||||
else:
|
|
||||||
for val in prop.value:
|
|
||||||
vals.append(get_value(prop.type, val))
|
|
||||||
|
|
||||||
# Put 8 values per line to avoid very long lines.
|
|
||||||
for i in range(0, len(vals), 8):
|
|
||||||
if i:
|
|
||||||
self.buf(',\n\t\t')
|
|
||||||
self.buf(', '.join(vals[i:i + 8]))
|
|
||||||
self.buf('}')
|
|
||||||
else:
|
else:
|
||||||
self.buf(get_value(prop.type, prop.value))
|
self.buf(get_value(prop.type, prop.value))
|
||||||
self.buf(',\n')
|
self.buf(',\n')
|
||||||
|
Loading…
Reference in New Issue
Block a user