[PATCH 1/2] x86: acpi: Fix calculation of DSDT length

Andy Shevchenko andriy.shevchenko at linux.intel.com
Wed Sep 9 15:08:17 CEST 2020


On Wed, Sep 09, 2020 at 02:33:20PM +0200, Wolfgang Wallner wrote:
> 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()

Perhaps Fixes: tag?

In any case,
Reviewed-by: Andy Shevchenko <andriy.shevchenko at linux.intel.com>

> Signed-off-by: Wolfgang Wallner <wolfgang.wallner at br-automation.com>
> 
> ---
> 
>  arch/x86/lib/acpi_table.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
> index 3a93fedfc3..6b827bfa3f 100644
> --- a/arch/x86/lib/acpi_table.c
> +++ b/arch/x86/lib/acpi_table.c
> @@ -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.
> -- 
> 2.28.0
> 
> 

-- 
With Best Regards,
Andy Shevchenko




More information about the U-Boot mailing list