@@ -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