summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/core/acpi.c5
-rw-r--r--include/dm/acpi.h4
2 files changed, 6 insertions, 3 deletions
diff --git a/drivers/core/acpi.c b/drivers/core/acpi.c
index e988a65ec51..5425e4d0402 100644
--- a/drivers/core/acpi.c
+++ b/drivers/core/acpi.c
@@ -266,19 +266,18 @@ int acpi_recurse_method(struct acpi_ctx *ctx, struct udevice *parent,
func = acpi_get_method(parent, method);
if (func) {
- void *start = ctx->current;
-
log_debug("- method %d, %s %p\n", method, parent->name, func);
ret = device_of_to_plat(parent);
if (ret)
return log_msg_ret("ofdata", ret);
+ ctx->tab_start = ctx->current;
ret = func(parent, ctx);
if (ret)
return log_msg_ret("func", ret);
/* Add the item to the internal list */
if (type != TYPE_NONE) {
- ret = acpi_add_item(ctx, parent, type, start);
+ ret = acpi_add_item(ctx, parent, type, ctx->tab_start);
if (ret)
return log_msg_ret("add", ret);
}
diff --git a/include/dm/acpi.h b/include/dm/acpi.h
index 0fa239eb3a8..a2da57fe224 100644
--- a/include/dm/acpi.h
+++ b/include/dm/acpi.h
@@ -43,6 +43,9 @@ enum acpi_dump_option {
*
* @base: Base address of ACPI tables
* @current: Current address for writing
+ * @tab_start: Address of start of the table being written. This is set up
+ * before the writer or driver method is called. It must not be changed by the
+ * method
* @rsdp: Pointer to the Root System Description Pointer, typically used when
* adding a new table. The RSDP holds pointers to the RSDT and XSDT.
* @rsdt: Pointer to the Root System Description Table
@@ -56,6 +59,7 @@ enum acpi_dump_option {
struct acpi_ctx {
void *base;
void *current;
+ void *tab_start;
struct acpi_rsdp *rsdp;
struct acpi_rsdt *rsdt;
struct acpi_xsdt *xsdt;