@@ -689,6 +689,32 @@ def _get_mem_specs(self, permissions, cmsis_part):
689
689
)
690
690
)
691
691
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
+
692
718
def get_all_active_memories (self , memory_list ):
693
719
"""Get information of all available rom/ram memories in the form of
694
720
dictionary {Memory: [start_addr, size]}. Takes in the argument, a
@@ -713,18 +739,28 @@ def get_all_active_memories(self, memory_list):
713
739
except ConfigException :
714
740
""" If the target doesn't exits in cmsis, but present in targets.json
715
741
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 )
726
748
available_memories [active_memory ] = [mem_start , mem_size ]
727
749
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
728
764
else :
729
765
raise ConfigException (
730
766
"Bootloader not supported on this target. ram/rom "
@@ -742,10 +778,11 @@ def get_all_active_memories(self, memory_list):
742
778
mem_start = memories [memory ]["start" ]
743
779
mem_size = memories [memory ]["size" ]
744
780
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
749
786
memory = 'ROM'
750
787
elif memory in ['IRAM1' , 'SRAM_OC' , 'SRAM_UPPER' , 'SRAM' ]:
751
788
if (self .has_ram_regions ):
0 commit comments