mb/ocp/wedge100s/romstage: Workaround broken platform state
Sometimes the platform boots in an invalid state, that will cause FSP-M to fail. As a board_reset() doesn't fix it, issue an full_reset() as soon as the IA32_FEATURE_CONTROL MSR is locked at beging of romstage. Tested on wedge100s. After full reset the system behaves as normal. Change-Id: I1a382b8fb650311b0c24b48e0986d22edfa2d261 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/30290 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
This commit is contained in:
parent
990c84db9d
commit
817994c1be
|
@ -17,6 +17,9 @@
|
|||
#include <stddef.h>
|
||||
#include <soc/romstage.h>
|
||||
#include <drivers/intel/fsp1_0/fsp_util.h>
|
||||
#include <cpu/x86/msr.h>
|
||||
#include <cf9_reset.h>
|
||||
#include <console/console.h>
|
||||
|
||||
/**
|
||||
* /brief mainboard call for setup that needs to be done before fsp init
|
||||
|
@ -24,7 +27,22 @@
|
|||
*/
|
||||
void early_mainboard_romstage_entry(void)
|
||||
{
|
||||
|
||||
/*
|
||||
* Sometimes the system boots in an invalid state, where random values
|
||||
* have been written to MSRs and then the MSRs are locked.
|
||||
* Seems to always happen on warm reset.
|
||||
*
|
||||
* Power cycling or a board_reset() isn't sufficient in this case, so
|
||||
* issue a full_reset() to "fix" this issue.
|
||||
*
|
||||
* It seems to be a deficiency in the reset logic, as other
|
||||
* FSP broadwell DE boards are not affected.
|
||||
*/
|
||||
msr_t msr = rdmsr(IA32_FEATURE_CONTROL);
|
||||
if (msr.lo & 1) {
|
||||
printk(BIOS_EMERG, "Detected broken platform state. Issuing full reset\n");
|
||||
full_reset();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue