Re: [PATCH] x86/efistub: Add options for forcing Apple set_os protocol

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all

I managed to get feedbacks regarding eGPUs on older non T2 MacBooks, and can confirm that apple-set-os is needed there as well.

I was wondering if we can reach a conclusion for this case here.

> On 29 Dec 2024, at 1:51 AM, Lleyton Gray <lleyton@xxxxxxxxxxxx> wrote:
> 
> commit 71e49eccdca6 ("x86/efistub: Call Apple set_os protocol on dual GPU
> Intel Macs") calls the Apple set_os protocol, but only on T2 Macbook Pro
> models. This causes issues on other T2 models when an egpu is used.
> Add two options which allow force enabling or disabling usage of the
> protocol to fix.
> 
> Signed-off-by: Lleyton Gray <lleyton@xxxxxxxxxxxx>
> ---
> Documentation/admin-guide/kernel-parameters.txt | 7 ++++++-
> drivers/firmware/efi/libstub/efi-stub-helper.c  | 6 ++++++
> drivers/firmware/efi/libstub/efistub.h          | 2 ++
> drivers/firmware/efi/libstub/x86-stub.c         | 3 ++-
> 4 files changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> index 1518343bbe22..1d1b88c57c44 100644
> --- a/Documentation/admin-guide/kernel-parameters.txt
> +++ b/Documentation/admin-guide/kernel-parameters.txt
> @@ -1447,7 +1447,8 @@
> efi= [EFI,EARLY]
> Format: { "debug", "disable_early_pci_dma",
>  "nochunk", "noruntime", "nosoftreserve",
> -  "novamap", "no_disable_early_pci_dma" }
> +  "novamap", "no_disable_early_pci_dma",
> +  "enable_apple_set_os", "disable_apple_set_os" }
> debug: enable misc debug output.
> disable_early_pci_dma: disable the busmaster bit on all
> PCI bridges while in the EFI boot stub.
> @@ -1464,6 +1465,10 @@
> novamap: do not call SetVirtualAddressMap().
> no_disable_early_pci_dma: Leave the busmaster bit set
> on all PCI bridges while in the EFI boot stub
> + enable_apple_set_os: Report that macOS is being booted
> + to the firmware, even if the device is not a dual GPU Mac.
> + disable_apple_set_os: Disable reporting that macOS is being booted
> + to the firmware, even if the device is a dual GPU Mac.
> 
> efi_no_storage_paranoia [EFI,X86,EARLY]
> Using this parameter you can use more than 50% of
> diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
> index de659f6a815f..c33bb98bf79d 100644
> --- a/drivers/firmware/efi/libstub/efi-stub-helper.c
> +++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
> @@ -20,6 +20,8 @@
> bool efi_nochunk;
> bool efi_nokaslr = !IS_ENABLED(CONFIG_RANDOMIZE_BASE);
> bool efi_novamap;
> +bool efi_enable_apple_set_os;
> +bool efi_disable_apple_set_os;
> 
> static bool efi_noinitrd;
> static bool efi_nosoftreserve;
> @@ -95,6 +97,10 @@ efi_status_t efi_parse_options(char const *cmdline)
> efi_disable_pci_dma = true;
> if (parse_option_str(val, "no_disable_early_pci_dma"))
> efi_disable_pci_dma = false;
> + if (parse_option_str(val, "enable_apple_set_os"))
> + efi_enable_apple_set_os = true;
> + if (parse_option_str(val, "disable_apple_set_os"))
> + efi_disable_apple_set_os = true;
> if (parse_option_str(val, "debug"))
> efi_loglevel = CONSOLE_LOGLEVEL_DEBUG;
> } else if (!strcmp(param, "video") &&
> diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
> index 685098f9626f..3be4b5393812 100644
> --- a/drivers/firmware/efi/libstub/efistub.h
> +++ b/drivers/firmware/efi/libstub/efistub.h
> @@ -39,6 +39,8 @@ extern bool efi_nokaslr;
> extern int efi_loglevel;
> extern int efi_mem_encrypt;
> extern bool efi_novamap;
> +extern bool efi_enable_apple_set_os;
> +extern bool efi_disable_apple_set_os;
> extern const efi_system_table_t *efi_system_table;
> 
> typedef union efi_dxe_services_table efi_dxe_services_table_t;
> diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
> index f8e465da344d..566118195f92 100644
> --- a/drivers/firmware/efi/libstub/x86-stub.c
> +++ b/drivers/firmware/efi/libstub/x86-stub.c
> @@ -265,7 +265,8 @@ static void apple_set_os(void)
> } *set_os;
> efi_status_t status;
> 
> - if (!efi_is_64bit() || !apple_match_product_name())
> + if (efi_disable_apple_set_os || !efi_is_64bit() ||
> + !efi_enable_apple_set_os && !apple_match_product_name())
> return;
> 
> status = efi_bs_call(locate_protocol, &APPLE_SET_OS_PROTOCOL_GUID, NULL,
> -- 
> 2.47.0
> 





[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux