Merge tag 'exfat-for-5.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkin...
[linux-2.6-microblaze.git] / drivers / firmware / efi / efi.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * efi.c - EFI subsystem
4  *
5  * Copyright (C) 2001,2003,2004 Dell <Matt_Domsch@dell.com>
6  * Copyright (C) 2004 Intel Corporation <matthew.e.tolentino@intel.com>
7  * Copyright (C) 2013 Tom Gundersen <teg@jklm.no>
8  *
9  * This code registers /sys/firmware/efi{,/efivars} when EFI is supported,
10  * allowing the efivarfs to be mounted or the efivars module to be loaded.
11  * The existance of /sys/firmware/efi may also be used by userspace to
12  * determine that the system supports EFI.
13  */
14
15 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16
17 #include <linux/kobject.h>
18 #include <linux/module.h>
19 #include <linux/init.h>
20 #include <linux/debugfs.h>
21 #include <linux/device.h>
22 #include <linux/efi.h>
23 #include <linux/of.h>
24 #include <linux/io.h>
25 #include <linux/kexec.h>
26 #include <linux/platform_device.h>
27 #include <linux/random.h>
28 #include <linux/reboot.h>
29 #include <linux/slab.h>
30 #include <linux/acpi.h>
31 #include <linux/ucs2_string.h>
32 #include <linux/memblock.h>
33 #include <linux/security.h>
34
35 #include <asm/early_ioremap.h>
36
37 struct efi __read_mostly efi = {
38         .runtime_supported_mask = EFI_RT_SUPPORTED_ALL,
39         .acpi                   = EFI_INVALID_TABLE_ADDR,
40         .acpi20                 = EFI_INVALID_TABLE_ADDR,
41         .smbios                 = EFI_INVALID_TABLE_ADDR,
42         .smbios3                = EFI_INVALID_TABLE_ADDR,
43         .esrt                   = EFI_INVALID_TABLE_ADDR,
44         .tpm_log                = EFI_INVALID_TABLE_ADDR,
45         .tpm_final_log          = EFI_INVALID_TABLE_ADDR,
46 };
47 EXPORT_SYMBOL(efi);
48
49 unsigned long __ro_after_init efi_rng_seed = EFI_INVALID_TABLE_ADDR;
50 static unsigned long __initdata mem_reserve = EFI_INVALID_TABLE_ADDR;
51 static unsigned long __initdata rt_prop = EFI_INVALID_TABLE_ADDR;
52
53 struct mm_struct efi_mm = {
54         .mm_rb                  = RB_ROOT,
55         .mm_users               = ATOMIC_INIT(2),
56         .mm_count               = ATOMIC_INIT(1),
57         MMAP_LOCK_INITIALIZER(efi_mm)
58         .page_table_lock        = __SPIN_LOCK_UNLOCKED(efi_mm.page_table_lock),
59         .mmlist                 = LIST_HEAD_INIT(efi_mm.mmlist),
60         .cpu_bitmap             = { [BITS_TO_LONGS(NR_CPUS)] = 0},
61 };
62
63 struct workqueue_struct *efi_rts_wq;
64
65 static bool disable_runtime;
66 static int __init setup_noefi(char *arg)
67 {
68         disable_runtime = true;
69         return 0;
70 }
71 early_param("noefi", setup_noefi);
72
73 bool efi_runtime_disabled(void)
74 {
75         return disable_runtime;
76 }
77
78 bool __pure __efi_soft_reserve_enabled(void)
79 {
80         return !efi_enabled(EFI_MEM_NO_SOFT_RESERVE);
81 }
82
83 static int __init parse_efi_cmdline(char *str)
84 {
85         if (!str) {
86                 pr_warn("need at least one option\n");
87                 return -EINVAL;
88         }
89
90         if (parse_option_str(str, "debug"))
91                 set_bit(EFI_DBG, &efi.flags);
92
93         if (parse_option_str(str, "noruntime"))
94                 disable_runtime = true;
95
96         if (parse_option_str(str, "nosoftreserve"))
97                 set_bit(EFI_MEM_NO_SOFT_RESERVE, &efi.flags);
98
99         return 0;
100 }
101 early_param("efi", parse_efi_cmdline);
102
103 struct kobject *efi_kobj;
104
105 /*
106  * Let's not leave out systab information that snuck into
107  * the efivars driver
108  * Note, do not add more fields in systab sysfs file as it breaks sysfs
109  * one value per file rule!
110  */
111 static ssize_t systab_show(struct kobject *kobj,
112                            struct kobj_attribute *attr, char *buf)
113 {
114         char *str = buf;
115
116         if (!kobj || !buf)
117                 return -EINVAL;
118
119         if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
120                 str += sprintf(str, "ACPI20=0x%lx\n", efi.acpi20);
121         if (efi.acpi != EFI_INVALID_TABLE_ADDR)
122                 str += sprintf(str, "ACPI=0x%lx\n", efi.acpi);
123         /*
124          * If both SMBIOS and SMBIOS3 entry points are implemented, the
125          * SMBIOS3 entry point shall be preferred, so we list it first to
126          * let applications stop parsing after the first match.
127          */
128         if (efi.smbios3 != EFI_INVALID_TABLE_ADDR)
129                 str += sprintf(str, "SMBIOS3=0x%lx\n", efi.smbios3);
130         if (efi.smbios != EFI_INVALID_TABLE_ADDR)
131                 str += sprintf(str, "SMBIOS=0x%lx\n", efi.smbios);
132
133         if (IS_ENABLED(CONFIG_IA64) || IS_ENABLED(CONFIG_X86))
134                 str = efi_systab_show_arch(str);
135
136         return str - buf;
137 }
138
139 static struct kobj_attribute efi_attr_systab = __ATTR_RO_MODE(systab, 0400);
140
141 static ssize_t fw_platform_size_show(struct kobject *kobj,
142                                      struct kobj_attribute *attr, char *buf)
143 {
144         return sprintf(buf, "%d\n", efi_enabled(EFI_64BIT) ? 64 : 32);
145 }
146
147 extern __weak struct kobj_attribute efi_attr_fw_vendor;
148 extern __weak struct kobj_attribute efi_attr_runtime;
149 extern __weak struct kobj_attribute efi_attr_config_table;
150 static struct kobj_attribute efi_attr_fw_platform_size =
151         __ATTR_RO(fw_platform_size);
152
153 static struct attribute *efi_subsys_attrs[] = {
154         &efi_attr_systab.attr,
155         &efi_attr_fw_platform_size.attr,
156         &efi_attr_fw_vendor.attr,
157         &efi_attr_runtime.attr,
158         &efi_attr_config_table.attr,
159         NULL,
160 };
161
162 umode_t __weak efi_attr_is_visible(struct kobject *kobj, struct attribute *attr,
163                                    int n)
164 {
165         return attr->mode;
166 }
167
168 static const struct attribute_group efi_subsys_attr_group = {
169         .attrs = efi_subsys_attrs,
170         .is_visible = efi_attr_is_visible,
171 };
172
173 static struct efivars generic_efivars;
174 static struct efivar_operations generic_ops;
175
176 static int generic_ops_register(void)
177 {
178         generic_ops.get_variable = efi.get_variable;
179         generic_ops.set_variable = efi.set_variable;
180         generic_ops.set_variable_nonblocking = efi.set_variable_nonblocking;
181         generic_ops.get_next_variable = efi.get_next_variable;
182         generic_ops.query_variable_store = efi_query_variable_store;
183
184         return efivars_register(&generic_efivars, &generic_ops, efi_kobj);
185 }
186
187 static void generic_ops_unregister(void)
188 {
189         efivars_unregister(&generic_efivars);
190 }
191
192 #if IS_ENABLED(CONFIG_ACPI)
193 #define EFIVAR_SSDT_NAME_MAX    16
194 static char efivar_ssdt[EFIVAR_SSDT_NAME_MAX] __initdata;
195 static int __init efivar_ssdt_setup(char *str)
196 {
197         int ret = security_locked_down(LOCKDOWN_ACPI_TABLES);
198
199         if (ret)
200                 return ret;
201
202         if (strlen(str) < sizeof(efivar_ssdt))
203                 memcpy(efivar_ssdt, str, strlen(str));
204         else
205                 pr_warn("efivar_ssdt: name too long: %s\n", str);
206         return 0;
207 }
208 __setup("efivar_ssdt=", efivar_ssdt_setup);
209
210 static __init int efivar_ssdt_iter(efi_char16_t *name, efi_guid_t vendor,
211                                    unsigned long name_size, void *data)
212 {
213         struct efivar_entry *entry;
214         struct list_head *list = data;
215         char utf8_name[EFIVAR_SSDT_NAME_MAX];
216         int limit = min_t(unsigned long, EFIVAR_SSDT_NAME_MAX, name_size);
217
218         ucs2_as_utf8(utf8_name, name, limit - 1);
219         if (strncmp(utf8_name, efivar_ssdt, limit) != 0)
220                 return 0;
221
222         entry = kmalloc(sizeof(*entry), GFP_KERNEL);
223         if (!entry)
224                 return 0;
225
226         memcpy(entry->var.VariableName, name, name_size);
227         memcpy(&entry->var.VendorGuid, &vendor, sizeof(efi_guid_t));
228
229         efivar_entry_add(entry, list);
230
231         return 0;
232 }
233
234 static __init int efivar_ssdt_load(void)
235 {
236         LIST_HEAD(entries);
237         struct efivar_entry *entry, *aux;
238         unsigned long size;
239         void *data;
240         int ret;
241
242         if (!efivar_ssdt[0])
243                 return 0;
244
245         ret = efivar_init(efivar_ssdt_iter, &entries, true, &entries);
246
247         list_for_each_entry_safe(entry, aux, &entries, list) {
248                 pr_info("loading SSDT from variable %s-%pUl\n", efivar_ssdt,
249                         &entry->var.VendorGuid);
250
251                 list_del(&entry->list);
252
253                 ret = efivar_entry_size(entry, &size);
254                 if (ret) {
255                         pr_err("failed to get var size\n");
256                         goto free_entry;
257                 }
258
259                 data = kmalloc(size, GFP_KERNEL);
260                 if (!data) {
261                         ret = -ENOMEM;
262                         goto free_entry;
263                 }
264
265                 ret = efivar_entry_get(entry, NULL, &size, data);
266                 if (ret) {
267                         pr_err("failed to get var data\n");
268                         goto free_data;
269                 }
270
271                 ret = acpi_load_table(data, NULL);
272                 if (ret) {
273                         pr_err("failed to load table: %d\n", ret);
274                         goto free_data;
275                 }
276
277                 goto free_entry;
278
279 free_data:
280                 kfree(data);
281
282 free_entry:
283                 kfree(entry);
284         }
285
286         return ret;
287 }
288 #else
289 static inline int efivar_ssdt_load(void) { return 0; }
290 #endif
291
292 #ifdef CONFIG_DEBUG_FS
293
294 #define EFI_DEBUGFS_MAX_BLOBS 32
295
296 static struct debugfs_blob_wrapper debugfs_blob[EFI_DEBUGFS_MAX_BLOBS];
297
298 static void __init efi_debugfs_init(void)
299 {
300         struct dentry *efi_debugfs;
301         efi_memory_desc_t *md;
302         char name[32];
303         int type_count[EFI_BOOT_SERVICES_DATA + 1] = {};
304         int i = 0;
305
306         efi_debugfs = debugfs_create_dir("efi", NULL);
307         if (IS_ERR_OR_NULL(efi_debugfs))
308                 return;
309
310         for_each_efi_memory_desc(md) {
311                 switch (md->type) {
312                 case EFI_BOOT_SERVICES_CODE:
313                         snprintf(name, sizeof(name), "boot_services_code%d",
314                                  type_count[md->type]++);
315                         break;
316                 case EFI_BOOT_SERVICES_DATA:
317                         snprintf(name, sizeof(name), "boot_services_data%d",
318                                  type_count[md->type]++);
319                         break;
320                 default:
321                         continue;
322                 }
323
324                 if (i >= EFI_DEBUGFS_MAX_BLOBS) {
325                         pr_warn("More then %d EFI boot service segments, only showing first %d in debugfs\n",
326                                 EFI_DEBUGFS_MAX_BLOBS, EFI_DEBUGFS_MAX_BLOBS);
327                         break;
328                 }
329
330                 debugfs_blob[i].size = md->num_pages << EFI_PAGE_SHIFT;
331                 debugfs_blob[i].data = memremap(md->phys_addr,
332                                                 debugfs_blob[i].size,
333                                                 MEMREMAP_WB);
334                 if (!debugfs_blob[i].data)
335                         continue;
336
337                 debugfs_create_blob(name, 0400, efi_debugfs, &debugfs_blob[i]);
338                 i++;
339         }
340 }
341 #else
342 static inline void efi_debugfs_init(void) {}
343 #endif
344
345 /*
346  * We register the efi subsystem with the firmware subsystem and the
347  * efivars subsystem with the efi subsystem, if the system was booted with
348  * EFI.
349  */
350 static int __init efisubsys_init(void)
351 {
352         int error;
353
354         if (!efi_enabled(EFI_RUNTIME_SERVICES))
355                 efi.runtime_supported_mask = 0;
356
357         if (!efi_enabled(EFI_BOOT))
358                 return 0;
359
360         if (efi.runtime_supported_mask) {
361                 /*
362                  * Since we process only one efi_runtime_service() at a time, an
363                  * ordered workqueue (which creates only one execution context)
364                  * should suffice for all our needs.
365                  */
366                 efi_rts_wq = alloc_ordered_workqueue("efi_rts_wq", 0);
367                 if (!efi_rts_wq) {
368                         pr_err("Creating efi_rts_wq failed, EFI runtime services disabled.\n");
369                         clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
370                         efi.runtime_supported_mask = 0;
371                         return 0;
372                 }
373         }
374
375         if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES))
376                 platform_device_register_simple("rtc-efi", 0, NULL, 0);
377
378         /* We register the efi directory at /sys/firmware/efi */
379         efi_kobj = kobject_create_and_add("efi", firmware_kobj);
380         if (!efi_kobj) {
381                 pr_err("efi: Firmware registration failed.\n");
382                 return -ENOMEM;
383         }
384
385         if (efi_rt_services_supported(EFI_RT_SUPPORTED_VARIABLE_SERVICES)) {
386                 efivar_ssdt_load();
387                 error = generic_ops_register();
388                 if (error)
389                         goto err_put;
390                 platform_device_register_simple("efivars", 0, NULL, 0);
391         }
392
393         error = sysfs_create_group(efi_kobj, &efi_subsys_attr_group);
394         if (error) {
395                 pr_err("efi: Sysfs attribute export failed with error %d.\n",
396                        error);
397                 goto err_unregister;
398         }
399
400         error = efi_runtime_map_init(efi_kobj);
401         if (error)
402                 goto err_remove_group;
403
404         /* and the standard mountpoint for efivarfs */
405         error = sysfs_create_mount_point(efi_kobj, "efivars");
406         if (error) {
407                 pr_err("efivars: Subsystem registration failed.\n");
408                 goto err_remove_group;
409         }
410
411         if (efi_enabled(EFI_DBG) && efi_enabled(EFI_PRESERVE_BS_REGIONS))
412                 efi_debugfs_init();
413
414         return 0;
415
416 err_remove_group:
417         sysfs_remove_group(efi_kobj, &efi_subsys_attr_group);
418 err_unregister:
419         if (efi_rt_services_supported(EFI_RT_SUPPORTED_VARIABLE_SERVICES))
420                 generic_ops_unregister();
421 err_put:
422         kobject_put(efi_kobj);
423         return error;
424 }
425
426 subsys_initcall(efisubsys_init);
427
428 /*
429  * Find the efi memory descriptor for a given physical address.  Given a
430  * physical address, determine if it exists within an EFI Memory Map entry,
431  * and if so, populate the supplied memory descriptor with the appropriate
432  * data.
433  */
434 int efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md)
435 {
436         efi_memory_desc_t *md;
437
438         if (!efi_enabled(EFI_MEMMAP)) {
439                 pr_err_once("EFI_MEMMAP is not enabled.\n");
440                 return -EINVAL;
441         }
442
443         if (!out_md) {
444                 pr_err_once("out_md is null.\n");
445                 return -EINVAL;
446         }
447
448         for_each_efi_memory_desc(md) {
449                 u64 size;
450                 u64 end;
451
452                 size = md->num_pages << EFI_PAGE_SHIFT;
453                 end = md->phys_addr + size;
454                 if (phys_addr >= md->phys_addr && phys_addr < end) {
455                         memcpy(out_md, md, sizeof(*out_md));
456                         return 0;
457                 }
458         }
459         return -ENOENT;
460 }
461
462 /*
463  * Calculate the highest address of an efi memory descriptor.
464  */
465 u64 __init efi_mem_desc_end(efi_memory_desc_t *md)
466 {
467         u64 size = md->num_pages << EFI_PAGE_SHIFT;
468         u64 end = md->phys_addr + size;
469         return end;
470 }
471
472 void __init __weak efi_arch_mem_reserve(phys_addr_t addr, u64 size) {}
473
474 /**
475  * efi_mem_reserve - Reserve an EFI memory region
476  * @addr: Physical address to reserve
477  * @size: Size of reservation
478  *
479  * Mark a region as reserved from general kernel allocation and
480  * prevent it being released by efi_free_boot_services().
481  *
482  * This function should be called drivers once they've parsed EFI
483  * configuration tables to figure out where their data lives, e.g.
484  * efi_esrt_init().
485  */
486 void __init efi_mem_reserve(phys_addr_t addr, u64 size)
487 {
488         if (!memblock_is_region_reserved(addr, size))
489                 memblock_reserve(addr, size);
490
491         /*
492          * Some architectures (x86) reserve all boot services ranges
493          * until efi_free_boot_services() because of buggy firmware
494          * implementations. This means the above memblock_reserve() is
495          * superfluous on x86 and instead what it needs to do is
496          * ensure the @start, @size is not freed.
497          */
498         efi_arch_mem_reserve(addr, size);
499 }
500
501 static const efi_config_table_type_t common_tables[] __initconst = {
502         {ACPI_20_TABLE_GUID,                    &efi.acpi20,            "ACPI 2.0"      },
503         {ACPI_TABLE_GUID,                       &efi.acpi,              "ACPI"          },
504         {SMBIOS_TABLE_GUID,                     &efi.smbios,            "SMBIOS"        },
505         {SMBIOS3_TABLE_GUID,                    &efi.smbios3,           "SMBIOS 3.0"    },
506         {EFI_SYSTEM_RESOURCE_TABLE_GUID,        &efi.esrt,              "ESRT"          },
507         {EFI_MEMORY_ATTRIBUTES_TABLE_GUID,      &efi_mem_attr_table,    "MEMATTR"       },
508         {LINUX_EFI_RANDOM_SEED_TABLE_GUID,      &efi_rng_seed,          "RNG"           },
509         {LINUX_EFI_TPM_EVENT_LOG_GUID,          &efi.tpm_log,           "TPMEventLog"   },
510         {LINUX_EFI_TPM_FINAL_LOG_GUID,          &efi.tpm_final_log,     "TPMFinalLog"   },
511         {LINUX_EFI_MEMRESERVE_TABLE_GUID,       &mem_reserve,           "MEMRESERVE"    },
512         {EFI_RT_PROPERTIES_TABLE_GUID,          &rt_prop,               "RTPROP"        },
513 #ifdef CONFIG_EFI_RCI2_TABLE
514         {DELLEMC_EFI_RCI2_TABLE_GUID,           &rci2_table_phys                        },
515 #endif
516         {},
517 };
518
519 static __init int match_config_table(const efi_guid_t *guid,
520                                      unsigned long table,
521                                      const efi_config_table_type_t *table_types)
522 {
523         int i;
524
525         for (i = 0; efi_guidcmp(table_types[i].guid, NULL_GUID); i++) {
526                 if (!efi_guidcmp(*guid, table_types[i].guid)) {
527                         *(table_types[i].ptr) = table;
528                         if (table_types[i].name[0])
529                                 pr_cont("%s=0x%lx ",
530                                         table_types[i].name, table);
531                         return 1;
532                 }
533         }
534
535         return 0;
536 }
537
538 int __init efi_config_parse_tables(const efi_config_table_t *config_tables,
539                                    int count,
540                                    const efi_config_table_type_t *arch_tables)
541 {
542         const efi_config_table_64_t *tbl64 = (void *)config_tables;
543         const efi_config_table_32_t *tbl32 = (void *)config_tables;
544         const efi_guid_t *guid;
545         unsigned long table;
546         int i;
547
548         pr_info("");
549         for (i = 0; i < count; i++) {
550                 if (!IS_ENABLED(CONFIG_X86)) {
551                         guid = &config_tables[i].guid;
552                         table = (unsigned long)config_tables[i].table;
553                 } else if (efi_enabled(EFI_64BIT)) {
554                         guid = &tbl64[i].guid;
555                         table = tbl64[i].table;
556
557                         if (IS_ENABLED(CONFIG_X86_32) &&
558                             tbl64[i].table > U32_MAX) {
559                                 pr_cont("\n");
560                                 pr_err("Table located above 4GB, disabling EFI.\n");
561                                 return -EINVAL;
562                         }
563                 } else {
564                         guid = &tbl32[i].guid;
565                         table = tbl32[i].table;
566                 }
567
568                 if (!match_config_table(guid, table, common_tables) && arch_tables)
569                         match_config_table(guid, table, arch_tables);
570         }
571         pr_cont("\n");
572         set_bit(EFI_CONFIG_TABLES, &efi.flags);
573
574         if (efi_rng_seed != EFI_INVALID_TABLE_ADDR) {
575                 struct linux_efi_random_seed *seed;
576                 u32 size = 0;
577
578                 seed = early_memremap(efi_rng_seed, sizeof(*seed));
579                 if (seed != NULL) {
580                         size = READ_ONCE(seed->size);
581                         early_memunmap(seed, sizeof(*seed));
582                 } else {
583                         pr_err("Could not map UEFI random seed!\n");
584                 }
585                 if (size > 0) {
586                         seed = early_memremap(efi_rng_seed,
587                                               sizeof(*seed) + size);
588                         if (seed != NULL) {
589                                 pr_notice("seeding entropy pool\n");
590                                 add_bootloader_randomness(seed->bits, size);
591                                 early_memunmap(seed, sizeof(*seed) + size);
592                         } else {
593                                 pr_err("Could not map UEFI random seed!\n");
594                         }
595                 }
596         }
597
598         if (!IS_ENABLED(CONFIG_X86_32) && efi_enabled(EFI_MEMMAP))
599                 efi_memattr_init();
600
601         efi_tpm_eventlog_init();
602
603         if (mem_reserve != EFI_INVALID_TABLE_ADDR) {
604                 unsigned long prsv = mem_reserve;
605
606                 while (prsv) {
607                         struct linux_efi_memreserve *rsv;
608                         u8 *p;
609
610                         /*
611                          * Just map a full page: that is what we will get
612                          * anyway, and it permits us to map the entire entry
613                          * before knowing its size.
614                          */
615                         p = early_memremap(ALIGN_DOWN(prsv, PAGE_SIZE),
616                                            PAGE_SIZE);
617                         if (p == NULL) {
618                                 pr_err("Could not map UEFI memreserve entry!\n");
619                                 return -ENOMEM;
620                         }
621
622                         rsv = (void *)(p + prsv % PAGE_SIZE);
623
624                         /* reserve the entry itself */
625                         memblock_reserve(prsv, EFI_MEMRESERVE_SIZE(rsv->size));
626
627                         for (i = 0; i < atomic_read(&rsv->count); i++) {
628                                 memblock_reserve(rsv->entry[i].base,
629                                                  rsv->entry[i].size);
630                         }
631
632                         prsv = rsv->next;
633                         early_memunmap(p, PAGE_SIZE);
634                 }
635         }
636
637         if (rt_prop != EFI_INVALID_TABLE_ADDR) {
638                 efi_rt_properties_table_t *tbl;
639
640                 tbl = early_memremap(rt_prop, sizeof(*tbl));
641                 if (tbl) {
642                         efi.runtime_supported_mask &= tbl->runtime_services_supported;
643                         early_memunmap(tbl, sizeof(*tbl));
644                 }
645         }
646
647         return 0;
648 }
649
650 int __init efi_systab_check_header(const efi_table_hdr_t *systab_hdr,
651                                    int min_major_version)
652 {
653         if (systab_hdr->signature != EFI_SYSTEM_TABLE_SIGNATURE) {
654                 pr_err("System table signature incorrect!\n");
655                 return -EINVAL;
656         }
657
658         if ((systab_hdr->revision >> 16) < min_major_version)
659                 pr_err("Warning: System table version %d.%02d, expected %d.00 or greater!\n",
660                        systab_hdr->revision >> 16,
661                        systab_hdr->revision & 0xffff,
662                        min_major_version);
663
664         return 0;
665 }
666
667 #ifndef CONFIG_IA64
668 static const efi_char16_t *__init map_fw_vendor(unsigned long fw_vendor,
669                                                 size_t size)
670 {
671         const efi_char16_t *ret;
672
673         ret = early_memremap_ro(fw_vendor, size);
674         if (!ret)
675                 pr_err("Could not map the firmware vendor!\n");
676         return ret;
677 }
678
679 static void __init unmap_fw_vendor(const void *fw_vendor, size_t size)
680 {
681         early_memunmap((void *)fw_vendor, size);
682 }
683 #else
684 #define map_fw_vendor(p, s)     __va(p)
685 #define unmap_fw_vendor(v, s)
686 #endif
687
688 void __init efi_systab_report_header(const efi_table_hdr_t *systab_hdr,
689                                      unsigned long fw_vendor)
690 {
691         char vendor[100] = "unknown";
692         const efi_char16_t *c16;
693         size_t i;
694
695         c16 = map_fw_vendor(fw_vendor, sizeof(vendor) * sizeof(efi_char16_t));
696         if (c16) {
697                 for (i = 0; i < sizeof(vendor) - 1 && c16[i]; ++i)
698                         vendor[i] = c16[i];
699                 vendor[i] = '\0';
700
701                 unmap_fw_vendor(c16, sizeof(vendor) * sizeof(efi_char16_t));
702         }
703
704         pr_info("EFI v%u.%.02u by %s\n",
705                 systab_hdr->revision >> 16,
706                 systab_hdr->revision & 0xffff,
707                 vendor);
708 }
709
710 static __initdata char memory_type_name[][20] = {
711         "Reserved",
712         "Loader Code",
713         "Loader Data",
714         "Boot Code",
715         "Boot Data",
716         "Runtime Code",
717         "Runtime Data",
718         "Conventional Memory",
719         "Unusable Memory",
720         "ACPI Reclaim Memory",
721         "ACPI Memory NVS",
722         "Memory Mapped I/O",
723         "MMIO Port Space",
724         "PAL Code",
725         "Persistent Memory",
726 };
727
728 char * __init efi_md_typeattr_format(char *buf, size_t size,
729                                      const efi_memory_desc_t *md)
730 {
731         char *pos;
732         int type_len;
733         u64 attr;
734
735         pos = buf;
736         if (md->type >= ARRAY_SIZE(memory_type_name))
737                 type_len = snprintf(pos, size, "[type=%u", md->type);
738         else
739                 type_len = snprintf(pos, size, "[%-*s",
740                                     (int)(sizeof(memory_type_name[0]) - 1),
741                                     memory_type_name[md->type]);
742         if (type_len >= size)
743                 return buf;
744
745         pos += type_len;
746         size -= type_len;
747
748         attr = md->attribute;
749         if (attr & ~(EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT |
750                      EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_RO |
751                      EFI_MEMORY_WP | EFI_MEMORY_RP | EFI_MEMORY_XP |
752                      EFI_MEMORY_NV | EFI_MEMORY_SP |
753                      EFI_MEMORY_RUNTIME | EFI_MEMORY_MORE_RELIABLE))
754                 snprintf(pos, size, "|attr=0x%016llx]",
755                          (unsigned long long)attr);
756         else
757                 snprintf(pos, size,
758                          "|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]",
759                          attr & EFI_MEMORY_RUNTIME ? "RUN" : "",
760                          attr & EFI_MEMORY_MORE_RELIABLE ? "MR" : "",
761                          attr & EFI_MEMORY_SP      ? "SP"  : "",
762                          attr & EFI_MEMORY_NV      ? "NV"  : "",
763                          attr & EFI_MEMORY_XP      ? "XP"  : "",
764                          attr & EFI_MEMORY_RP      ? "RP"  : "",
765                          attr & EFI_MEMORY_WP      ? "WP"  : "",
766                          attr & EFI_MEMORY_RO      ? "RO"  : "",
767                          attr & EFI_MEMORY_UCE     ? "UCE" : "",
768                          attr & EFI_MEMORY_WB      ? "WB"  : "",
769                          attr & EFI_MEMORY_WT      ? "WT"  : "",
770                          attr & EFI_MEMORY_WC      ? "WC"  : "",
771                          attr & EFI_MEMORY_UC      ? "UC"  : "");
772         return buf;
773 }
774
775 /*
776  * IA64 has a funky EFI memory map that doesn't work the same way as
777  * other architectures.
778  */
779 #ifndef CONFIG_IA64
780 /*
781  * efi_mem_attributes - lookup memmap attributes for physical address
782  * @phys_addr: the physical address to lookup
783  *
784  * Search in the EFI memory map for the region covering
785  * @phys_addr. Returns the EFI memory attributes if the region
786  * was found in the memory map, 0 otherwise.
787  */
788 u64 efi_mem_attributes(unsigned long phys_addr)
789 {
790         efi_memory_desc_t *md;
791
792         if (!efi_enabled(EFI_MEMMAP))
793                 return 0;
794
795         for_each_efi_memory_desc(md) {
796                 if ((md->phys_addr <= phys_addr) &&
797                     (phys_addr < (md->phys_addr +
798                     (md->num_pages << EFI_PAGE_SHIFT))))
799                         return md->attribute;
800         }
801         return 0;
802 }
803
804 /*
805  * efi_mem_type - lookup memmap type for physical address
806  * @phys_addr: the physical address to lookup
807  *
808  * Search in the EFI memory map for the region covering @phys_addr.
809  * Returns the EFI memory type if the region was found in the memory
810  * map, -EINVAL otherwise.
811  */
812 int efi_mem_type(unsigned long phys_addr)
813 {
814         const efi_memory_desc_t *md;
815
816         if (!efi_enabled(EFI_MEMMAP))
817                 return -ENOTSUPP;
818
819         for_each_efi_memory_desc(md) {
820                 if ((md->phys_addr <= phys_addr) &&
821                     (phys_addr < (md->phys_addr +
822                                   (md->num_pages << EFI_PAGE_SHIFT))))
823                         return md->type;
824         }
825         return -EINVAL;
826 }
827 #endif
828
829 int efi_status_to_err(efi_status_t status)
830 {
831         int err;
832
833         switch (status) {
834         case EFI_SUCCESS:
835                 err = 0;
836                 break;
837         case EFI_INVALID_PARAMETER:
838                 err = -EINVAL;
839                 break;
840         case EFI_OUT_OF_RESOURCES:
841                 err = -ENOSPC;
842                 break;
843         case EFI_DEVICE_ERROR:
844                 err = -EIO;
845                 break;
846         case EFI_WRITE_PROTECTED:
847                 err = -EROFS;
848                 break;
849         case EFI_SECURITY_VIOLATION:
850                 err = -EACCES;
851                 break;
852         case EFI_NOT_FOUND:
853                 err = -ENOENT;
854                 break;
855         case EFI_ABORTED:
856                 err = -EINTR;
857                 break;
858         default:
859                 err = -EINVAL;
860         }
861
862         return err;
863 }
864
865 static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock);
866 static struct linux_efi_memreserve *efi_memreserve_root __ro_after_init;
867
868 static int __init efi_memreserve_map_root(void)
869 {
870         if (mem_reserve == EFI_INVALID_TABLE_ADDR)
871                 return -ENODEV;
872
873         efi_memreserve_root = memremap(mem_reserve,
874                                        sizeof(*efi_memreserve_root),
875                                        MEMREMAP_WB);
876         if (WARN_ON_ONCE(!efi_memreserve_root))
877                 return -ENOMEM;
878         return 0;
879 }
880
881 static int efi_mem_reserve_iomem(phys_addr_t addr, u64 size)
882 {
883         struct resource *res, *parent;
884
885         res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
886         if (!res)
887                 return -ENOMEM;
888
889         res->name       = "reserved";
890         res->flags      = IORESOURCE_MEM;
891         res->start      = addr;
892         res->end        = addr + size - 1;
893
894         /* we expect a conflict with a 'System RAM' region */
895         parent = request_resource_conflict(&iomem_resource, res);
896         return parent ? request_resource(parent, res) : 0;
897 }
898
899 int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
900 {
901         struct linux_efi_memreserve *rsv;
902         unsigned long prsv;
903         int rc, index;
904
905         if (efi_memreserve_root == (void *)ULONG_MAX)
906                 return -ENODEV;
907
908         if (!efi_memreserve_root) {
909                 rc = efi_memreserve_map_root();
910                 if (rc)
911                         return rc;
912         }
913
914         /* first try to find a slot in an existing linked list entry */
915         for (prsv = efi_memreserve_root->next; prsv; prsv = rsv->next) {
916                 rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
917                 index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
918                 if (index < rsv->size) {
919                         rsv->entry[index].base = addr;
920                         rsv->entry[index].size = size;
921
922                         memunmap(rsv);
923                         return efi_mem_reserve_iomem(addr, size);
924                 }
925                 memunmap(rsv);
926         }
927
928         /* no slot found - allocate a new linked list entry */
929         rsv = (struct linux_efi_memreserve *)__get_free_page(GFP_ATOMIC);
930         if (!rsv)
931                 return -ENOMEM;
932
933         rc = efi_mem_reserve_iomem(__pa(rsv), SZ_4K);
934         if (rc) {
935                 free_page((unsigned long)rsv);
936                 return rc;
937         }
938
939         /*
940          * The memremap() call above assumes that a linux_efi_memreserve entry
941          * never crosses a page boundary, so let's ensure that this remains true
942          * even when kexec'ing a 4k pages kernel from a >4k pages kernel, by
943          * using SZ_4K explicitly in the size calculation below.
944          */
945         rsv->size = EFI_MEMRESERVE_COUNT(SZ_4K);
946         atomic_set(&rsv->count, 1);
947         rsv->entry[0].base = addr;
948         rsv->entry[0].size = size;
949
950         spin_lock(&efi_mem_reserve_persistent_lock);
951         rsv->next = efi_memreserve_root->next;
952         efi_memreserve_root->next = __pa(rsv);
953         spin_unlock(&efi_mem_reserve_persistent_lock);
954
955         return efi_mem_reserve_iomem(addr, size);
956 }
957
958 static int __init efi_memreserve_root_init(void)
959 {
960         if (efi_memreserve_root)
961                 return 0;
962         if (efi_memreserve_map_root())
963                 efi_memreserve_root = (void *)ULONG_MAX;
964         return 0;
965 }
966 early_initcall(efi_memreserve_root_init);
967
968 #ifdef CONFIG_KEXEC
969 static int update_efi_random_seed(struct notifier_block *nb,
970                                   unsigned long code, void *unused)
971 {
972         struct linux_efi_random_seed *seed;
973         u32 size = 0;
974
975         if (!kexec_in_progress)
976                 return NOTIFY_DONE;
977
978         seed = memremap(efi_rng_seed, sizeof(*seed), MEMREMAP_WB);
979         if (seed != NULL) {
980                 size = min(seed->size, EFI_RANDOM_SEED_SIZE);
981                 memunmap(seed);
982         } else {
983                 pr_err("Could not map UEFI random seed!\n");
984         }
985         if (size > 0) {
986                 seed = memremap(efi_rng_seed, sizeof(*seed) + size,
987                                 MEMREMAP_WB);
988                 if (seed != NULL) {
989                         seed->size = size;
990                         get_random_bytes(seed->bits, seed->size);
991                         memunmap(seed);
992                 } else {
993                         pr_err("Could not map UEFI random seed!\n");
994                 }
995         }
996         return NOTIFY_DONE;
997 }
998
999 static struct notifier_block efi_random_seed_nb = {
1000         .notifier_call = update_efi_random_seed,
1001 };
1002
1003 static int __init register_update_efi_random_seed(void)
1004 {
1005         if (efi_rng_seed == EFI_INVALID_TABLE_ADDR)
1006                 return 0;
1007         return register_reboot_notifier(&efi_random_seed_nb);
1008 }
1009 late_initcall(register_update_efi_random_seed);
1010 #endif