• Mark Rutland's avatar
    arm64: place initial page tables above the kernel · bd00cd5f
    Mark Rutland authored
    Currently we place swapper_pg_dir and idmap_pg_dir below the kernel
    image, between PHYS_OFFSET and (PHYS_OFFSET + TEXT_OFFSET). However,
    bootloaders may use portions of this memory below the kernel and we do
    not parse the memory reservation list until after the MMU has been
    enabled. As such we may clobber some memory a bootloader wishes to have
    To enable the use of all of this memory by bootloaders (when the
    required memory reservations are communicated to the kernel) it is
    necessary to move our initial page tables elsewhere. As we currently
    have an effectively unbound requirement for memory at the end of the
    kernel image for .bss, we can place the page tables here.
    This patch moves the initial page table to the end of the kernel image,
    after the BSS. As they do not consist of any initialised data they will
    be stripped from the kernel Image as with the BSS. The BSS clearing
    routine is updated to stop at __bss_stop rather than _end so as to not
    clobber the page tables, and memory reservations made redundant by the
    new organisation are removed.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Tested-by: default avatarLaura Abbott <lauraa@codeaurora.org>
    Acked-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>