Skip to content

Commit e798276

Browse files
committed
Override rom used by managed bootloader with PSA roms
1 parent 10c6a27 commit e798276

File tree

1 file changed

+51
-14
lines changed

1 file changed

+51
-14
lines changed

tools/config/__init__.py

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,32 @@ def _get_mem_specs(self, permissions, cmsis_part):
689689
)
690690
)
691691

692+
def _get_primary_rom_override(self):
693+
mem_start = None
694+
mem_size = None
695+
if hasattr(self.target, "mbed_rom_start"):
696+
mem_start = getattr(self.target, "mbed_rom_start")
697+
if hasattr(self.target, "mbed_rom_size"):
698+
mem_size = getattr(self.target, "mbed_rom_size")
699+
if (
700+
self.target.is_PSA_non_secure_target or
701+
self.target.is_PSA_secure_target
702+
):
703+
config, _ = self.get_config_data()
704+
if self.target.is_PSA_secure_target:
705+
mem_start = config.get("target.secure-rom-start", mem_start).value
706+
mem_size = config.get("target.secure-rom-size", mem_size).value
707+
elif self.target.is_PSA_non_secure_target:
708+
mem_start = config.get(
709+
"target.non-secure-rom-start", mem_start
710+
).value
711+
mem_size = config.get("target.non-secure-rom-size", mem_size).value
712+
if mem_start and not isinstance(mem_start, int):
713+
mem_start = int(mem_start, 0)
714+
if mem_size and not isinstance(mem_size, int):
715+
mem_size = int(mem_size, 0)
716+
return mem_start, mem_size
717+
692718
def get_all_active_memories(self, memory_list):
693719
"""Get information of all available rom/ram memories in the form of
694720
dictionary {Memory: [start_addr, size]}. Takes in the argument, a
@@ -713,18 +739,28 @@ def get_all_active_memories(self, memory_list):
713739
except ConfigException:
714740
""" If the target doesn't exits in cmsis, but present in targets.json
715741
with ram and rom start/size defined"""
716-
if getattr(self.target, "mbed_ram_start") and \
717-
getattr(self.target, "mbed_rom_start"):
718-
mem_start = int(getattr(
719-
self.target,
720-
"mbed_" + active_memory.lower() + "_start"
721-
), 0)
722-
mem_size = int(getattr(
723-
self.target,
724-
"mbed_" + active_memory.lower() + "_size"
725-
), 0)
742+
if (
743+
getattr(self.target, "mbed_ram_start")
744+
and active_memory == 'RAM'
745+
):
746+
mem_start = int(getattr(self.target, "mbed_ram_start"), 0)
747+
mem_size = int(getattr(self.target, "mbed_ram_size"), 0)
726748
available_memories[active_memory] = [mem_start, mem_size]
727749
return available_memories
750+
elif active_memory == 'ROM':
751+
start, size = self._get_primary_rom_override()
752+
if not start:
753+
raise ConfigException(
754+
"Bootloader not supported on this target. rom "
755+
"start not found in targets.json."
756+
)
757+
if not size:
758+
raise ConfigException(
759+
"Bootloader not supported on this target. rom "
760+
"size not found in targets.json."
761+
)
762+
available_memories[active_memory] = [start, size]
763+
return available_memories
728764
else:
729765
raise ConfigException(
730766
"Bootloader not supported on this target. ram/rom "
@@ -742,10 +778,11 @@ def get_all_active_memories(self, memory_list):
742778
mem_start = memories[memory]["start"]
743779
mem_size = memories[memory]["size"]
744780
if memory in ['IROM1', 'PROGRAM_FLASH']:
745-
if getattr(self.target, "mbed_rom_start", False):
746-
mem_start = getattr(self.target, "mbed_rom_start")
747-
if getattr(self.target, "mbed_rom_size", False):
748-
mem_size = getattr(self.target, "mbed_rom_size")
781+
start, size = self._get_primary_rom_override()
782+
if start:
783+
mem_start = start
784+
if size:
785+
mem_size = size
749786
memory = 'ROM'
750787
elif memory in ['IRAM1', 'SRAM_OC', 'SRAM_UPPER', 'SRAM']:
751788
if (self.has_ram_regions):

0 commit comments

Comments
 (0)