diff options
Diffstat (limited to 'bl2')
-rw-r--r-- | bl2/aarch64/bl2_entrypoint.S | 14 | ||||
-rw-r--r-- | bl2/bl2.ld.S | 11 |
2 files changed, 25 insertions, 0 deletions
diff --git a/bl2/aarch64/bl2_entrypoint.S b/bl2/aarch64/bl2_entrypoint.S index 987d30e0..1d262297 100644 --- a/bl2/aarch64/bl2_entrypoint.S +++ b/bl2/aarch64/bl2_entrypoint.S @@ -82,6 +82,20 @@ func bl2_entrypoint b.ne _panic /* --------------------------------------------- + * Invalidate the RW memory used by the BL2 + * image. This includes the data and NOBITS + * sections. This is done to safeguard against + * possible corruption of this memory by dirty + * cache lines in a system cache as a result of + * use by an earlier boot loader stage. + * --------------------------------------------- + */ + adr x0, __RW_START__ + adr x1, __RW_END__ + sub x1, x1, x0 + bl inv_dcache_range + + /* --------------------------------------------- * Zero out NOBITS sections. There are 2 of them: * - the .bss section; * - the coherent memory section. diff --git a/bl2/bl2.ld.S b/bl2/bl2.ld.S index 33588e69..a660bda6 100644 --- a/bl2/bl2.ld.S +++ b/bl2/bl2.ld.S @@ -68,6 +68,12 @@ SECTIONS __RO_END__ = .; } >RAM + /* + * Define a linker symbol to mark start of the RW memory area for this + * image. + */ + __RW_START__ = . ; + .data . : { __DATA_START__ = .; *(.data*) @@ -121,6 +127,11 @@ SECTIONS } >RAM #endif + /* + * Define a linker symbol to mark end of the RW memory area for this + * image. + */ + __RW_END__ = .; __BL2_END__ = .; __BSS_SIZE__ = SIZEOF(.bss); |