Patrick Georgi has submitted this change. ( https://review.coreboot.org/c/coreboot/+/51940 )
Change subject: nb/intel/haswell: Ensure MCH has acked raminit ......................................................................
nb/intel/haswell: Ensure MCH has acked raminit
Haswell MRC.bin can return zero even when raminit did not complete successfully. When this happens, the memory controller will not have acknowledged raminit: the mc_init_done_ack bit in the MC_INIT_STATE_G register will be zero, and memory accesses will lock up the system.
To handle this situation more gracefully, check the mc_init_done_ack bit after running MRC. If the bit is not set, log a fatal error and halt.
Tested on Asrock B85M Pro4: - With badly-seated DIMMs, MRC raminit fails and coreboot dies. - After reseating the DIMMs, the board still boots successfully.
Change-Id: I144bf827f65cd0be319c44bf3d407ddc116b129d Signed-off-by: Angel Pons th3fanbus@gmail.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/51940 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Arthur Heymans arthur@aheymans.xyz --- M src/northbridge/intel/haswell/raminit.c 1 file changed, 10 insertions(+), 0 deletions(-)
Approvals: build bot (Jenkins): Verified Arthur Heymans: Looks good to me, approved
diff --git a/src/northbridge/intel/haswell/raminit.c b/src/northbridge/intel/haswell/raminit.c index 5da1129..ff2456b 100644 --- a/src/northbridge/intel/haswell/raminit.c +++ b/src/northbridge/intel/haswell/raminit.c @@ -169,6 +169,16 @@ (version >> 24) & 0xff, (version >> 16) & 0xff, (version >> 8) & 0xff, (version >> 0) & 0xff);
+ /* + * MRC may return zero even when raminit did not complete successfully. + * Ensure the mc_init_done_ack bit is set before continuing. Otherwise, + * attempting to access memory will lock up the system. + */ + if (!(MCHBAR32(MC_INIT_STATE_G) & (1 << 5))) { + printk(BIOS_EMERG, "Memory controller did not acknowledge raminit.\n"); + die("MRC raminit failed\n"); + } + report_memory_config(); }