mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
acpi: Allow creating the GNVS to fail
In some cases an internal error may prevent this from working. Update the function return value and report the error. At present the API for writing tables does not easily support reporting errors, but once it is fully updated to use a context pointer, this will be easier. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
This commit is contained in:
parent
8f9877df95
commit
8d7ff12e63
5 changed files with 27 additions and 6 deletions
|
@ -139,7 +139,7 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
|||
header->checksum = table_compute_checksum(fadt, header->length);
|
||||
}
|
||||
|
||||
void acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
||||
int acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
||||
{
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
@ -159,6 +159,8 @@ void acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
|||
gnvs->iuart_en = 1;
|
||||
else
|
||||
gnvs->iuart_en = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -133,8 +133,10 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
|||
header->checksum = table_compute_checksum(fadt, header->length);
|
||||
}
|
||||
|
||||
void acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
||||
int acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
||||
{
|
||||
/* quark is a uni-processor */
|
||||
gnvs->pcnt = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -107,7 +107,7 @@ u32 acpi_fill_csrt(u32 current)
|
|||
return current;
|
||||
}
|
||||
|
||||
void acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
||||
int acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
||||
{
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
@ -122,4 +122,6 @@ void acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
|||
if (ret > 0)
|
||||
gnvs->pcnt = ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,15 @@ int acpi_create_mcfg_mmconfig(struct acpi_mcfg_mmconfig *mmconfig, u32 base,
|
|||
u16 seg_nr, u8 start, u8 end);
|
||||
u32 acpi_fill_mcfg(u32 current);
|
||||
u32 acpi_fill_csrt(u32 current);
|
||||
void acpi_create_gnvs(struct acpi_global_nvs *gnvs);
|
||||
|
||||
/**
|
||||
* acpi_create_gnvs() - Create a GNVS (Global Non Volatile Storage) table
|
||||
*
|
||||
* @gnvs: Table to fill in
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int acpi_create_gnvs(struct acpi_global_nvs *gnvs);
|
||||
|
||||
ulong write_acpi_tables(ulong start);
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <asm/tables.h>
|
||||
#include <asm/arch/global_nvs.h>
|
||||
#include <dm/acpi.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
/*
|
||||
* IASL compiles the dsdt entries and writes the hex values
|
||||
|
@ -443,8 +444,14 @@ ulong write_acpi_tables(ulong start_addr)
|
|||
dsdt->checksum = 0;
|
||||
dsdt->checksum = table_compute_checksum((void *)dsdt, dsdt->length);
|
||||
|
||||
/* Fill in platform-specific global NVS variables */
|
||||
acpi_create_gnvs(ctx->current);
|
||||
/*
|
||||
* Fill in platform-specific global NVS variables. If this fails we
|
||||
* cannot return the error but this should only happen while debugging.
|
||||
*/
|
||||
addr = acpi_create_gnvs(ctx->current);
|
||||
if (IS_ERR_VALUE(addr))
|
||||
printf("Error: Failed to create GNVS\n");
|
||||
|
||||
acpi_inc_align(ctx, sizeof(struct acpi_global_nvs));
|
||||
|
||||
debug("ACPI: * FADT\n");
|
||||
|
|
Loading…
Reference in a new issue