Skip to content

Commit 52e640f

Browse files
committed
Add Rom config info getter and rom defines
* MBED_ROM_START = start of current rom (independent of BL modes) * MBED_ROM_SIZE = size of current rom (independent of BL modes)
1 parent 92abbb7 commit 52e640f

File tree

2 files changed

+35
-19
lines changed

2 files changed

+35
-19
lines changed

tools/config/__init__.py

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,25 @@ def _get_mem_specs(self, memories, cmsis_part, exception_text):
593593
continue
594594
raise ConfigException(exception_text)
595595

596+
@property
597+
def rom(self):
598+
"""Get rom information as a pair of start_addr, size"""
599+
# Override rom_start/rom_size
600+
#
601+
# This is usually done for a target which:
602+
# 1. Doesn't support CMSIS pack, or
603+
# 2. Supports TrustZone and user needs to change its flash partition
604+
cmsis_part = self._get_cmsis_part()
605+
rom_start, rom_size = self._get_mem_specs(
606+
["IROM1", "PROGRAM_FLASH"],
607+
cmsis_part,
608+
"Not enough information in CMSIS packs to build a bootloader "
609+
"project"
610+
)
611+
rom_start = int(getattr(self.target, "mbed_rom_start", False) or rom_start, 0)
612+
rom_size = int(getattr(self.target, "mbed_rom_size", False) or rom_size, 0)
613+
return (rom_start, rom_size)
614+
596615
@property
597616
def ram_regions(self):
598617
"""Generate a list of ram regions from the config"""
@@ -614,30 +633,16 @@ def ram_regions(self):
614633
@property
615634
def regions(self):
616635
"""Generate a list of regions from the config"""
617-
cmsis_part = self._get_cmsis_part()
618636
if ((self.target.bootloader_img or self.target.restrict_size) and
619637
(self.target.mbed_app_start or self.target.mbed_app_size)):
620638
raise ConfigException(
621639
"target.bootloader_img and target.restirct_size are "
622640
"incompatible with target.mbed_app_start and "
623641
"target.mbed_app_size")
624-
rom_start, rom_size = self._get_mem_specs(
625-
["IROM1", "PROMGRAM_FLASH"],
626-
cmsis_part,
627-
"Not enough information in CMSIS packs to build a bootloader project"
628-
)
629-
# Override rom_start/rom_size
630-
#
631-
# This is usually done for a target which:
632-
# 1. Doesn't support CMSIS pack, or
633-
# 2. Supports TrustZone and user needs to change its flash partition
634-
rom_start = int(getattr(self.target, "mbed_rom_start", False) or rom_start, 0)
635-
rom_size = int(getattr(self.target, "mbed_rom_size", False) or rom_size, 0)
636-
637642
if self.target.bootloader_img or self.target.restrict_size:
638-
return self._generate_bootloader_build(rom_start, rom_size)
643+
return self._generate_bootloader_build(*self.rom)
639644
else:
640-
return self._generate_linker_overrides(rom_start, rom_size)
645+
return self._generate_linker_overrides(*self.rom)
641646

642647
@staticmethod
643648
def header_member_size(member):

tools/toolchains/__init__.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from itertools import chain
2828
from inspect import getmro
2929
from copy import deepcopy
30+
from collections import namedtuple
3031
from abc import ABCMeta, abstractmethod
3132
from distutils.spawn import find_executable
3233
from multiprocessing import Pool, cpu_count
@@ -39,6 +40,7 @@
3940
from .. import hooks
4041
from ..notifier.term import TerminalNotifier
4142
from ..memap import MemapParser
43+
from ..config import ConfigException
4244

4345

4446
#Disables multiprocessing if set to higher number than the host machine CPUs
@@ -1184,9 +1186,9 @@ def mem_stats(self, map):
11841186

11851187
return None
11861188

1187-
def _add_defines_from_region(self, region):
1188-
for define in [(region.name.upper() + "_ADDR", region.start),
1189-
(region.name.upper() + "_SIZE", region.size)]:
1189+
def _add_defines_from_region(self, region, suffixes=['_ADDR', '_SIZE']):
1190+
for define in [(region.name.upper() + suffixes[0], region.start),
1191+
(region.name.upper() + suffixes[1], region.size)]:
11901192
define_string = "-D%s=0x%x" % define
11911193
self.cc.append(define_string)
11921194
self.cppc.append(define_string)
@@ -1223,6 +1225,15 @@ def add_regions(self):
12231225
", ".join(r.name for r in regions)
12241226
))
12251227
self._add_all_regions(regions, "MBED_RAM")
1228+
try:
1229+
rom_start, rom_size = self.config.rom
1230+
Region = namedtuple("Region", "name start size")
1231+
self._add_defines_from_region(
1232+
Region("MBED_ROM", rom_start, rom_size),
1233+
suffixes=["_START", "_SIZE"]
1234+
)
1235+
except ConfigException:
1236+
pass
12261237

12271238
# Set the configuration data
12281239
def set_config_data(self, config_data):

0 commit comments

Comments
 (0)