On Fri, 5 Mar 2021 at 07:51, Shawn Guo <shawn.guo@xxxxxxxxxx> wrote: > > Poweroff via UEFI Runtime Services doesn't always work on every single > arm64 machine. For example, on Lenovo Flex 5G laptop, it results in > a system reboot rather than shutdown. Add a DMI check to keep such > system stay with the original poweroff method (PSCI). > > Signed-off-by: Shawn Guo <shawn.guo@xxxxxxxxxx> What is the point of using EFI runtime services on this machine if poweroff doesn't work either? Can't we just boot this thing with efi=noruntime? > --- > arch/arm64/kernel/efi.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c > index fa02efb28e88..8ae0002c72f1 100644 > --- a/arch/arm64/kernel/efi.c > +++ b/arch/arm64/kernel/efi.c > @@ -7,6 +7,7 @@ > * Copyright (C) 2013, 2014 Linaro Ltd. > */ > > +#include <linux/dmi.h> > #include <linux/efi.h> > #include <linux/init.h> > > @@ -113,12 +114,26 @@ int __init efi_set_mapping_permissions(struct mm_struct *mm, > set_permissions, md); > } > > +static const struct dmi_system_id efi_reboot_broken_table[] = { > + { > + .ident = "Lenovo Flex 5G", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), > + DMI_MATCH(DMI_PRODUCT_FAMILY, "Flex 5G"), > + }, > + }, > + { } /* terminator */ > +}; > + > /* > * UpdateCapsule() depends on the system being shutdown via > * ResetSystem(). > */ > bool efi_poweroff_required(void) > { > + if (dmi_check_system(efi_reboot_broken_table)) > + return false; > + > return efi_enabled(EFI_RUNTIME_SERVICES); > } > > -- > 2.17.1 >