Loading arch/x86/platform/efi/efi.c +2 −0 Original line number Diff line number Diff line Loading @@ -246,6 +246,7 @@ int __init efi_memblock_x86_reserve_range(void) efi.memmap.desc_version); memblock_reserve(pmap, efi.memmap.nr_map * efi.memmap.desc_size); set_bit(EFI_PRESERVE_BS_REGIONS, &efi.flags); return 0; } Loading Loading @@ -901,6 +902,7 @@ static void __init __efi_enter_virtual_mode(void) goto err; } efi_check_for_embedded_firmwares(); efi_free_boot_services(); if (!efi_is_mixed()) Loading arch/x86/platform/efi/quirks.c +4 −0 Original line number Diff line number Diff line Loading @@ -410,6 +410,10 @@ void __init efi_free_boot_services(void) int num_entries = 0; void *new, *new_md; /* Keep all regions for /sys/kernel/debug/efi */ if (efi_enabled(EFI_DBG)) return; for_each_efi_memory_desc(md) { unsigned long long start = md->phys_addr; unsigned long long size = md->num_pages << EFI_PAGE_SHIFT; Loading drivers/firmware/efi/Kconfig +5 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,11 @@ config EFI_DISABLE_PCI_DMA endmenu config EFI_EMBEDDED_FIRMWARE bool depends on EFI select CRYPTO_LIB_SHA256 config UEFI_CPER bool Loading drivers/firmware/efi/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ obj-$(CONFIG_EFI_TEST) += test/ obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o obj-$(CONFIG_EFI_RCI2_TABLE) += rci2-table.o obj-$(CONFIG_EFI_EMBEDDED_FIRMWARE) += embedded-firmware.o fake_map-y += fake_mem.o fake_map-$(CONFIG_X86) += x86_fake_mem.o Loading drivers/firmware/efi/efi.c +57 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include <linux/kobject.h> #include <linux/module.h> #include <linux/init.h> #include <linux/debugfs.h> #include <linux/device.h> #include <linux/efi.h> #include <linux/of.h> Loading Loading @@ -291,6 +292,59 @@ static __init int efivar_ssdt_load(void) static inline int efivar_ssdt_load(void) { return 0; } #endif #ifdef CONFIG_DEBUG_FS #define EFI_DEBUGFS_MAX_BLOBS 32 static struct debugfs_blob_wrapper debugfs_blob[EFI_DEBUGFS_MAX_BLOBS]; static void __init efi_debugfs_init(void) { struct dentry *efi_debugfs; efi_memory_desc_t *md; char name[32]; int type_count[EFI_BOOT_SERVICES_DATA + 1] = {}; int i = 0; efi_debugfs = debugfs_create_dir("efi", NULL); if (IS_ERR_OR_NULL(efi_debugfs)) return; for_each_efi_memory_desc(md) { switch (md->type) { case EFI_BOOT_SERVICES_CODE: snprintf(name, sizeof(name), "boot_services_code%d", type_count[md->type]++); break; case EFI_BOOT_SERVICES_DATA: snprintf(name, sizeof(name), "boot_services_data%d", type_count[md->type]++); break; default: continue; } if (i >= EFI_DEBUGFS_MAX_BLOBS) { pr_warn("More then %d EFI boot service segments, only showing first %d in debugfs\n", EFI_DEBUGFS_MAX_BLOBS, EFI_DEBUGFS_MAX_BLOBS); break; } debugfs_blob[i].size = md->num_pages << EFI_PAGE_SHIFT; debugfs_blob[i].data = memremap(md->phys_addr, debugfs_blob[i].size, MEMREMAP_WB); if (!debugfs_blob[i].data) continue; debugfs_create_blob(name, 0400, efi_debugfs, &debugfs_blob[i]); i++; } } #else static inline void efi_debugfs_init(void) {} #endif /* * We register the efi subsystem with the firmware subsystem and the * efivars subsystem with the efi subsystem, if the system was booted with Loading Loading @@ -357,6 +411,9 @@ static int __init efisubsys_init(void) goto err_remove_group; } if (efi_enabled(EFI_DBG) && efi_enabled(EFI_PRESERVE_BS_REGIONS)) efi_debugfs_init(); return 0; err_remove_group: Loading Loading
arch/x86/platform/efi/efi.c +2 −0 Original line number Diff line number Diff line Loading @@ -246,6 +246,7 @@ int __init efi_memblock_x86_reserve_range(void) efi.memmap.desc_version); memblock_reserve(pmap, efi.memmap.nr_map * efi.memmap.desc_size); set_bit(EFI_PRESERVE_BS_REGIONS, &efi.flags); return 0; } Loading Loading @@ -901,6 +902,7 @@ static void __init __efi_enter_virtual_mode(void) goto err; } efi_check_for_embedded_firmwares(); efi_free_boot_services(); if (!efi_is_mixed()) Loading
arch/x86/platform/efi/quirks.c +4 −0 Original line number Diff line number Diff line Loading @@ -410,6 +410,10 @@ void __init efi_free_boot_services(void) int num_entries = 0; void *new, *new_md; /* Keep all regions for /sys/kernel/debug/efi */ if (efi_enabled(EFI_DBG)) return; for_each_efi_memory_desc(md) { unsigned long long start = md->phys_addr; unsigned long long size = md->num_pages << EFI_PAGE_SHIFT; Loading
drivers/firmware/efi/Kconfig +5 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,11 @@ config EFI_DISABLE_PCI_DMA endmenu config EFI_EMBEDDED_FIRMWARE bool depends on EFI select CRYPTO_LIB_SHA256 config UEFI_CPER bool Loading
drivers/firmware/efi/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ obj-$(CONFIG_EFI_TEST) += test/ obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o obj-$(CONFIG_EFI_RCI2_TABLE) += rci2-table.o obj-$(CONFIG_EFI_EMBEDDED_FIRMWARE) += embedded-firmware.o fake_map-y += fake_mem.o fake_map-$(CONFIG_X86) += x86_fake_mem.o Loading
drivers/firmware/efi/efi.c +57 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include <linux/kobject.h> #include <linux/module.h> #include <linux/init.h> #include <linux/debugfs.h> #include <linux/device.h> #include <linux/efi.h> #include <linux/of.h> Loading Loading @@ -291,6 +292,59 @@ static __init int efivar_ssdt_load(void) static inline int efivar_ssdt_load(void) { return 0; } #endif #ifdef CONFIG_DEBUG_FS #define EFI_DEBUGFS_MAX_BLOBS 32 static struct debugfs_blob_wrapper debugfs_blob[EFI_DEBUGFS_MAX_BLOBS]; static void __init efi_debugfs_init(void) { struct dentry *efi_debugfs; efi_memory_desc_t *md; char name[32]; int type_count[EFI_BOOT_SERVICES_DATA + 1] = {}; int i = 0; efi_debugfs = debugfs_create_dir("efi", NULL); if (IS_ERR_OR_NULL(efi_debugfs)) return; for_each_efi_memory_desc(md) { switch (md->type) { case EFI_BOOT_SERVICES_CODE: snprintf(name, sizeof(name), "boot_services_code%d", type_count[md->type]++); break; case EFI_BOOT_SERVICES_DATA: snprintf(name, sizeof(name), "boot_services_data%d", type_count[md->type]++); break; default: continue; } if (i >= EFI_DEBUGFS_MAX_BLOBS) { pr_warn("More then %d EFI boot service segments, only showing first %d in debugfs\n", EFI_DEBUGFS_MAX_BLOBS, EFI_DEBUGFS_MAX_BLOBS); break; } debugfs_blob[i].size = md->num_pages << EFI_PAGE_SHIFT; debugfs_blob[i].data = memremap(md->phys_addr, debugfs_blob[i].size, MEMREMAP_WB); if (!debugfs_blob[i].data) continue; debugfs_create_blob(name, 0400, efi_debugfs, &debugfs_blob[i]); i++; } } #else static inline void efi_debugfs_init(void) {} #endif /* * We register the efi subsystem with the firmware subsystem and the * efivars subsystem with the efi subsystem, if the system was booted with Loading Loading @@ -357,6 +411,9 @@ static int __init efisubsys_init(void) goto err_remove_group; } if (efi_enabled(EFI_DBG) && efi_enabled(EFI_PRESERVE_BS_REGIONS)) efi_debugfs_init(); return 0; err_remove_group: Loading