summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/include/vboot_api.h13
-rw-r--r--firmware/lib/vboot_api_kernel.c5
-rw-r--r--firmware/stub/vboot_api_stub.c5
3 files changed, 23 insertions, 0 deletions
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index 18ee4cc1..ff858acb 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -925,6 +925,19 @@ VbError_t VbExEcProtectRW(int devidx);
enum VbEcBootMode_t {VB_EC_NORMAL, VB_EC_DEVELOPER, VB_EC_RECOVERY };
VbError_t VbExEcEnteringMode(int devidx, enum VbEcBootMode_t mode);
+/**
+ * Perform EC post-verification / updating / jumping actions.
+ *
+ * This routine is called to perform certain actions that must wait until
+ * after the EC resides in its `final` image (the image the EC will
+ * run for the duration of boot). These actions include verifying that
+ * enough power is available to continue with boot.
+ *
+ * @param in_recovery 1 if recovery mode is selected by the AP, 0 otherwise.
+ * @return VBERROR_... error, VBERROR_SUCCESS on success.
+ */
+VbError_t VbExEcVbootDone(int in_recovery);
+
/*****************************************************************************/
/* Misc */
diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c
index 94c2c8a7..2bf183b3 100644
--- a/firmware/lib/vboot_api_kernel.c
+++ b/firmware/lib/vboot_api_kernel.c
@@ -1047,6 +1047,11 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams *cparams,
}
}
+ /* EC verification (and possibily updating / jumping) is done */
+ retval = VbExEcVbootDone(!!shared->recovery_reason);
+ if (retval != VBERROR_SUCCESS)
+ goto VbSelectAndLoadKernel_exit;
+
/* Read kernel version from the TPM. Ignore errors in recovery mode. */
tpm_status = RollbackKernelRead(&shared->kernel_version_tpm);
if (0 != tpm_status) {
diff --git a/firmware/stub/vboot_api_stub.c b/firmware/stub/vboot_api_stub.c
index 33aee93d..23e3dfbe 100644
--- a/firmware/stub/vboot_api_stub.c
+++ b/firmware/stub/vboot_api_stub.c
@@ -159,6 +159,11 @@ VbError_t VbExEcEnteringMode(int devidx, enum VbEcBootMode_t mode)
return VBERROR_SUCCESS;
}
+VbError_t VbExEcVbootDone(int in_recovery)
+{
+ return VBERROR_SUCCESS;
+}
+
enum VbEcBootMode_t VbGetMode(void)
{
return vboot_mode;