Call the new core function to inject ASL programmatically into the DSDT.
This is made up of fragments generated by devices that have the
inject_dsdt() method. The normal, compiled ASL file is added after this.

Signed-off-by: Simon Glass <s...@chromium.org>
---

Changes in v1: None

 arch/x86/lib/acpi_table.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
index 0af9d47050..8587ed4344 100644
--- a/arch/x86/lib/acpi_table.c
+++ b/arch/x86/lib/acpi_table.c
@@ -431,7 +431,20 @@ ulong write_acpi_tables(ulong start_addr)
        memcpy(ctx->current,
               (char *)&AmlCode + sizeof(struct acpi_table_header),
               dsdt->length - sizeof(struct acpi_table_header));
-       acpi_inc_align(ctx, dsdt->length - sizeof(struct acpi_table_header));
+
+       if (dsdt->length >= sizeof(struct acpi_table_header)) {
+               acpi_inject_dsdt(ctx);
+               memcpy(ctx->current,
+                      (char *)AmlCode + sizeof(struct acpi_table_header),
+                      dsdt->length - sizeof(struct acpi_table_header));
+               acpi_inc(ctx, dsdt->length - sizeof(struct acpi_table_header));
+
+               /* (Re)calculate length and checksum. */
+               dsdt->length = ctx->current - (void *)dsdt;
+               dsdt->checksum = 0;
+               dsdt->checksum = table_compute_checksum(dsdt, dsdt->length);
+       }
+       acpi_align(ctx);
 
        /* Pack GNVS into the ACPI table area */
        for (i = 0; i < dsdt->length; i++) {
-- 
2.26.2.303.gf8c07b1a785-goog

Reply via email to