scripts: extract_dts_includes: Fix extract_cells for a list
If we had something like: gpios = <&gpiod 13 GPIO_INT_ACTIVE_LOW &gpiod 14 GPIO_INT_ACTIVE_LOW>; The script blows up in extract_cells. While extract_cells attempted to handle more than a single item in such a list, it didn't manipulate the prop list for the recursive calls properly. Since we pop off items from the prop list as we use them we can easily pass the prop list to the rescurive call to fix things. Besides, if alias is defined for the node, indexed aliases defines are generated: #define GPIO_LEDS_0_GPIO_FLAGS_0 4 #define GPIO_LEDS_0_GPIO_FLAGS_1 0 #define GPIO_LEDS_0_GPIO_PIN_0 5 #define GPIO_LEDS_0_GPIO_PIN_1 6 #define LED1_GPIO_FLAGS_0 GPIO_LEDS_0_GPIO_FLAGS_0 #define LED1_GPIO_FLAGS_1 GPIO_LEDS_0_GPIO_FLAGS_1 #define LED1_GPIO_PIN_0 GPIO_LEDS_0_GPIO_PIN_0 #define LED1_GPIO_PIN_1 GPIO_LEDS_0_GPIO_PIN_1 Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
This commit is contained in:
parent
081c9c3bec
commit
97a1ea22fc
1 changed files with 18 additions and 21 deletions
|
@ -188,14 +188,10 @@ def extract_reg_prop(node_address, names, defs, def_label, div, post_label):
|
|||
index += 1
|
||||
|
||||
|
||||
def extract_controller(node_address, prop, prefix, defs, def_label):
|
||||
try:
|
||||
props = list(reduced[node_address]['props'].get(prop))
|
||||
except:
|
||||
props = reduced[node_address]['props'].get(prop)
|
||||
def extract_controller(node_address, prop, prop_values, prefix, defs, def_label):
|
||||
|
||||
# get controller node (referenced via phandle)
|
||||
cell_parent = phandles[props[0]]
|
||||
cell_parent = phandles[prop_values[0]]
|
||||
|
||||
try:
|
||||
l_cell = reduced[cell_parent]['props'].get('label')
|
||||
|
@ -227,15 +223,10 @@ def extract_controller(node_address, prop, prefix, defs, def_label):
|
|||
insert_defs(node_address, defs, prop_def, prop_alias)
|
||||
|
||||
|
||||
def extract_cells(node_address, yaml, prop, names, index, prefix, defs,
|
||||
def extract_cells(node_address, yaml, prop, prop_values, names, index, prefix, defs,
|
||||
def_label):
|
||||
try:
|
||||
props = list(reduced[node_address]['props'].get(prop))
|
||||
except:
|
||||
props = reduced[node_address]['props'].get(prop)
|
||||
|
||||
cell_parent = phandles[props.pop(0)]
|
||||
|
||||
cell_parent = phandles[prop_values.pop(0)]
|
||||
|
||||
try:
|
||||
cell_yaml = yaml[get_compat(cell_parent)]
|
||||
|
@ -259,7 +250,7 @@ def extract_cells(node_address, yaml, prop, names, index, prefix, defs,
|
|||
l_base = def_label.split('/')
|
||||
l_base += prefix
|
||||
# Check if #define should be indexed (_0, _1, ...)
|
||||
if index == 0 and len(props) < (num_cells + 2):
|
||||
if index == 0 and len(prop_values) < (num_cells + 2):
|
||||
# Less than 2 elements in prop_values (ie len < num_cells + phandle + 1)
|
||||
# Indexing is not needed
|
||||
l_idx = []
|
||||
|
@ -277,7 +268,7 @@ def extract_cells(node_address, yaml, prop, names, index, prefix, defs,
|
|||
else:
|
||||
label = l_base + l_cell + l_cellname + l_idx
|
||||
label_name = l_base + name + l_cellname
|
||||
prop_def['_'.join(label)] = props.pop(0)
|
||||
prop_def['_'.join(label)] = prop_values.pop(0)
|
||||
if len(name):
|
||||
prop_alias['_'.join(label_name)] = '_'.join(label)
|
||||
|
||||
|
@ -285,14 +276,14 @@ def extract_cells(node_address, yaml, prop, names, index, prefix, defs,
|
|||
if node_address in aliases:
|
||||
for i in aliases[node_address]:
|
||||
alias_label = convert_string_to_label(i)
|
||||
alias = [alias_label] + label[1:-1]
|
||||
prop_alias['_'.join(alias)] = '_'.join(label[:-1])
|
||||
alias = [alias_label] + label[1:]
|
||||
prop_alias['_'.join(alias)] = '_'.join(label)
|
||||
|
||||
insert_defs(node_address, defs, prop_def, prop_alias)
|
||||
|
||||
# recurse if we have anything left
|
||||
if len(props):
|
||||
extract_cells(node_address, yaml, prop, names,
|
||||
if len(prop_values):
|
||||
extract_cells(node_address, yaml, prop, prop_values, names,
|
||||
index + 1, prefix, defs, def_label)
|
||||
|
||||
|
||||
|
@ -449,8 +440,14 @@ def extract_property(node_compat, yaml, node_address, prop, prop_val, names,
|
|||
reduced[node_address]['props'][prop],
|
||||
names[p_index], p_index, defs, def_label)
|
||||
elif 'clocks' in prop or 'gpios' in prop:
|
||||
extract_controller(node_address, prop, prefix, defs, def_label)
|
||||
extract_cells(node_address, yaml, prop,
|
||||
try:
|
||||
prop_values = list(reduced[node_address]['props'].get(prop))
|
||||
except:
|
||||
prop_values = reduced[node_address]['props'].get(prop)
|
||||
|
||||
extract_controller(node_address, prop, prop_values, prefix, defs,
|
||||
def_label)
|
||||
extract_cells(node_address, yaml, prop, prop_values,
|
||||
names, 0, prefix, defs, def_label)
|
||||
else:
|
||||
extract_single(node_address, yaml,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue