arm: cortex-m: allow configurable ROM offset

Currently, ARM Cortex-M image ROMs are linked starting at the flash
device's base address (CONFIG_FLASH_BASE_ADDRESS). This prevents XIP
Zephyr applications from being linked to run from elsewhere on the
flash device. Linking Zephyr applications to run from elsewhere can be
necessary when running under a bootloader (i.e., booting into a Zephyr
application from a bootloader, not using Zephyr as a bootloader).

To enable this use case, add a new config option: FLASH_LOAD_OFFSET.
This option directs the linker to treat ROM as if it started that many
bytes from the base of flash on Cortex-M targets. The option defaults
to zero to preserve backwards compatibility.

Change-Id: I64f82aee257c19c2451f9789b0ab56999775b761
Signed-off-by: Marti Bolivar <marti.bolivar@linaro.org>
This commit is contained in:
Marti Bolivar 2017-02-10 11:39:10 -05:00 committed by Kumar Gala
commit bf2d34ba30
3 changed files with 16 additions and 4 deletions

View file

@ -40,8 +40,8 @@
#define SKIP_TO_KINETIS_FLASH_CONFIG
#endif
#define ROM_ADDR CONFIG_FLASH_BASE_ADDRESS
#define ROM_SIZE CONFIG_FLASH_SIZE*1K
#define ROM_ADDR (CONFIG_FLASH_BASE_ADDRESS + CONFIG_FLASH_LOAD_OFFSET)
#define ROM_SIZE (CONFIG_FLASH_SIZE*1K - CONFIG_FLASH_LOAD_OFFSET)
#if defined(CONFIG_XIP)
#if defined(CONFIG_IS_BOOTLOADER)
@ -72,7 +72,7 @@ SECTIONS
{
GROUP_START(ROMABLE_REGION)
_image_rom_start = CONFIG_FLASH_BASE_ADDRESS;
_image_rom_start = ROM_ADDR;
SECTION_PROLOGUE(_TEXT_SECTION_NAME,,)
{