• Ard Biesheuvel's avatar
    arm64: efi: Force the use of SetVirtualAddressMap() on Altra machines · 550b33cf
    Ard Biesheuvel authored
    Ampere Altra machines are reported to misbehave when the SetTime() EFI
    runtime service is called after ExitBootServices() but before calling
    SetVirtualAddressMap(). Given that the latter is horrid, pointless and
    explicitly documented as optional by the EFI spec, we no longer invoke
    it at boot if the configured size of the VA space guarantees that the
    EFI runtime memory regions can remain mapped 1:1 like they are at boot
    time.
    
    On Ampere Altra machines, this results in SetTime() calls issued by the
    rtc-efi driver triggering synchronous exceptions during boot.  We can
    now recover from those without bringing down the system entirely, due to
    commit 23715a26 ("arm64: efi: Recover from synchronous
    exceptions occurring in firmware"). However, it would be better to avoid
    the issue entirely, given that the firmware appears to remain in a funny
    state after this.
    
    So attempt to identify these machines based on the 'family' field in the
    type #1 SMBIOS record, and call SetVirtualAddressMap() unconditionally
    in that case.
    Tested-by: default avatarAlexandru Elisei <alexandru.elisei@gmail.com>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    550b33cf
arm64-stub.c 5.43 KB