xref: /linux/drivers/firmware/efi/efi.c (revision c4bbe83d27c2446a033cc0381c3fb6be5e8c41c7)
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 	{LINUX_EFI_TPM_FINAL_LOG_GUID,		&efi.tpm_final_log,	"TPMFinalLog"	},
601 	{LINUX_EFI_MEMRESERVE_TABLE_GUID,	&mem_reserve,		"MEMRESERVE"	},
602 	{LINUX_EFI_INITRD_MEDIA_GUID,		&initrd,		"INITRD"	},
603 	{EFI_RT_PROPERTIES_TABLE_GUID,		&rt_prop,		"RTPROP"	},
604 #ifdef CONFIG_EFI_RCI2_TABLE
605 	{DELLEMC_EFI_RCI2_TABLE_GUID,		&rci2_table_phys			},
606 #endif
607 #ifdef CONFIG_LOAD_UEFI_KEYS
608 	{LINUX_EFI_MOK_VARIABLE_TABLE_GUID,	&efi.mokvar_table,	"MOKvar"	},
609 #endif
610 #ifdef CONFIG_EFI_COCO_SECRET
611 	{LINUX_EFI_COCO_SECRET_AREA_GUID,	&efi.coco_secret,	"CocoSecret"	},
612 #endif
613 #ifdef CONFIG_UNACCEPTED_MEMORY
614 	{LINUX_EFI_UNACCEPTED_MEM_TABLE_GUID,	&efi.unaccepted,	"Unaccepted"	},
615 #endif
616 #ifdef CONFIG_EFI_GENERIC_STUB
617 	{LINUX_EFI_SCREEN_INFO_TABLE_GUID,	&screen_info_table			},
618 #endif
619 	{},
620 };
621 
622 static __init int match_config_table(const efi_guid_t *guid,
623 				     unsigned long table,
624 				     const efi_config_table_type_t *table_types)
625 {
626 	int i;
627 
628 	for (i = 0; efi_guidcmp(table_types[i].guid, NULL_GUID); i++) {
629 		if (efi_guidcmp(*guid, table_types[i].guid))
630 			continue;
631 
632 		if (!efi_config_table_is_usable(guid, table)) {
633 			if (table_types[i].name[0])
634 				pr_cont("(%s=0x%lx unusable) ",
635 					table_types[i].name, table);
636 			return 1;
637 		}
638 
639 		*(table_types[i].ptr) = table;
640 		if (table_types[i].name[0])
641 			pr_cont("%s=0x%lx ", table_types[i].name, table);
642 		return 1;
643 	}
644 
645 	return 0;
646 }
647 
648 /**
649  * reserve_unaccepted - Map and reserve unaccepted configuration table
650  * @unaccepted: Pointer to unaccepted memory table
651  *
652  * memblock_add() makes sure that the table is mapped in direct mapping. During
653  * normal boot it happens automatically because the table is allocated from
654  * usable memory. But during crashkernel boot only memory specifically reserved
655  * for crash scenario is mapped. memblock_add() forces the table to be mapped
656  * in crashkernel case.
657  *
658  * Align the range to the nearest page borders. Ranges smaller than page size
659  * are not going to be mapped.
660  *
661  * memblock_reserve() makes sure that future allocations will not touch the
662  * table.
663  */
664 
665 static __init void reserve_unaccepted(struct efi_unaccepted_memory *unaccepted)
666 {
667 	phys_addr_t start, size;
668 
669 	start = PAGE_ALIGN_DOWN(efi.unaccepted);
670 	size = PAGE_ALIGN(sizeof(*unaccepted) + unaccepted->size);
671 
672 	memblock_add(start, size);
673 	memblock_reserve(start, size);
674 }
675 
676 int __init efi_config_parse_tables(const efi_config_table_t *config_tables,
677 				   int count,
678 				   const efi_config_table_type_t *arch_tables)
679 {
680 	const efi_config_table_64_t *tbl64 = (void *)config_tables;
681 	const efi_config_table_32_t *tbl32 = (void *)config_tables;
682 	const efi_guid_t *guid;
683 	unsigned long table;
684 	int i;
685 
686 	pr_info("");
687 	for (i = 0; i < count; i++) {
688 		if (!IS_ENABLED(CONFIG_X86)) {
689 			guid = &config_tables[i].guid;
690 			table = (unsigned long)config_tables[i].table;
691 		} else if (efi_enabled(EFI_64BIT)) {
692 			guid = &tbl64[i].guid;
693 			table = tbl64[i].table;
694 
695 			if (IS_ENABLED(CONFIG_X86_32) &&
696 			    tbl64[i].table > U32_MAX) {
697 				pr_cont("\n");
698 				pr_err("Table located above 4GB, disabling EFI.\n");
699 				return -EINVAL;
700 			}
701 		} else {
702 			guid = &tbl32[i].guid;
703 			table = tbl32[i].table;
704 		}
705 
706 		if (!match_config_table(guid, table, common_tables) && arch_tables)
707 			match_config_table(guid, table, arch_tables);
708 	}
709 	pr_cont("\n");
710 	set_bit(EFI_CONFIG_TABLES, &efi.flags);
711 
712 	if (efi_rng_seed != EFI_INVALID_TABLE_ADDR) {
713 		struct linux_efi_random_seed *seed;
714 		u32 size = 0;
715 
716 		seed = early_memremap(efi_rng_seed, sizeof(*seed));
717 		if (seed != NULL) {
718 			size = min_t(u32, seed->size, SZ_1K); // sanity check
719 			early_memunmap(seed, sizeof(*seed));
720 		} else {
721 			pr_err("Could not map UEFI random seed!\n");
722 		}
723 		if (size > 0) {
724 			seed = early_memremap(efi_rng_seed,
725 					      sizeof(*seed) + size);
726 			if (seed != NULL) {
727 				add_bootloader_randomness(seed->bits, size);
728 				memzero_explicit(seed->bits, size);
729 				early_memunmap(seed, sizeof(*seed) + size);
730 			} else {
731 				pr_err("Could not map UEFI random seed!\n");
732 			}
733 		}
734 	}
735 
736 	if (!IS_ENABLED(CONFIG_X86_32) && efi_enabled(EFI_MEMMAP))
737 		efi_memattr_init();
738 
739 	efi_tpm_eventlog_init();
740 
741 	if (mem_reserve != EFI_INVALID_TABLE_ADDR) {
742 		unsigned long prsv = mem_reserve;
743 
744 		while (prsv) {
745 			struct linux_efi_memreserve *rsv;
746 			u8 *p;
747 
748 			/*
749 			 * Just map a full page: that is what we will get
750 			 * anyway, and it permits us to map the entire entry
751 			 * before knowing its size.
752 			 */
753 			p = early_memremap(ALIGN_DOWN(prsv, PAGE_SIZE),
754 					   PAGE_SIZE);
755 			if (p == NULL) {
756 				pr_err("Could not map UEFI memreserve entry!\n");
757 				return -ENOMEM;
758 			}
759 
760 			rsv = (void *)(p + prsv % PAGE_SIZE);
761 
762 			/* reserve the entry itself */
763 			memblock_reserve(prsv,
764 					 struct_size(rsv, entry, rsv->size));
765 
766 			for (i = 0; i < atomic_read(&rsv->count); i++) {
767 				memblock_reserve(rsv->entry[i].base,
768 						 rsv->entry[i].size);
769 			}
770 
771 			prsv = rsv->next;
772 			early_memunmap(p, PAGE_SIZE);
773 		}
774 	}
775 
776 	if (rt_prop != EFI_INVALID_TABLE_ADDR) {
777 		efi_rt_properties_table_t *tbl;
778 
779 		tbl = early_memremap(rt_prop, sizeof(*tbl));
780 		if (tbl) {
781 			efi.runtime_supported_mask &= tbl->runtime_services_supported;
782 			early_memunmap(tbl, sizeof(*tbl));
783 		}
784 	}
785 
786 	if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) &&
787 	    initrd != EFI_INVALID_TABLE_ADDR && phys_initrd_size == 0) {
788 		struct linux_efi_initrd *tbl;
789 
790 		tbl = early_memremap(initrd, sizeof(*tbl));
791 		if (tbl) {
792 			phys_initrd_start = tbl->base;
793 			phys_initrd_size = tbl->size;
794 			early_memunmap(tbl, sizeof(*tbl));
795 		}
796 	}
797 
798 	if (IS_ENABLED(CONFIG_UNACCEPTED_MEMORY) &&
799 	    efi.unaccepted != EFI_INVALID_TABLE_ADDR) {
800 		struct efi_unaccepted_memory *unaccepted;
801 
802 		unaccepted = early_memremap(efi.unaccepted, sizeof(*unaccepted));
803 		if (unaccepted) {
804 
805 			if (unaccepted->version == 1) {
806 				reserve_unaccepted(unaccepted);
807 			} else {
808 				efi.unaccepted = EFI_INVALID_TABLE_ADDR;
809 			}
810 
811 			early_memunmap(unaccepted, sizeof(*unaccepted));
812 		}
813 	}
814 
815 	return 0;
816 }
817 
818 int __init efi_systab_check_header(const efi_table_hdr_t *systab_hdr)
819 {
820 	if (systab_hdr->signature != EFI_SYSTEM_TABLE_SIGNATURE) {
821 		pr_err("System table signature incorrect!\n");
822 		return -EINVAL;
823 	}
824 
825 	return 0;
826 }
827 
828 static const efi_char16_t *__init map_fw_vendor(unsigned long fw_vendor,
829 						size_t size)
830 {
831 	const efi_char16_t *ret;
832 
833 	ret = early_memremap_ro(fw_vendor, size);
834 	if (!ret)
835 		pr_err("Could not map the firmware vendor!\n");
836 	return ret;
837 }
838 
839 static void __init unmap_fw_vendor(const void *fw_vendor, size_t size)
840 {
841 	early_memunmap((void *)fw_vendor, size);
842 }
843 
844 void __init efi_systab_report_header(const efi_table_hdr_t *systab_hdr,
845 				     unsigned long fw_vendor)
846 {
847 	char vendor[100] = "unknown";
848 	const efi_char16_t *c16;
849 	size_t i;
850 	u16 rev;
851 
852 	c16 = map_fw_vendor(fw_vendor, sizeof(vendor) * sizeof(efi_char16_t));
853 	if (c16) {
854 		for (i = 0; i < sizeof(vendor) - 1 && c16[i]; ++i)
855 			vendor[i] = c16[i];
856 		vendor[i] = '\0';
857 
858 		unmap_fw_vendor(c16, sizeof(vendor) * sizeof(efi_char16_t));
859 	}
860 
861 	rev = (u16)systab_hdr->revision;
862 	pr_info("EFI v%u.%u", systab_hdr->revision >> 16, rev / 10);
863 
864 	rev %= 10;
865 	if (rev)
866 		pr_cont(".%u", rev);
867 
868 	pr_cont(" by %s\n", vendor);
869 
870 	if (IS_ENABLED(CONFIG_X86_64) &&
871 	    systab_hdr->revision > EFI_1_10_SYSTEM_TABLE_REVISION &&
872 	    !strcmp(vendor, "Apple")) {
873 		pr_info("Apple Mac detected, using EFI v1.10 runtime services only\n");
874 		efi.runtime_version = EFI_1_10_SYSTEM_TABLE_REVISION;
875 	}
876 }
877 
878 static __initdata char memory_type_name[][13] = {
879 	"Reserved",
880 	"Loader Code",
881 	"Loader Data",
882 	"Boot Code",
883 	"Boot Data",
884 	"Runtime Code",
885 	"Runtime Data",
886 	"Conventional",
887 	"Unusable",
888 	"ACPI Reclaim",
889 	"ACPI Mem NVS",
890 	"MMIO",
891 	"MMIO Port",
892 	"PAL Code",
893 	"Persistent",
894 	"Unaccepted",
895 };
896 
897 char * __init efi_md_typeattr_format(char *buf, size_t size,
898 				     const efi_memory_desc_t *md)
899 {
900 	char *pos;
901 	int type_len;
902 	u64 attr;
903 
904 	pos = buf;
905 	if (md->type >= ARRAY_SIZE(memory_type_name))
906 		type_len = snprintf(pos, size, "[type=%u", md->type);
907 	else
908 		type_len = snprintf(pos, size, "[%-*s",
909 				    (int)(sizeof(memory_type_name[0]) - 1),
910 				    memory_type_name[md->type]);
911 	if (type_len >= size)
912 		return buf;
913 
914 	pos += type_len;
915 	size -= type_len;
916 
917 	attr = md->attribute;
918 	if (attr & ~(EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT |
919 		     EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_RO |
920 		     EFI_MEMORY_WP | EFI_MEMORY_RP | EFI_MEMORY_XP |
921 		     EFI_MEMORY_NV | EFI_MEMORY_SP | EFI_MEMORY_CPU_CRYPTO |
922 		     EFI_MEMORY_RUNTIME | EFI_MEMORY_MORE_RELIABLE))
923 		snprintf(pos, size, "|attr=0x%016llx]",
924 			 (unsigned long long)attr);
925 	else
926 		snprintf(pos, size,
927 			 "|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]",
928 			 attr & EFI_MEMORY_RUNTIME		? "RUN" : "",
929 			 attr & EFI_MEMORY_MORE_RELIABLE	? "MR"  : "",
930 			 attr & EFI_MEMORY_CPU_CRYPTO   	? "CC"  : "",
931 			 attr & EFI_MEMORY_SP			? "SP"  : "",
932 			 attr & EFI_MEMORY_NV			? "NV"  : "",
933 			 attr & EFI_MEMORY_XP			? "XP"  : "",
934 			 attr & EFI_MEMORY_RP			? "RP"  : "",
935 			 attr & EFI_MEMORY_WP			? "WP"  : "",
936 			 attr & EFI_MEMORY_RO			? "RO"  : "",
937 			 attr & EFI_MEMORY_UCE			? "UCE" : "",
938 			 attr & EFI_MEMORY_WB			? "WB"  : "",
939 			 attr & EFI_MEMORY_WT			? "WT"  : "",
940 			 attr & EFI_MEMORY_WC			? "WC"  : "",
941 			 attr & EFI_MEMORY_UC			? "UC"  : "");
942 	return buf;
943 }
944 
945 /*
946  * efi_mem_attributes - lookup memmap attributes for physical address
947  * @phys_addr: the physical address to lookup
948  *
949  * Search in the EFI memory map for the region covering
950  * @phys_addr. Returns the EFI memory attributes if the region
951  * was found in the memory map, 0 otherwise.
952  */
953 u64 efi_mem_attributes(unsigned long phys_addr)
954 {
955 	efi_memory_desc_t *md;
956 
957 	if (!efi_enabled(EFI_MEMMAP))
958 		return 0;
959 
960 	for_each_efi_memory_desc(md) {
961 		if ((md->phys_addr <= phys_addr) &&
962 		    (phys_addr < (md->phys_addr +
963 		    (md->num_pages << EFI_PAGE_SHIFT))))
964 			return md->attribute;
965 	}
966 	return 0;
967 }
968 
969 /*
970  * efi_mem_type - lookup memmap type for physical address
971  * @phys_addr: the physical address to lookup
972  *
973  * Search in the EFI memory map for the region covering @phys_addr.
974  * Returns the EFI memory type if the region was found in the memory
975  * map, -EINVAL otherwise.
976  */
977 int efi_mem_type(unsigned long phys_addr)
978 {
979 	const efi_memory_desc_t *md;
980 
981 	if (!efi_enabled(EFI_MEMMAP))
982 		return -ENOTSUPP;
983 
984 	for_each_efi_memory_desc(md) {
985 		if ((md->phys_addr <= phys_addr) &&
986 		    (phys_addr < (md->phys_addr +
987 				  (md->num_pages << EFI_PAGE_SHIFT))))
988 			return md->type;
989 	}
990 	return -EINVAL;
991 }
992 
993 int efi_status_to_err(efi_status_t status)
994 {
995 	int err;
996 
997 	switch (status) {
998 	case EFI_SUCCESS:
999 		err = 0;
1000 		break;
1001 	case EFI_INVALID_PARAMETER:
1002 		err = -EINVAL;
1003 		break;
1004 	case EFI_OUT_OF_RESOURCES:
1005 		err = -ENOSPC;
1006 		break;
1007 	case EFI_DEVICE_ERROR:
1008 		err = -EIO;
1009 		break;
1010 	case EFI_WRITE_PROTECTED:
1011 		err = -EROFS;
1012 		break;
1013 	case EFI_SECURITY_VIOLATION:
1014 		err = -EACCES;
1015 		break;
1016 	case EFI_NOT_FOUND:
1017 		err = -ENOENT;
1018 		break;
1019 	case EFI_ABORTED:
1020 		err = -EINTR;
1021 		break;
1022 	default:
1023 		err = -EINVAL;
1024 	}
1025 
1026 	return err;
1027 }
1028 EXPORT_SYMBOL_GPL(efi_status_to_err);
1029 
1030 static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock);
1031 static struct linux_efi_memreserve *efi_memreserve_root __ro_after_init;
1032 
1033 static int __init efi_memreserve_map_root(void)
1034 {
1035 	if (mem_reserve == EFI_INVALID_TABLE_ADDR)
1036 		return -ENODEV;
1037 
1038 	efi_memreserve_root = memremap(mem_reserve,
1039 				       sizeof(*efi_memreserve_root),
1040 				       MEMREMAP_WB);
1041 	if (WARN_ON_ONCE(!efi_memreserve_root))
1042 		return -ENOMEM;
1043 	return 0;
1044 }
1045 
1046 static int efi_mem_reserve_iomem(phys_addr_t addr, u64 size)
1047 {
1048 	struct resource *res, *parent;
1049 	int ret;
1050 
1051 	res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
1052 	if (!res)
1053 		return -ENOMEM;
1054 
1055 	res->name	= "reserved";
1056 	res->flags	= IORESOURCE_MEM;
1057 	res->start	= addr;
1058 	res->end	= addr + size - 1;
1059 
1060 	/* we expect a conflict with a 'System RAM' region */
1061 	parent = request_resource_conflict(&iomem_resource, res);
1062 	ret = parent ? request_resource(parent, res) : 0;
1063 
1064 	/*
1065 	 * Given that efi_mem_reserve_iomem() can be called at any
1066 	 * time, only call memblock_reserve() if the architecture
1067 	 * keeps the infrastructure around.
1068 	 */
1069 	if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK) && !ret)
1070 		memblock_reserve(addr, size);
1071 
1072 	return ret;
1073 }
1074 
1075 int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
1076 {
1077 	struct linux_efi_memreserve *rsv;
1078 	unsigned long prsv;
1079 	int rc, index;
1080 
1081 	if (efi_memreserve_root == (void *)ULONG_MAX)
1082 		return -ENODEV;
1083 
1084 	if (!efi_memreserve_root) {
1085 		rc = efi_memreserve_map_root();
1086 		if (rc)
1087 			return rc;
1088 	}
1089 
1090 	/* first try to find a slot in an existing linked list entry */
1091 	for (prsv = efi_memreserve_root->next; prsv; ) {
1092 		rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
1093 		if (!rsv)
1094 			return -ENOMEM;
1095 		index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
1096 		if (index < rsv->size) {
1097 			rsv->entry[index].base = addr;
1098 			rsv->entry[index].size = size;
1099 
1100 			memunmap(rsv);
1101 			return efi_mem_reserve_iomem(addr, size);
1102 		}
1103 		prsv = rsv->next;
1104 		memunmap(rsv);
1105 	}
1106 
1107 	/* no slot found - allocate a new linked list entry */
1108 	rsv = (struct linux_efi_memreserve *)__get_free_page(GFP_ATOMIC);
1109 	if (!rsv)
1110 		return -ENOMEM;
1111 
1112 	rc = efi_mem_reserve_iomem(__pa(rsv), SZ_4K);
1113 	if (rc) {
1114 		free_page((unsigned long)rsv);
1115 		return rc;
1116 	}
1117 
1118 	/*
1119 	 * The memremap() call above assumes that a linux_efi_memreserve entry
1120 	 * never crosses a page boundary, so let's ensure that this remains true
1121 	 * even when kexec'ing a 4k pages kernel from a >4k pages kernel, by
1122 	 * using SZ_4K explicitly in the size calculation below.
1123 	 */
1124 	rsv->size = EFI_MEMRESERVE_COUNT(SZ_4K);
1125 	atomic_set(&rsv->count, 1);
1126 	rsv->entry[0].base = addr;
1127 	rsv->entry[0].size = size;
1128 
1129 	spin_lock(&efi_mem_reserve_persistent_lock);
1130 	rsv->next = efi_memreserve_root->next;
1131 	efi_memreserve_root->next = __pa(rsv);
1132 	spin_unlock(&efi_mem_reserve_persistent_lock);
1133 
1134 	return efi_mem_reserve_iomem(addr, size);
1135 }
1136 
1137 static int __init efi_memreserve_root_init(void)
1138 {
1139 	if (efi_memreserve_root)
1140 		return 0;
1141 	if (efi_memreserve_map_root())
1142 		efi_memreserve_root = (void *)ULONG_MAX;
1143 	return 0;
1144 }
1145 early_initcall(efi_memreserve_root_init);
1146 
1147 #ifdef CONFIG_KEXEC
1148 static int update_efi_random_seed(struct notifier_block *nb,
1149 				  unsigned long code, void *unused)
1150 {
1151 	struct linux_efi_random_seed *seed;
1152 	u32 size = 0;
1153 
1154 	if (!kexec_in_progress)
1155 		return NOTIFY_DONE;
1156 
1157 	seed = memremap(efi_rng_seed, sizeof(*seed), MEMREMAP_WB);
1158 	if (seed != NULL) {
1159 		size = min(seed->size, EFI_RANDOM_SEED_SIZE);
1160 		memunmap(seed);
1161 	} else {
1162 		pr_err("Could not map UEFI random seed!\n");
1163 	}
1164 	if (size > 0) {
1165 		seed = memremap(efi_rng_seed, sizeof(*seed) + size,
1166 				MEMREMAP_WB);
1167 		if (seed != NULL) {
1168 			seed->size = size;
1169 			get_random_bytes(seed->bits, seed->size);
1170 			memunmap(seed);
1171 		} else {
1172 			pr_err("Could not map UEFI random seed!\n");
1173 		}
1174 	}
1175 	return NOTIFY_DONE;
1176 }
1177 
1178 static struct notifier_block efi_random_seed_nb = {
1179 	.notifier_call = update_efi_random_seed,
1180 };
1181 
1182 static int __init register_update_efi_random_seed(void)
1183 {
1184 	if (efi_rng_seed == EFI_INVALID_TABLE_ADDR)
1185 		return 0;
1186 	return register_reboot_notifier(&efi_random_seed_nb);
1187 }
1188 late_initcall(register_update_efi_random_seed);
1189 #endif
1190