vboot: push clear recovery mode switch until BS_WRITE_TABLES
Serves two purposes: (1) On some platforms, FSP initialization may cause a reboot. Push clearing the recovery mode switch until after FSP code runs, so that a manual recovery request (three-finger salute) will function correctly under this condition. (2) The recovery mode switch value is needed at BS_WRITE_TABLES for adding an event to elog. (Previously this was done by stashing the value in CBMEM_ID_EC_HOSTEVENT.) BUG=b:124141368, b:35576380 TEST=make clean && make test-abuild BRANCH=none Change-Id: I30c02787c620b937e5a50a5ed94ac906e3112dad Signed-off-by: Joel Kitching <kitching@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38779 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
@ -101,14 +101,27 @@ int vboot_recovery_mode_enabled(void)
|
||||
|
||||
int __weak clear_recovery_mode_switch(void)
|
||||
{
|
||||
// Weak implementation. Nothing to do.
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __weak log_recovery_mode_switch(void)
|
||||
static void do_clear_recovery_mode_switch(void *unused)
|
||||
{
|
||||
// Weak implementation. Nothing to do.
|
||||
if (vboot_get_context()->flags & VB2_CONTEXT_FORCE_RECOVERY_MODE)
|
||||
clear_recovery_mode_switch();
|
||||
}
|
||||
/*
|
||||
* The recovery mode switch (typically backed by EC) is not cleared until
|
||||
* BS_WRITE_TABLES for two reasons:
|
||||
*
|
||||
* (1) On some platforms, FSP initialization may cause a reboot. Push clearing
|
||||
* the recovery mode switch until after FSP code runs, so that a manual recovery
|
||||
* request (three-finger salute) will function correctly under this condition.
|
||||
*
|
||||
* (2) To give the implementation of clear_recovery_mode_switch a chance to
|
||||
* add an event to elog. See the function in chromeec/switches.c.
|
||||
*/
|
||||
BOOT_STATE_INIT_ENTRY(BS_WRITE_TABLES, BS_ON_ENTRY,
|
||||
do_clear_recovery_mode_switch, NULL);
|
||||
|
||||
int __weak get_recovery_mode_retrain_switch(void)
|
||||
{
|
||||
|
Reference in New Issue
Block a user