]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - arch/x86/platform/efi/efi.c
Merge remote-tracking branches 'asoc/topic/adsp', 'asoc/topic/ak4613', 'asoc/topic...
[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_set_executable(efi_memory_desc_t *md, bool executable)
546 {
547         u64 addr, npages;
548
549         addr = md->virt_addr;
550         npages = md->num_pages;
551
552         memrange_efi_to_native(&addr, &npages);
553
554         if (executable)
555                 set_memory_x(addr, npages);
556         else
557                 set_memory_nx(addr, npages);
558 }
559
560 void __init runtime_code_page_mkexec(void)
561 {
562         efi_memory_desc_t *md;
563
564         /* Make EFI runtime service code area executable */
565         for_each_efi_memory_desc(md) {
566                 if (md->type != EFI_RUNTIME_SERVICES_CODE)
567                         continue;
568
569                 efi_set_executable(md, true);
570         }
571 }
572
573 void __init efi_memory_uc(u64 addr, unsigned long size)
574 {
575         unsigned long page_shift = 1UL << EFI_PAGE_SHIFT;
576         u64 npages;
577
578         npages = round_up(size, page_shift) / page_shift;
579         memrange_efi_to_native(&addr, &npages);
580         set_memory_uc(addr, npages);
581 }
582
583 void __init old_map_region(efi_memory_desc_t *md)
584 {
585         u64 start_pfn, end_pfn, end;
586         unsigned long size;
587         void *va;
588
589         start_pfn = PFN_DOWN(md->phys_addr);
590         size      = md->num_pages << PAGE_SHIFT;
591         end       = md->phys_addr + size;
592         end_pfn   = PFN_UP(end);
593
594         if (pfn_range_is_mapped(start_pfn, end_pfn)) {
595                 va = __va(md->phys_addr);
596
597                 if (!(md->attribute & EFI_MEMORY_WB))
598                         efi_memory_uc((u64)(unsigned long)va, size);
599         } else
600                 va = efi_ioremap(md->phys_addr, size,
601                                  md->type, md->attribute);
602
603         md->virt_addr = (u64) (unsigned long) va;
604         if (!va)
605                 pr_err("ioremap of 0x%llX failed!\n",
606                        (unsigned long long)md->phys_addr);
607 }
608
609 /* Merge contiguous regions of the same type and attribute */
610 static void __init efi_merge_regions(void)
611 {
612         efi_memory_desc_t *md, *prev_md = NULL;
613
614         for_each_efi_memory_desc(md) {
615                 u64 prev_size;
616
617                 if (!prev_md) {
618                         prev_md = md;
619                         continue;
620                 }
621
622                 if (prev_md->type != md->type ||
623                     prev_md->attribute != md->attribute) {
624                         prev_md = md;
625                         continue;
626                 }
627
628                 prev_size = prev_md->num_pages << EFI_PAGE_SHIFT;
629
630                 if (md->phys_addr == (prev_md->phys_addr + prev_size)) {
631                         prev_md->num_pages += md->num_pages;
632                         md->type = EFI_RESERVED_TYPE;
633                         md->attribute = 0;
634                         continue;
635                 }
636                 prev_md = md;
637         }
638 }
639
640 static void __init get_systab_virt_addr(efi_memory_desc_t *md)
641 {
642         unsigned long size;
643         u64 end, systab;
644
645         size = md->num_pages << EFI_PAGE_SHIFT;
646         end = md->phys_addr + size;
647         systab = (u64)(unsigned long)efi_phys.systab;
648         if (md->phys_addr <= systab && systab < end) {
649                 systab += md->virt_addr - md->phys_addr;
650                 efi.systab = (efi_system_table_t *)(unsigned long)systab;
651         }
652 }
653
654 static void *realloc_pages(void *old_memmap, int old_shift)
655 {
656         void *ret;
657
658         ret = (void *)__get_free_pages(GFP_KERNEL, old_shift + 1);
659         if (!ret)
660                 goto out;
661
662         /*
663          * A first-time allocation doesn't have anything to copy.
664          */
665         if (!old_memmap)
666                 return ret;
667
668         memcpy(ret, old_memmap, PAGE_SIZE << old_shift);
669
670 out:
671         free_pages((unsigned long)old_memmap, old_shift);
672         return ret;
673 }
674
675 /*
676  * Iterate the EFI memory map in reverse order because the regions
677  * will be mapped top-down. The end result is the same as if we had
678  * mapped things forward, but doesn't require us to change the
679  * existing implementation of efi_map_region().
680  */
681 static inline void *efi_map_next_entry_reverse(void *entry)
682 {
683         /* Initial call */
684         if (!entry)
685                 return efi.memmap.map_end - efi.memmap.desc_size;
686
687         entry -= efi.memmap.desc_size;
688         if (entry < efi.memmap.map)
689                 return NULL;
690
691         return entry;
692 }
693
694 /*
695  * efi_map_next_entry - Return the next EFI memory map descriptor
696  * @entry: Previous EFI memory map descriptor
697  *
698  * This is a helper function to iterate over the EFI memory map, which
699  * we do in different orders depending on the current configuration.
700  *
701  * To begin traversing the memory map @entry must be %NULL.
702  *
703  * Returns %NULL when we reach the end of the memory map.
704  */
705 static void *efi_map_next_entry(void *entry)
706 {
707         if (!efi_enabled(EFI_OLD_MEMMAP) && efi_enabled(EFI_64BIT)) {
708                 /*
709                  * Starting in UEFI v2.5 the EFI_PROPERTIES_TABLE
710                  * config table feature requires us to map all entries
711                  * in the same order as they appear in the EFI memory
712                  * map. That is to say, entry N must have a lower
713                  * virtual address than entry N+1. This is because the
714                  * firmware toolchain leaves relative references in
715                  * the code/data sections, which are split and become
716                  * separate EFI memory regions. Mapping things
717                  * out-of-order leads to the firmware accessing
718                  * unmapped addresses.
719                  *
720                  * Since we need to map things this way whether or not
721                  * the kernel actually makes use of
722                  * EFI_PROPERTIES_TABLE, let's just switch to this
723                  * scheme by default for 64-bit.
724                  */
725                 return efi_map_next_entry_reverse(entry);
726         }
727
728         /* Initial call */
729         if (!entry)
730                 return efi.memmap.map;
731
732         entry += efi.memmap.desc_size;
733         if (entry >= efi.memmap.map_end)
734                 return NULL;
735
736         return entry;
737 }
738
739 static bool should_map_region(efi_memory_desc_t *md)
740 {
741         /*
742          * Runtime regions always require runtime mappings (obviously).
743          */
744         if (md->attribute & EFI_MEMORY_RUNTIME)
745                 return true;
746
747         /*
748          * 32-bit EFI doesn't suffer from the bug that requires us to
749          * reserve boot services regions, and mixed mode support
750          * doesn't exist for 32-bit kernels.
751          */
752         if (IS_ENABLED(CONFIG_X86_32))
753                 return false;
754
755         /*
756          * Map all of RAM so that we can access arguments in the 1:1
757          * mapping when making EFI runtime calls.
758          */
759         if (IS_ENABLED(CONFIG_EFI_MIXED) && !efi_is_native()) {
760                 if (md->type == EFI_CONVENTIONAL_MEMORY ||
761                     md->type == EFI_LOADER_DATA ||
762                     md->type == EFI_LOADER_CODE)
763                         return true;
764         }
765
766         /*
767          * Map boot services regions as a workaround for buggy
768          * firmware that accesses them even when they shouldn't.
769          *
770          * See efi_{reserve,free}_boot_services().
771          */
772         if (md->type == EFI_BOOT_SERVICES_CODE ||
773             md->type == EFI_BOOT_SERVICES_DATA)
774                 return true;
775
776         return false;
777 }
778
779 /*
780  * Map the efi memory ranges of the runtime services and update new_mmap with
781  * virtual addresses.
782  */
783 static void * __init efi_map_regions(int *count, int *pg_shift)
784 {
785         void *p, *new_memmap = NULL;
786         unsigned long left = 0;
787         unsigned long desc_size;
788         efi_memory_desc_t *md;
789
790         desc_size = efi.memmap.desc_size;
791
792         p = NULL;
793         while ((p = efi_map_next_entry(p))) {
794                 md = p;
795
796                 if (!should_map_region(md))
797                         continue;
798
799                 efi_map_region(md);
800                 get_systab_virt_addr(md);
801
802                 if (left < desc_size) {
803                         new_memmap = realloc_pages(new_memmap, *pg_shift);
804                         if (!new_memmap)
805                                 return NULL;
806
807                         left += PAGE_SIZE << *pg_shift;
808                         (*pg_shift)++;
809                 }
810
811                 memcpy(new_memmap + (*count * desc_size), md, desc_size);
812
813                 left -= desc_size;
814                 (*count)++;
815         }
816
817         return new_memmap;
818 }
819
820 static void __init kexec_enter_virtual_mode(void)
821 {
822 #ifdef CONFIG_KEXEC_CORE
823         efi_memory_desc_t *md;
824         unsigned int num_pages;
825
826         efi.systab = NULL;
827
828         /*
829          * We don't do virtual mode, since we don't do runtime services, on
830          * non-native EFI
831          */
832         if (!efi_is_native()) {
833                 efi_memmap_unmap();
834                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
835                 return;
836         }
837
838         if (efi_alloc_page_tables()) {
839                 pr_err("Failed to allocate EFI page tables\n");
840                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
841                 return;
842         }
843
844         /*
845         * Map efi regions which were passed via setup_data. The virt_addr is a
846         * fixed addr which was used in first kernel of a kexec boot.
847         */
848         for_each_efi_memory_desc(md) {
849                 efi_map_region_fixed(md); /* FIXME: add error handling */
850                 get_systab_virt_addr(md);
851         }
852
853         /*
854          * Unregister the early EFI memmap from efi_init() and install
855          * the new EFI memory map.
856          */
857         efi_memmap_unmap();
858
859         if (efi_memmap_init_late(efi.memmap.phys_map,
860                                  efi.memmap.desc_size * efi.memmap.nr_map)) {
861                 pr_err("Failed to remap late EFI memory map\n");
862                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
863                 return;
864         }
865
866         BUG_ON(!efi.systab);
867
868         num_pages = ALIGN(efi.memmap.nr_map * efi.memmap.desc_size, PAGE_SIZE);
869         num_pages >>= PAGE_SHIFT;
870
871         if (efi_setup_page_tables(efi.memmap.phys_map, num_pages)) {
872                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
873                 return;
874         }
875
876         efi_sync_low_kernel_mappings();
877
878         /*
879          * Now that EFI is in virtual mode, update the function
880          * pointers in the runtime service table to the new virtual addresses.
881          *
882          * Call EFI services through wrapper functions.
883          */
884         efi.runtime_version = efi_systab.hdr.revision;
885
886         efi_native_runtime_setup();
887
888         efi.set_virtual_address_map = NULL;
889
890         if (efi_enabled(EFI_OLD_MEMMAP) && (__supported_pte_mask & _PAGE_NX))
891                 runtime_code_page_mkexec();
892
893         /* clean DUMMY object */
894         efi_delete_dummy_variable();
895 #endif
896 }
897
898 /*
899  * This function will switch the EFI runtime services to virtual mode.
900  * Essentially, we look through the EFI memmap and map every region that
901  * has the runtime attribute bit set in its memory descriptor into the
902  * efi_pgd page table.
903  *
904  * The old method which used to update that memory descriptor with the
905  * virtual address obtained from ioremap() is still supported when the
906  * kernel is booted with efi=old_map on its command line. Same old
907  * method enabled the runtime services to be called without having to
908  * thunk back into physical mode for every invocation.
909  *
910  * The new method does a pagetable switch in a preemption-safe manner
911  * so that we're in a different address space when calling a runtime
912  * function. For function arguments passing we do copy the PUDs of the
913  * kernel page table into efi_pgd prior to each call.
914  *
915  * Specially for kexec boot, efi runtime maps in previous kernel should
916  * be passed in via setup_data. In that case runtime ranges will be mapped
917  * to the same virtual addresses as the first kernel, see
918  * kexec_enter_virtual_mode().
919  */
920 static void __init __efi_enter_virtual_mode(void)
921 {
922         int count = 0, pg_shift = 0;
923         void *new_memmap = NULL;
924         efi_status_t status;
925         unsigned long pa;
926
927         efi.systab = NULL;
928
929         if (efi_alloc_page_tables()) {
930                 pr_err("Failed to allocate EFI page tables\n");
931                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
932                 return;
933         }
934
935         efi_merge_regions();
936         new_memmap = efi_map_regions(&count, &pg_shift);
937         if (!new_memmap) {
938                 pr_err("Error reallocating memory, EFI runtime non-functional!\n");
939                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
940                 return;
941         }
942
943         pa = __pa(new_memmap);
944
945         /*
946          * Unregister the early EFI memmap from efi_init() and install
947          * the new EFI memory map that we are about to pass to the
948          * firmware via SetVirtualAddressMap().
949          */
950         efi_memmap_unmap();
951
952         if (efi_memmap_init_late(pa, efi.memmap.desc_size * count)) {
953                 pr_err("Failed to remap late EFI memory map\n");
954                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
955                 return;
956         }
957
958         if (efi_enabled(EFI_DBG)) {
959                 pr_info("EFI runtime memory map:\n");
960                 efi_print_memmap();
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);