You've already forked linux-t2-patches
mirror of
https://github.com/t2linux/linux-t2-patches.git
synced 2026-04-30 13:52:11 -07:00
use upstreamed patches for apple-os-set
This commit is contained in:
@@ -1,144 +0,0 @@
|
||||
From 6adb501c697cd0e3246e75237ee8e43eb5a92cc3 Mon Sep 17 00:00:00 2001
|
||||
From: Kerem Karabay <kekrby@gmail.com>
|
||||
Date: Thu, 23 Nov 2023 18:58:51 +0530
|
||||
Subject: [PATCH] efi: libstub: add support for the apple_set_os protocol
|
||||
|
||||
On dual GPU EFI Macs, the EFI stub needs to report that it is booting
|
||||
macOS in order to prevent the firmware from disabling the iGPU.
|
||||
|
||||
See also this patch for GRUB by Andreas Heider <andreas@heider.io>:
|
||||
https://lists.gnu.org/archive/html/grub-devel/2013-12/msg00442.html
|
||||
---
|
||||
.../admin-guide/kernel-parameters.txt | 2 ++
|
||||
.../firmware/efi/libstub/efi-stub-helper.c | 3 +++
|
||||
drivers/firmware/efi/libstub/efistub.h | 14 ++++++++++
|
||||
drivers/firmware/efi/libstub/x86-stub.c | 27 +++++++++++++++++++
|
||||
include/linux/efi.h | 1 +
|
||||
5 files changed, 47 insertions(+)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index 41644336e..cbd4697a5 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -399,6 +399,8 @@
|
||||
useful so that a dump capture kernel won't be
|
||||
shot down by NMI
|
||||
|
||||
+ apple_set_os [KNL] Report that macOS is being booted to the firmware
|
||||
+
|
||||
autoconf= [IPV6]
|
||||
See Documentation/networking/ipv6.rst.
|
||||
|
||||
diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
|
||||
index bfa30625f..3d99acc1a 100644
|
||||
--- a/drivers/firmware/efi/libstub/efi-stub-helper.c
|
||||
+++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
|
||||
@@ -19,6 +19,7 @@
|
||||
bool efi_nochunk;
|
||||
bool efi_nokaslr = !IS_ENABLED(CONFIG_RANDOMIZE_BASE);
|
||||
bool efi_novamap;
|
||||
+bool efi_apple_set_os;
|
||||
|
||||
static bool efi_noinitrd;
|
||||
static bool efi_nosoftreserve;
|
||||
@@ -73,6 +74,8 @@ efi_status_t efi_parse_options(char const *cmdline)
|
||||
efi_loglevel = CONSOLE_LOGLEVEL_QUIET;
|
||||
} else if (!strcmp(param, "noinitrd")) {
|
||||
efi_noinitrd = true;
|
||||
+ } else if (!strcmp(param, "apple_set_os")) {
|
||||
+ efi_apple_set_os = true;
|
||||
} else if (IS_ENABLED(CONFIG_X86_64) && !strcmp(param, "no5lvl")) {
|
||||
efi_no5lvl = true;
|
||||
} else if (IS_ENABLED(CONFIG_ARCH_HAS_MEM_ENCRYPT) &&
|
||||
diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
|
||||
index 212687c30..21b414d09 100644
|
||||
--- a/drivers/firmware/efi/libstub/efistub.h
|
||||
+++ b/drivers/firmware/efi/libstub/efistub.h
|
||||
@@ -38,6 +38,7 @@ extern bool efi_nochunk;
|
||||
extern int efi_loglevel;
|
||||
extern int efi_mem_encrypt;
|
||||
extern bool efi_novamap;
|
||||
+extern bool efi_apple_set_os;
|
||||
extern const efi_system_table_t *efi_system_table;
|
||||
|
||||
typedef union efi_dxe_services_table efi_dxe_services_table_t;
|
||||
@@ -825,6 +826,19 @@ union apple_properties_protocol {
|
||||
} mixed_mode;
|
||||
};
|
||||
|
||||
+typedef struct apple_set_os_protocol apple_set_os_protocol_t;
|
||||
+
|
||||
+struct apple_set_os_protocol {
|
||||
+ u64 version;
|
||||
+ efi_status_t (__efiapi *set_os_version) (const char *);
|
||||
+ efi_status_t (__efiapi *set_os_vendor) (const char *);
|
||||
+ struct {
|
||||
+ u32 version;
|
||||
+ u32 set_os_version;
|
||||
+ u32 set_os_vendor;
|
||||
+ } mixed_mode;
|
||||
+};
|
||||
+
|
||||
typedef u32 efi_tcg2_event_log_format;
|
||||
|
||||
#define INITRD_EVENT_TAG_ID 0x8F3B22ECU
|
||||
diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
|
||||
index 70b325a2f..2131f8543 100644
|
||||
--- a/drivers/firmware/efi/libstub/x86-stub.c
|
||||
+++ b/drivers/firmware/efi/libstub/x86-stub.c
|
||||
@@ -223,6 +223,30 @@ static void retrieve_apple_device_properties(struct boot_params *boot_params)
|
||||
}
|
||||
}
|
||||
|
||||
+static void apple_set_os(void)
|
||||
+{
|
||||
+ efi_guid_t guid = APPLE_SET_OS_PROTOCOL_GUID;
|
||||
+ apple_set_os_protocol_t *set_os;
|
||||
+ efi_status_t status;
|
||||
+
|
||||
+ status = efi_bs_call(locate_protocol, &guid, NULL, (void **)&set_os);
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ return;
|
||||
+
|
||||
+ if (efi_table_attr(set_os, version) >= 2) {
|
||||
+ status = efi_fn_call(set_os, set_os_vendor, "Apple Inc.");
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ efi_err("Failed to set OS vendor via apple_set_os\n");
|
||||
+ }
|
||||
+
|
||||
+ /* The version being set doesn't seem to matter */
|
||||
+ if (efi_table_attr(set_os, version) > 0) {
|
||||
+ status = efi_fn_call(set_os, set_os_version, "Mac OS X 10.9");
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ efi_err("Failed to set OS version via apple_set_os\n");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
efi_status_t efi_adjust_memory_range_protection(unsigned long start,
|
||||
unsigned long size)
|
||||
{
|
||||
@@ -321,6 +345,9 @@ static void setup_quirks(struct boot_params *boot_params)
|
||||
if (IS_ENABLED(CONFIG_APPLE_PROPERTIES) &&
|
||||
!memcmp(efistub_fw_vendor(), apple, sizeof(apple)))
|
||||
retrieve_apple_device_properties(boot_params);
|
||||
+
|
||||
+ if (efi_apple_set_os)
|
||||
+ apple_set_os();
|
||||
}
|
||||
|
||||
/*
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index 80b21d1c6..f1e58e027 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -387,6 +387,7 @@ void efi_native_runtime_setup(void);
|
||||
#define EFI_MEMORY_ATTRIBUTES_TABLE_GUID EFI_GUID(0xdcfa911d, 0x26eb, 0x469f, 0xa2, 0x20, 0x38, 0xb7, 0xdc, 0x46, 0x12, 0x20)
|
||||
#define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
#define APPLE_PROPERTIES_PROTOCOL_GUID EFI_GUID(0x91bd12fe, 0xf6c3, 0x44fb, 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a, 0xe0)
|
||||
+#define APPLE_SET_OS_PROTOCOL_GUID EFI_GUID(0xc5c5da95, 0x7d5c, 0x45e6, 0xb2, 0xf1, 0x3f, 0xd5, 0x2b, 0xb1, 0x00, 0x77)
|
||||
#define EFI_TCG2_PROTOCOL_GUID EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f)
|
||||
#define EFI_TCG2_FINAL_EVENTS_TABLE_GUID EFI_GUID(0x1e2ed096, 0x30e2, 0x4254, 0xbd, 0x89, 0x86, 0x3b, 0xbe, 0xf8, 0x23, 0x25)
|
||||
#define EFI_LOAD_FILE_PROTOCOL_GUID EFI_GUID(0x56ec3091, 0x954c, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
From 0dad9ee3c13930fe8122f2efc936fcd1c277a00d Mon Sep 17 00:00:00 2001
|
||||
From: Ard Biesheuvel <ardb@kernel.org>
|
||||
Date: Mon, 1 Jul 2024 18:29:59 +0200
|
||||
Subject: efistub/smbios: Simplify SMBIOS enumeration API
|
||||
|
||||
Update the efi_get_smbios_string() macro to take a pointer to the entire
|
||||
record struct rather than the header. This removes the need to pass the
|
||||
type explicitly, as it can be inferred from the typed pointer. Also,
|
||||
drop 'type' from the prototype of __efi_get_smbios_string(), as it is
|
||||
never referenced.
|
||||
|
||||
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
|
||||
---
|
||||
drivers/firmware/efi/libstub/arm64.c | 3 +--
|
||||
drivers/firmware/efi/libstub/efistub.h | 9 ++++-----
|
||||
drivers/firmware/efi/libstub/smbios.c | 4 ++--
|
||||
3 files changed, 7 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/firmware/efi/libstub/arm64.c b/drivers/firmware/efi/libstub/arm64.c
|
||||
index 446e35eaf3d943..e57cd3de0a00f4 100644
|
||||
--- a/drivers/firmware/efi/libstub/arm64.c
|
||||
+++ b/drivers/firmware/efi/libstub/arm64.c
|
||||
@@ -39,8 +39,7 @@ static bool system_needs_vamap(void)
|
||||
static char const emag[] = "eMAG";
|
||||
|
||||
default:
|
||||
- version = efi_get_smbios_string(&record->header, 4,
|
||||
- processor_version);
|
||||
+ version = efi_get_smbios_string(record, processor_version);
|
||||
if (!version || (strncmp(version, altra, sizeof(altra) - 1) &&
|
||||
strncmp(version, emag, sizeof(emag) - 1)))
|
||||
break;
|
||||
diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
|
||||
index 27abb4ce029173..d33ccbc4a2c630 100644
|
||||
--- a/drivers/firmware/efi/libstub/efistub.h
|
||||
+++ b/drivers/firmware/efi/libstub/efistub.h
|
||||
@@ -1204,14 +1204,13 @@ struct efi_smbios_type4_record {
|
||||
u16 thread_enabled;
|
||||
};
|
||||
|
||||
-#define efi_get_smbios_string(__record, __type, __name) ({ \
|
||||
- int off = offsetof(struct efi_smbios_type ## __type ## _record, \
|
||||
- __name); \
|
||||
- __efi_get_smbios_string((__record), __type, off); \
|
||||
+#define efi_get_smbios_string(__record, __field) ({ \
|
||||
+ __typeof__(__record) __rec = __record; \
|
||||
+ __efi_get_smbios_string(&__rec->header, &__rec->__field); \
|
||||
})
|
||||
|
||||
const u8 *__efi_get_smbios_string(const struct efi_smbios_record *record,
|
||||
- u8 type, int offset);
|
||||
+ const u8 *offset);
|
||||
|
||||
void efi_remap_image(unsigned long image_base, unsigned alloc_size,
|
||||
unsigned long code_size);
|
||||
diff --git a/drivers/firmware/efi/libstub/smbios.c b/drivers/firmware/efi/libstub/smbios.c
|
||||
index c217de2cc8d56d..520c9079717a30 100644
|
||||
--- a/drivers/firmware/efi/libstub/smbios.c
|
||||
+++ b/drivers/firmware/efi/libstub/smbios.c
|
||||
@@ -38,7 +38,7 @@ const struct efi_smbios_record *efi_get_smbios_record(u8 type)
|
||||
}
|
||||
|
||||
const u8 *__efi_get_smbios_string(const struct efi_smbios_record *record,
|
||||
- u8 type, int offset)
|
||||
+ const u8 *offset)
|
||||
{
|
||||
const u8 *strtable;
|
||||
|
||||
@@ -46,7 +46,7 @@ const u8 *__efi_get_smbios_string(const struct efi_smbios_record *record,
|
||||
return NULL;
|
||||
|
||||
strtable = (u8 *)record + record->length;
|
||||
- for (int i = 1; i < ((u8 *)record)[offset]; i++) {
|
||||
+ for (int i = 1; i < *offset; i++) {
|
||||
int len = strlen(strtable);
|
||||
|
||||
if (!len)
|
||||
--
|
||||
cgit 1.2.3-korg
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
From 84810a21ecab70568586217f185998bcf34b450e Mon Sep 17 00:00:00 2001
|
||||
From: Ard Biesheuvel <ardb@kernel.org>
|
||||
Date: Mon, 1 Jul 2024 09:35:33 +0200
|
||||
Subject: x86/efistub: Enable SMBIOS protocol handling for x86
|
||||
|
||||
The smbios.c source file is not currently included in the x86 build, and
|
||||
before we can do so, it needs some tweaks to build correctly in
|
||||
combination with the EFI mixed mode support.
|
||||
|
||||
Reviewed-by: Lukas Wunner <lukas@wunner.de>
|
||||
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
|
||||
---
|
||||
drivers/firmware/efi/libstub/Makefile | 2 +-
|
||||
drivers/firmware/efi/libstub/smbios.c | 39 ++++++++++++++++++++++-------------
|
||||
include/linux/efi.h | 4 ++--
|
||||
3 files changed, 28 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile
|
||||
index 06f0428a723cb8..1f32d6cf98d691 100644
|
||||
--- a/drivers/firmware/efi/libstub/Makefile
|
||||
+++ b/drivers/firmware/efi/libstub/Makefile
|
||||
@@ -76,7 +76,7 @@ lib-$(CONFIG_EFI_GENERIC_STUB) += efi-stub.o string.o intrinsics.o systable.o \
|
||||
|
||||
lib-$(CONFIG_ARM) += arm32-stub.o
|
||||
lib-$(CONFIG_ARM64) += kaslr.o arm64.o arm64-stub.o smbios.o
|
||||
-lib-$(CONFIG_X86) += x86-stub.o
|
||||
+lib-$(CONFIG_X86) += x86-stub.o smbios.o
|
||||
lib-$(CONFIG_X86_64) += x86-5lvl.o
|
||||
lib-$(CONFIG_RISCV) += kaslr.o riscv.o riscv-stub.o
|
||||
lib-$(CONFIG_LOONGARCH) += loongarch.o loongarch-stub.o
|
||||
diff --git a/drivers/firmware/efi/libstub/smbios.c b/drivers/firmware/efi/libstub/smbios.c
|
||||
index 520c9079717a30..f31410d7e7e180 100644
|
||||
--- a/drivers/firmware/efi/libstub/smbios.c
|
||||
+++ b/drivers/firmware/efi/libstub/smbios.c
|
||||
@@ -6,20 +6,31 @@
|
||||
|
||||
#include "efistub.h"
|
||||
|
||||
-typedef struct efi_smbios_protocol efi_smbios_protocol_t;
|
||||
-
|
||||
-struct efi_smbios_protocol {
|
||||
- efi_status_t (__efiapi *add)(efi_smbios_protocol_t *, efi_handle_t,
|
||||
- u16 *, struct efi_smbios_record *);
|
||||
- efi_status_t (__efiapi *update_string)(efi_smbios_protocol_t *, u16 *,
|
||||
- unsigned long *, u8 *);
|
||||
- efi_status_t (__efiapi *remove)(efi_smbios_protocol_t *, u16);
|
||||
- efi_status_t (__efiapi *get_next)(efi_smbios_protocol_t *, u16 *, u8 *,
|
||||
- struct efi_smbios_record **,
|
||||
- efi_handle_t *);
|
||||
-
|
||||
- u8 major_version;
|
||||
- u8 minor_version;
|
||||
+typedef union efi_smbios_protocol efi_smbios_protocol_t;
|
||||
+
|
||||
+union efi_smbios_protocol {
|
||||
+ struct {
|
||||
+ efi_status_t (__efiapi *add)(efi_smbios_protocol_t *, efi_handle_t,
|
||||
+ u16 *, struct efi_smbios_record *);
|
||||
+ efi_status_t (__efiapi *update_string)(efi_smbios_protocol_t *, u16 *,
|
||||
+ unsigned long *, u8 *);
|
||||
+ efi_status_t (__efiapi *remove)(efi_smbios_protocol_t *, u16);
|
||||
+ efi_status_t (__efiapi *get_next)(efi_smbios_protocol_t *, u16 *, u8 *,
|
||||
+ struct efi_smbios_record **,
|
||||
+ efi_handle_t *);
|
||||
+
|
||||
+ u8 major_version;
|
||||
+ u8 minor_version;
|
||||
+ };
|
||||
+ struct {
|
||||
+ u32 add;
|
||||
+ u32 update_string;
|
||||
+ u32 remove;
|
||||
+ u32 get_next;
|
||||
+
|
||||
+ u8 major_version;
|
||||
+ u8 minor_version;
|
||||
+ } mixed_mode;
|
||||
};
|
||||
|
||||
const struct efi_smbios_record *efi_get_smbios_record(u8 type)
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index 418e555459da7c..2a539816a4362d 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -74,10 +74,10 @@ typedef void *efi_handle_t;
|
||||
*/
|
||||
typedef guid_t efi_guid_t __aligned(__alignof__(u32));
|
||||
|
||||
-#define EFI_GUID(a, b, c, d...) (efi_guid_t){ { \
|
||||
+#define EFI_GUID(a, b, c, d...) ((efi_guid_t){ { \
|
||||
(a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \
|
||||
(b) & 0xff, ((b) >> 8) & 0xff, \
|
||||
- (c) & 0xff, ((c) >> 8) & 0xff, d } }
|
||||
+ (c) & 0xff, ((c) >> 8) & 0xff, d } })
|
||||
|
||||
/*
|
||||
* Generic EFI table header
|
||||
--
|
||||
cgit 1.2.3-korg
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
From d68cc8abc357c05ca1567458965f009add8bab69 Mon Sep 17 00:00:00 2001
|
||||
From: Aditya Garg <gargaditya08@live.com>
|
||||
Date: Sun, 30 Jun 2024 19:24:54 +0000
|
||||
Subject: x86/efistub: Call Apple set_os protocol on dual GPU Intel Macs
|
||||
|
||||
0c18184de990 ("platform/x86: apple-gmux: support MMIO gmux on T2 Macs")
|
||||
brought support for T2 Macs in apple-gmux. But in order to use dual GPU,
|
||||
the integrated GPU has to be enabled. On such dual GPU EFI Macs, the EFI
|
||||
stub needs to report that it is booting macOS in order to prevent the
|
||||
firmware from disabling the iGPU.
|
||||
|
||||
This patch is also applicable for some non T2 Intel Macs.
|
||||
|
||||
Based on this patch for GRUB by Andreas Heider <andreas@heider.io>:
|
||||
https://lists.gnu.org/archive/html/grub-devel/2013-12/msg00442.html
|
||||
|
||||
Credits also goto Kerem Karabay <kekrby@gmail.com> for helping porting
|
||||
the patch to the Linux kernel.
|
||||
|
||||
Cc: Orlando Chamberlain <orlandoch.dev@gmail.com>
|
||||
Signed-off-by: Aditya Garg <gargaditya08@live.com>
|
||||
[ardb: limit scope using list of DMI matches provided by Lukas and Orlando]
|
||||
Reviewed-by: Lukas Wunner <lukas@wunner.de>
|
||||
Tested-by: Aditya Garg <gargaditya08@live.com>
|
||||
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
|
||||
---
|
||||
drivers/firmware/efi/libstub/x86-stub.c | 71 +++++++++++++++++++++++++++++++--
|
||||
include/linux/efi.h | 1 +
|
||||
2 files changed, 69 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
|
||||
index 68df27bd71c9b4..51b7185f8707ff 100644
|
||||
--- a/drivers/firmware/efi/libstub/x86-stub.c
|
||||
+++ b/drivers/firmware/efi/libstub/x86-stub.c
|
||||
@@ -225,6 +225,68 @@ static void retrieve_apple_device_properties(struct boot_params *boot_params)
|
||||
}
|
||||
}
|
||||
|
||||
+static bool apple_match_product_name(void)
|
||||
+{
|
||||
+ static const char type1_product_matches[][15] = {
|
||||
+ "MacBookPro11,3",
|
||||
+ "MacBookPro11,5",
|
||||
+ "MacBookPro13,3",
|
||||
+ "MacBookPro14,3",
|
||||
+ "MacBookPro15,1",
|
||||
+ "MacBookPro15,3",
|
||||
+ "MacBookPro16,1",
|
||||
+ "MacBookPro16,4",
|
||||
+ };
|
||||
+ const struct efi_smbios_type1_record *record;
|
||||
+ const u8 *product;
|
||||
+
|
||||
+ record = (struct efi_smbios_type1_record *)efi_get_smbios_record(1);
|
||||
+ if (!record)
|
||||
+ return false;
|
||||
+
|
||||
+ product = efi_get_smbios_string(record, product_name);
|
||||
+ if (!product)
|
||||
+ return false;
|
||||
+
|
||||
+ for (int i = 0; i < ARRAY_SIZE(type1_product_matches); i++) {
|
||||
+ if (!strcmp(product, type1_product_matches[i]))
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+static void apple_set_os(void)
|
||||
+{
|
||||
+ struct {
|
||||
+ unsigned long version;
|
||||
+ efi_status_t (__efiapi *set_os_version)(const char *);
|
||||
+ efi_status_t (__efiapi *set_os_vendor)(const char *);
|
||||
+ } *set_os;
|
||||
+ efi_status_t status;
|
||||
+
|
||||
+ if (!efi_is_64bit() || !apple_match_product_name())
|
||||
+ return;
|
||||
+
|
||||
+ status = efi_bs_call(locate_protocol, &APPLE_SET_OS_PROTOCOL_GUID, NULL,
|
||||
+ (void **)&set_os);
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ return;
|
||||
+
|
||||
+ if (set_os->version >= 2) {
|
||||
+ status = set_os->set_os_vendor("Apple Inc.");
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ efi_err("Failed to set OS vendor via apple_set_os\n");
|
||||
+ }
|
||||
+
|
||||
+ if (set_os->version > 0) {
|
||||
+ /* The version being set doesn't seem to matter */
|
||||
+ status = set_os->set_os_version("Mac OS X 10.9");
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ efi_err("Failed to set OS version via apple_set_os\n");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
efi_status_t efi_adjust_memory_range_protection(unsigned long start,
|
||||
unsigned long size)
|
||||
{
|
||||
@@ -335,9 +397,12 @@ static const efi_char16_t apple[] = L"Apple";
|
||||
|
||||
static void setup_quirks(struct boot_params *boot_params)
|
||||
{
|
||||
- if (IS_ENABLED(CONFIG_APPLE_PROPERTIES) &&
|
||||
- !memcmp(efistub_fw_vendor(), apple, sizeof(apple)))
|
||||
- retrieve_apple_device_properties(boot_params);
|
||||
+ if (!memcmp(efistub_fw_vendor(), apple, sizeof(apple))) {
|
||||
+ if (IS_ENABLED(CONFIG_APPLE_PROPERTIES))
|
||||
+ retrieve_apple_device_properties(boot_params);
|
||||
+
|
||||
+ apple_set_os();
|
||||
+ }
|
||||
}
|
||||
|
||||
/*
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index 2a539816a4362d..3a6c04a9f9aadc 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -385,6 +385,7 @@ void efi_native_runtime_setup(void);
|
||||
#define EFI_MEMORY_ATTRIBUTES_TABLE_GUID EFI_GUID(0xdcfa911d, 0x26eb, 0x469f, 0xa2, 0x20, 0x38, 0xb7, 0xdc, 0x46, 0x12, 0x20)
|
||||
#define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
#define APPLE_PROPERTIES_PROTOCOL_GUID EFI_GUID(0x91bd12fe, 0xf6c3, 0x44fb, 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a, 0xe0)
|
||||
+#define APPLE_SET_OS_PROTOCOL_GUID EFI_GUID(0xc5c5da95, 0x7d5c, 0x45e6, 0xb2, 0xf1, 0x3f, 0xd5, 0x2b, 0xb1, 0x00, 0x77)
|
||||
#define EFI_TCG2_PROTOCOL_GUID EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f)
|
||||
#define EFI_TCG2_FINAL_EVENTS_TABLE_GUID EFI_GUID(0x1e2ed096, 0x30e2, 0x4254, 0xbd, 0x89, 0x86, 0x3b, 0xbe, 0xf8, 0x23, 0x25)
|
||||
#define EFI_LOAD_FILE_PROTOCOL_GUID EFI_GUID(0x56ec3091, 0x954c, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
||||
--
|
||||
cgit 1.2.3-korg
|
||||
|
||||
Reference in New Issue
Block a user