Skip to content
  • Philipp Tomsich's avatar
    rockchip: mkimage: pad the header to 8-bytes (using a 'nop') for RK3399 · 111bcc4f
    Philipp Tomsich authored and Simon Glass's avatar Simon Glass committed
    
    
    The RK3399 boot code (running as AArch64) poses a bit of a challenge
    for SPL image generation:
     * The BootROM will start execution right after the 4-byte header (at
       the odd instruction word loaded into SRAM at 0xff8c2004, with the
       'RK33' boot magic residing at 0xff8c2000).
     * The default padding (during ELF generation) for AArch64 is 0x0,
       which is an illegal instruction and the .text section needs to be
       naturally aligned (someone might locate a 64bit constant relative
       to the section start and unaligned loads trigger a fault for all
       privileged modes of an ARMv8)... so we can't simply define the
       CONFIG_SPL_TEXT_BASE option to the odd address (0xff8c2004).
     * Finally, we don't want to change the values used for padding of
       the SPL .text section for all ARMv8 targets to the instruction
       word encoding 'nop', as this would affect all padding in this
       section and might hide errors that would otherwise quickly trigger
       an illegal insn exception.
    
    To deal with this situation, we modify the rkimage generation to
     - understand the fact that the RK3399 needs to pad the header to an
       8 byte boundary using an AArch64 'nop'
     - the necessary logic to adjust the header_size (which controls the
       location where the payload is copied into the image) and to insert
       this padding (AArch64 insn words are always little-endian) into
       the image following the 4-byte header magic.
    
    X-AffectedPlatforms: RK3399-Q7
    Signed-off-by: Philipp Tomsich's avatarPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>
    Tested-by: default avatarKlaus Goger <klaus.goger@theobroma-systems.com>
    111bcc4f