]> git.karo-electronics.de Git - karo-tx-linux.git/blob - arch/x86/platform/efi/efi.c
Merge tag 'kvm-s390-master-4.10-1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / arch / x86 / platform / efi / efi.c
1 /*
2  * Common EFI (Extensible Firmware Interface) support functions
3  * Based on Extensible Firmware Interface Specification version 1.0
4  *
5  * Copyright (C) 1999 VA Linux Systems
6  * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
7  * Copyright (C) 1999-2002 Hewlett-Packard Co.
8  *      David Mosberger-Tang <davidm@hpl.hp.com>
9  *      Stephane Eranian <eranian@hpl.hp.com>
10  * Copyright (C) 2005-2008 Intel Co.
11  *      Fenghua Yu <fenghua.yu@intel.com>
12  *      Bibo Mao <bibo.mao@intel.com>
13  *      Chandramouli Narayanan <mouli@linux.intel.com>
14  *      Huang Ying <ying.huang@intel.com>
15  * Copyright (C) 2013 SuSE Labs
16  *      Borislav Petkov <bp@suse.de> - runtime services VA mapping
17  *
18  * Copied from efi_32.c to eliminate the duplicated code between EFI
19  * 32/64 support code. --ying 2007-10-26
20  *
21  * All EFI Runtime Services are not implemented yet as EFI only
22  * supports physical mode addressing on SoftSDV. This is to be fixed
23  * in a future version.  --drummond 1999-07-20
24  *
25  * Implemented EFI runtime services and virtual mode calls.  --davidm
26  *
27  * Goutham Rao: <goutham.rao@intel.com>
28  *      Skip non-WB memory and ignore empty memory ranges.
29  */
30
31 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
32
33 #include <linux/kernel.h>
34 #include <linux/init.h>
35 #include <linux/efi.h>
36 #include <linux/efi-bgrt.h>
37 #include <linux/export.h>
38 #include <linux/bootmem.h>
39 #include <linux/slab.h>
40 #include <linux/memblock.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/time.h>
51 #include <asm/cacheflush.h>
52 #include <asm/tlbflush.h>
53 #include <asm/x86_init.h>
54 #include <asm/uv/uv.h>
55
56 static struct efi efi_phys __initdata;
57 static efi_system_table_t efi_systab __initdata;
58
59 static efi_config_table_type_t arch_tables[] __initdata = {
60 #ifdef CONFIG_X86_UV
61         {UV_SYSTEM_TABLE_GUID, "UVsystab", &efi.uv_systab},
62 #endif
63         {NULL_GUID, NULL, NULL},
64 };
65
66 u64 efi_setup;          /* efi setup_data physical address */
67
68 static int add_efi_memmap __initdata;
69 static int __init setup_add_efi_memmap(char *arg)
70 {
71         add_efi_memmap = 1;
72         return 0;
73 }
74 early_param("add_efi_memmap", setup_add_efi_memmap);
75
76 static efi_status_t __init phys_efi_set_virtual_address_map(
77         unsigned long memory_map_size,
78         unsigned long descriptor_size,
79         u32 descriptor_version,
80         efi_memory_desc_t *virtual_map)
81 {
82         efi_status_t status;
83         unsigned long flags;
84         pgd_t *save_pgd;
85
86         save_pgd = efi_call_phys_prolog();
87
88         /* Disable interrupts around EFI calls: */
89         local_irq_save(flags);
90         status = efi_call_phys(efi_phys.set_virtual_address_map,
91                                memory_map_size, descriptor_size,
92                                descriptor_version, virtual_map);
93         local_irq_restore(flags);
94
95         efi_call_phys_epilog(save_pgd);
96
97         return status;
98 }
99
100 void __init efi_find_mirror(void)
101 {
102         efi_memory_desc_t *md;
103         u64 mirror_size = 0, total_size = 0;
104
105         for_each_efi_memory_desc(md) {
106                 unsigned long long start = md->phys_addr;
107                 unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
108
109                 total_size += size;
110                 if (md->attribute & EFI_MEMORY_MORE_RELIABLE) {
111                         memblock_mark_mirror(start, size);
112                         mirror_size += size;
113                 }
114         }
115         if (mirror_size)
116                 pr_info("Memory: %lldM/%lldM mirrored memory\n",
117                         mirror_size>>20, total_size>>20);
118 }
119
120 /*
121  * Tell the kernel about the EFI memory map.  This might include
122  * more than the max 128 entries that can fit in the e820 legacy
123  * (zeropage) memory map.
124  */
125
126 static void __init do_add_efi_memmap(void)
127 {
128         efi_memory_desc_t *md;
129
130         for_each_efi_memory_desc(md) {
131                 unsigned long long start = md->phys_addr;
132                 unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
133                 int e820_type;
134
135                 switch (md->type) {
136                 case EFI_LOADER_CODE:
137                 case EFI_LOADER_DATA:
138                 case EFI_BOOT_SERVICES_CODE:
139                 case EFI_BOOT_SERVICES_DATA:
140                 case EFI_CONVENTIONAL_MEMORY:
141                         if (md->attribute & EFI_MEMORY_WB)
142                                 e820_type = E820_RAM;
143                         else
144                                 e820_type = E820_RESERVED;
145                         break;
146                 case EFI_ACPI_RECLAIM_MEMORY:
147                         e820_type = E820_ACPI;
148                         break;
149                 case EFI_ACPI_MEMORY_NVS:
150                         e820_type = E820_NVS;
151                         break;
152                 case EFI_UNUSABLE_MEMORY:
153                         e820_type = E820_UNUSABLE;
154                         break;
155                 case EFI_PERSISTENT_MEMORY:
156                         e820_type = E820_PMEM;
157                         break;
158                 default:
159                         /*
160                          * EFI_RESERVED_TYPE EFI_RUNTIME_SERVICES_CODE
161                          * EFI_RUNTIME_SERVICES_DATA EFI_MEMORY_MAPPED_IO
162                          * EFI_MEMORY_MAPPED_IO_PORT_SPACE EFI_PAL_CODE
163                          */
164                         e820_type = E820_RESERVED;
165                         break;
166                 }
167                 e820_add_region(start, size, e820_type);
168         }
169         sanitize_e820_map(e820->map, ARRAY_SIZE(e820->map), &e820->nr_map);
170 }
171
172 int __init efi_memblock_x86_reserve_range(void)
173 {
174         struct efi_info *e = &boot_params.efi_info;
175         struct efi_memory_map_data data;
176         phys_addr_t pmap;
177         int rv;
178
179         if (efi_enabled(EFI_PARAVIRT))
180                 return 0;
181
182 #ifdef CONFIG_X86_32
183         /* Can't handle data above 4GB at this time */
184         if (e->efi_memmap_hi) {
185                 pr_err("Memory map is above 4GB, disabling EFI.\n");
186                 return -EINVAL;
187         }
188         pmap =  e->efi_memmap;
189 #else
190         pmap = (e->efi_memmap | ((__u64)e->efi_memmap_hi << 32));
191 #endif
192         data.phys_map           = pmap;
193         data.size               = e->efi_memmap_size;
194         data.desc_size          = e->efi_memdesc_size;
195         data.desc_version       = e->efi_memdesc_version;
196
197         rv = efi_memmap_init_early(&data);
198         if (rv)
199                 return rv;
200
201         if (add_efi_memmap)
202                 do_add_efi_memmap();
203
204         WARN(efi.memmap.desc_version != 1,
205              "Unexpected EFI_MEMORY_DESCRIPTOR version %ld",
206              efi.memmap.desc_version);
207
208         memblock_reserve(pmap, efi.memmap.nr_map * efi.memmap.desc_size);
209
210         return 0;
211 }
212
213 #define OVERFLOW_ADDR_SHIFT     (64 - EFI_PAGE_SHIFT)
214 #define OVERFLOW_ADDR_MASK      (U64_MAX << OVERFLOW_ADDR_SHIFT)
215 #define U64_HIGH_BIT            (~(U64_MAX >> 1))
216
217 static bool __init efi_memmap_entry_valid(const efi_memory_desc_t *md, int i)
218 {
219         u64 end = (md->num_pages << EFI_PAGE_SHIFT) + md->phys_addr - 1;
220         u64 end_hi = 0;
221         char buf[64];
222
223         if (md->num_pages == 0) {
224                 end = 0;
225         } else if (md->num_pages > EFI_PAGES_MAX ||
226                    EFI_PAGES_MAX - md->num_pages <
227                    (md->phys_addr >> EFI_PAGE_SHIFT)) {
228                 end_hi = (md->num_pages & OVERFLOW_ADDR_MASK)
229                         >> OVERFLOW_ADDR_SHIFT;
230
231                 if ((md->phys_addr & U64_HIGH_BIT) && !(end & U64_HIGH_BIT))
232                         end_hi += 1;
233         } else {
234                 return true;
235         }
236
237         pr_warn_once(FW_BUG "Invalid EFI memory map entries:\n");
238
239         if (end_hi) {
240                 pr_warn("mem%02u: %s range=[0x%016llx-0x%llx%016llx] (invalid)\n",
241                         i, efi_md_typeattr_format(buf, sizeof(buf), md),
242                         md->phys_addr, end_hi, end);
243         } else {
244                 pr_warn("mem%02u: %s range=[0x%016llx-0x%016llx] (invalid)\n",
245                         i, efi_md_typeattr_format(buf, sizeof(buf), md),
246                         md->phys_addr, end);
247         }
248         return false;
249 }
250
251 static void __init efi_clean_memmap(void)
252 {
253         efi_memory_desc_t *out = efi.memmap.map;
254         const efi_memory_desc_t *in = out;
255         const efi_memory_desc_t *end = efi.memmap.map_end;
256         int i, n_removal;
257
258         for (i = n_removal = 0; in < end; i++) {
259                 if (efi_memmap_entry_valid(in, i)) {
260                         if (out != in)
261                                 memcpy(out, in, efi.memmap.desc_size);
262                         out = (void *)out + efi.memmap.desc_size;
263                 } else {
264                         n_removal++;
265                 }
266                 in = (void *)in + efi.memmap.desc_size;
267         }
268
269         if (n_removal > 0) {
270                 u64 size = efi.memmap.nr_map - n_removal;
271
272                 pr_warn("Removing %d invalid memory map entries.\n", n_removal);
273                 efi_memmap_install(efi.memmap.phys_map, size);
274         }
275 }
276
277 void __init efi_print_memmap(void)
278 {
279         efi_memory_desc_t *md;
280         int i = 0;
281
282         for_each_efi_memory_desc(md) {
283                 char buf[64];
284
285                 pr_info("mem%02u: %s range=[0x%016llx-0x%016llx] (%lluMB)\n",
286                         i++, efi_md_typeattr_format(buf, sizeof(buf), md),
287                         md->phys_addr,
288                         md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1,
289                         (md->num_pages >> (20 - EFI_PAGE_SHIFT)));
290         }
291 }
292
293 static int __init efi_systab_init(void *phys)
294 {
295         if (efi_enabled(EFI_64BIT)) {
296                 efi_system_table_64_t *systab64;
297                 struct efi_setup_data *data = NULL;
298                 u64 tmp = 0;
299
300                 if (efi_setup) {
301                         data = early_memremap(efi_setup, sizeof(*data));
302                         if (!data)
303                                 return -ENOMEM;
304                 }
305                 systab64 = early_memremap((unsigned long)phys,
306                                          sizeof(*systab64));
307                 if (systab64 == NULL) {
308                         pr_err("Couldn't map the system table!\n");
309                         if (data)
310                                 early_memunmap(data, sizeof(*data));
311                         return -ENOMEM;
312                 }
313
314                 efi_systab.hdr = systab64->hdr;
315                 efi_systab.fw_vendor = data ? (unsigned long)data->fw_vendor :
316                                               systab64->fw_vendor;
317                 tmp |= data ? data->fw_vendor : systab64->fw_vendor;
318                 efi_systab.fw_revision = systab64->fw_revision;
319                 efi_systab.con_in_handle = systab64->con_in_handle;
320                 tmp |= systab64->con_in_handle;
321                 efi_systab.con_in = systab64->con_in;
322                 tmp |= systab64->con_in;
323                 efi_systab.con_out_handle = systab64->con_out_handle;
324                 tmp |= systab64->con_out_handle;
325                 efi_systab.con_out = systab64->con_out;
326                 tmp |= systab64->con_out;
327                 efi_systab.stderr_handle = systab64->stderr_handle;
328                 tmp |= systab64->stderr_handle;
329                 efi_systab.stderr = systab64->stderr;
330                 tmp |= systab64->stderr;
331                 efi_systab.runtime = data ?
332                                      (void *)(unsigned long)data->runtime :
333                                      (void *)(unsigned long)systab64->runtime;
334                 tmp |= data ? data->runtime : systab64->runtime;
335                 efi_systab.boottime = (void *)(unsigned long)systab64->boottime;
336                 tmp |= systab64->boottime;
337                 efi_systab.nr_tables = systab64->nr_tables;
338                 efi_systab.tables = data ? (unsigned long)data->tables :
339                                            systab64->tables;
340                 tmp |= data ? data->tables : systab64->tables;
341
342                 early_memunmap(systab64, sizeof(*systab64));
343                 if (data)
344                         early_memunmap(data, sizeof(*data));
345 #ifdef CONFIG_X86_32
346                 if (tmp >> 32) {
347                         pr_err("EFI data located above 4GB, disabling EFI.\n");
348                         return -EINVAL;
349                 }
350 #endif
351         } else {
352                 efi_system_table_32_t *systab32;
353
354                 systab32 = early_memremap((unsigned long)phys,
355                                          sizeof(*systab32));
356                 if (systab32 == NULL) {
357                         pr_err("Couldn't map the system table!\n");
358                         return -ENOMEM;
359                 }
360
361                 efi_systab.hdr = systab32->hdr;
362                 efi_systab.fw_vendor = systab32->fw_vendor;
363                 efi_systab.fw_revision = systab32->fw_revision;
364                 efi_systab.con_in_handle = systab32->con_in_handle;
365                 efi_systab.con_in = systab32->con_in;
366                 efi_systab.con_out_handle = systab32->con_out_handle;
367                 efi_systab.con_out = systab32->con_out;
368                 efi_systab.stderr_handle = systab32->stderr_handle;
369                 efi_systab.stderr = systab32->stderr;
370                 efi_systab.runtime = (void *)(unsigned long)systab32->runtime;
371                 efi_systab.boottime = (void *)(unsigned long)systab32->boottime;
372                 efi_systab.nr_tables = systab32->nr_tables;
373                 efi_systab.tables = systab32->tables;
374
375                 early_memunmap(systab32, sizeof(*systab32));
376         }
377
378         efi.systab = &efi_systab;
379
380         /*
381          * Verify the EFI Table
382          */
383         if (efi.systab->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) {
384                 pr_err("System table signature incorrect!\n");
385                 return -EINVAL;
386         }
387         if ((efi.systab->hdr.revision >> 16) == 0)
388                 pr_err("Warning: System table version %d.%02d, expected 1.00 or greater!\n",
389                        efi.systab->hdr.revision >> 16,
390                        efi.systab->hdr.revision & 0xffff);
391
392         return 0;
393 }
394
395 static int __init efi_runtime_init32(void)
396 {
397         efi_runtime_services_32_t *runtime;
398
399         runtime = early_memremap((unsigned long)efi.systab->runtime,
400                         sizeof(efi_runtime_services_32_t));
401         if (!runtime) {
402                 pr_err("Could not map the runtime service table!\n");
403                 return -ENOMEM;
404         }
405
406         /*
407          * We will only need *early* access to the SetVirtualAddressMap
408          * EFI runtime service. All other runtime services will be called
409          * via the virtual mapping.
410          */
411         efi_phys.set_virtual_address_map =
412                         (efi_set_virtual_address_map_t *)
413                         (unsigned long)runtime->set_virtual_address_map;
414         early_memunmap(runtime, sizeof(efi_runtime_services_32_t));
415
416         return 0;
417 }
418
419 static int __init efi_runtime_init64(void)
420 {
421         efi_runtime_services_64_t *runtime;
422
423         runtime = early_memremap((unsigned long)efi.systab->runtime,
424                         sizeof(efi_runtime_services_64_t));
425         if (!runtime) {
426                 pr_err("Could not map the runtime service table!\n");
427                 return -ENOMEM;
428         }
429
430         /*
431          * We will only need *early* access to the SetVirtualAddressMap
432          * EFI runtime service. All other runtime services will be called
433          * via the virtual mapping.
434          */
435         efi_phys.set_virtual_address_map =
436                         (efi_set_virtual_address_map_t *)
437                         (unsigned long)runtime->set_virtual_address_map;
438         early_memunmap(runtime, sizeof(efi_runtime_services_64_t));
439
440         return 0;
441 }
442
443 static int __init efi_runtime_init(void)
444 {
445         int rv;
446
447         /*
448          * Check out the runtime services table. We need to map
449          * the runtime services table so that we can grab the physical
450          * address of several of the EFI runtime functions, needed to
451          * set the firmware into virtual mode.
452          *
453          * When EFI_PARAVIRT is in force then we could not map runtime
454          * service memory region because we do not have direct access to it.
455          * However, runtime services are available through proxy functions
456          * (e.g. in case of Xen dom0 EFI implementation they call special
457          * hypercall which executes relevant EFI functions) and that is why
458          * they are always enabled.
459          */
460
461         if (!efi_enabled(EFI_PARAVIRT)) {
462                 if (efi_enabled(EFI_64BIT))
463                         rv = efi_runtime_init64();
464                 else
465                         rv = efi_runtime_init32();
466
467                 if (rv)
468                         return rv;
469         }
470
471         set_bit(EFI_RUNTIME_SERVICES, &efi.flags);
472
473         return 0;
474 }
475
476 void __init efi_init(void)
477 {
478         efi_char16_t *c16;
479         char vendor[100] = "unknown";
480         int i = 0;
481         void *tmp;
482
483 #ifdef CONFIG_X86_32
484         if (boot_params.efi_info.efi_systab_hi ||
485             boot_params.efi_info.efi_memmap_hi) {
486                 pr_info("Table located above 4GB, disabling EFI.\n");
487                 return;
488         }
489         efi_phys.systab = (efi_system_table_t *)boot_params.efi_info.efi_systab;
490 #else
491         efi_phys.systab = (efi_system_table_t *)
492                           (boot_params.efi_info.efi_systab |
493                           ((__u64)boot_params.efi_info.efi_systab_hi<<32));
494 #endif
495
496         if (efi_systab_init(efi_phys.systab))
497                 return;
498
499         efi.config_table = (unsigned long)efi.systab->tables;
500         efi.fw_vendor    = (unsigned long)efi.systab->fw_vendor;
501         efi.runtime      = (unsigned long)efi.systab->runtime;
502
503         /*
504          * Show what we know for posterity
505          */
506         c16 = tmp = early_memremap(efi.systab->fw_vendor, 2);
507         if (c16) {
508                 for (i = 0; i < sizeof(vendor) - 1 && *c16; ++i)
509                         vendor[i] = *c16++;
510                 vendor[i] = '\0';
511         } else
512                 pr_err("Could not map the firmware vendor!\n");
513         early_memunmap(tmp, 2);
514
515         pr_info("EFI v%u.%.02u by %s\n",
516                 efi.systab->hdr.revision >> 16,
517                 efi.systab->hdr.revision & 0xffff, vendor);
518
519         if (efi_reuse_config(efi.systab->tables, efi.systab->nr_tables))
520                 return;
521
522         if (efi_config_init(arch_tables))
523                 return;
524
525         /*
526          * Note: We currently don't support runtime services on an EFI
527          * that doesn't match the kernel 32/64-bit mode.
528          */
529
530         if (!efi_runtime_supported())
531                 pr_info("No EFI runtime due to 32/64-bit mismatch with kernel\n");
532         else {
533                 if (efi_runtime_disabled() || efi_runtime_init()) {
534                         efi_memmap_unmap();
535                         return;
536                 }
537         }
538
539         efi_clean_memmap();
540
541         if (efi_enabled(EFI_DBG))
542                 efi_print_memmap();
543 }
544
545 void __init efi_late_init(void)
546 {
547         efi_bgrt_init();
548 }
549
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
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
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
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 */
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
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
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  */
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  */
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
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  */
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
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
836          */
837         if (!efi_is_native()) {
838                 efi_memmap_unmap();
839                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
840                 return;
841         }
842
843         if (efi_alloc_page_tables()) {
844                 pr_err("Failed to allocate EFI page tables\n");
845                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
846                 return;
847         }
848
849         /*
850         * Map efi regions which were passed via setup_data. The virt_addr is a
851         * fixed addr which was used in first kernel of a kexec boot.
852         */
853         for_each_efi_memory_desc(md) {
854                 efi_map_region_fixed(md); /* FIXME: add error handling */
855                 get_systab_virt_addr(md);
856         }
857
858         /*
859          * Unregister the early EFI memmap from efi_init() and install
860          * the new EFI memory map.
861          */
862         efi_memmap_unmap();
863
864         if (efi_memmap_init_late(efi.memmap.phys_map,
865                                  efi.memmap.desc_size * efi.memmap.nr_map)) {
866                 pr_err("Failed to remap late EFI memory map\n");
867                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
868                 return;
869         }
870
871         BUG_ON(!efi.systab);
872
873         num_pages = ALIGN(efi.memmap.nr_map * efi.memmap.desc_size, PAGE_SIZE);
874         num_pages >>= PAGE_SHIFT;
875
876         if (efi_setup_page_tables(efi.memmap.phys_map, num_pages)) {
877                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
878                 return;
879         }
880
881         efi_sync_low_kernel_mappings();
882
883         /*
884          * Now that EFI is in virtual mode, update the function
885          * pointers in the runtime service table to the new virtual addresses.
886          *
887          * Call EFI services through wrapper functions.
888          */
889         efi.runtime_version = efi_systab.hdr.revision;
890
891         efi_native_runtime_setup();
892
893         efi.set_virtual_address_map = NULL;
894
895         if (efi_enabled(EFI_OLD_MEMMAP) && (__supported_pte_mask & _PAGE_NX))
896                 runtime_code_page_mkexec();
897
898         /* clean DUMMY object */
899         efi_delete_dummy_variable();
900 #endif
901 }
902
903 /*
904  * This function will switch the EFI runtime services to virtual mode.
905  * Essentially, we look through the EFI memmap and map every region that
906  * has the runtime attribute bit set in its memory descriptor into the
907  * efi_pgd page table.
908  *
909  * The old method which used to update that memory descriptor with the
910  * virtual address obtained from ioremap() is still supported when the
911  * kernel is booted with efi=old_map on its command line. Same old
912  * method enabled the runtime services to be called without having to
913  * thunk back into physical mode for every invocation.
914  *
915  * The new method does a pagetable switch in a preemption-safe manner
916  * so that we're in a different address space when calling a runtime
917  * function. For function arguments passing we do copy the PUDs of the
918  * kernel page table into efi_pgd prior to each call.
919  *
920  * Specially for kexec boot, efi runtime maps in previous kernel should
921  * be passed in via setup_data. In that case runtime ranges will be mapped
922  * to the same virtual addresses as the first kernel, see
923  * kexec_enter_virtual_mode().
924  */
925 static void __init __efi_enter_virtual_mode(void)
926 {
927         int count = 0, pg_shift = 0;
928         void *new_memmap = NULL;
929         efi_status_t status;
930         unsigned long pa;
931
932         efi.systab = NULL;
933
934         if (efi_alloc_page_tables()) {
935                 pr_err("Failed to allocate EFI page tables\n");
936                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
937                 return;
938         }
939
940         efi_merge_regions();
941         new_memmap = efi_map_regions(&count, &pg_shift);
942         if (!new_memmap) {
943                 pr_err("Error reallocating memory, EFI runtime non-functional!\n");
944                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
945                 return;
946         }
947
948         pa = __pa(new_memmap);
949
950         /*
951          * Unregister the early EFI memmap from efi_init() and install
952          * the new EFI memory map that we are about to pass to the
953          * firmware via SetVirtualAddressMap().
954          */
955         efi_memmap_unmap();
956
957         if (efi_memmap_init_late(pa, efi.memmap.desc_size * count)) {
958                 pr_err("Failed to remap late EFI memory map\n");
959                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
960                 return;
961         }
962
963         BUG_ON(!efi.systab);
964
965         if (efi_setup_page_tables(pa, 1 << pg_shift)) {
966                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
967                 return;
968         }
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_alert("Unable to switch EFI into virtual mode (status=%lx)!\n",
989                          status);
990                 panic("EFI call to SetVirtualAddressMap() failed!");
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         efi_dump_pagetable();
1015
1016         /* clean DUMMY object */
1017         efi_delete_dummy_variable();
1018 }
1019
1020 void __init efi_enter_virtual_mode(void)
1021 {
1022         if (efi_enabled(EFI_PARAVIRT))
1023                 return;
1024
1025         if (efi_setup)
1026                 kexec_enter_virtual_mode();
1027         else
1028                 __efi_enter_virtual_mode();
1029 }
1030
1031 /*
1032  * Convenience functions to obtain memory types and attributes
1033  */
1034 u32 efi_mem_type(unsigned long phys_addr)
1035 {
1036         efi_memory_desc_t *md;
1037
1038         if (!efi_enabled(EFI_MEMMAP))
1039                 return 0;
1040
1041         for_each_efi_memory_desc(md) {
1042                 if ((md->phys_addr <= phys_addr) &&
1043                     (phys_addr < (md->phys_addr +
1044                                   (md->num_pages << EFI_PAGE_SHIFT))))
1045                         return md->type;
1046         }
1047         return 0;
1048 }
1049
1050 static int __init arch_parse_efi_cmdline(char *str)
1051 {
1052         if (!str) {
1053                 pr_warn("need at least one option\n");
1054                 return -EINVAL;
1055         }
1056
1057         if (parse_option_str(str, "old_map"))
1058                 set_bit(EFI_OLD_MEMMAP, &efi.flags);
1059
1060         return 0;
1061 }
1062 early_param("efi", arch_parse_efi_cmdline);