[PATCH v2 08/57] x86: acpi: Support external GNVS tables

Wolfgang Wallner wolfgang.wallner at br-automation.com
Fri Sep 4 16:16:54 CEST 2020


Hi Simon, Bin,

-----"Simon Glass" <sjg at chromium.org> schrieb: -----
> Betreff: [PATCH v2 08/57] x86: acpi: Support external GNVS tables
> 
> At present U-Boot puts a magic number in the ASL for the GNVS table and
> searches for it later.
> 
> Add a Kconfig option to use a different approach, where the ASL files
> declare the table as an external symbol. U-Boot can then put it wherever
> it likes, without any magic numbers or searching.
> 
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---

[snip]
> diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
[snip]
>  	acpi_inc_align(ctx, dsdt->length - sizeof(struct acpi_table_header));
> +	dsdt->length = ctx->current - (void *)dsdt;

While testing the latest series of ACPI patches I saw strange behavior when
booting Linux. Sometimes it would boot, sometimes it would hang, sometimes it
would boot but show ACPI-related errors in dmesg.

Debugging showed that the reason is that the calculated length of the DSDT
in the above code includes any additional bytes that were added for alignment,
and those are not initialized. I gues the Linux ACPI implementation tries to
decode those, and then something crashes.

Changing the above two lines to the following

   acpi_inc(ctx, dsdt->length - sizeof(struct acpi_table_header));
   dsdt->length = ctx->current - (void *)dsdt;
   acpi_align(ctx);
   
fixes the issue for me.

But the issue already exists in the previous code. Would it be better to
send a patch which applies to the currrent master, or on top of the ACPI series?

regards, Wolfgang




More information about the U-Boot mailing list