[Skiboot] [PATCH] astbmc: Handle failure to initialise raw flash

Andrew Jeffery andrew at aj.id.au
Wed Mar 20 17:16:20 AEDT 2019


Initialising raw flash lead to a dead assignment to rc. Check the return
code and take the failure path as necessary. Both before and after the
fix we see output along the lines of the following when flash_init()
fails:

[   53.283182881,7] IRQ: Registering 0800..0ff7 ops @0x300d4b98 (data 0x3052b9d8)
[   53.283184335,7] IRQ: Registering 0ff8..0fff ops @0x300d4bc8 (data 0x3052b9d8)
[   53.283185513,7] PHB#0000: Initializing PHB...
[   53.288260827,4] FLASH: Can't load resource id:0. No system flash found
[   53.288354442,4] FLASH: Can't load resource id:1. No system flash found
[   53.342933439,3] CAPP: Error loading ucode lid. index=200ea
[   53.462749486,2] NVRAM: Failed to load
[   53.462819095,2] NVRAM: Failed to load
[   53.462894236,2] NVRAM: Failed to load
[   53.462967071,2] NVRAM: Failed to load
[   53.463033077,2] NVRAM: Failed to load
[   53.463144847,2] NVRAM: Failed to load

Eventually followed by:

[   57.216942479,5] INIT: platform wait for kernel load failed
[   57.217051132,5] INIT: Assuming kernel at 0x20000000
[   57.217127508,3] INIT: ELF header not found. Assuming raw binary.
[   57.217249886,2] NVRAM: Failed to load
[   57.221294487,0] FATAL: Kernel is zeros, can't execute!
[   57.221397429,0] Assert fail: core/init.c:615:0
[   57.221471414,0] Aborting!
CPU 0028 Backtrace:
 S: 0000000031d43c60 R: 000000003001b274   ._abort+0x4c
 S: 0000000031d43ce0 R: 000000003001b2f0   .assert_fail+0x34
 S: 0000000031d43d60 R: 0000000030014814   .load_and_boot_kernel+0xae4
 S: 0000000031d43e30 R: 0000000030015164   .main_cpu_entry+0x680
 S: 0000000031d43f00 R: 0000000030002718   boot_entry+0x1c0
 --- OPAL boot ---

Analysis of the execution paths suggests we'll always "safely" end this
way due the setup sequence for the blocklevel callbacks in flash_init()
and error handling in blocklevel_get_info(), and there's no current risk
of executing from unexpected memory locations. As such the issue is
reduced to down to a fix for poor error hygene in the original change
and a resolution for a Coverity warning (famous last words etc).

Fixes: c826e1ca9e5b ("astbmc: Try IPMI HIOMAP for P8 (again)")
Signed-off-by: Andrew Jeffery <andrew at aj.id.au>
---
 platforms/astbmc/pnor.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/platforms/astbmc/pnor.c b/platforms/astbmc/pnor.c
index 1c364351e065..6c1d287220b4 100644
--- a/platforms/astbmc/pnor.c
+++ b/platforms/astbmc/pnor.c
@@ -79,8 +79,11 @@ int pnor_init(void)
 		goto fail;
 	}
 
-	if (style == raw_flash || style == raw_mem)
+	if (style == raw_flash || style == raw_mem) {
 	    rc = flash_init(pnor_ctrl, &bl, NULL);
+	    if (rc)
+		goto fail;
+	}
 
 	rc = flash_register(bl);
 	if (!rc)
-- 
2.19.1



More information about the Skiboot mailing list