diff --git a/cmake/dts.cmake b/cmake/dts.cmake index e9670cc72cb..fad115e1c8d 100644 --- a/cmake/dts.cmake +++ b/cmake/dts.cmake @@ -170,6 +170,7 @@ if(CONFIG_HAS_DTS) ${DTS_FIXUPS_WITH_FLAG} --keyvalue ${GENERATED_DTS_BOARD_CONF} --include ${GENERATED_DTS_BOARD_H} + --old-alias-names ) # Run extract_dts_includes.py to create a .conf and a header file that can be diff --git a/scripts/dts/extract/clocks.py b/scripts/dts/extract/clocks.py index 144bb027f27..04bb2e43112 100644 --- a/scripts/dts/extract/clocks.py +++ b/scripts/dts/extract/clocks.py @@ -24,7 +24,7 @@ class DTClocks(DTDirective): clock_consumer = reduced[node_address] clock_consumer_compat = get_compat(node_address) clock_consumer_bindings = yaml[clock_consumer_compat] - clock_consumer_label = get_node_label(node_address) + clock_consumer_label = 'DT_' + get_node_label(node_address) clock_index = 0 clock_cell_index = 0 @@ -83,15 +83,29 @@ class DTClocks(DTDirective): else: index = str(clock_index) if node_address in aliases: - for alias in aliases[node_address]: - if clock_cells_string == clock_cell_name: - clock_alias_label = self.get_label_string([ - alias, clock_cells_string, index]) - else: - clock_alias_label = self.get_label_string([ - alias, clock_cells_string, - clock_cell_name, index]) - prop_alias[clock_alias_label] = clock_label + if clock_cells_string == clock_cell_name: + add_prop_aliases( + node_address, + yaml, + lambda alias: + self.get_label_string([ + alias, + clock_cells_string, + index]), + clock_label, + prop_alias) + else: + add_prop_aliases( + node_address, + yaml, + lambda alias: + self.get_label_string([ + alias, + clock_cells_string, + clock_cell_name, + index]), + clock_label, + prop_alias) # alias if i < nr_clock_cells: # clocks info for first clock @@ -122,10 +136,16 @@ class DTClocks(DTDirective): index]) prop_def[clock_label] = '"' + clock_provider_label_str + '"' if node_address in aliases: - for alias in aliases[node_address]: - clock_alias_label = self.get_label_string([ - alias, clock_cell_name, index]) - prop_alias[clock_alias_label] = clock_label + add_prop_aliases( + node_address, + yaml, + lambda alias: + self.get_label_string([ + alias, + clock_cell_name, + index]), + clock_label, + prop_alias) insert_defs(node_address, prop_def, prop_alias) diff --git a/scripts/dts/extract/default.py b/scripts/dts/extract/default.py index 36f623a5a2e..aeaf00bf561 100644 --- a/scripts/dts/extract/default.py +++ b/scripts/dts/extract/default.py @@ -56,10 +56,13 @@ class DTDefault(DTDirective): # generate defs for node aliases if node_address in aliases: - for i in aliases[node_address]: - alias_label = convert_string_to_label(i) - alias = alias_label + '_' + prop_name - prop_alias[alias] = label + add_prop_aliases( + node_address, + yaml, + lambda alias: + convert_string_to_label(alias) + '_' + prop_name, + label, + prop_alias) insert_defs(node_address, prop_def, prop_alias) diff --git a/scripts/dts/extract/globals.py b/scripts/dts/extract/globals.py index 17979888535..84de6cae392 100644 --- a/scripts/dts/extract/globals.py +++ b/scripts/dts/extract/globals.py @@ -15,6 +15,7 @@ chosen = {} reduced = {} defs = {} structs = {} +old_alias_names = False regs_config = { 'zephyr,flash' : 'CONFIG_FLASH', @@ -267,3 +268,21 @@ def translate_addr(addr, node_address, nr_addr_cells, nr_size_cells): range_offset += parent_range_offset return range_offset + +def enable_old_alias_names(enable): + global old_alias_names + old_alias_names = enable + +def add_prop_aliases(node_address, yaml, + alias_label_function, prop_label, prop_aliases): + node_compat = get_compat(node_address) + new_alias_prefix = 'DT_' + convert_string_to_label(node_compat) + + for alias in aliases[node_address]: + old_alias_label = alias_label_function(alias) + new_alias_label = new_alias_prefix + '_' + old_alias_label + + if (new_alias_label != prop_label): + prop_aliases[new_alias_label] = prop_label + if (old_alias_names and old_alias_label != prop_label): + prop_aliases[old_alias_label] = prop_label diff --git a/scripts/dts/extract/interrupts.py b/scripts/dts/extract/interrupts.py index a6e2cebc1dd..ed703721466 100644 --- a/scripts/dts/extract/interrupts.py +++ b/scripts/dts/extract/interrupts.py @@ -82,10 +82,14 @@ class DTInterrupts(DTDirective): prop_alias['_'.join(alias_list)] = l_fqn if node_address in aliases: - for i in aliases[node_address]: - alias_label = convert_string_to_label(i) - alias_list = [alias_label] + l_cell_prefix + name + l_cell_name - prop_alias['_'.join(alias_list)] = l_fqn + add_prop_aliases( + node_address, + yaml, + lambda alias: + '_'.join([convert_string_to_label(alias)] + + l_cell_prefix + name + l_cell_name), + l_fqn, + prop_alias) index += 1 insert_defs(node_address, prop_def, prop_alias) diff --git a/scripts/dts/extract/reg.py b/scripts/dts/extract/reg.py index cf4734d94fd..e3c14881287 100644 --- a/scripts/dts/extract/reg.py +++ b/scripts/dts/extract/reg.py @@ -88,12 +88,22 @@ class DTReg(DTDirective): # generate defs for node aliases if node_address in aliases: - for i in aliases[node_address]: - alias_label = convert_string_to_label(i) - alias_addr = [alias_label] + l_addr + l_idx - alias_size = [alias_label] + l_size + l_idx - prop_alias['_'.join(alias_addr)] = '_'.join(l_base + l_addr + l_idx) - prop_alias['_'.join(alias_size)] = '_'.join(l_base + l_size + l_idx) + add_prop_aliases( + node_address, + yaml, + lambda alias: + '_'.join([convert_string_to_label(alias)] + + l_addr + l_idx), + l_addr_fqn, + prop_alias) + add_prop_aliases( + node_address, + yaml, + lambda alias: + '_'.join([convert_string_to_label(alias)] + + l_size + l_idx), + l_size_fqn, + prop_alias) insert_defs(node_address, prop_def, prop_alias) diff --git a/scripts/dts/extract_dts_includes.py b/scripts/dts/extract_dts_includes.py index 9ed0d7aa1bd..ce0ba7ea9cd 100755 --- a/scripts/dts/extract_dts_includes.py +++ b/scripts/dts/extract_dts_includes.py @@ -176,11 +176,13 @@ def extract_controller(node_address, yaml, prop, prop_values, index, def_label, #generate defs also if node is referenced as an alias in dts if node_address in aliases: - for i in aliases[node_address]: - alias_label = \ - convert_string_to_label(i) - alias = [alias_label] + label[1:] - prop_alias['_'.join(alias)] = '_'.join(label) + add_prop_aliases( + node_address, + yaml, + lambda alias: + '_'.join([convert_string_to_label(alias)] + label[1:]), + '_'.join(label), + prop_alias) insert_defs(node_address, prop_def, prop_alias) @@ -251,10 +253,13 @@ def extract_cells(node_address, yaml, prop, prop_values, names, index, # generate defs for node aliases if node_address in aliases: - for i in aliases[node_address]: - alias_label = convert_string_to_label(i) - alias = [alias_label] + label[1:] - prop_alias['_'.join(alias)] = '_'.join(label) + add_prop_aliases( + node_address, + yaml, + lambda alias: + '_'.join([convert_string_to_label(alias)] + label[1:]), + '_'.join(label), + prop_alias) insert_defs(node_address, prop_def, prop_alias) @@ -289,10 +294,13 @@ def extract_single(node_address, yaml, prop, key, def_label): # generate defs for node aliases if node_address in aliases: - for i in aliases[node_address]: - alias_label = convert_string_to_label(i) - alias = alias_label + '_' + k - prop_alias[alias] = label + add_prop_aliases( + node_address, + yaml, + lambda alias: + convert_string_to_label(alias) + '_' + k, + label, + prop_alias) insert_defs(node_address, prop_def, prop_alias) @@ -361,7 +369,10 @@ def extract_property(node_compat, yaml, node_address, prop, prop_val, names): # Generate bus-name define extract_single(node_address, yaml, 'parent-label', - 'bus-name', def_label) + 'bus-name', 'DT_' + def_label) + + if 'base_label' not in yaml[node_compat]: + def_label = 'DT_' + def_label if prop == 'reg': reg.extract(node_address, yaml, names, def_label, 1) @@ -711,11 +722,15 @@ def parse_arguments(): help="Generate include file for the build system") parser.add_argument("-k", "--keyvalue", nargs=1, required=True, help="Generate config file for the build system") + parser.add_argument("--old-alias-names", action='store_true', + help="Generate aliases also in the old way, without " + "compatibility information in their labels") return parser.parse_args() def main(): args = parse_arguments() + enable_old_alias_names(args.old_alias_names) dts = load_and_parse_dts(args.dts[0])