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