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