[PATCH v3 06/30] x86: acpi: Store the ACPI context in global_data

Simon Glass sjg at chromium.org
Wed Nov 4 17:57:19 CET 2020


At present we create the ACPI context but then drop it after generation of
tables is complete. This is annoying because we have to then search for
tables later.

To fix this, allocate the context and store it in global_data.

Signed-off-by: Simon Glass <sjg at chromium.org>
Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
---

Changes in v3:
- Add a macro to read gd->acpi_ctx to allow use of IS_ENABLED()

 arch/x86/lib/acpi_table.c         |  7 ++++++-
 include/asm-generic/global_data.h | 13 +++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
index 6d405b09fde..f0f342d8935 100644
--- a/arch/x86/lib/acpi_table.c
+++ b/arch/x86/lib/acpi_table.c
@@ -494,7 +494,7 @@ void acpi_create_ssdt(struct acpi_ctx *ctx, struct acpi_table_header *ssdt,
  */
 ulong write_acpi_tables(ulong start_addr)
 {
-	struct acpi_ctx sctx, *ctx = &sctx;
+	struct acpi_ctx *ctx;
 	struct acpi_facs *facs;
 	struct acpi_table_header *dsdt;
 	struct acpi_fadt *fadt;
@@ -509,6 +509,11 @@ ulong write_acpi_tables(ulong start_addr)
 	int ret;
 	int i;
 
+	ctx = calloc(1, sizeof(*ctx));
+	if (!ctx)
+		return log_msg_ret("mem", -ENOMEM);
+	gd->acpi_ctx = ctx;
+
 	start = map_sysmem(start_addr, 0);
 
 	debug("ACPI: Writing ACPI tables at %lx\n", start_addr);
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index f3920437968..87d827d0f43 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -24,6 +24,7 @@
 #include <membuff.h>
 #include <linux/list.h>
 
+struct acpi_ctx;
 struct driver_rt;
 
 typedef struct global_data gd_t;
@@ -420,6 +421,12 @@ struct global_data {
 	 */
 	struct udevice *watchdog_dev;
 #endif
+#ifdef CONFIG_GENERATE_ACPI_TABLE
+	/**
+	 * @acpi_ctx: ACPI context pointer
+	 */
+	struct acpi_ctx *acpi_ctx;
+#endif
 };
 
 /**
@@ -452,6 +459,12 @@ struct global_data {
 #define gd_dm_driver_rt()		NULL
 #endif
 
+#ifdef CONFIG_GENERATE_ACPI_TABLE
+#define gd_acpi_ctx()		gd->acpi_ctx
+#else
+#define gd_acpi_ctx()		NULL
+#endif
+
 /**
  * enum gd_flags - global data flags
  *
-- 
2.29.1.341.ge80a0c044ae-goog



More information about the U-Boot mailing list