• Sandrine Bailleux's avatar
    fvp: Reuse BL1 and BL2 memory through image overlaying · a1b6db6c
    Sandrine Bailleux authored
    This patch re-organizes the memory layout on FVP as to give the
    BL3-2 image as much memory as possible.
    
    Considering these two facts:
     - not all images need to live in memory at the same time. Once
       in BL3-1, the memory used by BL1 and BL2 can be reclaimed.
     - when BL2 loads the BL3-1 and BL3-2 images, it only considers the
       PROGBITS sections of those 2 images. The memory occupied by the
       NOBITS sections will be touched only at execution of the BL3-x
       images;
    Then it is possible to choose the different base addresses such that
    the NOBITS sections of BL3-1 and BL3-2 overlay BL1 and BL2.
    
    On FVP we choose to put:
     - BL1 and BL3-1 at the top of the Trusted RAM, with BL3-1 NOBITS
       sections overlaying BL1;
     - BL3-2 at the bottom of the Trusted RAM, with its NOBITS sections
       overlaying BL2;
    
    This is illustrated by the following diagram:
    
    0x0404_0000 ------------    ------------------
                |   BL1    | <= |  BL3-1 NOBITS  |
                ------------ <= ------------------
                |          | <= | BL3-1 PROGBITS |
                ------------    ------------------
                |   BL2    | <= |  BL3-2 NOBITS  |
                ------------ <= ------------------
                |          | <= | BL3-2 PROGBITS |
    0x0400_0000 ------------    ------------------
    
    New platform-specific constants have been introduced to easily check
    at link time that BL3-1 and BL3-2 PROGBITS sections don't overwrite
    BL1 and BL2. These are optional and the platform code is free to define
    them or not. If not defined, the linker won't attempt to check
    image overlaying.
    
    Fixes ARM-software/tf-issues#117
    
    Change-Id: I5981d1c3d66ee70eaac8bd052630c9ac6dd8b042
    a1b6db6c
bl31.ld.S 4.28 KB