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