]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: Add error checking for csrt table generation
authorSimon Glass <sjg@chromium.org>
Wed, 8 Jul 2020 03:32:24 +0000 (21:32 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Fri, 17 Jul 2020 06:32:24 +0000 (14:32 +0800)
Generation of this table can fail, so update the function to return an
error code.

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>
arch/x86/lib/acpi_table.c

index 8219376e170824c5e067bfd0ea6b4062fec5ac7d..d2bc3386eb05b2b062eed1b13d467bd9a45b092e 100644 (file)
@@ -212,13 +212,14 @@ static void acpi_create_mcfg(struct acpi_mcfg *mcfg)
 
 __weak u32 acpi_fill_csrt(u32 current)
 {
-       return current;
+       return 0;
 }
 
-static void acpi_create_csrt(struct acpi_csrt *csrt)
+static int acpi_create_csrt(struct acpi_csrt *csrt)
 {
        struct acpi_table_header *header = &(csrt->header);
        u32 current = (u32)csrt + sizeof(struct acpi_csrt);
+       uint ptr;
 
        memset((void *)csrt, 0, sizeof(struct acpi_csrt));
 
@@ -227,11 +228,16 @@ static void acpi_create_csrt(struct acpi_csrt *csrt)
        header->length = sizeof(struct acpi_csrt);
        header->revision = 0;
 
-       current = acpi_fill_csrt(current);
+       ptr = acpi_fill_csrt(current);
+       if (!ptr)
+               return -ENOENT;
+       current = ptr;
 
        /* (Re)calculate length and checksum */
        header->length = current - (u32)csrt;
        header->checksum = table_compute_checksum((void *)csrt, header->length);
+
+       return 0;
 }
 
 static void acpi_create_spcr(struct acpi_spcr *spcr)
@@ -482,9 +488,10 @@ ulong write_acpi_tables(ulong start_addr)
 
        debug("ACPI:    * CSRT\n");
        csrt = ctx->current;
-       acpi_create_csrt(csrt);
-       acpi_inc_align(ctx, csrt->header.length);
-       acpi_add_table(ctx, csrt);
+       if (!acpi_create_csrt(csrt)) {
+               acpi_inc_align(ctx, csrt->header.length);
+               acpi_add_table(ctx, csrt);
+       }
 
        debug("ACPI:    * SPCR\n");
        spcr = ctx->current;