vboot_wrapper: handling VBERROR_TPM_REBOOT_REQUIRED from VbInit().
Doing reset while VBERROR_TPM_REBOOT_REQUIRED occured.
BUG=chromium:389568
TEST=Manual force VBERROR_TPM_REBOOT_REQUIRED returned from VbInit()
and system will reboot.
Change-Id: I9d7c4b3a380a931a728f792b4013b3b9bf65dfae
Signed-off-by: Kevin Cheng <kevin.cheng@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/206337
Reviewed-by: Randall Spangler <rspangler@chromium.org>
(cherry picked from commit 32728dd9fc43a95d6f763a85f9cc7a660a66b175)
Reviewed-on: https://chromium-review.googlesource.com/206948
Reviewed-by: Shawn Nematbakhsh <shawnn@chromium.org>
This commit is contained in:
parent
76e08d0cb0
commit
1ea5e23338
3 changed files with 13 additions and 1 deletions
|
|
@ -57,6 +57,7 @@ struct vboot_context {
|
|||
void (*log_msg)(const char *fmt, va_list args);
|
||||
void (*fatal_error)(void);
|
||||
void *(*get_region)(uintptr_t offset_addr, size_t size, void *dest);
|
||||
void (*reset)(void);
|
||||
};
|
||||
|
||||
#endif /* VBOOT_CONTEXT_H */
|
||||
|
|
|
|||
|
|
@ -229,6 +229,11 @@ static void vboot_clean_up(struct vboot_context *context)
|
|||
cbmem_entry_remove(context->vblocks);
|
||||
}
|
||||
|
||||
static void reset(void)
|
||||
{
|
||||
hard_reset();
|
||||
}
|
||||
|
||||
static void vboot_invoke_wrapper(struct vboot_handoff *vboot_handoff)
|
||||
{
|
||||
VbCommonParams cparams;
|
||||
|
|
@ -298,6 +303,7 @@ static void vboot_invoke_wrapper(struct vboot_handoff *vboot_handoff)
|
|||
context.log_msg = &log_msg;
|
||||
context.fatal_error = &fatal_error;
|
||||
context.get_region = &vboot_get_region;
|
||||
context.reset = &reset;
|
||||
|
||||
vboot_run_stub(&context);
|
||||
|
||||
|
|
|
|||
|
|
@ -43,8 +43,13 @@ static void vboot_wrapper(void *arg)
|
|||
res = VbInit(context->cparams, &context->handoff->init_params);
|
||||
VbExDebug("VbInit() returned 0x%08x\n", res);
|
||||
|
||||
if (res != VBERROR_SUCCESS)
|
||||
if (res != VBERROR_SUCCESS) {
|
||||
if(res == VBERROR_TPM_REBOOT_REQUIRED) {
|
||||
VbExDebug("TPM Reboot Required. Proceeding reboot.\n");
|
||||
gcontext->reset();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
VbExDebug("Calling VbSelectFirmware()\n");
|
||||
res = VbSelectFirmware(context->cparams, context->fparams);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue