> -----Original Message----- > From: Darren Hart <darren@xxxxxxxxxxxxxxxxxxxxxx> > Sent: Thursday, February 9, 2023 8:28 AM > To: LKML <linux-kernel@xxxxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx; linux-efi@xxxxxxxxxxxxxxx; Alexandru Elisei > <alexandru.elisei@xxxxxxxxx>; Justin He <Justin.He@xxxxxxx>; Huacai Chen > <chenhuacai@xxxxxxxxxx>; Jason A. Donenfeld <Jason@xxxxxxxxx>; Ard > Biesheuvel <ardb@xxxxxxxxxx> > Subject: [PATCH v2] arm64: efi: Force the use of SetVirtualAddressMap() on > eMAG and Altra Max machines > > Commit 550b33cfd445 ("arm64: efi: Force the use of SetVirtualAddressMap() > on Altra machines") identifies the Altra family via the family field in the type#1 > SMBIOS record. eMAG and Altra Max machines are similarly affected but not > detected with the strict strcmp test. > > The type1_family smbios string is not an entirely reliable means of identifying > systems with this issue as OEMs can, and do, use their own strings for these > fields. However, until we have a better solution, capture the bulk of these > systems by adding strcmp matching for "eMAG" > and "Altra Max". > > Fixes: 550b33cfd445 ("arm64: efi: Force the use of SetVirtualAddressMap() on > Altra machines") > Cc: <stable@xxxxxxxxxxxxxxx> # 6.1.x > Cc: <linux-efi@xxxxxxxxxxxxxxx> > Cc: Alexandru Elisei <alexandru.elisei@xxxxxxxxx> > Cc: Justin He <Justin.He@xxxxxxx> > Cc: Huacai Chen <chenhuacai@xxxxxxxxxx> > Cc: "Jason A. Donenfeld" <Jason@xxxxxxxxx> > Cc: Ard Biesheuvel <ardb@xxxxxxxxxx> > Signed-off-by: Darren Hart <darren@xxxxxxxxxxxxxxxxxxxxxx> Tested-by: justin.he@xxxxxxx > --- > V1 -> V2: include eMAG > > drivers/firmware/efi/libstub/arm64.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/firmware/efi/libstub/arm64.c > b/drivers/firmware/efi/libstub/arm64.c > index ff2d18c42ee7..4501652e11ab 100644 > --- a/drivers/firmware/efi/libstub/arm64.c > +++ b/drivers/firmware/efi/libstub/arm64.c > @@ -19,10 +19,13 @@ static bool system_needs_vamap(void) > const u8 *type1_family = efi_get_smbios_string(1, family); > > /* > - * Ampere Altra machines crash in SetTime() if SetVirtualAddressMap() > - * has not been called prior. > + * Ampere eMAG, Altra, and Altra Max machines crash in SetTime() if > + * SetVirtualAddressMap() has not been called prior. > */ > - if (!type1_family || strcmp(type1_family, "Altra")) > + if (!type1_family || ( > + strcmp(type1_family, "eMAG") && > + strcmp(type1_family, "Altra") && > + strcmp(type1_family, "Altra Max"))) In terms of resolving the boot hang issue, it looks good to me. And I've verified the "eMAG" part check. So please feel free to add: Tested-by: Justin He <justin.he@xxxxxxx> But I have some other concerns: 1. On an Altra server, the type1_family returns "Server". I don't know whether it is a smbios or server firmware bug. 2. On an eMAG server, I once successfully run efibootmgr -t 10 to call the Set_variable rts, but currently I always met the error, even with above patch: # efibootmgr -t 9; efibootmgr -t 5; Could not set Timeout: Input/output error Could not set Timeout: Input/output error Meanwhile, on the Altra server, it works: # efibootmgr -t 9; efibootmgr -t 5; BootCurrent: 0007 Timeout: 9 seconds BootOrder: 0007,0005,0006,0001 Boot0001* UEFI: Built-in EFI Shell Boot0005* UEFI: PXE IPv4 Intel(R) I350 Gigabit Network Connection Boot0006* UEFI: PXE IPv4 Intel(R) I350 Gigabit Network Connection Boot0007* ubuntu BootCurrent: 0007 Timeout: 5 seconds BootOrder: 0007,0005,0006,0001 Boot0001* UEFI: Built-in EFI Shell Boot0005* UEFI: PXE IPv4 Intel(R) I350 Gigabit Network Connection Boot0006* UEFI: PXE IPv4 Intel(R) I350 Gigabit Network Connection Boot0007* ubuntu -- Cheers, Justin (Jia He)