For debugging purposes, allow the runtime override mask to be set from a EFI variable if one exists. For instance, the RT supported mask can be set to 0xfffd to disable the SetTime() runtime service, and enable all others: echo -ne "\x7\0\0\0\xfd\xff" \ > /sys/firmware/efi/efivars/LinuxRtMaskOverride-eb66918a-7eef-402a-842e-931d21c38ae9 Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx> --- drivers/firmware/efi/efi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index a46df5d1d0942751..faed1ef78c044924 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -367,7 +367,17 @@ static int __init efisubsys_init(void) } } - if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) + if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE)) { + unsigned long size = sizeof(efi.runtime_supported_mask); + + if (efi.get_variable(L"LinuxRtMaskOverride", + &EFI_RT_PROPERTIES_TABLE_GUID, NULL, &size, + &efi.runtime_supported_mask) == EFI_SUCCESS) + pr_info("Overriding runtime_supported_mask to 0x%x\n", + efi.runtime_supported_mask); + } + + if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_TIME)) platform_device_register_simple("rtc-efi", 0, NULL, 0); /* We register the efi directory at /sys/firmware/efi */ -- 2.35.1