public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Patrick Rudolph <patrick.rudolph@9elements.com>
To: u-boot@lists.denx.de, Simon Glass <sjg@chromium.org>
Cc: Patrick Rudolph <patrick.rudolph@9elements.com>,
	Tom Rini <trini@konsulko.com>
Subject: [PATCH v7 14/37] acpi: Allocate and write ACPI tables
Date: Fri, 11 Oct 2024 12:22:55 +0200	[thread overview]
Message-ID: <20241011102419.12523-15-patrick.rudolph@9elements.com> (raw)
In-Reply-To: <20241011102419.12523-1-patrick.rudolph@9elements.com>

Allocate memory for ACPI tables in generic acpi code. When ACPI wasn't
installed in other places, install the ACPI table using either BLOBLISTs
or EFI allocate pages.

This allows non x86 platforms to boot using ACPI only in case the
EFI loader is being used, since EFI is necessary to advertise the location
of the ACPI tables in memory.

TEST: Booted QEMU SBSA (no QFW) using EFI and ACPI only.

Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@konsulko.com>
---
 lib/acpi/acpi_table.c            | 80 +++++++++++++++++++++++++++++++-
 test/py/tests/test_event_dump.py |  1 +
 2 files changed, 80 insertions(+), 1 deletion(-)

diff --git a/lib/acpi/acpi_table.c b/lib/acpi/acpi_table.c
index d6357bdc4d..d8112e58ca 100644
--- a/lib/acpi/acpi_table.c
+++ b/lib/acpi/acpi_table.c
@@ -5,8 +5,11 @@
  * Copyright 2019 Google LLC
  */
 
-#include <dm.h>
+#include <bloblist.h>
 #include <cpu.h>
+#include <dm.h>
+#include <efi_api.h>
+#include <efi_loader.h>
 #include <log.h>
 #include <mapmem.h>
 #include <tables_csum.h>
@@ -16,6 +19,14 @@
 #include <acpi/acpi_device.h>
 #include <asm/global_data.h>
 #include <dm/acpi.h>
+#include <linux/sizes.h>
+#include <linux/log2.h>
+
+enum {
+	TABLE_SIZE	= SZ_64K,
+};
+
+DECLARE_GLOBAL_DATA_PTR;
 
 /*
  * OEM_REVISION is 32-bit unsigned number. It should be increased only when
@@ -752,3 +763,70 @@ static int acpi_write_iort(struct acpi_ctx *ctx, const struct acpi_writer *entry
 }
 
 ACPI_WRITER(5iort, "IORT", acpi_write_iort, 0);
+
+/*
+ * Allocate memory for ACPI tables and write ACPI tables to the
+ * allocated buffer.
+ *
+ * Return:	status code
+ */
+static int alloc_write_acpi_tables(void)
+{
+	u64 table_addr, table_end;
+	u64 new_acpi_addr = 0;
+	efi_uintn_t pages;
+	efi_status_t ret;
+	void *addr;
+
+	if (IS_ENABLED(CONFIG_X86) ||
+	    IS_ENABLED(CONFIG_QFW_ACPI) ||
+	    IS_ENABLED(CONFIG_SANDBOX)) {
+		log_debug("Skipping writing ACPI tables as already done\n");
+		return 0;
+	}
+
+	/* Align the table to a 4KB boundary to keep EFI happy */
+	if (IS_ENABLED(CONFIG_BLOBLIST_TABLES)) {
+		addr = bloblist_add(BLOBLISTT_ACPI_TABLES, TABLE_SIZE,
+				    ilog2(SZ_4K));
+
+		if (!addr)
+			return log_msg_ret("mem", -ENOMEM);
+	} else if (IS_ENABLED(CONFIG_EFI_LOADER)) {
+		pages = efi_size_in_pages(TABLE_SIZE);
+
+		ret = efi_allocate_pages(EFI_ALLOCATE_ANY_PAGES,
+					 EFI_ACPI_RECLAIM_MEMORY,
+					 pages, &new_acpi_addr);
+		if (ret != EFI_SUCCESS)
+			return log_msg_ret("mem", -ENOMEM);
+
+		addr = (void *)(uintptr_t)new_acpi_addr;
+	} else {
+		return log_msg_ret("mem", -ENOMEM);
+	}
+
+	table_addr = virt_to_phys(addr);
+
+	gd->arch.table_start_high = table_addr;
+
+	table_end = write_acpi_tables(table_addr);
+	if (!table_end) {
+		log_err("Can't create ACPI configuration table\n");
+		return -EINTR;
+	}
+
+	log_debug("- wrote 'acpi' to %llx, end %llx\n", table_addr, table_end);
+	if (table_end - table_addr > TABLE_SIZE) {
+		log_err("Out of space for configuration tables: need %llx, have %x\n",
+			table_end - table_addr, TABLE_SIZE);
+		return log_msg_ret("acpi", -ENOSPC);
+	}
+	gd->arch.table_end_high = table_end;
+
+	log_debug("- done writing tables\n");
+
+	return 0;
+}
+
+EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, alloc_write_acpi_tables);
diff --git a/test/py/tests/test_event_dump.py b/test/py/tests/test_event_dump.py
index e282c67335..45143c1c7d 100644
--- a/test/py/tests/test_event_dump.py
+++ b/test/py/tests/test_event_dump.py
@@ -18,6 +18,7 @@ def test_event_dump(u_boot_console):
 --------------------  ------------------------------  ------------------------------
 EVT_FT_FIXUP          bootmeth_vbe_ft_fixup           .*boot/vbe_request.c:.*
 EVT_FT_FIXUP          bootmeth_vbe_simple_ft_fixup    .*boot/vbe_simple_os.c:.*
