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