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