+EVT_LAST_STAGE_INIT   alloc_write_acpi_tables         .*lib/acpi/acpi_table.c:.*
 EVT_LAST_STAGE_INIT   install_smbios_table            .*lib/efi_loader/efi_smbios.c:.*
 EVT_MISC_INIT_F       sandbox_early_getopt_check      .*arch/sandbox/cpu/start.c:.*
 EVT_TEST              h_adder_simple                  .*test/common/event.c:'''
-- 
2.46.2


  parent reply	other threads:[~2024-10-11 10:36 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-11 10:22 [PATCH v7 00/37] Implement ACPI on aarch64 Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 01/37] acpi: x86: Move SPCR and DBG2 into common code Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 02/37] acpi: x86: Write FADT in " Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 03/37] acpi: x86: Move MADT to " Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 04/37] acpi: Fix typo Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 05/37] serial: serial_pl01x: Implement .getinfo() for PL01 Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 06/37] acpi: Add define for GTDT Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 07/37] arm: acpi: Add generic ACPI methods Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 08/37] acpi: Add fill_madt to acpi_ops Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 09/37] acpi: acpi_table: Bump revisions Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 10/37] acpi: Add ACPITAB for PPTT and GTDT Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 11/37] acpi: acpi_table: Add IORT support Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 12/37] acpi: Move function prototype Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 13/37] acpi_table: Support platforms with unusable RSDT Patrick Rudolph
2024-10-11 10:22 ` Patrick Rudolph [this message]
2024-10-13 19:37   ` [PATCH v7 14/37] acpi: Allocate and write ACPI tables Simon Glass
2024-10-11 10:22 ` [PATCH v7 15/37] acpi: Add processor device Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 16/37] drivers: usb: Add generic XHCI Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 17/37] drivers: ata: Rename ahci_mvebu Patrick Rudolph
2024-10-11 10:22 ` [PATCH v7 18/37] drivers/cpu: Add generic armv8 cpu driver Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 19/37] arm: gic-v3-its: Rename objects Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 20/37] arm: gic-v3-its: Implement of_xlate Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 21/37] arm: lib: Add GICV2 driver Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 22/37] drivers: misc: irq-uclass: Update irq_get_by_index Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 23/37] drivers/arm: Implement acpi_fill_madt Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 24/37] common: Enable BLOBLIST_TABLES on arm Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 25/37] board: emulation: Add QEMU sbsa support Patrick Rudolph
2024-10-13 19:34   ` Simon Glass
2024-10-11 10:23 ` [PATCH v7 26/37] arm: mach-bcm283x: Map the ARM local MMIO as well Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 27/37] arm: mach-bcm283x: Bring in some header files from tianocore Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 28/37] arm: bcm283x: Generate ACPI tables Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 29/37] board: raspberrypi: Add ASL files from tianocore Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 30/37] arm: cpu: Add ACPI parking protocol support Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 31/37] armv8: cpu: Enable ACPI parking protocol Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 32/37] arm: Implement read_mpidr on armv7 Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 33/37] arm: mach-bcm283x: Add ARMV8_MULTIENTRY support Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 34/37] arm: mach-bcm283x: Enable ARMV8_MULTIENTRY Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 35/37] bloblist: Fix use of uninitialized variable Patrick Rudolph
2024-10-11 10:23 ` [PATCH v7 36/37] configs: Add RPI4 ACPI defconfig Patrick Rudolph
2024-10-14  2:25   ` Tom Rini
2024-10-11 10:23 ` [PATCH v7 37/37] CI: Enable qemu_sbsa Patrick Rudolph

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241011102419.12523-15-patrick.rudolph@9elements.com \
    --to=patrick.rudolph@9elements.com \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox