• Geert Uytterhoeven's avatar
    ARM: 9045/1: uncompress: Validate start of physical memory against passed DTB · 0673cb38
    Geert Uytterhoeven authored
    Currently, the start address of physical memory is obtained by masking
    the program counter with a fixed mask of 0xf8000000.  This mask value
    was chosen as a balance between the requirements of different platforms.
    However, this does require that the start address of physical memory is
    a multiple of 128 MiB, precluding booting Linux on platforms where this
    requirement is not fulfilled.
    
    Fix this limitation by validating the masked address against the memory
    information in the passed DTB.  Only use the start address
    from DTB when masking would yield an out-of-range address, prefer the
    traditional method in all other cases.  Note that this applies only to the
    explicitly passed DTB on modern systems, and not to a DTB appended to
    the kernel, or to ATAGS.  The appended DTB may need to be augmented by
    information from ATAGS, which may need to rely on knowledge of the start
    address of physical memory itself.
    
    This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
    on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
    i.e. not at a multiple of 128 MiB.
    Suggested-by: default avatarNicolas Pitre <nico@fluxnic.net>
    Suggested-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Acked-by: default avatarNicolas Pitre <nico@fluxnic.net>
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
    0673cb38
fdt_check_mem_start.c 3.32 KB