]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
acpi: Allow creating the GNVS to fail
authorSimon Glass <sjg@chromium.org>
Wed, 8 Jul 2020 03:32:05 +0000 (21:32 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Fri, 17 Jul 2020 06:32:24 +0000 (14:32 +0800)
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>
arch/x86/cpu/baytrail/acpi.c
arch/x86/cpu/quark/acpi.c
arch/x86/cpu/tangier/acpi.c
arch/x86/include/asm/acpi_table.h
arch/x86/lib/acpi_table.c

index b17bc62a2dbbde1c405ee3a6600b06ed6c56db6b..07757b88a305461aa1dc9346d20f061d2019dbb3 100644 (file)
@@ -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;
 }
 
 /*
index 26cda3b3376434fd563ea832a7957ddc2e2f4466..b0406a04e92b39b8fa5ed9ab8bbf75ec73c71151 100644 (file)
@@ -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;
 }
index 4ec8fdd6f89ffcc20beb45fa3a2a808ca8597cb7..41bd177e095f5613ea0a329be94449b8ba23151c 100644 (file)
@@ -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;
 }
index 928475cef4e98a5964522f3e5e2c1c06a60667fe..733085c178519bc2da090755aa6875c7a87cf1bc 100644 (file)
@@ -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);
 
 /**
index eeacfe9b06ce6fc0fe8c5da57bf0cca7c58371f3..8219376e170824c5e067bfd0ea6b4062fec5ac7d 100644 (file)
@@ -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");