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/bootmem.h>
40 #include <linux/slab.h>
41 #include <linux/memblock.h>
42 #include <linux/spinlock.h>
43 #include <linux/uaccess.h>
44 #include <linux/time.h>
45 #include <linux/io.h>
46 #include <linux/reboot.h>
47 #include <linux/bcd.h>
48
49 #include <asm/setup.h>
50 #include <asm/efi.h>
51 #include <asm/e820/api.h>
52 #include <asm/time.h>
53 #include <asm/set_memory.h>
54 #include <asm/tlbflush.h>
55 #include <asm/x86_init.h>
56 #include <asm/uv/uv.h>
57
58 static struct efi efi_phys __initdata;
59 static efi_system_table_t efi_systab __initdata;
60
61 static efi_config_table_type_t arch_tables[] __initdata = {
62 #ifdef CONFIG_X86_UV
63 {UV_SYSTEM_TABLE_GUID, "UVsystab", &efi.uv_systab},
64 #endif
65 {NULL_GUID, NULL, NULL},
66 };
67
68 u64 efi_setup; /* efi setup_data physical address */
69
70 static int add_efi_memmap __initdata;
setup_add_efi_memmap(char * arg)71 static int __init setup_add_efi_memmap(char *arg)
72 {
73 add_efi_memmap = 1;
74 return 0;
75 }
76 early_param("add_efi_memmap", setup_add_efi_memmap);
77
phys_efi_set_virtual_address_map(unsigned long memory_map_size,unsigned long descriptor_size,u32 descriptor_version,efi_memory_desc_t * virtual_map)78 static efi_status_t __init phys_efi_set_virtual_address_map(
79 unsigned long memory_map_size,
80 unsigned long descriptor_size,
81 u32 descriptor_version,
82 efi_memory_desc_t *virtual_map)
83 {
84 efi_status_t status;
85 unsigned long flags;
86 pgd_t *save_pgd;
87
88 save_pgd = efi_call_phys_prolog();
89 if (!save_pgd)
90 return EFI_ABORTED;
91
92 /* Disable interrupts around EFI calls: */
93 local_irq_save(flags);
94 status = efi_call_phys(efi_phys.set_virtual_address_map,
95 memory_map_size, descriptor_size,
96 descriptor_version, virtual_map);
97 local_irq_restore(flags);
98
99 efi_call_phys_epilog(save_pgd);
100
101 return status;
102 }
103
efi_find_mirror(void)104 void __init efi_find_mirror(void)
105 {
106 efi_memory_desc_t *md;
107 u64 mirror_size = 0, total_size = 0;
108
109 for_each_efi_memory_desc(md) {
110 unsigned long long start = md->phys_addr;
111 unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
112
113 total_size += size;
114 if (md->attribute & EFI_MEMORY_MORE_RELIABLE) {
115 memblock_mark_mirror(start, size);
116 mirror_size += size;
117 }
118 }
119 if (mirror_size)
120 pr_info("Memory: %lldM/%lldM mirrored memory\n",
121 mirror_size>>20, total_size>>20);
122 }
123
124 /*
125 * Tell the kernel about the EFI memory map. This might include
126 * more than the max 128 entries that can fit in the e820 legacy
127 * (zeropage) memory map.
128 */
129
do_add_efi_memmap(void)130 static void __init do_add_efi_memmap(void)
131 {
132 efi_memory_desc_t *md;
133
134 for_each_efi_memory_desc(md) {
135 unsigned long long start = md->phys_addr;
136 unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
137 int e820_type;
138
139 switch (md->type) {
140 case EFI_LOADER_CODE:
141 case EFI_LOADER_DATA:
142 case EFI_BOOT_SERVICES_CODE:
143 case EFI_BOOT_SERVICES_DATA:
144 case EFI_CONVENTIONAL_MEMORY:
145 if (md->attribute & EFI_MEMORY_WB)
146 e820_type = E820_TYPE_RAM;
147 else
148 e820_type = E820_TYPE_RESERVED;
149 break;
150 case EFI_ACPI_RECLAIM_MEMORY:
151 e820_type = E820_TYPE_ACPI;
152 break;
153 case EFI_ACPI_MEMORY_NVS:
154 e820_type = E820_TYPE_NVS;
155 break;
156 case EFI_UNUSABLE_MEMORY:
157 e820_type = E820_TYPE_UNUSABLE;
158 break;
159 case EFI_PERSISTENT_MEMORY:
160 e820_type = E820_TYPE_PMEM;
161 break;
162 default:
163 /*
164 * EFI_RESERVED_TYPE EFI_RUNTIME_SERVICES_CODE
165 * EFI_RUNTIME_SERVICES_DATA EFI_MEMORY_MAPPED_IO
166 * EFI_MEMORY_MAPPED_IO_PORT_SPACE EFI_PAL_CODE
167 */
168 e820_type = E820_TYPE_RESERVED;
169 break;
170 }
171 e820__range_add(start, size, e820_type);
172 }
173 e820__update_table(e820_table);
174 }
175
efi_memblock_x86_reserve_range(void)176 int __init efi_memblock_x86_reserve_range(void)
177 {
178 struct efi_info *e = &boot_params.efi_info;
179 struct efi_memory_map_data data;
180 phys_addr_t pmap;
181 int rv;
182
183 if (efi_enabled(EFI_PARAVIRT))
184 return 0;
185
186 #ifdef CONFIG_X86_32
187 /* Can't handle data above 4GB at this time */
188 if (e->efi_memmap_hi) {
189 pr_err("Memory map is above 4GB, disabling EFI.\n");
190 return -EINVAL;
191 }
192 pmap = e->efi_memmap;
193 #else
194 pmap = (e->efi_memmap | ((__u64)e->efi_memmap_hi << 32));
195 #endif
196 data.phys_map = pmap;
197 data.size = e->efi_memmap_size;
198 data.desc_size = e->efi_memdesc_size;
199 data.desc_version = e->efi_memdesc_version;
200
201 rv = efi_memmap_init_early(&data);
202 if (rv)
203 return rv;
204
205 if (add_efi_memmap)
206 do_add_efi_memmap();
207
208 WARN(efi.memmap.desc_version != 1,
209 "Unexpected EFI_MEMORY_DESCRIPTOR version %ld",
210 efi.memmap.desc_version);
211
212 memblock_reserve(pmap, efi.memmap.nr_map * efi.memmap.desc_size);
213
214 return 0;
215 }
216
217 #define OVERFLOW_ADDR_SHIFT (64 - EFI_PAGE_SHIFT)
218 #define OVERFLOW_ADDR_MASK (U64_MAX << OVERFLOW_ADDR_SHIFT)
219 #define U64_HIGH_BIT (~(U64_MAX >> 1))
220
efi_memmap_entry_valid(const efi_memory_desc_t * md,int i)221 static bool __init efi_memmap_entry_valid(const efi_memory_desc_t *md, int i)
222 {
223 u64 end = (md->num_pages << EFI_PAGE_SHIFT) + md->phys_addr - 1;
224 u64 end_hi = 0;
225 char buf[64];
226
227 if (md->num_pages == 0) {
228 end = 0;
229 } else if (md->num_pages > EFI_PAGES_MAX ||
230 EFI_PAGES_MAX - md->num_pages <
231 (md->phys_addr >> EFI_PAGE_SHIFT)) {
232 end_hi = (md->num_pages & OVERFLOW_ADDR_MASK)
233 >> OVERFLOW_ADDR_SHIFT;
234
235 if ((md->phys_addr & U64_HIGH_BIT) && !(end & U64_HIGH_BIT))
236 end_hi += 1;
237 } else {
238 return true;
239 }
240
241 pr_warn_once(FW_BUG "Invalid EFI memory map entries:\n");
242
243 if (end_hi) {
244 pr_warn("mem%02u: %s range=[0x%016llx-0x%llx%016llx] (invalid)\n",
245 i, efi_md_typeattr_format(buf, sizeof(buf), md),
246 md->phys_addr, end_hi, end);
247 } else {
248 pr_warn("mem%02u: %s range=[0x%016llx-0x%016llx] (invalid)\n",
249 i, efi_md_typeattr_format(buf, sizeof(buf), md),
250 md->phys_addr, end);
251 }
252 return false;
253 }
254
efi_clean_memmap(void)255 static void __init efi_clean_memmap(void)
256 {
257 efi_memory_desc_t *out = efi.memmap.map;
258 const efi_memory_desc_t *in = out;
259 const efi_memory_desc_t *end = efi.memmap.map_end;
260 int i, n_removal;
261
262 for (i = n_removal = 0; in < end; i++) {
263 if (efi_memmap_entry_valid(in, i)) {
264 if (out != in)
265 memcpy(out, in, efi.memmap.desc_size);
266 out = (void *)out + efi.memmap.desc_size;
267 } else {
268 n_removal++;
269 }
270 in = (void *)in + efi.memmap.desc_size;
271 }
272
273 if (n_removal > 0) {
274 u64 size = efi.memmap.nr_map - n_removal;
275
276 pr_warn("Removing %d invalid memory map entries.\n", n_removal);
277 efi_memmap_install(efi.memmap.phys_map, size);
278 }
279 }
280
efi_print_memmap(void)281 void __init efi_print_memmap(void)
282 {
283 efi_memory_desc_t *md;
284 int i = 0;
285
286 for_each_efi_memory_desc(md) {
287 char buf[64];
288
289 pr_info("mem%02u: %s range=[0x%016llx-0x%016llx] (%lluMB)\n",
290 i++, efi_md_typeattr_format(buf, sizeof(buf), md),
291 md->phys_addr,
292 md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1,
293 (md->num_pages >> (20 - EFI_PAGE_SHIFT)));
294 }
295 }
296
efi_systab_init(void * phys)297 static int __init efi_systab_init(void *phys)
298 {
299 if (efi_enabled(EFI_64BIT)) {
300 efi_system_table_64_t *systab64;
301 struct efi_setup_data *data = NULL;
302 u64 tmp = 0;
303
304 if (efi_setup) {
305 data = early_memremap(efi_setup, sizeof(*data));
306 if (!data)
307 return -ENOMEM;
308 }
309 systab64 = early_memremap((unsigned long)phys,
310 sizeof(*systab64));
311 if (systab64 == NULL) {
312 pr_err("Couldn't map the system table!\n");
313 if (data)
314 early_memunmap(data, sizeof(*data));
315 return -ENOMEM;
316 }
317
318 efi_systab.hdr = systab64->hdr;
319 efi_systab.fw_vendor = data ? (unsigned long)data->fw_vendor :
320 systab64->fw_vendor;
321 tmp |= data ? data->fw_vendor : systab64->fw_vendor;
322 efi_systab.fw_revision = systab64->fw_revision;
323 efi_systab.con_in_handle = systab64->con_in_handle;
324 tmp |= systab64->con_in_handle;
325 efi_systab.con_in = systab64->con_in;
326 tmp |= systab64->con_in;
327 efi_systab.con_out_handle = systab64->con_out_handle;
328 tmp |= systab64->con_out_handle;
329 efi_systab.con_out = systab64->con_out;
330 tmp |= systab64->con_out;
331 efi_systab.stderr_handle = systab64->stderr_handle;
332 tmp |= systab64->stderr_handle;
333 efi_systab.stderr = systab64->stderr;
334 tmp |= systab64->stderr;
335 efi_systab.runtime = data ?
336 (void *)(unsigned long)data->runtime :
337 (void *)(unsigned long)systab64->runtime;
338 tmp |= data ? data->runtime : systab64->runtime;
339 efi_systab.boottime = (void *)(unsigned long)systab64->boottime;
340 tmp |= systab64->boottime;
341 efi_systab.nr_tables = systab64->nr_tables;
342 efi_systab.tables = data ? (unsigned long)data->tables :
343 systab64->tables;
344 tmp |= data ? data->tables : systab64->tables;
345
346 early_memunmap(systab64, sizeof(*systab64));
347 if (data)
348 early_memunmap(data, sizeof(*data));
349 #ifdef CONFIG_X86_32
350 if (tmp >> 32) {
351 pr_err("EFI data located above 4GB, disabling EFI.\n");
352 return -EINVAL;
353 }
354 #endif
355 } else {
356 efi_system_table_32_t *systab32;
357
358 systab32 = early_memremap((unsigned long)phys,
359 sizeof(*systab32));
360 if (systab32 == NULL) {
361 pr_err("Couldn't map the system table!\n");
362 return -ENOMEM;
363 }
364
365 efi_systab.hdr = systab32->hdr;
366 efi_systab.fw_vendor = systab32->fw_vendor;
367 efi_systab.fw_revision = systab32->fw_revision;
368 efi_systab.con_in_handle = systab32->con_in_handle;
369 efi_systab.con_in = systab32->con_in;
370 efi_systab.con_out_handle = systab32->con_out_handle;
371 efi_systab.con_out = systab32->con_out;
372 efi_systab.stderr_handle = systab32->stderr_handle;
373 efi_systab.stderr = systab32->stderr;
374 efi_systab.runtime = (void *)(unsigned long)systab32->runtime;
375 efi_systab.boottime = (void *)(unsigned long)systab32->boottime;
376 efi_systab.nr_tables = systab32->nr_tables;
377 efi_systab.tables = systab32->tables;
378
379 early_memunmap(systab32, sizeof(*systab32));
380 }
381
382 efi.systab = &efi_systab;
383
384 /*
385 * Verify the EFI Table
386 */
387 if (efi.systab->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) {
388 pr_err("System table signature incorrect!\n");
389 return -EINVAL;
390 }
391 if ((efi.systab->hdr.revision >> 16) == 0)
392 pr_err("Warning: System table version %d.%02d, expected 1.00 or greater!\n",
393 efi.systab->hdr.revision >> 16,
394 efi.systab->hdr.revision & 0xffff);
395
396 return 0;
397 }
398
efi_runtime_init32(void)399 static int __init efi_runtime_init32(void)
400 {
401 efi_runtime_services_32_t *runtime;
402
403 runtime = early_memremap((unsigned long)efi.systab->runtime,
404 sizeof(efi_runtime_services_32_t));
405 if (!runtime) {
406 pr_err("Could not map the runtime service table!\n");
407 return -ENOMEM;
408 }
409
410 /*
411 * We will only need *early* access to the SetVirtualAddressMap
412 * EFI runtime service. All other runtime services will be called
413 * via the virtual mapping.
414 */
415 efi_phys.set_virtual_address_map =
416 (efi_set_virtual_address_map_t *)
417 (unsigned long)runtime->set_virtual_address_map;
418 early_memunmap(runtime, sizeof(efi_runtime_services_32_t));
419
420 return 0;
421 }
422
efi_runtime_init64(void)423 static int __init efi_runtime_init64(void)
424 {
425 efi_runtime_services_64_t *runtime;
426
427 runtime = early_memremap((unsigned long)efi.systab->runtime,
428 sizeof(efi_runtime_services_64_t));
429 if (!runtime) {
430 pr_err("Could not map the runtime service table!\n");
431 return -ENOMEM;
432 }
433
434 /*
435 * We will only need *early* access to the SetVirtualAddressMap
436 * EFI runtime service. All other runtime services will be called
437 * via the virtual mapping.
438 */
439 efi_phys.set_virtual_address_map =
440 (efi_set_virtual_address_map_t *)
441 (unsigned long)runtime->set_virtual_address_map;
442 early_memunmap(runtime, sizeof(efi_runtime_services_64_t));
443
444 return 0;
445 }
446
efi_runtime_init(void)447 static int __init efi_runtime_init(void)
448 {
449 int rv;
450
451 /*
452 * Check out the runtime services table. We need to map
453 * the runtime services table so that we can grab the physical
454 * address of several of the EFI runtime functions, needed to
455 * set the firmware into virtual mode.
456 *
457 * When EFI_PARAVIRT is in force then we could not map runtime
458 * service memory region because we do not have direct access to it.
459 * However, runtime services are available through proxy functions
460 * (e.g. in case of Xen dom0 EFI implementation they call special
461 * hypercall which executes relevant EFI functions) and that is why
462 * they are always enabled.
463 */
464
465 if (!efi_enabled(EFI_PARAVIRT)) {
466 if (efi_enabled(EFI_64BIT))
467 rv = efi_runtime_init64();
468 else
469 rv = efi_runtime_init32();
470
471 if (rv)
472 return rv;
473 }
474
475 set_bit(EFI_RUNTIME_SERVICES, &efi.flags);
476
477 return 0;
478 }
479
efi_init(void)480 void __init efi_init(void)
481 {
482 efi_char16_t *c16;
483 char vendor[100] = "unknown";
484 int i = 0;
485
486 #ifdef CONFIG_X86_32
487 if (boot_params.efi_info.efi_systab_hi ||
488 boot_params.efi_info.efi_memmap_hi) {
489 pr_info("Table located above 4GB, disabling EFI.\n");
490 return;
491 }
492 efi_phys.systab = (efi_system_table_t *)boot_params.efi_info.efi_systab;
493 #else
494 efi_phys.systab = (efi_system_table_t *)
495 (boot_params.efi_info.efi_systab |
496 ((__u64)boot_params.efi_info.efi_systab_hi<<32));
497 #endif
498
499 if (efi_systab_init(efi_phys.systab))
500 return;
501
502 efi.config_table = (unsigned long)efi.systab->tables;
503 efi.fw_vendor = (unsigned long)efi.systab->fw_vendor;
504 efi.runtime = (unsigned long)efi.systab->runtime;
505
506 /*
507 * Show what we know for posterity
508 */
509 c16 = early_memremap_ro(efi.systab->fw_vendor,
510 sizeof(vendor) * sizeof(efi_char16_t));
511 if (c16) {
512 for (i = 0; i < sizeof(vendor) - 1 && c16[i]; ++i)
513 vendor[i] = c16[i];
514 vendor[i] = '\0';
515 early_memunmap(c16, sizeof(vendor) * sizeof(efi_char16_t));
516 } else {
517 pr_err("Could not map the firmware vendor!\n");
518 }
519
520 pr_info("EFI v%u.%.02u by %s\n",
521 efi.systab->hdr.revision >> 16,
522 efi.systab->hdr.revision & 0xffff, vendor);
523
524 if (efi_reuse_config(efi.systab->tables, efi.systab->nr_tables))
525 return;
526
527 if (efi_config_init(arch_tables))
528 return;
529
530 /*
531 * Note: We currently don't support runtime services on an EFI
532 * that doesn't match the kernel 32/64-bit mode.
533 */
534
535 if (!efi_runtime_supported())
536 pr_info("No EFI runtime due to 32/64-bit mismatch with kernel\n");
537 else {
538 if (efi_runtime_disabled() || efi_runtime_init()) {
539 efi_memmap_unmap();
540 return;
541 }
542 }
543
544 efi_clean_memmap();
545
546 if (efi_enabled(EFI_DBG))
547 efi_print_memmap();
548 }
549
efi_set_executable(efi_memory_desc_t * md,bool executable)550 void __init efi_set_executable(efi_memory_desc_t *md, bool executable)
551 {
552 u64 addr, npages;
553
554 addr = md->virt_addr;
555 npages = md->num_pages;
556
557 memrange_efi_to_native(&addr, &npages);
558
559 if (executable)
560 set_memory_x(addr, npages);
561 else
562 set_memory_nx(addr, npages);
563 }
564
runtime_code_page_mkexec(void)565 void __init runtime_code_page_mkexec(void)
566 {
567 efi_memory_desc_t *md;
568
569 /* Make EFI runtime service code area executable */
570 for_each_efi_memory_desc(md) {
571 if (md->type != EFI_RUNTIME_SERVICES_CODE)
572 continue;
573
574 efi_set_executable(md, true);
575 }
576 }
577
efi_memory_uc(u64 addr,unsigned long size)578 void __init efi_memory_uc(u64 addr, unsigned long size)
579 {
580 unsigned long page_shift = 1UL << EFI_PAGE_SHIFT;
581 u64 npages;
582
583 npages = round_up(size, page_shift) / page_shift;
584 memrange_efi_to_native(&addr, &npages);
585 set_memory_uc(addr, npages);
586 }
587
old_map_region(efi_memory_desc_t * md)588 void __init old_map_region(efi_memory_desc_t *md)
589 {
590 u64 start_pfn, end_pfn, end;
591 unsigned long size;
592 void *va;
593
594 start_pfn = PFN_DOWN(md->phys_addr);
595 size = md->num_pages << PAGE_SHIFT;
596 end = md->phys_addr + size;
597 end_pfn = PFN_UP(end);
598
599 if (pfn_range_is_mapped(start_pfn, end_pfn)) {
600 va = __va(md->phys_addr);
601
602 if (!(md->attribute & EFI_MEMORY_WB))
603 efi_memory_uc((u64)(unsigned long)va, size);
604 } else
605 va = efi_ioremap(md->phys_addr, size,
606 md->type, md->attribute);
607
608 md->virt_addr = (u64) (unsigned long) va;
609 if (!va)
610 pr_err("ioremap of 0x%llX failed!\n",
611 (unsigned long long)md->phys_addr);
612 }
613
614 /* Merge contiguous regions of the same type and attribute */
efi_merge_regions(void)615 static void __init efi_merge_regions(void)
616 {
617 efi_memory_desc_t *md, *prev_md = NULL;
618
619 for_each_efi_memory_desc(md) {
620 u64 prev_size;
621
622 if (!prev_md) {
623 prev_md = md;
624 continue;
625 }
626
627 if (prev_md->type != md->type ||
628 prev_md->attribute != md->attribute) {
629 prev_md = md;
630 continue;
631 }
632
633 prev_size = prev_md->num_pages << EFI_PAGE_SHIFT;
634
635 if (md->phys_addr == (prev_md->phys_addr + prev_size)) {
636 prev_md->num_pages += md->num_pages;
637 md->type = EFI_RESERVED_TYPE;
638 md->attribute = 0;
639 continue;
640 }
641 prev_md = md;
642 }
643 }
644
get_systab_virt_addr(efi_memory_desc_t * md)645 static void __init get_systab_virt_addr(efi_memory_desc_t *md)
646 {
647 unsigned long size;
648 u64 end, systab;
649
650 size = md->num_pages << EFI_PAGE_SHIFT;
651 end = md->phys_addr + size;
652 systab = (u64)(unsigned long)efi_phys.systab;
653 if (md->phys_addr <= systab && systab < end) {
654 systab += md->virt_addr - md->phys_addr;
655 efi.systab = (efi_system_table_t *)(unsigned long)systab;
656 }
657 }
658
realloc_pages(void * old_memmap,int old_shift)659 static void *realloc_pages(void *old_memmap, int old_shift)
660 {
661 void *ret;
662
663 ret = (void *)__get_free_pages(GFP_KERNEL, old_shift + 1);
664 if (!ret)
665 goto out;
666
667 /*
668 * A first-time allocation doesn't have anything to copy.
669 */
670 if (!old_memmap)
671 return ret;
672
673 memcpy(ret, old_memmap, PAGE_SIZE << old_shift);
674
675 out:
676 free_pages((unsigned long)old_memmap, old_shift);
677 return ret;
678 }
679
680 /*
681 * Iterate the EFI memory map in reverse order because the regions
682 * will be mapped top-down. The end result is the same as if we had
683 * mapped things forward, but doesn't require us to change the
684 * existing implementation of efi_map_region().
685 */
efi_map_next_entry_reverse(void * entry)686 static inline void *efi_map_next_entry_reverse(void *entry)
687 {
688 /* Initial call */
689 if (!entry)
690 return efi.memmap.map_end - efi.memmap.desc_size;
691
692 entry -= efi.memmap.desc_size;
693 if (entry < efi.memmap.map)
694 return NULL;
695
696 return entry;
697 }
698
699 /*
700 * efi_map_next_entry - Return the next EFI memory map descriptor
701 * @entry: Previous EFI memory map descriptor
702 *
703 * This is a helper function to iterate over the EFI memory map, which
704 * we do in different orders depending on the current configuration.
705 *
706 * To begin traversing the memory map @entry must be %NULL.
707 *
708 * Returns %NULL when we reach the end of the memory map.
709 */
efi_map_next_entry(void * entry)710 static void *efi_map_next_entry(void *entry)
711 {
712 if (!efi_enabled(EFI_OLD_MEMMAP) && efi_enabled(EFI_64BIT)) {
713 /*
714 * Starting in UEFI v2.5 the EFI_PROPERTIES_TABLE
715 * config table feature requires us to map all entries
716 * in the same order as they appear in the EFI memory
717 * map. That is to say, entry N must have a lower
718 * virtual address than entry N+1. This is because the
719 * firmware toolchain leaves relative references in
720 * the code/data sections, which are split and become
721 * separate EFI memory regions. Mapping things
722 * out-of-order leads to the firmware accessing
723 * unmapped addresses.
724 *
725 * Since we need to map things this way whether or not
726 * the kernel actually makes use of
727 * EFI_PROPERTIES_TABLE, let's just switch to this
728 * scheme by default for 64-bit.
729 */
730 return efi_map_next_entry_reverse(entry);
731 }
732
733 /* Initial call */
734 if (!entry)
735 return efi.memmap.map;
736
737 entry += efi.memmap.desc_size;
738 if (entry >= efi.memmap.map_end)
739 return NULL;
740
741 return entry;
742 }
743
should_map_region(efi_memory_desc_t * md)744 static bool should_map_region(efi_memory_desc_t *md)
745 {
746 /*
747 * Runtime regions always require runtime mappings (obviously).
748 */
749 if (md->attribute & EFI_MEMORY_RUNTIME)
750 return true;
751
752 /*
753 * 32-bit EFI doesn't suffer from the bug that requires us to
754 * reserve boot services regions, and mixed mode support
755 * doesn't exist for 32-bit kernels.
756 */
757 if (IS_ENABLED(CONFIG_X86_32))
758 return false;
759
760 /*
761 * Map all of RAM so that we can access arguments in the 1:1
762 * mapping when making EFI runtime calls.
763 */
764 if (IS_ENABLED(CONFIG_EFI_MIXED) && !efi_is_native()) {
765 if (md->type == EFI_CONVENTIONAL_MEMORY ||
766 md->type == EFI_LOADER_DATA ||
767 md->type == EFI_LOADER_CODE)
768 return true;
769 }
770
771 /*
772 * Map boot services regions as a workaround for buggy
773 * firmware that accesses them even when they shouldn't.
774 *
775 * See efi_{reserve,free}_boot_services().
776 */
777 if (md->type == EFI_BOOT_SERVICES_CODE ||
778 md->type == EFI_BOOT_SERVICES_DATA)
779 return true;
780
781 return false;
782 }
783
784 /*
785 * Map the efi memory ranges of the runtime services and update new_mmap with
786 * virtual addresses.
787 */
efi_map_regions(int * count,int * pg_shift)788 static void * __init efi_map_regions(int *count, int *pg_shift)
789 {
790 void *p, *new_memmap = NULL;
791 unsigned long left = 0;
792 unsigned long desc_size;
793 efi_memory_desc_t *md;
794
795 desc_size = efi.memmap.desc_size;
796
797 p = NULL;
798 while ((p = efi_map_next_entry(p))) {
799 md = p;
800
801 if (!should_map_region(md))
802 continue;
803
804 efi_map_region(md);
805 get_systab_virt_addr(md);
806
807 if (left < desc_size) {
808 new_memmap = realloc_pages(new_memmap, *pg_shift);
809 if (!new_memmap)
810 return NULL;
811
812 left += PAGE_SIZE << *pg_shift;
813 (*pg_shift)++;
814 }
815
816 memcpy(new_memmap + (*count * desc_size), md, desc_size);
817
818 left -= desc_size;
819 (*count)++;
820 }
821
822 return new_memmap;
823 }
824
kexec_enter_virtual_mode(void)825 static void __init kexec_enter_virtual_mode(void)
826 {
827 #ifdef CONFIG_KEXEC_CORE
828 efi_memory_desc_t *md;
829 unsigned int num_pages;
830
831 efi.systab = NULL;
832
833 /*
834 * We don't do virtual mode, since we don't do runtime services, on
835 * non-native EFI. With efi=old_map, we don't do runtime services in
836 * kexec kernel because in the initial boot something else might
837 * have been mapped at these virtual addresses.
838 */
839 if (!efi_is_native() || efi_enabled(EFI_OLD_MEMMAP)) {
840 efi_memmap_unmap();
841 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
842 return;
843 }
844
845 if (efi_alloc_page_tables()) {
846 pr_err("Failed to allocate EFI page tables\n");
847 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
848 return;
849 }
850
851 /*
852 * Map efi regions which were passed via setup_data. The virt_addr is a
853 * fixed addr which was used in first kernel of a kexec boot.
854 */
855 for_each_efi_memory_desc(md) {
856 efi_map_region_fixed(md); /* FIXME: add error handling */
857 get_systab_virt_addr(md);
858 }
859
860 /*
861 * Unregister the early EFI memmap from efi_init() and install
862 * the new EFI memory map.
863 */
864 efi_memmap_unmap();
865
866 if (efi_memmap_init_late(efi.memmap.phys_map,
867 efi.memmap.desc_size * efi.memmap.nr_map)) {
868 pr_err("Failed to remap late EFI memory map\n");
869 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
870 return;
871 }
872
873 BUG_ON(!efi.systab);
874
875 num_pages = ALIGN(efi.memmap.nr_map * efi.memmap.desc_size, PAGE_SIZE);
876 num_pages >>= PAGE_SHIFT;
877
878 if (efi_setup_page_tables(efi.memmap.phys_map, num_pages)) {
879 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
880 return;
881 }
882
883 efi_sync_low_kernel_mappings();
884
885 /*
886 * Now that EFI is in virtual mode, update the function
887 * pointers in the runtime service table to the new virtual addresses.
888 *
889 * Call EFI services through wrapper functions.
890 */
891 efi.runtime_version = efi_systab.hdr.revision;
892
893 efi_native_runtime_setup();
894
895 efi.set_virtual_address_map = NULL;
896
897 if (efi_enabled(EFI_OLD_MEMMAP) && (__supported_pte_mask & _PAGE_NX))
898 runtime_code_page_mkexec();
899 #endif
900 }
901
902 /*
903 * This function will switch the EFI runtime services to virtual mode.
904 * Essentially, we look through the EFI memmap and map every region that
905 * has the runtime attribute bit set in its memory descriptor into the
906 * efi_pgd page table.
907 *
908 * The old method which used to update that memory descriptor with the
909 * virtual address obtained from ioremap() is still supported when the
910 * kernel is booted with efi=old_map on its command line. Same old
911 * method enabled the runtime services to be called without having to
912 * thunk back into physical mode for every invocation.
913 *
914 * The new method does a pagetable switch in a preemption-safe manner
915 * so that we're in a different address space when calling a runtime
916 * function. For function arguments passing we do copy the PUDs of the
917 * kernel page table into efi_pgd prior to each call.
918 *
919 * Specially for kexec boot, efi runtime maps in previous kernel should
920 * be passed in via setup_data. In that case runtime ranges will be mapped
921 * to the same virtual addresses as the first kernel, see
922 * kexec_enter_virtual_mode().
923 */
__efi_enter_virtual_mode(void)924 static void __init __efi_enter_virtual_mode(void)
925 {
926 int count = 0, pg_shift = 0;
927 void *new_memmap = NULL;
928 efi_status_t status;
929 unsigned long pa;
930
931 efi.systab = NULL;
932
933 if (efi_alloc_page_tables()) {
934 pr_err("Failed to allocate EFI page tables\n");
935 goto err;
936 }
937
938 efi_merge_regions();
939 new_memmap = efi_map_regions(&count, &pg_shift);
940 if (!new_memmap) {
941 pr_err("Error reallocating memory, EFI runtime non-functional!\n");
942 goto err;
943 }
944
945 pa = __pa(new_memmap);
946
947 /*
948 * Unregister the early EFI memmap from efi_init() and install
949 * the new EFI memory map that we are about to pass to the
950 * firmware via SetVirtualAddressMap().
951 */
952 efi_memmap_unmap();
953
954 if (efi_memmap_init_late(pa, efi.memmap.desc_size * count)) {
955 pr_err("Failed to remap late EFI memory map\n");
956 goto err;
957 }
958
959 if (efi_enabled(EFI_DBG)) {
960 pr_info("EFI runtime memory map:\n");
961 efi_print_memmap();
962 }
963
964 if (WARN_ON(!efi.systab))
965 goto err;
966
967 if (efi_setup_page_tables(pa, 1 << pg_shift))
968 goto err;
969
970 efi_sync_low_kernel_mappings();
971
972 if (efi_is_native()) {
973 status = phys_efi_set_virtual_address_map(
974 efi.memmap.desc_size * count,
975 efi.memmap.desc_size,
976 efi.memmap.desc_version,
977 (efi_memory_desc_t *)pa);
978 } else {
979 status = efi_thunk_set_virtual_address_map(
980 efi_phys.set_virtual_address_map,
981 efi.memmap.desc_size * count,
982 efi.memmap.desc_size,
983 efi.memmap.desc_version,
984 (efi_memory_desc_t *)pa);
985 }
986
987 if (status != EFI_SUCCESS) {
988 pr_err("Unable to switch EFI into virtual mode (status=%lx)!\n",
989 status);
990 goto err;
991 }
992
993 /*
994 * Now that EFI is in virtual mode, update the function
995 * pointers in the runtime service table to the new virtual addresses.
996 *
997 * Call EFI services through wrapper functions.
998 */
999 efi.runtime_version = efi_systab.hdr.revision;
1000
1001 if (efi_is_native())
1002 efi_native_runtime_setup();
1003 else
1004 efi_thunk_runtime_setup();
1005
1006 efi.set_virtual_address_map = NULL;
1007
1008 /*
1009 * Apply more restrictive page table mapping attributes now that
1010 * SVAM() has been called and the firmware has performed all
1011 * necessary relocation fixups for the new virtual addresses.
1012 */
1013 efi_runtime_update_mappings();
1014
1015 /* clean DUMMY object */
1016 efi_delete_dummy_variable();
1017 return;
1018
1019 err:
1020 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
1021 }
1022
efi_enter_virtual_mode(void)1023 void __init efi_enter_virtual_mode(void)
1024 {
1025 if (efi_enabled(EFI_PARAVIRT))
1026 return;
1027
1028 if (efi_setup)
1029 kexec_enter_virtual_mode();
1030 else
1031 __efi_enter_virtual_mode();
1032
1033 efi_dump_pagetable();
1034 }
1035
arch_parse_efi_cmdline(char * str)1036 static int __init arch_parse_efi_cmdline(char *str)
1037 {
1038 if (!str) {
1039 pr_warn("need at least one option\n");
1040 return -EINVAL;
1041 }
1042
1043 if (parse_option_str(str, "old_map"))
1044 set_bit(EFI_OLD_MEMMAP, &efi.flags);
1045
1046 return 0;
1047 }
1048 early_param("efi", arch_parse_efi_cmdline);
1049