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