]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: acpi: Fix calculation of DSDT length
authorWolfgang Wallner <wolfgang.wallner@br-automation.com>
Wed, 16 Sep 2020 14:57:52 +0000 (16:57 +0200)
committerBin Meng <bmeng.cn@gmail.com>
Mon, 21 Sep 2020 08:41:35 +0000 (16:41 +0800)
Currently, the calculation for the length of the DSDT table includes any
bytes that are added for alignment, but those bytes are not initialized.

This is because the DSDT length is calculated after a call to
acpi_inc_align(). Split this up into the following sequence:

  * acpi_inc()
  * Calculate DSDT length
  * acpi_align()

Signed-off-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/lib/acpi_table.c

index 3a93fedfc3e9bb3257e030201d46afc76c6809ee..6b827bfa3f6901e69309934e9b8037a929ac7c5e 100644 (file)
@@ -427,7 +427,7 @@ ulong write_acpi_tables(ulong start_addr)
               (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));
+       acpi_inc(ctx, dsdt->length - sizeof(struct acpi_table_header));
 
        /* Pack GNVS into the ACPI table area */
        for (i = 0; i < dsdt->length; i++) {
@@ -450,6 +450,8 @@ ulong write_acpi_tables(ulong start_addr)
        dsdt->checksum = 0;
        dsdt->checksum = table_compute_checksum((void *)dsdt, dsdt->length);
 
+       acpi_align(ctx);
+
        /*
         * Fill in platform-specific global NVS variables. If this fails we
         * cannot return the error but this should only happen while debugging.