aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-11-04 09:57:18 -0700
committerBin Meng <bmeng.cn@gmail.com>2020-11-05 14:58:45 +0800
commit38e498c3a2b5b52e7935516cba0927e0d90c365c (patch)
treefe31ec366ac573b57b44f0f15d2031c565a50622
parent653554b40aa5c1d32e9a6281dc97f1b75eff724b (diff)
downloadu-boot-38e498c3a2b5b52e7935516cba0927e0d90c365c.tar.gz
x86: Allow writing tables to fail
At present write_tables() can fail but does not report this problem to its caller. Fix this by changing the return type. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
-rw-r--r--arch/x86/cpu/cpu.c9
-rw-r--r--arch/x86/include/asm/tables.h4
-rw-r--r--arch/x86/lib/tables.c5
3 files changed, 15 insertions, 3 deletions
diff --git a/arch/x86/cpu/cpu.c b/arch/x86/cpu/cpu.c
index f869275396..71351262f6 100644
--- a/arch/x86/cpu/cpu.c
+++ b/arch/x86/cpu/cpu.c
@@ -18,6 +18,8 @@
* src/arch/x86/lib/cpu.c
*/
+#define LOG_CATEGORY UCLASS_CPU
+
#include <common.h>
#include <bootstage.h>
#include <command.h>
@@ -200,6 +202,7 @@ __weak void board_final_cleanup(void)
int last_stage_init(void)
{
struct acpi_fadt __maybe_unused *fadt;
+ int ret;
board_final_init();
@@ -210,7 +213,11 @@ int last_stage_init(void)
acpi_resume(fadt);
}
- write_tables();
+ ret = write_tables();
+ if (ret) {
+ log_err("Failed to write tables\n");
+ return log_msg_ret("table", ret);
+ }
if (IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE)) {
fadt = acpi_find_fadt();
diff --git a/arch/x86/include/asm/tables.h b/arch/x86/include/asm/tables.h
index f7c72ed3db..bf66e79018 100644
--- a/arch/x86/include/asm/tables.h
+++ b/arch/x86/include/asm/tables.h
@@ -49,8 +49,10 @@ void table_fill_string(char *dest, const char *src, size_t n, char pad);
* This writes x86 configuration tables, including PIRQ routing table,
* Multi-Processor table and ACPI table. Whether a specific type of
* configuration table is written is controlled by a Kconfig option.
+ *
+ * @return 0 if OK, -ENOSPC if table too large
*/
-void write_tables(void);
+int write_tables(void);
/**
* write_pirq_routing_table() - Write PIRQ routing table
diff --git a/arch/x86/lib/tables.c b/arch/x86/lib/tables.c
index 7bad5dd303..7099866a78 100644
--- a/arch/x86/lib/tables.c
+++ b/arch/x86/lib/tables.c
@@ -64,7 +64,7 @@ void table_fill_string(char *dest, const char *src, size_t n, char pad)
dest[i] = pad;
}
-void write_tables(void)
+int write_tables(void)
{
u32 rom_table_start = ROM_TABLE_ADDR;
u32 rom_table_end;
@@ -91,6 +91,7 @@ void write_tables(void)
cfg_tables[i].size = table_size;
} else {
printf("%d: no memory for configuration tables\n", i);
+ return -ENOSPC;
}
#endif
@@ -105,4 +106,6 @@ void write_tables(void)
write_coreboot_table(CB_TABLE_ADDR, cfg_tables);
#endif
debug("- done writing tables\n");
+
+ return 0;
}