blob: 67bd7f8ca24c54abb379f6a3781a4fa18e4497ff [file] [log] [blame]
Bin Meng2cfbdae2018-06-27 20:38:03 -07001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * EFI application ACPI tables support
4 *
5 * Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
6 */
7
Bin Meng2cfbdae2018-06-27 20:38:03 -07008#include <efi_loader.h>
Simon Glass0f2af882020-05-10 11:40:05 -06009#include <log.h>
Simon Glass367f00d2021-12-01 09:02:42 -070010#include <mapmem.h>
Simon Glass858fed12020-04-08 16:57:36 -060011#include <acpi/acpi_table.h>
Simon Glass8965f292023-07-15 21:39:17 -060012#include <asm/global_data.h>
13
14DECLARE_GLOBAL_DATA_PTR;
Bin Meng2cfbdae2018-06-27 20:38:03 -070015
16static const efi_guid_t acpi_guid = EFI_ACPI_TABLE_GUID;
17
18/*
19 * Install the ACPI table as a configuration table.
20 *
Heinrich Schuchardt47b4c022022-01-19 18:05:50 +010021 * Return: status code
Bin Meng2cfbdae2018-06-27 20:38:03 -070022 */
23efi_status_t efi_acpi_register(void)
24{
Simon Glass8965f292023-07-15 21:39:17 -060025 ulong addr, start, end;
Bin Meng2cfbdae2018-06-27 20:38:03 -070026 efi_status_t ret;
27
Simon Glass8965f292023-07-15 21:39:17 -060028 /* Mark space used for tables */
29 start = ALIGN_DOWN(gd->arch.table_start, EFI_PAGE_MASK);
30 end = ALIGN(gd->arch.table_end, EFI_PAGE_MASK);
31 ret = efi_add_memory_map(start, end - start, EFI_ACPI_RECLAIM_MEMORY);
Bin Meng2cfbdae2018-06-27 20:38:03 -070032 if (ret != EFI_SUCCESS)
33 return ret;
Simon Glass8965f292023-07-15 21:39:17 -060034 if (gd->arch.table_start_high) {
35 start = ALIGN_DOWN(gd->arch.table_start_high, EFI_PAGE_MASK);
36 end = ALIGN(gd->arch.table_end_high, EFI_PAGE_MASK);
37 ret = efi_add_memory_map(start, end - start,
38 EFI_ACPI_RECLAIM_MEMORY);
39 if (ret != EFI_SUCCESS)
40 return ret;
41 }
Bin Meng2cfbdae2018-06-27 20:38:03 -070042
Simon Glass8965f292023-07-15 21:39:17 -060043 addr = gd_acpi_start();
Heinrich Schuchardt3b56ffd2024-04-09 22:48:24 +020044 log_debug("EFI using ACPI tables at %lx\n", addr);
Bin Meng2cfbdae2018-06-27 20:38:03 -070045
46 /* And expose them to our EFI payload */
47 return efi_install_configuration_table(&acpi_guid,
Simon Glass8965f292023-07-15 21:39:17 -060048 (void *)(ulong)addr);
Bin Meng2cfbdae2018-06-27 20:38:03 -070049}