xref: /linux/arch/x86/platform/efi/efi.c (revision c8b90d40d5bba8e6fba457b8a7c10d3c0d467e37)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Common EFI (Extensible Firmware Interface) support functions
4  * Based on Extensible Firmware Interface Specification version 1.0
5  *
6  * Copyright (C) 1999 VA Linux Systems
7  * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
8  * Copyright (C) 1999-2002 Hewlett-Packard Co.
9  *	David Mosberger-Tang <davidm@hpl.hp.com>
10  *	Stephane Eranian <eranian@hpl.hp.com>
11  * Copyright (C) 2005-2008 Intel Co.
12  *	Fenghua Yu <fenghua.yu@intel.com>
13  *	Bibo Mao <bibo.mao@intel.com>
14  *	Chandramouli Narayanan <mouli@linux.intel.com>
15  *	Huang Ying <ying.huang@intel.com>
16  * Copyright (C) 2013 SuSE Labs
17  *	Borislav Petkov <bp@suse.de> - runtime services VA mapping
18  *
19  * Copied from efi_32.c to eliminate the duplicated code between EFI
20  * 32/64 support code. --ying 2007-10-26
21  *
22  * All EFI Runtime Services are not implemented yet as EFI only
23  * supports physical mode addressing on SoftSDV. This is to be fixed
24  * in a future version.  --drummond 1999-07-20
25  *
26  * Implemented EFI runtime services and virtual mode calls.  --davidm
27  *
28  * Goutham Rao: <goutham.rao@intel.com>
29  *	Skip non-WB memory and ignore empty memory ranges.
30  */
31 
32 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
33 
34 #include <linux/kernel.h>
35 #include <linux/init.h>
36 #include <linux/efi.h>
37 #include <linux/efi-bgrt.h>
38 #include <linux/export.h>
39 #include <linux/memblock.h>
40 #include <linux/slab.h>
41 #include <linux/spinlock.h>
42 #include <linux/uaccess.h>
43 #include <linux/time.h>
44 #include <linux/io.h>
45 #include <linux/reboot.h>
46 #include <linux/bcd.h>
47 
48 #include <asm/setup.h>
49 #include <asm/efi.h>
50 #include <asm/e820/api.h>
51 #include <asm/time.h>
52 #include <asm/tlbflush.h>
53 #include <asm/x86_init.h>
54 #include <asm/uv/uv.h>
55 
56 static unsigned long efi_systab_phys __initdata;
57 static unsigned long uga_phys = EFI_INVALID_TABLE_ADDR;
58 static unsigned long efi_runtime, efi_nr_tables;
59 
60 unsigned long efi_fw_vendor, efi_config_table;
61 
62 static const efi_config_table_type_t arch_tables[] __initconst = {
63 	{UGA_IO_PROTOCOL_GUID,		&uga_phys,		"UGA"		},
64 #ifdef CONFIG_X86_UV
65 	{UV_SYSTEM_TABLE_GUID,		&uv_systab_phys,	"UVsystab"	},
66 #endif
67 	{},
68 };
69 
70 static const unsigned long * const efi_tables[] = {
71 	&efi.acpi,
72 	&efi.acpi20,
73 	&efi.smbios,
74 	&efi.smbios3,
75 	&uga_phys,
76 #ifdef CONFIG_X86_UV
77 	&uv_systab_phys,
78 #endif
79 	&efi_fw_vendor,
80 	&efi_runtime,
81 	&efi_config_table,
82 	&efi.esrt,
83 	&efi_mem_attr_table,
84 #ifdef CONFIG_EFI_RCI2_TABLE
85 	&rci2_table_phys,
86 #endif
87 	&efi.tpm_log,
88 	&efi.tpm_final_log,
89 	&efi_rng_seed,
90 #ifdef CONFIG_LOAD_UEFI_KEYS
91 	&efi.mokvar_table,
92 #endif
93 #ifdef CONFIG_EFI_COCO_SECRET
94 	&efi.coco_secret,
95 #endif
96 #ifdef CONFIG_UNACCEPTED_MEMORY
97 	&efi.unaccepted,
98 #endif
99 };
100 
101 u64 efi_setup;		/* efi setup_data physical address */
102 
103 static int add_efi_memmap __initdata;
104 static int __init setup_add_efi_memmap(char *arg)
105 {
106 	add_efi_memmap = 1;
107 	return 0;
108 }
109 early_param("add_efi_memmap", setup_add_efi_memmap);
110 
111 /*
112  * Tell the kernel about the EFI memory map.  This might include
113  * more than the max 128 entries that can fit in the passed in e820
114  * legacy (zeropage) memory map, but the kernel's e820 table can hold
115  * E820_MAX_ENTRIES.
116  */
117 
118 static void __init do_add_efi_memmap(void)
119 {
120 	efi_memory_desc_t *md;
121 
122 	if (!efi_enabled(EFI_MEMMAP))
123 		return;
124 
125 	for_each_efi_memory_desc(md) {
126 		unsigned long long start = md->phys_addr;
127 		unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
128 		int e820_type;
129 
130 		switch (md->type) {
131 		case EFI_LOADER_CODE:
132 		case EFI_LOADER_DATA:
133 		case EFI_BOOT_SERVICES_CODE:
134 		case EFI_BOOT_SERVICES_DATA:
135 		case EFI_CONVENTIONAL_MEMORY:
136 			if (efi_soft_reserve_enabled()
137 			    && (md->attribute & EFI_MEMORY_SP))
138 				e820_type = E820_TYPE_SOFT_RESERVED;
139 			else if (md->attribute & EFI_MEMORY_WB)
140 				e820_type = E820_TYPE_RAM;
141 			else
142 				e820_type = E820_TYPE_RESERVED;
143 			break;
144 		case EFI_ACPI_RECLAIM_MEMORY:
145 			e820_type = E820_TYPE_ACPI;
146 			break;
147 		case EFI_ACPI_MEMORY_NVS:
148 			e820_type = E820_TYPE_NVS;
149 			break;
150 		case EFI_UNUSABLE_MEMORY:
151 			e820_type = E820_TYPE_UNUSABLE;
152 			break;
153 		case EFI_PERSISTENT_MEMORY:
154 			e820_type = E820_TYPE_PMEM;
155 			break;
156 		default:
157 			/*
158 			 * EFI_RESERVED_TYPE EFI_RUNTIME_SERVICES_CODE
159 			 * EFI_RUNTIME_SERVICES_DATA EFI_MEMORY_MAPPED_IO
160 			 * EFI_MEMORY_MAPPED_IO_PORT_SPACE EFI_PAL_CODE
161 			 */
162 			e820_type = E820_TYPE_RESERVED;
163 			break;
164 		}
165 
166 		e820__range_add(start, size, e820_type);
167 	}
168 	e820__update_table(e820_table);
169 }
170 
171 /*
172  * Given add_efi_memmap defaults to 0 and there is no alternative
173  * e820 mechanism for soft-reserved memory, import the full EFI memory
174  * map if soft reservations are present and enabled. Otherwise, the
175  * mechanism to disable the kernel's consideration of EFI_MEMORY_SP is
176  * the efi=nosoftreserve option.
177  */
178 static bool do_efi_soft_reserve(void)
179 {
180 	efi_memory_desc_t *md;
181 
182 	if (!efi_enabled(EFI_MEMMAP))
183 		return false;
184 
185 	if (!efi_soft_reserve_enabled())
186 		return false;
187 
188 	for_each_efi_memory_desc(md)
189 		if (md->type == EFI_CONVENTIONAL_MEMORY &&
190 		    (md->attribute & EFI_MEMORY_SP))
191 			return true;
192 	return false;
193 }
194 
195 int __init efi_memblock_x86_reserve_range(void)
196 {
197 	struct efi_info *e = &boot_params.efi_info;
198 	struct efi_memory_map_data data;
199 	phys_addr_t pmap;
200 	int rv;
201 
202 	if (efi_enabled(EFI_PARAVIRT))
203 		return 0;
204 
205 	/* Can't handle firmware tables above 4GB on i386 */
206 	if (IS_ENABLED(CONFIG_X86_32) && e->efi_memmap_hi > 0) {
207 		pr_err("Memory map is above 4GB, disabling EFI.\n");
208 		return -EINVAL;
209 	}
210 	pmap = (phys_addr_t)(e->efi_memmap | ((u64)e->efi_memmap_hi << 32));
211 
212 	data.phys_map		= pmap;
213 	data.size 		= e->efi_memmap_size;
214 	data.desc_size		= e->efi_memdesc_size;
215 	data.desc_version	= e->efi_memdesc_version;
216 
217 	if (!efi_enabled(EFI_PARAVIRT)) {
218 		rv = efi_memmap_init_early(&data);
219 		if (rv)
220 			return rv;
221 	}
222 
223 	if (add_efi_memmap || do_efi_soft_reserve())
224 		do_add_efi_memmap();
225 
226 	WARN(efi.memmap.desc_version != 1,
227 	     "Unexpected EFI_MEMORY_DESCRIPTOR version %ld",
228 	     efi.memmap.desc_version);
229 
230 	memblock_reserve(pmap, efi.memmap.nr_map * efi.memmap.desc_size);
231 	set_bit(EFI_PRESERVE_BS_REGIONS, &efi.flags);
232 
233 	return 0;
234 }
235 
236 #define OVERFLOW_ADDR_SHIFT	(64 - EFI_PAGE_SHIFT)
237 #define OVERFLOW_ADDR_MASK	(U64_MAX << OVERFLOW_ADDR_SHIFT)
238 #define U64_HIGH_BIT		(~(U64_MAX >> 1))
239 
240 static bool __init efi_memmap_entry_valid(const efi_memory_desc_t *md, int i)
241 {
242 	u64 end = (md->num_pages << EFI_PAGE_SHIFT) + md->phys_addr - 1;
243 	u64 end_hi = 0;
244 	char buf[64];
245 
246 	if (md->num_pages == 0) {
247 		end = 0;
248 	} else if (md->num_pages > EFI_PAGES_MAX ||
249 		   EFI_PAGES_MAX - md->num_pages <
250 		   (md->phys_addr >> EFI_PAGE_SHIFT)) {
251 		end_hi = (md->num_pages & OVERFLOW_ADDR_MASK)
252 			>> OVERFLOW_ADDR_SHIFT;
253 
254 		if ((md->phys_addr & U64_HIGH_BIT) && !(end & U64_HIGH_BIT))
255 			end_hi += 1;
256 	} else {
257 		return true;
258 	}
259 
260 	pr_warn_once(FW_BUG "Invalid EFI memory map entries:\n");
261 
262 	if (end_hi) {
263 		pr_warn("mem%02u: %s range=[0x%016llx-0x%llx%016llx] (invalid)\n",
264 			i, efi_md_typeattr_format(buf, sizeof(buf), md),
265 			md->phys_addr, end_hi, end);
266 	} else {
267 		pr_warn("mem%02u: %s range=[0x%016llx-0x%016llx] (invalid)\n",
268 			i, efi_md_typeattr_format(buf, sizeof(buf), md),
269 			md->phys_addr, end);
270 	}
271 	return false;
272 }
273 
274 static void __init efi_clean_memmap(void)
275 {
276 	efi_memory_desc_t *out = efi.memmap.map;
277 	const efi_memory_desc_t *in = out;
278 	const efi_memory_desc_t *end = efi.memmap.map_end;
279 	int i, n_removal;
280 
281 	for (i = n_removal = 0; in < end; i++) {
282 		if (efi_memmap_entry_valid(in, i)) {
283 			if (out != in)
284 				memcpy(out, in, efi.memmap.desc_size);
285 			out = (void *)out + efi.memmap.desc_size;
286 		} else {
287 			n_removal++;
288 		}
289 		in = (void *)in + efi.memmap.desc_size;
290 	}
291 
292 	if (n_removal > 0) {
293 		struct efi_memory_map_data data = {
294 			.phys_map	= efi.memmap.phys_map,
295 			.desc_version	= efi.memmap.desc_version,
296 			.desc_size	= efi.memmap.desc_size,
297 			.size		= efi.memmap.desc_size * (efi.memmap.nr_map - n_removal),
298 			.flags		= 0,
299 		};
300 
301 		pr_warn("Removing %d invalid memory map entries.\n", n_removal);
302 		efi_memmap_install(&data);
303 	}
304 }
305 
306 /*
307  * Firmware can use EfiMemoryMappedIO to request that MMIO regions be
308  * mapped by the OS so they can be accessed by EFI runtime services, but
309  * should have no other significance to the OS (UEFI r2.10, sec 7.2).
310  * However, most bootloaders and EFI stubs convert EfiMemoryMappedIO
311  * regions to E820_TYPE_RESERVED entries, which prevent Linux from
312  * allocating space from them (see remove_e820_regions()).
313  *
314  * Some platforms use EfiMemoryMappedIO entries for PCI MMCONFIG space and
315  * PCI host bridge windows, which means Linux can't allocate BAR space for
316  * hot-added devices.
317  *
318  * Remove large EfiMemoryMappedIO regions from the E820 map to avoid this
319  * problem.
320  *
321  * Retain small EfiMemoryMappedIO regions because on some platforms, these
322  * describe non-window space that's included in host bridge _CRS.  If we
323  * assign that space to PCI devices, they don't work.
324  */
325 static void __init efi_remove_e820_mmio(void)
326 {
327 	efi_memory_desc_t *md;
328 	u64 size, start, end;
329 	int i = 0;
330 
331 	for_each_efi_memory_desc(md) {
332 		if (md->type == EFI_MEMORY_MAPPED_IO) {
333 			size = md->num_pages << EFI_PAGE_SHIFT;
334 			start = md->phys_addr;
335 			end = start + size - 1;
336 			if (size >= 256*1024) {
337 				pr_info("Remove mem%02u: MMIO range=[0x%08llx-0x%08llx] (%lluMB) from e820 map\n",
338 					i, start, end, size >> 20);
339 				e820__range_remove(start, size,
340 						   E820_TYPE_RESERVED, 1);
341 			} else {
342 				pr_info("Not removing mem%02u: MMIO range=[0x%08llx-0x%08llx] (%lluKB) from e820 map\n",
343 					i, start, end, size >> 10);
344 			}
345 		}
346 		i++;
347 	}
348 }
349 
350 void __init efi_print_memmap(void)
351 {
352 	efi_memory_desc_t *md;
353 	int i = 0;
354 
355 	for_each_efi_memory_desc(md) {
356 		char buf[64];
357 
358 		pr_info("mem%02u: %s range=[0x%016llx-0x%016llx] (%lluMB)\n",
359 			i++, efi_md_typeattr_format(buf, sizeof(buf), md),
360 			md->phys_addr,
361 			md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1,
362 			(md->num_pages >> (20 - EFI_PAGE_SHIFT)));
363 	}
364 }
365 
366 static int __init efi_systab_init(unsigned long phys)
367 {
368 	int size = efi_enabled(EFI_64BIT) ? sizeof(efi_system_table_64_t)
369 					  : sizeof(efi_system_table_32_t);
370 	const efi_table_hdr_t *hdr;
371 	bool over4g = false;
372 	void *p;
373 	int ret;
374 
375 	hdr = p = early_memremap_ro(phys, size);
376 	if (p == NULL) {
377 		pr_err("Couldn't map the system table!\n");
378 		return -ENOMEM;
379 	}
380 
381 	ret = efi_systab_check_header(hdr);
382 	if (ret) {
383 		early_memunmap(p, size);
384 		return ret;
385 	}
386 
387 	if (efi_enabled(EFI_64BIT)) {
388 		const efi_system_table_64_t *systab64 = p;
389 
390 		efi_runtime	= systab64->runtime;
391 		over4g		= systab64->runtime > U32_MAX;
392 
393 		if (efi_setup) {
394 			struct efi_setup_data *data;
395 
396 			data = early_memremap_ro(efi_setup, sizeof(*data));
397 			if (!data) {
398 				early_memunmap(p, size);
399 				return -ENOMEM;
400 			}
401 
402 			efi_fw_vendor		= (unsigned long)data->fw_vendor;
403 			efi_config_table	= (unsigned long)data->tables;
404 
405 			over4g |= data->fw_vendor	> U32_MAX ||
406 				  data->tables		> U32_MAX;
407 
408 			early_memunmap(data, sizeof(*data));
409 		} else {
410 			efi_fw_vendor		= systab64->fw_vendor;
411 			efi_config_table	= systab64->tables;
412 
413 			over4g |= systab64->fw_vendor	> U32_MAX ||
414 				  systab64->tables	> U32_MAX;
415 		}
416 		efi_nr_tables = systab64->nr_tables;
417 	} else {
418 		const efi_system_table_32_t *systab32 = p;
419 
420 		efi_fw_vendor		= systab32->fw_vendor;
421 		efi_runtime		= systab32->runtime;
422 		efi_config_table	= systab32->tables;
423 		efi_nr_tables		= systab32->nr_tables;
424 	}
425 
426 	efi.runtime_version = hdr->revision;
427 
428 	efi_systab_report_header(hdr, efi_fw_vendor);
429 	early_memunmap(p, size);
430 
431 	if (IS_ENABLED(CONFIG_X86_32) && over4g) {
432 		pr_err("EFI data located above 4GB, disabling EFI.\n");
433 		return -EINVAL;
434 	}
435 
436 	return 0;
437 }
438 
439 static int __init efi_config_init(const efi_config_table_type_t *arch_tables)
440 {
441 	void *config_tables;
442 	int sz, ret;
443 
444 	if (efi_nr_tables == 0)
445 		return 0;
446 
447 	if (efi_enabled(EFI_64BIT))
448 		sz = sizeof(efi_config_table_64_t);
449 	else
450 		sz = sizeof(efi_config_table_32_t);
451 
452 	/*
453 	 * Let's see what config tables the firmware passed to us.
454 	 */
455 	config_tables = early_memremap(efi_config_table, efi_nr_tables * sz);
456 	if (config_tables == NULL) {
457 		pr_err("Could not map Configuration table!\n");
458 		return -ENOMEM;
459 	}
460 
461 	ret = efi_config_parse_tables(config_tables, efi_nr_tables,
462 				      arch_tables);
463 
464 	early_memunmap(config_tables, efi_nr_tables * sz);
465 	return ret;
466 }
467 
468 void __init efi_init(void)
469 {
470 	if (IS_ENABLED(CONFIG_X86_32) &&
471 	    (boot_params.efi_info.efi_systab_hi ||
472 	     boot_params.efi_info.efi_memmap_hi)) {
473 		pr_info("Table located above 4GB, disabling EFI.\n");
474 		return;
475 	}
476 
477 	efi_systab_phys = boot_params.efi_info.efi_systab |
478 			  ((__u64)boot_params.efi_info.efi_systab_hi << 32);
479 
480 	if (efi_systab_init(efi_systab_phys))
481 		return;
482 
483 	if (efi_reuse_config(efi_config_table, efi_nr_tables))
484 		return;
485 
486 	if (efi_config_init(arch_tables))
487 		return;
488 
489 	/*
490 	 * Note: We currently don't support runtime services on an EFI
491 	 * that doesn't match the kernel 32/64-bit mode.
492 	 */
493 
494 	if (!efi_runtime_supported())
495 		pr_err("No EFI runtime due to 32/64-bit mismatch with kernel\n");
496 
497 	if (!efi_runtime_supported() || efi_runtime_disabled()) {
498 		efi_memmap_unmap();
499 		return;
500 	}
501 
502 	set_bit(EFI_RUNTIME_SERVICES, &efi.flags);
503 	efi_clean_memmap();
504 
505 	efi_remove_e820_mmio();
506 
507 	if (efi_enabled(EFI_DBG))
508 		efi_print_memmap();
509 }
510 
511 /* Merge contiguous regions of the same type and attribute */
512 static void __init efi_merge_regions(void)
513 {
514 	efi_memory_desc_t *md, *prev_md = NULL;
515 
516 	for_each_efi_memory_desc(md) {
517 		u64 prev_size;
518 
519 		if (!prev_md) {
520 			prev_md = md;
521 			continue;
522 		}
523 
524 		if (prev_md->type != md->type ||
525 		    prev_md->attribute != md->attribute) {
526 			prev_md = md;
527 			continue;
528 		}
529 
530 		prev_size = prev_md->num_pages << EFI_PAGE_SHIFT;
531 
532 		if (md->phys_addr == (prev_md->phys_addr + prev_size)) {
533 			prev_md->num_pages += md->num_pages;
534 			md->type = EFI_RESERVED_TYPE;
535 			md->attribute = 0;
536 			continue;
537 		}
538 		prev_md = md;
539 	}
540 }
541 
542 static void *realloc_pages(void *old_memmap, int old_shift)
543 {
544 	void *ret;
545 
546 	ret = (void *)__get_free_pages(GFP_KERNEL, old_shift + 1);
547 	if (!ret)
548 		goto out;
549 
550 	/*
551 	 * A first-time allocation doesn't have anything to copy.
552 	 */
553 	if (!old_memmap)
554 		return ret;
555 
556 	memcpy(ret, old_memmap, PAGE_SIZE << old_shift);
557 
558 out:
559 	free_pages((unsigned long)old_memmap, old_shift);
560 	return ret;
561 }
562 
563 /*
564  * Iterate the EFI memory map in reverse order because the regions
565  * will be mapped top-down. The end result is the same as if we had
566  * mapped things forward, but doesn't require us to change the
567  * existing implementation of efi_map_region().
568  */
569 static inline void *efi_map_next_entry_reverse(void *entry)
570 {
571 	/* Initial call */
572 	if (!entry)
573 		return efi.memmap.map_end - efi.memmap.desc_size;
574 
575 	entry -= efi.memmap.desc_size;
576 	if (entry < efi.memmap.map)
577 		return NULL;
578 
579 	return entry;
580 }
581 
582 /*
583  * efi_map_next_entry - Return the next EFI memory map descriptor
584  * @entry: Previous EFI memory map descriptor
585  *
586  * This is a helper function to iterate over the EFI memory map, which
587  * we do in different orders depending on the current configuration.
588  *
589  * To begin traversing the memory map @entry must be %NULL.
590  *
591  * Returns %NULL when we reach the end of the memory map.
592  */
593 static void *efi_map_next_entry(void *entry)
594 {
595 	if (efi_enabled(EFI_64BIT)) {
596 		/*
597 		 * Starting in UEFI v2.5 the EFI_PROPERTIES_TABLE
598 		 * config table feature requires us to map all entries
599 		 * in the same order as they appear in the EFI memory
600 		 * map. That is to say, entry N must have a lower
601 		 * virtual address than entry N+1. This is because the
602 		 * firmware toolchain leaves relative references in
603 		 * the code/data sections, which are split and become
604 		 * separate EFI memory regions. Mapping things
605 		 * out-of-order leads to the firmware accessing
606 		 * unmapped addresses.
607 		 *
608 		 * Since we need to map things this way whether or not
609 		 * the kernel actually makes use of
610 		 * EFI_PROPERTIES_TABLE, let's just switch to this
611 		 * scheme by default for 64-bit.
612 		 */
613 		return efi_map_next_entry_reverse(entry);
614 	}
615 
616 	/* Initial call */
617 	if (!entry)
618 		return efi.memmap.map;
619 
620 	entry += efi.memmap.desc_size;
621 	if (entry >= efi.memmap.map_end)
622 		return NULL;
623 
624 	return entry;
625 }
626 
627 static bool should_map_region(efi_memory_desc_t *md)
628 {
629 	/*
630 	 * Runtime regions always require runtime mappings (obviously).
631 	 */
632 	if (md->attribute & EFI_MEMORY_RUNTIME)
633 		return true;
634 
635 	/*
636 	 * 32-bit EFI doesn't suffer from the bug that requires us to
637 	 * reserve boot services regions, and mixed mode support
638 	 * doesn't exist for 32-bit kernels.
639 	 */
640 	if (IS_ENABLED(CONFIG_X86_32))
641 		return false;
642 
643 	/*
644 	 * EFI specific purpose memory may be reserved by default
645 	 * depending on kernel config and boot options.
646 	 */
647 	if (md->type == EFI_CONVENTIONAL_MEMORY &&
648 	    efi_soft_reserve_enabled() &&
649 	    (md->attribute & EFI_MEMORY_SP))
650 		return false;
651 
652 	/*
653 	 * Map all of RAM so that we can access arguments in the 1:1
654 	 * mapping when making EFI runtime calls.
655 	 */
656 	if (efi_is_mixed()) {
657 		if (md->type == EFI_CONVENTIONAL_MEMORY ||
658 		    md->type == EFI_LOADER_DATA ||
659 		    md->type == EFI_LOADER_CODE)
660 			return true;
661 	}
662 
663 	/*
664 	 * Map boot services regions as a workaround for buggy
665 	 * firmware that accesses them even when they shouldn't.
666 	 *
667 	 * See efi_{reserve,free}_boot_services().
668 	 */
669 	if (md->type == EFI_BOOT_SERVICES_CODE ||
670 	    md->type == EFI_BOOT_SERVICES_DATA)
671 		return true;
672 
673 	return false;
674 }
675 
676 /*
677  * Map the efi memory ranges of the runtime services and update new_mmap with
678  * virtual addresses.
679  */
680 static void * __init efi_map_regions(int *count, int *pg_shift)
681 {
682 	void *p, *new_memmap = NULL;
683 	unsigned long left = 0;
684 	unsigned long desc_size;
685 	efi_memory_desc_t *md;
686 
687 	desc_size = efi.memmap.desc_size;
688 
689 	p = NULL;
690 	while ((p = efi_map_next_entry(p))) {
691 		md = p;
692 
693 		if (!should_map_region(md))
694 			continue;
695 
696 		efi_map_region(md);
697 
698 		if (left < desc_size) {
699 			new_memmap = realloc_pages(new_memmap, *pg_shift);
700 			if (!new_memmap)
701 				return NULL;
702 
703 			left += PAGE_SIZE << *pg_shift;
704 			(*pg_shift)++;
705 		}
706 
707 		memcpy(new_memmap + (*count * desc_size), md, desc_size);
708 
709 		left -= desc_size;
710 		(*count)++;
711 	}
712 
713 	return new_memmap;
714 }
715 
716 static void __init kexec_enter_virtual_mode(void)
717 {
718 #ifdef CONFIG_KEXEC_CORE
719 	efi_memory_desc_t *md;
720 	unsigned int num_pages;
721 
722 	/*
723 	 * We don't do virtual mode, since we don't do runtime services, on
724 	 * non-native EFI.
725 	 */
726 	if (efi_is_mixed()) {
727 		efi_memmap_unmap();
728 		clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
729 		return;
730 	}
731 
732 	if (efi_alloc_page_tables()) {
733 		pr_err("Failed to allocate EFI page tables\n");
734 		clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
735 		return;
736 	}
737 
738 	/*
739 	* Map efi regions which were passed via setup_data. The virt_addr is a
740 	* fixed addr which was used in first kernel of a kexec boot.
741 	*/
742 	for_each_efi_memory_desc(md)
743 		efi_map_region_fixed(md); /* FIXME: add error handling */
744 
745 	/*
746 	 * Unregister the early EFI memmap from efi_init() and install
747 	 * the new EFI memory map.
748 	 */
749 	efi_memmap_unmap();
750 
751 	if (efi_memmap_init_late(efi.memmap.phys_map,
752 				 efi.memmap.desc_size * efi.memmap.nr_map)) {
753 		pr_err("Failed to remap late EFI memory map\n");
754 		clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
755 		return;
756 	}
757 
758 	num_pages = ALIGN(efi.memmap.nr_map * efi.memmap.desc_size, PAGE_SIZE);
759 	num_pages >>= PAGE_SHIFT;
760 
761 	if (efi_setup_page_tables(efi.memmap.phys_map, num_pages)) {
762 		clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
763 		return;
764 	}
765 
766 	efi_sync_low_kernel_mappings();
767 	efi_native_runtime_setup();
768 	efi_runtime_update_mappings();
769 #endif
770 }
771 
772 /*
773  * This function will switch the EFI runtime services to virtual mode.
774  * Essentially, we look through the EFI memmap and map every region that
775  * has the runtime attribute bit set in its memory descriptor into the
776  * efi_pgd page table.
777  *
778  * The new method does a pagetable switch in a preemption-safe manner
779  * so that we're in a different address space when calling a runtime
780  * function. For function arguments passing we do copy the PUDs of the
781  * kernel page table into efi_pgd prior to each call.
782  *
783  * Specially for kexec boot, efi runtime maps in previous kernel should
784  * be passed in via setup_data. In that case runtime ranges will be mapped
785  * to the same virtual addresses as the first kernel, see
786  * kexec_enter_virtual_mode().
787  */
788 static void __init __efi_enter_virtual_mode(void)
789 {
790 	int count = 0, pg_shift = 0;
791 	void *new_memmap = NULL;
792 	efi_status_t status;
793 	unsigned long pa;
794 
795 	if (efi_alloc_page_tables()) {
796 		pr_err("Failed to allocate EFI page tables\n");
797 		goto err;
798 	}
799 
800 	efi_merge_regions();
801 	new_memmap = efi_map_regions(&count, &pg_shift);
802 	if (!new_memmap) {
803 		pr_err("Error reallocating memory, EFI runtime non-functional!\n");
804 		goto err;
805 	}
806 
807 	pa = __pa(new_memmap);
808 
809 	/*
810 	 * Unregister the early EFI memmap from efi_init() and install
811 	 * the new EFI memory map that we are about to pass to the
812 	 * firmware via SetVirtualAddressMap().
813 	 */
814 	efi_memmap_unmap();
815 
816 	if (efi_memmap_init_late(pa, efi.memmap.desc_size * count)) {
817 		pr_err("Failed to remap late EFI memory map\n");
818 		goto err;
819 	}
820 
821 	if (efi_enabled(EFI_DBG)) {
822 		pr_info("EFI runtime memory map:\n");
823 		efi_print_memmap();
824 	}
825 
826 	if (efi_setup_page_tables(pa, 1 << pg_shift))
827 		goto err;
828 
829 	efi_sync_low_kernel_mappings();
830 
831 	status = efi_set_virtual_address_map(efi.memmap.desc_size * count,
832 					     efi.memmap.desc_size,
833 					     efi.memmap.desc_version,
834 					     (efi_memory_desc_t *)pa,
835 					     efi_systab_phys);
836 	if (status != EFI_SUCCESS) {
837 		pr_err("Unable to switch EFI into virtual mode (status=%lx)!\n",
838 		       status);
839 		goto err;
840 	}
841 
842 	efi_check_for_embedded_firmwares();
843 	efi_free_boot_services();
844 
845 	if (!efi_is_mixed())
846 		efi_native_runtime_setup();
847 	else
848 		efi_thunk_runtime_setup();
849 
850 	/*
851 	 * Apply more restrictive page table mapping attributes now that
852 	 * SVAM() has been called and the firmware has performed all
853 	 * necessary relocation fixups for the new virtual addresses.
854 	 */
855 	efi_runtime_update_mappings();
856 
857 	/* clean DUMMY object */
858 	efi_delete_dummy_variable();
859 	return;
860 
861 err:
862 	clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
863 }
864 
865 void __init efi_enter_virtual_mode(void)
866 {
867 	if (efi_enabled(EFI_PARAVIRT))
868 		return;
869 
870 	efi.runtime = (efi_runtime_services_t *)efi_runtime;
871 
872 	if (efi_setup)
873 		kexec_enter_virtual_mode();
874 	else
875 		__efi_enter_virtual_mode();
876 
877 	efi_dump_pagetable();
878 }
879 
880 bool efi_is_table_address(unsigned long phys_addr)
881 {
882 	unsigned int i;
883 
884 	if (phys_addr == EFI_INVALID_TABLE_ADDR)
885 		return false;
886 
887 	for (i = 0; i < ARRAY_SIZE(efi_tables); i++)
888 		if (*(efi_tables[i]) == phys_addr)
889 			return true;
890 
891 	return false;
892 }
893 
894 char *efi_systab_show_arch(char *str)
895 {
896 	if (uga_phys != EFI_INVALID_TABLE_ADDR)
897 		str += sprintf(str, "UGA=0x%lx\n", uga_phys);
898 	return str;
899 }
900 
901 #define EFI_FIELD(var) efi_ ## var
902 
903 #define EFI_ATTR_SHOW(name) \
904 static ssize_t name##_show(struct kobject *kobj, \
905 				struct kobj_attribute *attr, char *buf) \
906 { \
907 	return sprintf(buf, "0x%lx\n", EFI_FIELD(name)); \
908 }
909 
910 EFI_ATTR_SHOW(fw_vendor);
911 EFI_ATTR_SHOW(runtime);
912 EFI_ATTR_SHOW(config_table);
913 
914 struct kobj_attribute efi_attr_fw_vendor = __ATTR_RO(fw_vendor);
915 struct kobj_attribute efi_attr_runtime = __ATTR_RO(runtime);
916 struct kobj_attribute efi_attr_config_table = __ATTR_RO(config_table);
917 
918 umode_t efi_attr_is_visible(struct kobject *kobj, struct attribute *attr, int n)
919 {
920 	if (attr == &efi_attr_fw_vendor.attr) {
921 		if (efi_enabled(EFI_PARAVIRT) ||
922 				efi_fw_vendor == EFI_INVALID_TABLE_ADDR)
923 			return 0;
924 	} else if (attr == &efi_attr_runtime.attr) {
925 		if (efi_runtime == EFI_INVALID_TABLE_ADDR)
926 			return 0;
927 	} else if (attr == &efi_attr_config_table.attr) {
928 		if (efi_config_table == EFI_INVALID_TABLE_ADDR)
929 			return 0;
930 	}
931 	return attr->mode;
932 }
933 
934 enum efi_secureboot_mode __x86_ima_efi_boot_mode(void)
935 {
936 	return boot_params.secure_boot;
937 }
938