aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Jeffery <andrew@aj.id.au>2019-03-20 16:46:20 +1030
committerStewart Smith <stewart@linux.ibm.com>2019-03-28 15:24:13 +1100
commit6225d11924933f0541fd3b1a6192a7fcda279f1f (patch)
tree078950d0a09944ec2cd66ac0f14d0f3f6484cdb5
parent027d87475eff7d57b1bf996e4d633e880f571a22 (diff)
downloadskiboot-6225d11924933f0541fd3b1a6192a7fcda279f1f.zip
skiboot-6225d11924933f0541fd3b1a6192a7fcda279f1f.tar.gz
skiboot-6225d11924933f0541fd3b1a6192a7fcda279f1f.tar.bz2
astbmc: Handle failure to initialise raw flash
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@aj.id.au> Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
-rw-r--r--platforms/astbmc/pnor.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/platforms/astbmc/pnor.c b/platforms/astbmc/pnor.c
index 1c36435..6c1d287 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)