haswell: RESET_ON_INVALID_RAMSTAGE_CACHE option
The RESET_ON_INVALID_RAMSTAGE_CACHE option indicates what to do when the ramstage cache is found to be invalid on a S3 wake. If selected the system will perform a system reset on S3 wake when the ramstage cache is invalid. Otherwise it will signal to load the ramstage from cbfs. Change-Id: I8f21fcfc7f95fb3377ed2932868aa49a68904803 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/2807 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
parent
f7cdfe5b32
commit
b86113fd9a
|
@ -41,4 +41,16 @@ config MICROCODE_INCLUDE_PATH
|
|||
string
|
||||
default "src/cpu/intel/haswell"
|
||||
|
||||
config RESET_ON_INVALID_RAMSTAGE_CACHE
|
||||
bool "Reset the system on S3 wake when ramstage cache invalid."
|
||||
default n
|
||||
depends on RELOCATABLE_RAMSTAGE
|
||||
help
|
||||
The haswell romstage code caches the loaded ramstage program
|
||||
in SMM space. On S3 wake the romstage will copy over a fresh
|
||||
ramstage that was cached in the SMM space. This option determines
|
||||
the action to take when the ramstage cache is invalid. If selected
|
||||
the system will reset otherwise the ramstage will be reloaded from
|
||||
cbfs.
|
||||
|
||||
endif
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <cbmem.h>
|
||||
#include <cbfs.h>
|
||||
#include <romstage_handoff.h>
|
||||
#include <reset.h>
|
||||
#if CONFIG_CHROMEOS
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
#endif
|
||||
|
@ -46,6 +47,14 @@
|
|||
#include "southbridge/intel/lynxpoint/me.h"
|
||||
|
||||
|
||||
static inline void reset_system(void)
|
||||
{
|
||||
hard_reset();
|
||||
while (1) {
|
||||
hlt();
|
||||
}
|
||||
}
|
||||
|
||||
/* The cache-as-ram assembly file calls romstage_main() after setting up
|
||||
* cache-as-ram. romstage_main() will then call the mainboards's
|
||||
* mainboard_romstage_entry() function. That function then calls
|
||||
|
@ -271,10 +280,7 @@ void romstage_common(const struct romstage_params *params)
|
|||
#if CONFIG_HAVE_ACPI_RESUME
|
||||
if (wake_from_s3 && !cbmem_was_initted) {
|
||||
/* Failed S3 resume, reset to come up cleanly */
|
||||
outb(0x6, 0xcf9);
|
||||
while (1) {
|
||||
hlt();
|
||||
}
|
||||
reset_system();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -375,6 +381,9 @@ void *load_cached_ramstage(struct romstage_handoff *handoff)
|
|||
|
||||
if (cache->magic != RAMSTAGE_CACHE_MAGIC) {
|
||||
printk(BIOS_DEBUG, "Invalid ramstage cache found.\n");
|
||||
#if CONFIG_RESET_ON_INVALID_RAMSTAGE_CACHE
|
||||
reset_system();
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue