• Ard Biesheuvel's avatar
    arm64/efi: move SetVirtualAddressMap() to UEFI stub · f3cdfd23
    Ard Biesheuvel authored
    In order to support kexec, the kernel needs to be able to deal with the
    state of the UEFI firmware after SetVirtualAddressMap() has been called.
    To avoid having separate code paths for non-kexec and kexec, let's move
    the call to SetVirtualAddressMap() to the stub: this will guarantee us
    that it will only be called once (since the stub is not executed during
    kexec), and ensures that the UEFI state is identical between kexec and
    normal boot.
    This implies that the layout of the virtual mapping needs to be created
    by the stub as well. All regions are rounded up to a naturally aligned
    multiple of 64 KB (for compatibility with 64k pages kernels) and recorded
    in the UEFI memory map. The kernel proper reads those values and installs
    the mappings in a dedicated set of page tables that are swapped in during
    UEFI Runtime Services calls.
    Acked-by: default avatarLeif Lindholm <leif.lindholm@linaro.org>
    Acked-by: default avatarMatt Fleming <matt.fleming@intel.com>
    Tested-by: default avatarLeif Lindholm <leif.lindholm@linaro.org>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>