diff --git a/bl1/bl1.ld.S b/bl1/bl1.ld.S index 81c5443..11b9a8f 100644 --- a/bl1/bl1.ld.S +++ b/bl1/bl1.ld.S @@ -41,7 +41,11 @@ SECTIONS { - ro : { + . = BL1_RO_BASE; + ASSERT(. == ALIGN(4096), + "BL1_RO_BASE address is not aligned on a page boundary.") + + ro . : { __RO_START__ = .; *bl1_entrypoint.o(.text*) *(.text*) @@ -52,16 +56,19 @@ /* * The .data section gets copied from ROM to RAM at runtime. - * Its LMA and VMA must be 16-byte aligned. + * Its LMA must be 16-byte aligned. + * Its VMA must be page-aligned as it marks the first read/write page. */ - . = NEXT(16); /* Align LMA */ - .data : ALIGN(16) { /* Align VMA */ + . = BL1_RW_BASE; + ASSERT(. == ALIGN(4096), + "BL1_RW_BASE address is not aligned on a page boundary.") + .data . : ALIGN(16) { __DATA_RAM_START__ = .; *(.data*) __DATA_RAM_END__ = .; } >RAM AT>ROM - stacks (NOLOAD) : { + stacks . (NOLOAD) : { __STACKS_START__ = .; *(tzfw_normal_stacks) __STACKS_END__ = .; diff --git a/plat/fvp/platform.h b/plat/fvp/platform.h index 981bc98..ff87cf8 100644 --- a/plat/fvp/platform.h +++ b/plat/fvp/platform.h @@ -236,6 +236,14 @@ #define PLAT_AFF1_ON 0x3 /******************************************************************************* + * BL1 specific defines. + * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 base + * addresses. + ******************************************************************************/ +#define BL1_RO_BASE TZROM_BASE +#define BL1_RW_BASE TZRAM_BASE + +/******************************************************************************* * BL2 specific defines. ******************************************************************************/ #define BL2_BASE (TZRAM_BASE + TZRAM_SIZE - 0xc000)