0a8117865430a70a13b918001d5e2a6162490ae4
[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 unsigned long efi_systab_phys __initdata;
58 static unsigned long prop_phys = EFI_INVALID_TABLE_ADDR;
59 static unsigned long uga_phys = EFI_INVALID_TABLE_ADDR;
60 static unsigned long efi_runtime, efi_nr_tables;
61
62 unsigned long efi_fw_vendor, efi_config_table;
63
64 static const efi_config_table_type_t arch_tables[] __initconst = {
65         {EFI_PROPERTIES_TABLE_GUID, "PROP", &prop_phys},
66         {UGA_IO_PROTOCOL_GUID, "UGA", &uga_phys},
67 #ifdef CONFIG_X86_UV
68         {UV_SYSTEM_TABLE_GUID, "UVsystab", &uv_systab_phys},
69 #endif
70         {NULL_GUID, NULL, NULL},
71 };
72
73 static const unsigned long * const efi_tables[] = {
74         &efi.acpi,
75         &efi.acpi20,
76         &efi.smbios,
77         &efi.smbios3,
78         &uga_phys,
79 #ifdef CONFIG_X86_UV
80         &uv_systab_phys,
81 #endif
82         &efi_fw_vendor,
83         &efi_runtime,
84         &efi_config_table,
85         &efi.esrt,
86         &prop_phys,
87         &efi_mem_attr_table,
88 #ifdef CONFIG_EFI_RCI2_TABLE
89         &rci2_table_phys,
90 #endif
91         &efi.tpm_log,
92         &efi.tpm_final_log,
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
249         return 0;
250 }
251
252 #define OVERFLOW_ADDR_SHIFT     (64 - EFI_PAGE_SHIFT)
253 #define OVERFLOW_ADDR_MASK      (U64_MAX << OVERFLOW_ADDR_SHIFT)
254 #define U64_HIGH_BIT            (~(U64_MAX >> 1))
255
256 static bool __init efi_memmap_entry_valid(const efi_memory_desc_t *md, int i)
257 {
258         u64 end = (md->num_pages << EFI_PAGE_SHIFT) + md->phys_addr - 1;
259         u64 end_hi = 0;
260         char buf[64];
261
262         if (md->num_pages == 0) {
263                 end = 0;
264         } else if (md->num_pages > EFI_PAGES_MAX ||
265                    EFI_PAGES_MAX - md->num_pages <
266                    (md->phys_addr >> EFI_PAGE_SHIFT)) {
267                 end_hi = (md->num_pages & OVERFLOW_ADDR_MASK)
268                         >> OVERFLOW_ADDR_SHIFT;
269
270                 if ((md->phys_addr & U64_HIGH_BIT) && !(end & U64_HIGH_BIT))
271                         end_hi += 1;
272         } else {
273                 return true;
274         }
275
276         pr_warn_once(FW_BUG "Invalid EFI memory map entries:\n");
277
278         if (end_hi) {
279                 pr_warn("mem%02u: %s range=[0x%016llx-0x%llx%016llx] (invalid)\n",
280                         i, efi_md_typeattr_format(buf, sizeof(buf), md),
281                         md->phys_addr, end_hi, end);
282         } else {
283                 pr_warn("mem%02u: %s range=[0x%016llx-0x%016llx] (invalid)\n",
284                         i, efi_md_typeattr_format(buf, sizeof(buf), md),
285                         md->phys_addr, end);
286         }
287         return false;
288 }
289
290 static void __init efi_clean_memmap(void)
291 {
292         efi_memory_desc_t *out = efi.memmap.map;
293         const efi_memory_desc_t *in = out;
294         const efi_memory_desc_t *end = efi.memmap.map_end;
295         int i, n_removal;
296
297         for (i = n_removal = 0; in < end; i++) {
298                 if (efi_memmap_entry_valid(in, i)) {
299                         if (out != in)
300                                 memcpy(out, in, efi.memmap.desc_size);
301                         out = (void *)out + efi.memmap.desc_size;
302                 } else {
303                         n_removal++;
304                 }
305                 in = (void *)in + efi.memmap.desc_size;
306         }
307
308         if (n_removal > 0) {
309                 struct efi_memory_map_data data = {
310                         .phys_map       = efi.memmap.phys_map,
311                         .desc_version   = efi.memmap.desc_version,
312                         .desc_size      = efi.memmap.desc_size,
313                         .size           = efi.memmap.desc_size * (efi.memmap.nr_map - n_removal),
314                         .flags          = 0,
315                 };
316
317                 pr_warn("Removing %d invalid memory map entries.\n", n_removal);
318                 efi_memmap_install(&data);
319         }
320 }
321
322 void __init efi_print_memmap(void)
323 {
324         efi_memory_desc_t *md;
325         int i = 0;
326
327         for_each_efi_memory_desc(md) {
328                 char buf[64];
329
330                 pr_info("mem%02u: %s range=[0x%016llx-0x%016llx] (%lluMB)\n",
331                         i++, efi_md_typeattr_format(buf, sizeof(buf), md),
332                         md->phys_addr,
333                         md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1,
334                         (md->num_pages >> (20 - EFI_PAGE_SHIFT)));
335         }
336 }
337
338 static int __init efi_systab_init(unsigned long phys)
339 {
340         int size = efi_enabled(EFI_64BIT) ? sizeof(efi_system_table_64_t)
341                                           : sizeof(efi_system_table_32_t);
342         const efi_table_hdr_t *hdr;
343         bool over4g = false;
344         void *p;
345         int ret;
346
347         hdr = p = early_memremap_ro(phys, size);
348         if (p == NULL) {
349                 pr_err("Couldn't map the system table!\n");
350                 return -ENOMEM;
351         }
352
353         ret = efi_systab_check_header(hdr, 1);
354         if (ret) {
355                 early_memunmap(p, size);
356                 return ret;
357         }
358
359         if (efi_enabled(EFI_64BIT)) {
360                 const efi_system_table_64_t *systab64 = p;
361
362                 efi_runtime     = systab64->runtime;
363                 over4g          = systab64->runtime > U32_MAX;
364
365                 if (efi_setup) {
366                         struct efi_setup_data *data;
367
368                         data = early_memremap_ro(efi_setup, sizeof(*data));
369                         if (!data) {
370                                 early_memunmap(p, size);
371                                 return -ENOMEM;
372                         }
373
374                         efi_fw_vendor           = (unsigned long)data->fw_vendor;
375                         efi_config_table        = (unsigned long)data->tables;
376
377                         over4g |= data->fw_vendor       > U32_MAX ||
378                                   data->tables          > U32_MAX;
379
380                         early_memunmap(data, sizeof(*data));
381                 } else {
382                         efi_fw_vendor           = systab64->fw_vendor;
383                         efi_config_table        = systab64->tables;
384
385                         over4g |= systab64->fw_vendor   > U32_MAX ||
386                                   systab64->tables      > U32_MAX;
387                 }
388                 efi_nr_tables = systab64->nr_tables;
389         } else {
390                 const efi_system_table_32_t *systab32 = p;
391
392                 efi_fw_vendor           = systab32->fw_vendor;
393                 efi_runtime             = systab32->runtime;
394                 efi_config_table        = systab32->tables;
395                 efi_nr_tables           = systab32->nr_tables;
396         }
397
398         efi.runtime_version = hdr->revision;
399
400         efi_systab_report_header(hdr, efi_fw_vendor);
401         early_memunmap(p, size);
402
403         if (IS_ENABLED(CONFIG_X86_32) && over4g) {
404                 pr_err("EFI data located above 4GB, disabling EFI.\n");
405                 return -EINVAL;
406         }
407
408         return 0;
409 }
410
411 static int __init efi_config_init(const efi_config_table_type_t *arch_tables)
412 {
413         void *config_tables;
414         int sz, ret;
415
416         if (efi_nr_tables == 0)
417                 return 0;
418
419         if (efi_enabled(EFI_64BIT))
420                 sz = sizeof(efi_config_table_64_t);
421         else
422                 sz = sizeof(efi_config_table_32_t);
423
424         /*
425          * Let's see what config tables the firmware passed to us.
426          */
427         config_tables = early_memremap(efi_config_table, efi_nr_tables * sz);
428         if (config_tables == NULL) {
429                 pr_err("Could not map Configuration table!\n");
430                 return -ENOMEM;
431         }
432
433         ret = efi_config_parse_tables(config_tables, efi_nr_tables,
434                                       arch_tables);
435
436         early_memunmap(config_tables, efi_nr_tables * sz);
437         return ret;
438 }
439
440 void __init efi_init(void)
441 {
442         if (IS_ENABLED(CONFIG_X86_32) &&
443             (boot_params.efi_info.efi_systab_hi ||
444              boot_params.efi_info.efi_memmap_hi)) {
445                 pr_info("Table located above 4GB, disabling EFI.\n");
446                 return;
447         }
448
449         efi_systab_phys = boot_params.efi_info.efi_systab |
450                           ((__u64)boot_params.efi_info.efi_systab_hi << 32);
451
452         if (efi_systab_init(efi_systab_phys))
453                 return;
454
455         if (efi_reuse_config(efi_config_table, efi_nr_tables))
456                 return;
457
458         if (efi_config_init(arch_tables))
459                 return;
460
461         /*
462          * Note: We currently don't support runtime services on an EFI
463          * that doesn't match the kernel 32/64-bit mode.
464          */
465
466         if (!efi_runtime_supported())
467                 pr_info("No EFI runtime due to 32/64-bit mismatch with kernel\n");
468
469         if (!efi_runtime_supported() || efi_runtime_disabled()) {
470                 efi_memmap_unmap();
471                 return;
472         }
473
474         /* Parse the EFI Properties table if it exists */
475         if (prop_phys != EFI_INVALID_TABLE_ADDR) {
476                 efi_properties_table_t *tbl;
477
478                 tbl = early_memremap_ro(prop_phys, sizeof(*tbl));
479                 if (tbl == NULL) {
480                         pr_err("Could not map Properties table!\n");
481                 } else {
482                         if (tbl->memory_protection_attribute &
483                             EFI_PROPERTIES_RUNTIME_MEMORY_PROTECTION_NON_EXECUTABLE_PE_DATA)
484                                 set_bit(EFI_NX_PE_DATA, &efi.flags);
485
486                         early_memunmap(tbl, sizeof(*tbl));
487                 }
488         }
489
490         set_bit(EFI_RUNTIME_SERVICES, &efi.flags);
491         efi_clean_memmap();
492
493         if (efi_enabled(EFI_DBG))
494                 efi_print_memmap();
495 }
496
497 #if defined(CONFIG_X86_32) || defined(CONFIG_X86_UV)
498
499 void __init efi_set_executable(efi_memory_desc_t *md, bool executable)
500 {
501         u64 addr, npages;
502
503         addr = md->virt_addr;
504         npages = md->num_pages;
505
506         memrange_efi_to_native(&addr, &npages);
507
508         if (executable)
509                 set_memory_x(addr, npages);
510         else
511                 set_memory_nx(addr, npages);
512 }
513
514 void __init runtime_code_page_mkexec(void)
515 {
516         efi_memory_desc_t *md;
517
518         /* Make EFI runtime service code area executable */
519         for_each_efi_memory_desc(md) {
520                 if (md->type != EFI_RUNTIME_SERVICES_CODE)
521                         continue;
522
523                 efi_set_executable(md, true);
524         }
525 }
526
527 void __init efi_memory_uc(u64 addr, unsigned long size)
528 {
529         unsigned long page_shift = 1UL << EFI_PAGE_SHIFT;
530         u64 npages;
531
532         npages = round_up(size, page_shift) / page_shift;
533         memrange_efi_to_native(&addr, &npages);
534         set_memory_uc(addr, npages);
535 }
536
537 void __init old_map_region(efi_memory_desc_t *md)
538 {
539         u64 start_pfn, end_pfn, end;
540         unsigned long size;
541         void *va;
542
543         start_pfn = PFN_DOWN(md->phys_addr);
544         size      = md->num_pages << PAGE_SHIFT;
545         end       = md->phys_addr + size;
546         end_pfn   = PFN_UP(end);
547
548         if (pfn_range_is_mapped(start_pfn, end_pfn)) {
549                 va = __va(md->phys_addr);
550
551                 if (!(md->attribute & EFI_MEMORY_WB))
552                         efi_memory_uc((u64)(unsigned long)va, size);
553         } else
554                 va = efi_ioremap(md->phys_addr, size,
555                                  md->type, md->attribute);
556
557         md->virt_addr = (u64) (unsigned long) va;
558         if (!va)
559                 pr_err("ioremap of 0x%llX failed!\n",
560                        (unsigned long long)md->phys_addr);
561 }
562
563 #endif
564
565 /* Merge contiguous regions of the same type and attribute */
566 static void __init efi_merge_regions(void)
567 {
568         efi_memory_desc_t *md, *prev_md = NULL;
569
570         for_each_efi_memory_desc(md) {
571                 u64 prev_size;
572
573                 if (!prev_md) {
574                         prev_md = md;
575                         continue;
576                 }
577
578                 if (prev_md->type != md->type ||
579                     prev_md->attribute != md->attribute) {
580                         prev_md = md;
581                         continue;
582                 }
583
584                 prev_size = prev_md->num_pages << EFI_PAGE_SHIFT;
585
586                 if (md->phys_addr == (prev_md->phys_addr + prev_size)) {
587                         prev_md->num_pages += md->num_pages;
588                         md->type = EFI_RESERVED_TYPE;
589                         md->attribute = 0;
590                         continue;
591                 }
592                 prev_md = md;
593         }
594 }
595
596 static void *realloc_pages(void *old_memmap, int old_shift)
597 {
598         void *ret;
599
600         ret = (void *)__get_free_pages(GFP_KERNEL, old_shift + 1);
601         if (!ret)
602                 goto out;
603
604         /*
605          * A first-time allocation doesn't have anything to copy.
606          */
607         if (!old_memmap)
608                 return ret;
609
610         memcpy(ret, old_memmap, PAGE_SIZE << old_shift);
611
612 out:
613         free_pages((unsigned long)old_memmap, old_shift);
614         return ret;
615 }
616
617 /*
618  * Iterate the EFI memory map in reverse order because the regions
619  * will be mapped top-down. The end result is the same as if we had
620  * mapped things forward, but doesn't require us to change the
621  * existing implementation of efi_map_region().
622  */
623 static inline void *efi_map_next_entry_reverse(void *entry)
624 {
625         /* Initial call */
626         if (!entry)
627                 return efi.memmap.map_end - efi.memmap.desc_size;
628
629         entry -= efi.memmap.desc_size;
630         if (entry < efi.memmap.map)
631                 return NULL;
632
633         return entry;
634 }
635
636 /*
637  * efi_map_next_entry - Return the next EFI memory map descriptor
638  * @entry: Previous EFI memory map descriptor
639  *
640  * This is a helper function to iterate over the EFI memory map, which
641  * we do in different orders depending on the current configuration.
642  *
643  * To begin traversing the memory map @entry must be %NULL.
644  *
645  * Returns %NULL when we reach the end of the memory map.
646  */
647 static void *efi_map_next_entry(void *entry)
648 {
649         if (!efi_have_uv1_memmap() && efi_enabled(EFI_64BIT)) {
650                 /*
651                  * Starting in UEFI v2.5 the EFI_PROPERTIES_TABLE
652                  * config table feature requires us to map all entries
653                  * in the same order as they appear in the EFI memory
654                  * map. That is to say, entry N must have a lower
655                  * virtual address than entry N+1. This is because the
656                  * firmware toolchain leaves relative references in
657                  * the code/data sections, which are split and become
658                  * separate EFI memory regions. Mapping things
659                  * out-of-order leads to the firmware accessing
660                  * unmapped addresses.
661                  *
662                  * Since we need to map things this way whether or not
663                  * the kernel actually makes use of
664                  * EFI_PROPERTIES_TABLE, let's just switch to this
665                  * scheme by default for 64-bit.
666                  */
667                 return efi_map_next_entry_reverse(entry);
668         }
669
670         /* Initial call */
671         if (!entry)
672                 return efi.memmap.map;
673
674         entry += efi.memmap.desc_size;
675         if (entry >= efi.memmap.map_end)
676                 return NULL;
677
678         return entry;
679 }
680
681 static bool should_map_region(efi_memory_desc_t *md)
682 {
683         /*
684          * Runtime regions always require runtime mappings (obviously).
685          */
686         if (md->attribute & EFI_MEMORY_RUNTIME)
687                 return true;
688
689         /*
690          * 32-bit EFI doesn't suffer from the bug that requires us to
691          * reserve boot services regions, and mixed mode support
692          * doesn't exist for 32-bit kernels.
693          */
694         if (IS_ENABLED(CONFIG_X86_32))
695                 return false;
696
697         /*
698          * EFI specific purpose memory may be reserved by default
699          * depending on kernel config and boot options.
700          */
701         if (md->type == EFI_CONVENTIONAL_MEMORY &&
702             efi_soft_reserve_enabled() &&
703             (md->attribute & EFI_MEMORY_SP))
704                 return false;
705
706         /*
707          * Map all of RAM so that we can access arguments in the 1:1
708          * mapping when making EFI runtime calls.
709          */
710         if (efi_is_mixed()) {
711                 if (md->type == EFI_CONVENTIONAL_MEMORY ||
712                     md->type == EFI_LOADER_DATA ||
713                     md->type == EFI_LOADER_CODE)
714                         return true;
715         }
716
717         /*
718          * Map boot services regions as a workaround for buggy
719          * firmware that accesses them even when they shouldn't.
720          *
721          * See efi_{reserve,free}_boot_services().
722          */
723         if (md->type == EFI_BOOT_SERVICES_CODE ||
724             md->type == EFI_BOOT_SERVICES_DATA)
725                 return true;
726
727         return false;
728 }
729
730 /*
731  * Map the efi memory ranges of the runtime services and update new_mmap with
732  * virtual addresses.
733  */
734 static void * __init efi_map_regions(int *count, int *pg_shift)
735 {
736         void *p, *new_memmap = NULL;
737         unsigned long left = 0;
738         unsigned long desc_size;
739         efi_memory_desc_t *md;
740
741         desc_size = efi.memmap.desc_size;
742
743         p = NULL;
744         while ((p = efi_map_next_entry(p))) {
745                 md = p;
746
747                 if (!should_map_region(md))
748                         continue;
749
750                 efi_map_region(md);
751
752                 if (left < desc_size) {
753                         new_memmap = realloc_pages(new_memmap, *pg_shift);
754                         if (!new_memmap)
755                                 return NULL;
756
757                         left += PAGE_SIZE << *pg_shift;
758                         (*pg_shift)++;
759                 }
760
761                 memcpy(new_memmap + (*count * desc_size), md, desc_size);
762
763                 left -= desc_size;
764                 (*count)++;
765         }
766
767         return new_memmap;
768 }
769
770 static void __init kexec_enter_virtual_mode(void)
771 {
772 #ifdef CONFIG_KEXEC_CORE
773         efi_memory_desc_t *md;
774         unsigned int num_pages;
775
776         /*
777          * We don't do virtual mode, since we don't do runtime services, on
778          * non-native EFI. With the UV1 memmap, we don't do runtime services in
779          * kexec kernel because in the initial boot something else might
780          * have been mapped at these virtual addresses.
781          */
782         if (efi_is_mixed() || efi_have_uv1_memmap()) {
783                 efi_memmap_unmap();
784                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
785                 return;
786         }
787
788         if (efi_alloc_page_tables()) {
789                 pr_err("Failed to allocate EFI page tables\n");
790                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
791                 return;
792         }
793
794         /*
795         * Map efi regions which were passed via setup_data. The virt_addr is a
796         * fixed addr which was used in first kernel of a kexec boot.
797         */
798         for_each_efi_memory_desc(md)
799                 efi_map_region_fixed(md); /* FIXME: add error handling */
800
801         /*
802          * Unregister the early EFI memmap from efi_init() and install
803          * the new EFI memory map.
804          */
805         efi_memmap_unmap();
806
807         if (efi_memmap_init_late(efi.memmap.phys_map,
808                                  efi.memmap.desc_size * efi.memmap.nr_map)) {
809                 pr_err("Failed to remap late EFI memory map\n");
810                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
811                 return;
812         }
813
814         num_pages = ALIGN(efi.memmap.nr_map * efi.memmap.desc_size, PAGE_SIZE);
815         num_pages >>= PAGE_SHIFT;
816
817         if (efi_setup_page_tables(efi.memmap.phys_map, num_pages)) {
818                 clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
819                 return;
820         }
821
822         efi_sync_low_kernel_mappings();
823         efi_native_runtime_setup();
824 #endif
825 }
826
827 /*
828  * This function will switch the EFI runtime services to virtual mode.
829  * Essentially, we look through the EFI memmap and map every region that
830  * has the runtime attribute bit set in its memory descriptor into the
831  * efi_pgd page table.
832  *
833  * The old method which used to update that memory descriptor with the
834  * virtual address obtained from ioremap() is still supported when the
835  * kernel is booted on SG1 UV1 hardware. Same old method enabled the
836  * runtime services to be called without having to thunk back into
837  * physical mode for every invocation.
838  *
839  * The new method does a pagetable switch in a preemption-safe manner
840  * so that we're in a different address space when calling a runtime
841  * function. For function arguments passing we do copy the PUDs of the
842  * kernel page table into efi_pgd prior to each call.
843  *
844  * Specially for kexec boot, efi runtime maps in previous kernel should
845  * be passed in via setup_data. In that case runtime ranges will be mapped
846  * to the same virtual addresses as the first kernel, see
847  * kexec_enter_virtual_mode().
848  */
849 static void __init __efi_enter_virtual_mode(void)
850 {
851         int count = 0, pg_shift = 0;
852         void *new_memmap = NULL;
853         efi_status_t status;
854         unsigned long pa;
855
856         if (efi_alloc_page_tables()) {
857                 pr_err("Failed to allocate EFI page tables\n");
858                 goto err;
859         }
860
861         efi_merge_regions();
862         new_memmap = efi_map_regions(&count, &pg_shift);
863         if (!new_memmap) {
864                 pr_err("Error reallocating memory, EFI runtime non-functional!\n");
865                 goto err;
866         }
867
868         pa = __pa(new_memmap);
869
870         /*
871          * Unregister the early EFI memmap from efi_init() and install
872          * the new EFI memory map that we are about to pass to the
873          * firmware via SetVirtualAddressMap().
874          */
875         efi_memmap_unmap();
876
877         if (efi_memmap_init_late(pa, efi.memmap.desc_size * count)) {
878                 pr_err("Failed to remap late EFI memory map\n");
879                 goto err;
880         }
881
882         if (efi_enabled(EFI_DBG)) {
883                 pr_info("EFI runtime memory map:\n");
884                 efi_print_memmap();
885         }
886
887         if (efi_setup_page_tables(pa, 1 << pg_shift))
888                 goto err;
889
890         efi_sync_low_kernel_mappings();
891
892         status = efi_set_virtual_address_map(efi.memmap.desc_size * count,
893                                              efi.memmap.desc_size,
894                                              efi.memmap.desc_version,
895                                              (efi_memory_desc_t *)pa,
896                                              efi_systab_phys);
897         if (status != EFI_SUCCESS) {
898                 pr_err("Unable to switch EFI into virtual mode (status=%lx)!\n",
899                        status);
900                 goto err;
901         }
902
903         efi_free_boot_services();
904
905         if (!efi_is_mixed())
906                 efi_native_runtime_setup();
907         else
908                 efi_thunk_runtime_setup();
909
910         /*
911          * Apply more restrictive page table mapping attributes now that
912          * SVAM() has been called and the firmware has performed all
913          * necessary relocation fixups for the new virtual addresses.
914          */
915         efi_runtime_update_mappings();
916
917         /* clean DUMMY object */
918         efi_delete_dummy_variable();
919         return;
920
921 err:
922         clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
923 }
924
925 void __init efi_enter_virtual_mode(void)
926 {
927         if (efi_enabled(EFI_PARAVIRT))
928                 return;
929
930         efi.runtime = (efi_runtime_services_t *)efi_runtime;
931
932         if (efi_setup)
933                 kexec_enter_virtual_mode();
934         else
935                 __efi_enter_virtual_mode();
936
937         efi_dump_pagetable();
938 }
939
940 bool efi_is_table_address(unsigned long phys_addr)
941 {
942         unsigned int i;
943
944         if (phys_addr == EFI_INVALID_TABLE_ADDR)
945                 return false;
946
947         for (i = 0; i < ARRAY_SIZE(efi_tables); i++)
948                 if (*(efi_tables[i]) == phys_addr)
949                         return true;
950
951         return false;
952 }
953
954 char *efi_systab_show_arch(char *str)
955 {
956         if (uga_phys != EFI_INVALID_TABLE_ADDR)
957                 str += sprintf(str, "UGA=0x%lx\n", uga_phys);
958         return str;
959 }
960
961 #define EFI_FIELD(var) efi_ ## var
962
963 #define EFI_ATTR_SHOW(name) \
964 static ssize_t name##_show(struct kobject *kobj, \
965                                 struct kobj_attribute *attr, char *buf) \
966 { \
967         return sprintf(buf, "0x%lx\n", EFI_FIELD(name)); \
968 }
969
970 EFI_ATTR_SHOW(fw_vendor);
971 EFI_ATTR_SHOW(runtime);
972 EFI_ATTR_SHOW(config_table);
973
974 struct kobj_attribute efi_attr_fw_vendor = __ATTR_RO(fw_vendor);
975 struct kobj_attribute efi_attr_runtime = __ATTR_RO(runtime);
976 struct kobj_attribute efi_attr_config_table = __ATTR_RO(config_table);
977
978 umode_t efi_attr_is_visible(struct kobject *kobj, struct attribute *attr, int n)
979 {
980         if (attr == &efi_attr_fw_vendor.attr) {
981                 if (efi_enabled(EFI_PARAVIRT) ||
982                                 efi_fw_vendor == EFI_INVALID_TABLE_ADDR)
983                         return 0;
984         } else if (attr == &efi_attr_runtime.attr) {
985                 if (efi_runtime == EFI_INVALID_TABLE_ADDR)
986                         return 0;
987         } else if (attr == &efi_attr_config_table.attr) {
988                 if (efi_config_table == EFI_INVALID_TABLE_ADDR)
989                         return 0;
990         }
991         return attr->mode;
992 }