xref: /linux/drivers/firmware/efi/efi.c (revision eb01fe7abbe2d0b38824d2a93fdb4cc3eaf2ccc1)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * efi.c - EFI subsystem
4  *
5  * Copyright (C) 2001,2003,2004 Dell <Matt_Domsch@dell.com>
6  * Copyright (C) 2004 Intel Corporation <matthew.e.tolentino@intel.com>
7  * Copyright (C) 2013 Tom Gundersen <teg@jklm.no>
8  *
9  * This code registers /sys/firmware/efi{,/efivars} when EFI is supported,
10  * allowing the efivarfs to be mounted or the efivars module to be loaded.
11  * The existance of /sys/firmware/efi may also be used by userspace to
12  * determine that the system supports EFI.
13  */
14 
15 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16 
17 #include <linux/kobject.h>
18 #include <linux/module.h>
19 #include <linux/init.h>
20 #include <linux/debugfs.h>
21 #include <linux/device.h>
22 #include <linux/efi.h>
23 #include <linux/of.h>
24 #include <linux/initrd.h>
25 #include <linux/io.h>
26 #include <linux/kexec.h>
27 #include <linux/platform_device.h>
28 #include <linux/random.h>
29 #include <linux/reboot.h>
30 #include <linux/slab.h>
31 #include <linux/acpi.h>
32 #include <linux/ucs2_string.h>
33 #include <linux/memblock.h>
34 #include <linux/security.h>
35 #include <linux/notifier.h>
36 
37 #include <asm/early_ioremap.h>
38 
39 struct efi __read_mostly efi = {
40 	.runtime_supported_mask = EFI_RT_SUPPORTED_ALL,
41 	.acpi			= EFI_INVALID_TABLE_ADDR,
42 	.acpi20			= EFI_INVALID_TABLE_ADDR,
43 	.smbios			= EFI_INVALID_TABLE_ADDR,
44 	.smbios3		= EFI_INVALID_TABLE_ADDR,
45 	.esrt			= EFI_INVALID_TABLE_ADDR,
46 	.tpm_log		= EFI_INVALID_TABLE_ADDR,
47 	.tpm_final_log		= EFI_INVALID_TABLE_ADDR,
48 #ifdef CONFIG_LOAD_UEFI_KEYS
49 	.mokvar_table		= EFI_INVALID_TABLE_ADDR,
50 #endif
51 #ifdef CONFIG_EFI_COCO_SECRET
52 	.coco_secret		= EFI_INVALID_TABLE_ADDR,
53 #endif
54 #ifdef CONFIG_UNACCEPTED_MEMORY
55 	.unaccepted		= EFI_INVALID_TABLE_ADDR,
56 #endif
57 };
58 EXPORT_SYMBOL(efi);
59 
60 unsigned long __ro_after_init efi_rng_seed = EFI_INVALID_TABLE_ADDR;
61 static unsigned long __initdata mem_reserve = EFI_INVALID_TABLE_ADDR;
62 static unsigned long __initdata rt_prop = EFI_INVALID_TABLE_ADDR;
63 static unsigned long __initdata initrd = EFI_INVALID_TABLE_ADDR;
64 
65 extern unsigned long screen_info_table;
66 
67 struct mm_struct efi_mm = {
68 	.mm_mt			= MTREE_INIT_EXT(mm_mt, MM_MT_FLAGS, efi_mm.mmap_lock),
69 	.mm_users		= ATOMIC_INIT(2),
70 	.mm_count		= ATOMIC_INIT(1),
71 	.write_protect_seq      = SEQCNT_ZERO(efi_mm.write_protect_seq),
72 	MMAP_LOCK_INITIALIZER(efi_mm)
73 	.page_table_lock	= __SPIN_LOCK_UNLOCKED(efi_mm.page_table_lock),
74 	.mmlist			= LIST_HEAD_INIT(efi_mm.mmlist),
75 	.cpu_bitmap		= { [BITS_TO_LONGS(NR_CPUS)] = 0},
76 };
77 
78 struct workqueue_struct *efi_rts_wq;
79 
80 static bool disable_runtime = IS_ENABLED(CONFIG_EFI_DISABLE_RUNTIME);
81 static int __init setup_noefi(char *arg)
82 {
83 	disable_runtime = true;
84 	return 0;
85 }
86 early_param("noefi", setup_noefi);
87 
88 bool efi_runtime_disabled(void)
89 {
90 	return disable_runtime;
91 }
92 
93 bool __pure __efi_soft_reserve_enabled(void)
94 {
95 	return !efi_enabled(EFI_MEM_NO_SOFT_RESERVE);
96 }
97 
98 static int __init parse_efi_cmdline(char *str)
99 {
100 	if (!str) {
101 		pr_warn("need at least one option\n");
102 		return -EINVAL;
103 	}
104 
105 	if (parse_option_str(str, "debug"))
106 		set_bit(EFI_DBG, &efi.flags);
107 
108 	if (parse_option_str(str, "noruntime"))
109 		disable_runtime = true;
110 
111 	if (parse_option_str(str, "runtime"))
112 		disable_runtime = false;
113 
114 	if (parse_option_str(str, "nosoftreserve"))
115 		set_bit(EFI_MEM_NO_SOFT_RESERVE, &efi.flags);
116 
117 	return 0;
118 }
119 early_param("efi", parse_efi_cmdline);
120 
121 struct kobject *efi_kobj;
122 
123 /*
124  * Let's not leave out systab information that snuck into
125  * the efivars driver
126  * Note, do not add more fields in systab sysfs file as it breaks sysfs
127  * one value per file rule!
128  */
129 static ssize_t systab_show(struct kobject *kobj,
130 			   struct kobj_attribute *attr, char *buf)
131 {
132 	char *str = buf;
133 
134 	if (!kobj || !buf)
135 		return -EINVAL;
136 
137 	if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
138 		str += sprintf(str, "ACPI20=0x%lx\n", efi.acpi20);
139 	if (efi.acpi != EFI_INVALID_TABLE_ADDR)
140 		str += sprintf(str, "ACPI=0x%lx\n", efi.acpi);
141 	/*
142 	 * If both SMBIOS and SMBIOS3 entry points are implemented, the
143 	 * SMBIOS3 entry point shall be preferred, so we list it first to
144 	 * let applications stop parsing after the first match.
145 	 */
146 	if (efi.smbios3 != EFI_INVALID_TABLE_ADDR)
147 		str += sprintf(str, "SMBIOS3=0x%lx\n", efi.smbios3);
148 	if (efi.smbios != EFI_INVALID_TABLE_ADDR)
149 		str += sprintf(str, "SMBIOS=0x%lx\n", efi.smbios);
150 
151 	if (IS_ENABLED(CONFIG_X86))
152 		str = efi_systab_show_arch(str);
153 
154 	return str - buf;
155 }
156 
157 static struct kobj_attribute efi_attr_systab = __ATTR_RO_MODE(systab, 0400);
158 
159 static ssize_t fw_platform_size_show(struct kobject *kobj,
160 				     struct kobj_attribute *attr, char *buf)
161 {
162 	return sprintf(buf, "%d\n", efi_enabled(EFI_64BIT) ? 64 : 32);
163 }
164 
165 extern __weak struct kobj_attribute efi_attr_fw_vendor;
166 extern __weak struct kobj_attribute efi_attr_runtime;
167 extern __weak struct kobj_attribute efi_attr_config_table;
168 static struct kobj_attribute efi_attr_fw_platform_size =
169 	__ATTR_RO(fw_platform_size);
170 
171 static struct attribute *efi_subsys_attrs[] = {
172 	&efi_attr_systab.attr,
173 	&efi_attr_fw_platform_size.attr,
174 	&efi_attr_fw_vendor.attr,
175 	&efi_attr_runtime.attr,
176 	&efi_attr_config_table.attr,
177 	NULL,
178 };
179 
180 umode_t __weak efi_attr_is_visible(struct kobject *kobj, struct attribute *attr,
181 				   int n)
182 {
183 	return attr->mode;
184 }
185 
186 static const struct attribute_group efi_subsys_attr_group = {
187 	.attrs = efi_subsys_attrs,
188 	.is_visible = efi_attr_is_visible,
189 };
190 
191 struct blocking_notifier_head efivar_ops_nh;
192 EXPORT_SYMBOL_GPL(efivar_ops_nh);
193 
194 static struct efivars generic_efivars;
195 static struct efivar_operations generic_ops;
196 
197 static bool generic_ops_supported(void)
198 {
199 	unsigned long name_size;
200 	efi_status_t status;
201 	efi_char16_t name;
202 	efi_guid_t guid;
203 
204 	name_size = sizeof(name);
205 
206 	status = efi.get_next_variable(&name_size, &name, &guid);
207 	if (status == EFI_UNSUPPORTED)
208 		return false;
209 
210 	return true;
211 }
212 
213 static int generic_ops_register(void)
214 {
215 	if (!generic_ops_supported())
216 		return 0;
217 
218 	generic_ops.get_variable = efi.get_variable;
219 	generic_ops.get_next_variable = efi.get_next_variable;
220 	generic_ops.query_variable_store = efi_query_variable_store;
221 	generic_ops.query_variable_info = efi.query_variable_info;
222 
223 	if (efi_rt_services_supported(EFI_RT_SUPPORTED_SET_VARIABLE)) {
224 		generic_ops.set_variable = efi.set_variable;
225 		generic_ops.set_variable_nonblocking = efi.set_variable_nonblocking;
226 	}
227 	return efivars_register(&generic_efivars, &generic_ops);
228 }
229 
230 static void generic_ops_unregister(void)
231 {
232 	if (!generic_ops.get_variable)
233 		return;
234 
235 	efivars_unregister(&generic_efivars);
236 }
237 
238 void efivars_generic_ops_register(void)
239 {
240 	generic_ops_register();
241 }
242 EXPORT_SYMBOL_GPL(efivars_generic_ops_register);
243 
244 void efivars_generic_ops_unregister(void)
245 {
246 	generic_ops_unregister();
247 }
248 EXPORT_SYMBOL_GPL(efivars_generic_ops_unregister);
249 
250 #ifdef CONFIG_EFI_CUSTOM_SSDT_OVERLAYS
251 #define EFIVAR_SSDT_NAME_MAX	16UL
252 static char efivar_ssdt[EFIVAR_SSDT_NAME_MAX] __initdata;
253 static int __init efivar_ssdt_setup(char *str)
254 {
255 	int ret = security_locked_down(LOCKDOWN_ACPI_TABLES);
256 
257 	if (ret)
258 		return ret;
259 
260 	if (strlen(str) < sizeof(efivar_ssdt))
261 		memcpy(efivar_ssdt, str, strlen(str));
262 	else
263 		pr_warn("efivar_ssdt: name too long: %s\n", str);
264 	return 1;
265 }
266 __setup("efivar_ssdt=", efivar_ssdt_setup);
267 
268 static __init int efivar_ssdt_load(void)
269 {
270 	unsigned long name_size = 256;
271 	efi_char16_t *name = NULL;
272 	efi_status_t status;
273 	efi_guid_t guid;
274 
275 	if (!efivar_ssdt[0])
276 		return 0;
277 
278 	name = kzalloc(name_size, GFP_KERNEL);
279 	if (!name)
280 		return -ENOMEM;
281 
282 	for (;;) {
283 		char utf8_name[EFIVAR_SSDT_NAME_MAX];
284 		unsigned long data_size = 0;
285 		void *data;
286 		int limit;
287 
288 		status = efi.get_next_variable(&name_size, name, &guid);
289 		if (status == EFI_NOT_FOUND) {
290 			break;
291 		} else if (status == EFI_BUFFER_TOO_SMALL) {
292 			efi_char16_t *name_tmp =
293 				krealloc(name, name_size, GFP_KERNEL);
294 			if (!name_tmp) {
295 				kfree(name);
296 				return -ENOMEM;
297 			}
298 			name = name_tmp;
299 			continue;
300 		}
301 
302 		limit = min(EFIVAR_SSDT_NAME_MAX, name_size);
303 		ucs2_as_utf8(utf8_name, name, limit - 1);
304 		if (strncmp(utf8_name, efivar_ssdt, limit) != 0)
305 			continue;
306 
307 		pr_info("loading SSDT from variable %s-%pUl\n", efivar_ssdt, &guid);
308 
309 		status = efi.get_variable(name, &guid, NULL, &data_size, NULL);
310 		if (status != EFI_BUFFER_TOO_SMALL || !data_size)
311 			return -EIO;
312 
313 		data = kmalloc(data_size, GFP_KERNEL);
314 		if (!data)
315 			return -ENOMEM;
316 
317 		status = efi.get_variable(name, &guid, NULL, &data_size, data);
318 		if (status == EFI_SUCCESS) {
319 			acpi_status ret = acpi_load_table(data, NULL);
320 			if (ret)
321 				pr_err("failed to load table: %u\n", ret);
322 			else
323 				continue;
324 		} else {
325 			pr_err("failed to get var data: 0x%lx\n", status);
326 		}
327 		kfree(data);
328 	}
329 	return 0;
330 }
331 #else
332 static inline int efivar_ssdt_load(void) { return 0; }
333 #endif
334 
335 #ifdef CONFIG_DEBUG_FS
336 
337 #define EFI_DEBUGFS_MAX_BLOBS 32
338 
339 static struct debugfs_blob_wrapper debugfs_blob[EFI_DEBUGFS_MAX_BLOBS];
340 
341 static void __init efi_debugfs_init(void)
342 {
343 	struct dentry *efi_debugfs;
344 	efi_memory_desc_t *md;
345 	char name[32];
346 	int type_count[EFI_BOOT_SERVICES_DATA + 1] = {};
347 	int i = 0;
348 
349 	efi_debugfs = debugfs_create_dir("efi", NULL);
350 	if (IS_ERR_OR_NULL(efi_debugfs))
351 		return;
352 
353 	for_each_efi_memory_desc(md) {
354 		switch (md->type) {
355 		case EFI_BOOT_SERVICES_CODE:
356 			snprintf(name, sizeof(name), "boot_services_code%d",
357 				 type_count[md->type]++);
358 			break;
359 		case EFI_BOOT_SERVICES_DATA:
360 			snprintf(name, sizeof(name), "boot_services_data%d",
361 				 type_count[md->type]++);
362 			break;
363 		default:
364 			continue;
365 		}
366 
367 		if (i >= EFI_DEBUGFS_MAX_BLOBS) {
368 			pr_warn("More then %d EFI boot service segments, only showing first %d in debugfs\n",
369 				EFI_DEBUGFS_MAX_BLOBS, EFI_DEBUGFS_MAX_BLOBS);
370 			break;
371 		}
372 
373 		debugfs_blob[i].size = md->num_pages << EFI_PAGE_SHIFT;
374 		debugfs_blob[i].data = memremap(md->phys_addr,
375 						debugfs_blob[i].size,
376 						MEMREMAP_WB);
377 		if (!debugfs_blob[i].data)
378 			continue;
379 
380 		debugfs_create_blob(name, 0400, efi_debugfs, &debugfs_blob[i]);
381 		i++;
382 	}
383 }
384 #else
385 static inline void efi_debugfs_init(void) {}
386 #endif
387 
388 /*
389  * We register the efi subsystem with the firmware subsystem and the
390  * efivars subsystem with the efi subsystem, if the system was booted with
391  * EFI.
392  */
393 static int __init efisubsys_init(void)
394 {
395 	int error;
396 
397 	if (!efi_enabled(EFI_RUNTIME_SERVICES))
398 		efi.runtime_supported_mask = 0;
399 
400 	if (!efi_enabled(EFI_BOOT))
401 		return 0;
402 
403 	if (efi.runtime_supported_mask) {
404 		/*
405 		 * Since we process only one efi_runtime_service() at a time, an
406 		 * ordered workqueue (which creates only one execution context)
407 		 * should suffice for all our needs.
408 		 */
409 		efi_rts_wq = alloc_ordered_workqueue("efi_rts_wq", 0);
410 		if (!efi_rts_wq) {
411 			pr_err("Creating efi_rts_wq failed, EFI runtime services disabled.\n");
412 			clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
413 			efi.runtime_supported_mask = 0;
414 			return 0;
415 		}
416 	}
417 
418 	if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES))
419 		platform_device_register_simple("rtc-efi", 0, NULL, 0);
420 
421 	/* We register the efi directory at /sys/firmware/efi */
422 	efi_kobj = kobject_create_and_add("efi", firmware_kobj);
423 	if (!efi_kobj) {
424 		pr_err("efi: Firmware registration failed.\n");
425 		error = -ENOMEM;
426 		goto err_destroy_wq;
427 	}
428 
429 	if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
430 				      EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
431 		error = generic_ops_register();
432 		if (error)
433 			goto err_put;
434 		efivar_ssdt_load();
435 		platform_device_register_simple("efivars", 0, NULL, 0);
436 	}
437 
438 	BLOCKING_INIT_NOTIFIER_HEAD(&efivar_ops_nh);
439 
440 	error = sysfs_create_group(efi_kobj, &efi_subsys_attr_group);
441 	if (error) {
442 		pr_err("efi: Sysfs attribute export failed with error %d.\n",
443 		       error);
444 		goto err_unregister;
445 	}
446 
447 	/* and the standard mountpoint for efivarfs */
448 	error = sysfs_create_mount_point(efi_kobj, "efivars");
449 	if (error) {
450 		pr_err("efivars: Subsystem registration failed.\n");
451 		goto err_remove_group;
452 	}
453 
454 	if (efi_enabled(EFI_DBG) && efi_enabled(EFI_PRESERVE_BS_REGIONS))
455 		efi_debugfs_init();
456 
457 #ifdef CONFIG_EFI_COCO_SECRET
458 	if (efi.coco_secret != EFI_INVALID_TABLE_ADDR)
459 		platform_device_register_simple("efi_secret", 0, NULL, 0);
460 #endif
461 
462 	return 0;
463 
464 err_remove_group:
465 	sysfs_remove_group(efi_kobj, &efi_subsys_attr_group);
466 err_unregister:
467 	if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
468 				      EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME))
469 		generic_ops_unregister();
470 err_put:
471 	kobject_put(efi_kobj);
472 	efi_kobj = NULL;
473 err_destroy_wq:
474 	if (efi_rts_wq)
475 		destroy_workqueue(efi_rts_wq);
476 
477 	return error;
478 }
479 
480 subsys_initcall(efisubsys_init);
481 
482 void __init efi_find_mirror(void)
483 {
484 	efi_memory_desc_t *md;
485 	u64 mirror_size = 0, total_size = 0;
486 
487 	if (!efi_enabled(EFI_MEMMAP))
488 		return;
489 
490 	for_each_efi_memory_desc(md) {
491 		unsigned long long start = md->phys_addr;
492 		unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
493 
494 		total_size += size;
495 		if (md->attribute & EFI_MEMORY_MORE_RELIABLE) {
496 			memblock_mark_mirror(start, size);
497 			mirror_size += size;
498 		}
499 	}
500 	if (mirror_size)
501 		pr_info("Memory: %lldM/%lldM mirrored memory\n",
502 			mirror_size>>20, total_size>>20);
503 }
504 
505 /*
506  * Find the efi memory descriptor for a given physical address.  Given a
507  * physical address, determine if it exists within an EFI Memory Map entry,
508  * and if so, populate the supplied memory descriptor with the appropriate
509  * data.
510  */
511 int __efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md)
512 {
513 	efi_memory_desc_t *md;
514 
515 	if (!efi_enabled(EFI_MEMMAP)) {
516 		pr_err_once("EFI_MEMMAP is not enabled.\n");
517 		return -EINVAL;
518 	}
519 
520 	if (!out_md) {
521 		pr_err_once("out_md is null.\n");
522 		return -EINVAL;
523         }
524 
525 	for_each_efi_memory_desc(md) {
526 		u64 size;
527 		u64 end;
528 
529 		/* skip bogus entries (including empty ones) */
530 		if ((md->phys_addr & (EFI_PAGE_SIZE - 1)) ||
531 		    (md->num_pages <= 0) ||
532 		    (md->num_pages > (U64_MAX - md->phys_addr) >> EFI_PAGE_SHIFT))
533 			continue;
534 
535 		size = md->num_pages << EFI_PAGE_SHIFT;
536 		end = md->phys_addr + size;
537 		if (phys_addr >= md->phys_addr && phys_addr < end) {
538 			memcpy(out_md, md, sizeof(*out_md));
539 			return 0;
540 		}
541 	}
542 	return -ENOENT;
543 }
544 
545 extern int efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md)
546 	__weak __alias(__efi_mem_desc_lookup);
547 
548 /*
549  * Calculate the highest address of an efi memory descriptor.
550  */
551 u64 __init efi_mem_desc_end(efi_memory_desc_t *md)
552 {
553 	u64 size = md->num_pages << EFI_PAGE_SHIFT;
554 	u64 end = md->phys_addr + size;
555 	return end;
556 }
557 
558 void __init __weak efi_arch_mem_reserve(phys_addr_t addr, u64 size) {}
559 
560 /**
561  * efi_mem_reserve - Reserve an EFI memory region
562  * @addr: Physical address to reserve
563  * @size: Size of reservation
564  *
565  * Mark a region as reserved from general kernel allocation and
566  * prevent it being released by efi_free_boot_services().
567  *
568  * This function should be called drivers once they've parsed EFI
569  * configuration tables to figure out where their data lives, e.g.
570  * efi_esrt_init().
571  */
572 void __init efi_mem_reserve(phys_addr_t addr, u64 size)
573 {
574 	/* efi_mem_reserve() does not work under Xen */
575 	if (WARN_ON_ONCE(efi_enabled(EFI_PARAVIRT)))
576 		return;
577 
578 	if (!memblock_is_region_reserved(addr, size))
579 		memblock_reserve(addr, size);
580 
581 	/*
582 	 * Some architectures (x86) reserve all boot services ranges
583 	 * until efi_free_boot_services() because of buggy firmware
584 	 * implementations. This means the above memblock_reserve() is
585 	 * superfluous on x86 and instead what it needs to do is
586 	 * ensure the @start, @size is not freed.
587 	 */
588 	efi_arch_mem_reserve(addr, size);
589 }
590 
591 static const efi_config_table_type_t common_tables[] __initconst = {
592 	{ACPI_20_TABLE_GUID,			&efi.acpi20,		"ACPI 2.0"	},
593 	{ACPI_TABLE_GUID,			&efi.acpi,		"ACPI"		},
594 	{SMBIOS_TABLE_GUID,			&efi.smbios,		"SMBIOS"	},
595 	{SMBIOS3_TABLE_GUID,			&efi.smbios3,		"SMBIOS 3.0"	},
596 	{EFI_SYSTEM_RESOURCE_TABLE_GUID,	&efi.esrt,		"ESRT"		},
597 	{EFI_MEMORY_ATTRIBUTES_TABLE_GUID,	&efi_mem_attr_table,	"MEMATTR"	},
598 	{LINUX_EFI_RANDOM_SEED_TABLE_GUID,	&efi_rng_seed,		"RNG"		},
599 	{LINUX_EFI_TPM_EVENT_LOG_GUID,		&efi.tpm_log,		"TPMEventLog"	},
600 	{EFI_TCG2_FINAL_EVENTS_TABLE_GUID,	&efi.tpm_final_log,	"TPMFinalLog"	},
601 	{EFI_CC_FINAL_EVENTS_TABLE_GUID,	&efi.tpm_final_log,	"CCFinalLog"	},
602 	{LINUX_EFI_MEMRESERVE_TABLE_GUID,	&mem_reserve,		"MEMRESERVE"	},
603 	{LINUX_EFI_INITRD_MEDIA_GUID,		&initrd,		"INITRD"	},
604 	{EFI_RT_PROPERTIES_TABLE_GUID,		&rt_prop,		"RTPROP"	},
605 #ifdef CONFIG_EFI_RCI2_TABLE
606 	{DELLEMC_EFI_RCI2_TABLE_GUID,		&rci2_table_phys			},
607 #endif
608 #ifdef CONFIG_LOAD_UEFI_KEYS
609 	{LINUX_EFI_MOK_VARIABLE_TABLE_GUID,	&efi.mokvar_table,	"MOKvar"	},
610 #endif
611 #ifdef CONFIG_EFI_COCO_SECRET
612 	{LINUX_EFI_COCO_SECRET_AREA_GUID,	&efi.coco_secret,	"CocoSecret"	},
613 #endif
614 #ifdef CONFIG_UNACCEPTED_MEMORY
615 	{LINUX_EFI_UNACCEPTED_MEM_TABLE_GUID,	&efi.unaccepted,	"Unaccepted"	},
616 #endif
617 #ifdef CONFIG_EFI_GENERIC_STUB
618 	{LINUX_EFI_SCREEN_INFO_TABLE_GUID,	&screen_info_table			},
619 #endif
620 	{},
621 };
622 
623 static __init int match_config_table(const efi_guid_t *guid,
624 				     unsigned long table,
625 				     const efi_config_table_type_t *table_types)
626 {
627 	int i;
628 
629 	for (i = 0; efi_guidcmp(table_types[i].guid, NULL_GUID); i++) {
630 		if (efi_guidcmp(*guid, table_types[i].guid))
631 			continue;
632 
633 		if (!efi_config_table_is_usable(guid, table)) {
634 			if (table_types[i].name[0])
635 				pr_cont("(%s=0x%lx unusable) ",
636 					table_types[i].name, table);
637 			return 1;
638 		}
639 
640 		*(table_types[i].ptr) = table;
641 		if (table_types[i].name[0])
642 			pr_cont("%s=0x%lx ", table_types[i].name, table);
643 		return 1;
644 	}
645 
646 	return 0;
647 }
648 
649 /**
650  * reserve_unaccepted - Map and reserve unaccepted configuration table
651  * @unaccepted: Pointer to unaccepted memory table
652  *
653  * memblock_add() makes sure that the table is mapped in direct mapping. During
654  * normal boot it happens automatically because the table is allocated from
655  * usable memory. But during crashkernel boot only memory specifically reserved
656  * for crash scenario is mapped. memblock_add() forces the table to be mapped
657  * in crashkernel case.
658  *
659  * Align the range to the nearest page borders. Ranges smaller than page size
660  * are not going to be mapped.
661  *
662  * memblock_reserve() makes sure that future allocations will not touch the
663  * table.
664  */
665 
666 static __init void reserve_unaccepted(struct efi_unaccepted_memory *unaccepted)
667 {
668 	phys_addr_t start, size;
669 
670 	start = PAGE_ALIGN_DOWN(efi.unaccepted);
671 	size = PAGE_ALIGN(sizeof(*unaccepted) + unaccepted->size);
672 
673 	memblock_add(start, size);
674 	memblock_reserve(start, size);
675 }
676 
677 int __init efi_config_parse_tables(const efi_config_table_t *config_tables,
678 				   int count,
679 				   const efi_config_table_type_t *arch_tables)
680 {
681 	const efi_config_table_64_t *tbl64 = (void *)config_tables;
682 	const efi_config_table_32_t *tbl32 = (void *)config_tables;
683 	const efi_guid_t *guid;
684 	unsigned long table;
685 	int i;
686 
687 	pr_info("");
688 	for (i = 0; i < count; i++) {
689 		if (!IS_ENABLED(CONFIG_X86)) {
690 			guid = &config_tables[i].guid;
691 			table = (unsigned long)config_tables[i].table;
692 		} else if (efi_enabled(EFI_64BIT)) {
693 			guid = &tbl64[i].guid;
694 			table = tbl64[i].table;
695 
696 			if (IS_ENABLED(CONFIG_X86_32) &&
697 			    tbl64[i].table > U32_MAX) {
698 				pr_cont("\n");
699 				pr_err("Table located above 4GB, disabling EFI.\n");
700 				return -EINVAL;
701 			}
702 		} else {
703 			guid = &tbl32[i].guid;
704 			table = tbl32[i].table;
705 		}
706 
707 		if (!match_config_table(guid, table, common_tables) && arch_tables)
708 			match_config_table(guid, table, arch_tables);
709 	}
710 	pr_cont("\n");
711 	set_bit(EFI_CONFIG_TABLES, &efi.flags);
712 
713 	if (efi_rng_seed != EFI_INVALID_TABLE_ADDR) {
714 		struct linux_efi_random_seed *seed;
715 		u32 size = 0;
716 
717 		seed = early_memremap(efi_rng_seed, sizeof(*seed));
718 		if (seed != NULL) {
719 			size = min_t(u32, seed->size, SZ_1K); // sanity check
720 			early_memunmap(seed, sizeof(*seed));
721 		} else {
722 			pr_err("Could not map UEFI random seed!\n");
723 		}
724 		if (size > 0) {
725 			seed = early_memremap(efi_rng_seed,
726 					      sizeof(*seed) + size);
727 			if (seed != NULL) {
728 				add_bootloader_randomness(seed->bits, size);
729 				memzero_explicit(seed->bits, size);
730 				early_memunmap(seed, sizeof(*seed) + size);
731 			} else {
732 				pr_err("Could not map UEFI random seed!\n");
733 			}
734 		}
735 	}
736 
737 	if (!IS_ENABLED(CONFIG_X86_32) && efi_enabled(EFI_MEMMAP))
738 		efi_memattr_init();
739 
740 	efi_tpm_eventlog_init();
741 
742 	if (mem_reserve != EFI_INVALID_TABLE_ADDR) {
743 		unsigned long prsv = mem_reserve;
744 
745 		while (prsv) {
746 			struct linux_efi_memreserve *rsv;
747 			u8 *p;
748 
749 			/*
750 			 * Just map a full page: that is what we will get
751 			 * anyway, and it permits us to map the entire entry
752 			 * before knowing its size.
753 			 */
754 			p = early_memremap(ALIGN_DOWN(prsv, PAGE_SIZE),
755 					   PAGE_SIZE);
756 			if (p == NULL) {
757 				pr_err("Could not map UEFI memreserve entry!\n");
758 				return -ENOMEM;
759 			}
760 
761 			rsv = (void *)(p + prsv % PAGE_SIZE);
762 
763 			/* reserve the entry itself */
764 			memblock_reserve(prsv,
765 					 struct_size(rsv, entry, rsv->size));
766 
767 			for (i = 0; i < atomic_read(&rsv->count); i++) {
768 				memblock_reserve(rsv->entry[i].base,
769 						 rsv->entry[i].size);
770 			}
771 
772 			prsv = rsv->next;
773 			early_memunmap(p, PAGE_SIZE);
774 		}
775 	}
776 
777 	if (rt_prop != EFI_INVALID_TABLE_ADDR) {
778 		efi_rt_properties_table_t *tbl;
779 
780 		tbl = early_memremap(rt_prop, sizeof(*tbl));
781 		if (tbl) {
782 			efi.runtime_supported_mask &= tbl->runtime_services_supported;
783 			early_memunmap(tbl, sizeof(*tbl));
784 		}
785 	}
786 
787 	if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) &&
788 	    initrd != EFI_INVALID_TABLE_ADDR && phys_initrd_size == 0) {
789 		struct linux_efi_initrd *tbl;
790 
791 		tbl = early_memremap(initrd, sizeof(*tbl));
792 		if (tbl) {
793 			phys_initrd_start = tbl->base;
794 			phys_initrd_size = tbl->size;
795 			early_memunmap(tbl, sizeof(*tbl));
796 		}
797 	}
798 
799 	if (IS_ENABLED(CONFIG_UNACCEPTED_MEMORY) &&
800 	    efi.unaccepted != EFI_INVALID_TABLE_ADDR) {
801 		struct efi_unaccepted_memory *unaccepted;
802 
803 		unaccepted = early_memremap(efi.unaccepted, sizeof(*unaccepted));
804 		if (unaccepted) {
805 
806 			if (unaccepted->version == 1) {
807 				reserve_unaccepted(unaccepted);
808 			} else {
809 				efi.unaccepted = EFI_INVALID_TABLE_ADDR;
810 			}
811 
812 			early_memunmap(unaccepted, sizeof(*unaccepted));
813 		}
814 	}
815 
816 	return 0;
817 }
818 
819 int __init efi_systab_check_header(const efi_table_hdr_t *systab_hdr)
820 {
821 	if (systab_hdr->signature != EFI_SYSTEM_TABLE_SIGNATURE) {
822 		pr_err("System table signature incorrect!\n");
823 		return -EINVAL;
824 	}
825 
826 	return 0;
827 }
828 
829 static const efi_char16_t *__init map_fw_vendor(unsigned long fw_vendor,
830 						size_t size)
831 {
832 	const efi_char16_t *ret;
833 
834 	ret = early_memremap_ro(fw_vendor, size);
835 	if (!ret)
836 		pr_err("Could not map the firmware vendor!\n");
837 	return ret;
838 }
839 
840 static void __init unmap_fw_vendor(const void *fw_vendor, size_t size)
841 {
842 	early_memunmap((void *)fw_vendor, size);
843 }
844 
845 void __init efi_systab_report_header(const efi_table_hdr_t *systab_hdr,
846 				     unsigned long fw_vendor)
847 {
848 	char vendor[100] = "unknown";
849 	const efi_char16_t *c16;
850 	size_t i;
851 	u16 rev;
852 
853 	c16 = map_fw_vendor(fw_vendor, sizeof(vendor) * sizeof(efi_char16_t));
854 	if (c16) {
855 		for (i = 0; i < sizeof(vendor) - 1 && c16[i]; ++i)
856 			vendor[i] = c16[i];
857 		vendor[i] = '\0';
858 
859 		unmap_fw_vendor(c16, sizeof(vendor) * sizeof(efi_char16_t));
860 	}
861 
862 	rev = (u16)systab_hdr->revision;
863 	pr_info("EFI v%u.%u", systab_hdr->revision >> 16, rev / 10);
864 
865 	rev %= 10;
866 	if (rev)
867 		pr_cont(".%u", rev);
868 
869 	pr_cont(" by %s\n", vendor);
870 
871 	if (IS_ENABLED(CONFIG_X86_64) &&
872 	    systab_hdr->revision > EFI_1_10_SYSTEM_TABLE_REVISION &&
873 	    !strcmp(vendor, "Apple")) {
874 		pr_info("Apple Mac detected, using EFI v1.10 runtime services only\n");
875 		efi.runtime_version = EFI_1_10_SYSTEM_TABLE_REVISION;
876 	}
877 }
878 
879 static __initdata char memory_type_name[][13] = {
880 	"Reserved",
881 	"Loader Code",
882 	"Loader Data",
883 	"Boot Code",
884 	"Boot Data",
885 	"Runtime Code",
886 	"Runtime Data",
887 	"Conventional",
888 	"Unusable",
889 	"ACPI Reclaim",
890 	"ACPI Mem NVS",
891 	"MMIO",
892 	"MMIO Port",
893 	"PAL Code",
894 	"Persistent",
895 	"Unaccepted",
896 };
897 
898 char * __init efi_md_typeattr_format(char *buf, size_t size,
899 				     const efi_memory_desc_t *md)
900 {
901 	char *pos;
902 	int type_len;
903 	u64 attr;
904 
905 	pos = buf;
906 	if (md->type >= ARRAY_SIZE(memory_type_name))
907 		type_len = snprintf(pos, size, "[type=%u", md->type);
908 	else
909 		type_len = snprintf(pos, size, "[%-*s",
910 				    (int)(sizeof(memory_type_name[0]) - 1),
911 				    memory_type_name[md->type]);
912 	if (type_len >= size)
913 		return buf;
914 
915 	pos += type_len;
916 	size -= type_len;
917 
918 	attr = md->attribute;
919 	if (attr & ~(EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT |
920 		     EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_RO |
921 		     EFI_MEMORY_WP | EFI_MEMORY_RP | EFI_MEMORY_XP |
922 		     EFI_MEMORY_NV | EFI_MEMORY_SP | EFI_MEMORY_CPU_CRYPTO |
923 		     EFI_MEMORY_RUNTIME | EFI_MEMORY_MORE_RELIABLE))
924 		snprintf(pos, size, "|attr=0x%016llx]",
925 			 (unsigned long long)attr);
926 	else
927 		snprintf(pos, size,
928 			 "|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]",
929 			 attr & EFI_MEMORY_RUNTIME		? "RUN" : "",
930 			 attr & EFI_MEMORY_MORE_RELIABLE	? "MR"  : "",
931 			 attr & EFI_MEMORY_CPU_CRYPTO   	? "CC"  : "",
932 			 attr & EFI_MEMORY_SP			? "SP"  : "",
933 			 attr & EFI_MEMORY_NV			? "NV"  : "",
934 			 attr & EFI_MEMORY_XP			? "XP"  : "",
935 			 attr & EFI_MEMORY_RP			? "RP"  : "",
936 			 attr & EFI_MEMORY_WP			? "WP"  : "",
937 			 attr & EFI_MEMORY_RO			? "RO"  : "",
938 			 attr & EFI_MEMORY_UCE			? "UCE" : "",
939 			 attr & EFI_MEMORY_WB			? "WB"  : "",
940 			 attr & EFI_MEMORY_WT			? "WT"  : "",
941 			 attr & EFI_MEMORY_WC			? "WC"  : "",
942 			 attr & EFI_MEMORY_UC			? "UC"  : "");
943 	return buf;
944 }
945 
946 /*
947  * efi_mem_attributes - lookup memmap attributes for physical address
948  * @phys_addr: the physical address to lookup
949  *
950  * Search in the EFI memory map for the region covering
951  * @phys_addr. Returns the EFI memory attributes if the region
952  * was found in the memory map, 0 otherwise.
953  */
954 u64 efi_mem_attributes(unsigned long phys_addr)
955 {
956 	efi_memory_desc_t *md;
957 
958 	if (!efi_enabled(EFI_MEMMAP))
959 		return 0;
960 
961 	for_each_efi_memory_desc(md) {
962 		if ((md->phys_addr <= phys_addr) &&
963 		    (phys_addr < (md->phys_addr +
964 		    (md->num_pages << EFI_PAGE_SHIFT))))
965 			return md->attribute;
966 	}
967 	return 0;
968 }
969 
970 /*
971  * efi_mem_type - lookup memmap type for physical address
972  * @phys_addr: the physical address to lookup
973  *
974  * Search in the EFI memory map for the region covering @phys_addr.
975  * Returns the EFI memory type if the region was found in the memory
976  * map, -EINVAL otherwise.
977  */
978 int efi_mem_type(unsigned long phys_addr)
979 {
980 	const efi_memory_desc_t *md;
981 
982 	if (!efi_enabled(EFI_MEMMAP))
983 		return -ENOTSUPP;
984 
985 	for_each_efi_memory_desc(md) {
986 		if ((md->phys_addr <= phys_addr) &&
987 		    (phys_addr < (md->phys_addr +
988 				  (md->num_pages << EFI_PAGE_SHIFT))))
989 			return md->type;
990 	}
991 	return -EINVAL;
992 }
993 
994 int efi_status_to_err(efi_status_t status)
995 {
996 	int err;
997 
998 	switch (status) {
999 	case EFI_SUCCESS:
1000 		err = 0;
1001 		break;
1002 	case EFI_INVALID_PARAMETER:
1003 		err = -EINVAL;
1004 		break;
1005 	case EFI_OUT_OF_RESOURCES:
1006 		err = -ENOSPC;
1007 		break;
1008 	case EFI_DEVICE_ERROR:
1009 		err = -EIO;
1010 		break;
1011 	case EFI_WRITE_PROTECTED:
1012 		err = -EROFS;
1013 		break;
1014 	case EFI_SECURITY_VIOLATION:
1015 		err = -EACCES;
1016 		break;
1017 	case EFI_NOT_FOUND:
1018 		err = -ENOENT;
1019 		break;
1020 	case EFI_ABORTED:
1021 		err = -EINTR;
1022 		break;
1023 	default:
1024 		err = -EINVAL;
1025 	}
1026 
1027 	return err;
1028 }
1029 EXPORT_SYMBOL_GPL(efi_status_to_err);
1030 
1031 static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock);
1032 static struct linux_efi_memreserve *efi_memreserve_root __ro_after_init;
1033 
1034 static int __init efi_memreserve_map_root(void)
1035 {
1036 	if (mem_reserve == EFI_INVALID_TABLE_ADDR)
1037 		return -ENODEV;
1038 
1039 	efi_memreserve_root = memremap(mem_reserve,
1040 				       sizeof(*efi_memreserve_root),
1041 				       MEMREMAP_WB);
1042 	if (WARN_ON_ONCE(!efi_memreserve_root))
1043 		return -ENOMEM;
1044 	return 0;
1045 }
1046 
1047 static int efi_mem_reserve_iomem(phys_addr_t addr, u64 size)
1048 {
1049 	struct resource *res, *parent;
1050 	int ret;
1051 
1052 	res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
1053 	if (!res)
1054 		return -ENOMEM;
1055 
1056 	res->name	= "reserved";
1057 	res->flags	= IORESOURCE_MEM;
1058 	res->start	= addr;
1059 	res->end	= addr + size - 1;
1060 
1061 	/* we expect a conflict with a 'System RAM' region */
1062 	parent = request_resource_conflict(&iomem_resource, res);
1063 	ret = parent ? request_resource(parent, res) : 0;
1064 
1065 	/*
1066 	 * Given that efi_mem_reserve_iomem() can be called at any
1067 	 * time, only call memblock_reserve() if the architecture
1068 	 * keeps the infrastructure around.
1069 	 */
1070 	if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK) && !ret)
1071 		memblock_reserve(addr, size);
1072 
1073 	return ret;
1074 }
1075 
1076 int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
1077 {
1078 	struct linux_efi_memreserve *rsv;
1079 	unsigned long prsv;
1080 	int rc, index;
1081 
1082 	if (efi_memreserve_root == (void *)ULONG_MAX)
1083 		return -ENODEV;
1084 
1085 	if (!efi_memreserve_root) {
1086 		rc = efi_memreserve_map_root();
1087 		if (rc)
1088 			return rc;
1089 	}
1090 
1091 	/* first try to find a slot in an existing linked list entry */
1092 	for (prsv = efi_memreserve_root->next; prsv; ) {
1093 		rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
1094 		if (!rsv)
1095 			return -ENOMEM;
1096 		index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
1097 		if (index < rsv->size) {
1098 			rsv->entry[index].base = addr;
1099 			rsv->entry[index].size = size;
1100 
1101 			memunmap(rsv);
1102 			return efi_mem_reserve_iomem(addr, size);
1103 		}
1104 		prsv = rsv->next;
1105 		memunmap(rsv);
1106 	}
1107 
1108 	/* no slot found - allocate a new linked list entry */
1109 	rsv = (struct linux_efi_memreserve *)__get_free_page(GFP_ATOMIC);
1110 	if (!rsv)
1111 		return -ENOMEM;
1112 
1113 	rc = efi_mem_reserve_iomem(__pa(rsv), SZ_4K);
1114 	if (rc) {
1115 		free_page((unsigned long)rsv);
1116 		return rc;
1117 	}
1118 
1119 	/*
1120 	 * The memremap() call above assumes that a linux_efi_memreserve entry
1121 	 * never crosses a page boundary, so let's ensure that this remains true
1122 	 * even when kexec'ing a 4k pages kernel from a >4k pages kernel, by
1123 	 * using SZ_4K explicitly in the size calculation below.
1124 	 */
1125 	rsv->size = EFI_MEMRESERVE_COUNT(SZ_4K);
1126 	atomic_set(&rsv->count, 1);
1127 	rsv->entry[0].base = addr;
1128 	rsv->entry[0].size = size;
1129 
1130 	spin_lock(&efi_mem_reserve_persistent_lock);
1131 	rsv->next = efi_memreserve_root->next;
1132 	efi_memreserve_root->next = __pa(rsv);
1133 	spin_unlock(&efi_mem_reserve_persistent_lock);
1134 
1135 	return efi_mem_reserve_iomem(addr, size);
1136 }
1137 
1138 static int __init efi_memreserve_root_init(void)
1139 {
1140 	if (efi_memreserve_root)
1141 		return 0;
1142 	if (efi_memreserve_map_root())
1143 		efi_memreserve_root = (void *)ULONG_MAX;
1144 	return 0;
1145 }
1146 early_initcall(efi_memreserve_root_init);
1147 
1148 #ifdef CONFIG_KEXEC
1149 static int update_efi_random_seed(struct notifier_block *nb,
1150 				  unsigned long code, void *unused)
1151 {
1152 	struct linux_efi_random_seed *seed;
1153 	u32 size = 0;
1154 
1155 	if (!kexec_in_progress)
1156 		return NOTIFY_DONE;
1157 
1158 	seed = memremap(efi_rng_seed, sizeof(*seed), MEMREMAP_WB);
1159 	if (seed != NULL) {
1160 		size = min(seed->size, EFI_RANDOM_SEED_SIZE);
1161 		memunmap(seed);
1162 	} else {
1163 		pr_err("Could not map UEFI random seed!\n");
1164 	}
1165 	if (size > 0) {
1166 		seed = memremap(efi_rng_seed, sizeof(*seed) + size,
1167 				MEMREMAP_WB);
1168 		if (seed != NULL) {
1169 			seed->size = size;
1170 			get_random_bytes(seed->bits, seed->size);
1171 			memunmap(seed);
1172 		} else {
1173 			pr_err("Could not map UEFI random seed!\n");
1174 		}
1175 	}
1176 	return NOTIFY_DONE;
1177 }
1178 
1179 static struct notifier_block efi_random_seed_nb = {
1180 	.notifier_call = update_efi_random_seed,
1181 };
1182 
1183 static int __init register_update_efi_random_seed(void)
1184 {
1185 	if (efi_rng_seed == EFI_INVALID_TABLE_ADDR)
1186 		return 0;
1187 	return register_reboot_notifier(&efi_random_seed_nb);
1188 }
1189 late_initcall(register_update_efi_random_seed);
1190 #endif
1191