diff mbox series

[v1,04/43] acpi: Allow creating the GNVS to fail

Message ID 20200614215726.v1.4.Id6c2992321a188f3fa0eacc84bbd5568b6e750fe@changeid
State Accepted
Commit 8d7ff12e635f255afce74767a78d7584abbbaed0
Headers show
Series x86: Programmatic generation of ACPI tables (Part C) | expand

Commit Message

Simon Glass June 15, 2020, 3:56 a.m. UTC
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 at chromium.org>
---

Changes in v1:
- Add linux/err.h header

 arch/x86/cpu/baytrail/acpi.c      |  4 +++-
 arch/x86/cpu/quark/acpi.c         |  4 +++-
 arch/x86/cpu/tangier/acpi.c       |  4 +++-
 arch/x86/include/asm/acpi_table.h | 10 +++++++++-
 arch/x86/lib/acpi_table.c         | 11 +++++++++--
 5 files changed, 27 insertions(+), 6 deletions(-)

Comments

Wolfgang Wallner June 25, 2020, 12:45 p.m. UTC | #1
Hi Simon,

-----"Simon Glass" <sjg at chromium.org> schrieb: -----
> Betreff: [PATCH v1 04/43] 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 at chromium.org>
> ---
> 
> Changes in v1:
> - Add linux/err.h header
> 
>  arch/x86/cpu/baytrail/acpi.c      |  4 +++-
>  arch/x86/cpu/quark/acpi.c         |  4 +++-
>  arch/x86/cpu/tangier/acpi.c       |  4 +++-
>  arch/x86/include/asm/acpi_table.h | 10 +++++++++-
>  arch/x86/lib/acpi_table.c         | 11 +++++++++--
>  5 files changed, 27 insertions(+), 6 deletions(-)
> 

[snip]

> diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
> index eeacfe9b06..27869a0e5e 100644
> --- a/arch/x86/lib/acpi_table.c
> +++ b/arch/x86/lib/acpi_table.c
> @@ -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: Gailed to create GNVS\n");

Typo: Failed

> +
>  	acpi_inc_align(ctx, sizeof(struct acpi_global_nvs));
>  
>  	debug("ACPI:    * FADT\n");
> -- 
> 2.27.0.290.gba653c62da-goog

Reviewed-by: Wolfgang Wallner <wolfgang.wallner at br-automation.com>
Bin Meng June 30, 2020, 2:36 a.m. UTC | #2
On Mon, Jun 15, 2020 at 11:57 AM Simon Glass <sjg at chromium.org> wrote:
>
> 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 at chromium.org>
> ---
>
> Changes in v1:
> - Add linux/err.h header
>
>  arch/x86/cpu/baytrail/acpi.c      |  4 +++-
>  arch/x86/cpu/quark/acpi.c         |  4 +++-
>  arch/x86/cpu/tangier/acpi.c       |  4 +++-
>  arch/x86/include/asm/acpi_table.h | 10 +++++++++-
>  arch/x86/lib/acpi_table.c         | 11 +++++++++--
>  5 files changed, 27 insertions(+), 6 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
diff mbox series

Patch

diff --git a/arch/x86/cpu/baytrail/acpi.c b/arch/x86/cpu/baytrail/acpi.c
index b17bc62a2d..07757b88a3 100644
--- a/arch/x86/cpu/baytrail/acpi.c
+++ b/arch/x86/cpu/baytrail/acpi.c
@@ -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;
 }
 
 /*
diff --git a/arch/x86/cpu/quark/acpi.c b/arch/x86/cpu/quark/acpi.c
index 26cda3b337..b0406a04e9 100644
--- a/arch/x86/cpu/quark/acpi.c
+++ b/arch/x86/cpu/quark/acpi.c
@@ -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;
 }
diff --git a/arch/x86/cpu/tangier/acpi.c b/arch/x86/cpu/tangier/acpi.c
index 4ec8fdd6f8..41bd177e09 100644
--- a/arch/x86/cpu/tangier/acpi.c
+++ b/arch/x86/cpu/tangier/acpi.c
@@ -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;
 }
diff --git a/arch/x86/include/asm/acpi_table.h b/arch/x86/include/asm/acpi_table.h
index 928475cef4..733085c178 100644
--- a/arch/x86/include/asm/acpi_table.h
+++ b/arch/x86/include/asm/acpi_table.h
@@ -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);
 
 /**
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
index eeacfe9b06..27869a0e5e 100644
--- a/arch/x86/lib/acpi_table.c
+++ b/arch/x86/lib/acpi_table.c
@@ -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: Gailed to create GNVS\n");
+
 	acpi_inc_align(ctx, sizeof(struct acpi_global_nvs));
 
 	debug("ACPI:    * FADT\n");