summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@google.com>2013-10-10 11:51:45 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-12-06 02:13:49 +0000
commit8912169231e589b0400debed26f9cedbbe6d9561 (patch)
treeaad2329c93c5271a679e385b6fa94b7792c56b69
parenta3d70a3d2b5c052db039d097aaffa42008da24b5 (diff)
downloadvboot-stabilize-5085.B.tar.gz
Disable EC jump after RW image startsstabilize-5085.B
TEST=Built and booted Peppy. Ran flashrom from user space and verified the EC firmware was updated after reboot. CQ-DEPEND=CL:172651, CL:172652, CL:178324 BRANCH=none BUG=chromium:325286 Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Change-Id: Ia73da70dbf3abb5ced48666e86715c8d24a431a0 Reviewed-on: https://chromium-review.googlesource.com/172635 Reviewed-by: Randall Spangler <rspangler@chromium.org> Tested-by: Daisuke Nojiri <dnojiri@google.com> Commit-Queue: Daisuke Nojiri <dnojiri@google.com>
-rw-r--r--firmware/include/vboot_api.h7
-rw-r--r--firmware/lib/vboot_api_kernel.c13
-rw-r--r--firmware/stub/vboot_api_stub.c2
-rw-r--r--tests/vboot_api_kernel3_tests.c5
4 files changed, 17 insertions, 10 deletions
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index 214da753..0ae6c76b 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -752,11 +752,10 @@ VbError_t VbExEcRunningRW(int *in_rw);
VbError_t VbExEcJumpToRW(void);
/**
- * Tell the EC to stay in RO code until it reboots. Subsequent calls to
- * VbExEcJumpToRW() this boot will fail. Fails if the EC is not currently in
- * RO code.
+ * Tell the EC to refuse another jump until it reboots. Subsequent calls to
+ * VbExEcJumpToRW() in this boot will fail.
*/
-VbError_t VbExEcStayInRO(void);
+VbError_t VbExEcDisableJump(void);
/**
* Read the SHA-256 hash of the rewriteable EC image.
diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c
index 4f0b3f20..5c498eea 100644
--- a/firmware/lib/vboot_api_kernel.c
+++ b/firmware/lib/vboot_api_kernel.c
@@ -615,10 +615,10 @@ VbError_t VbEcSoftwareSync(VbCommonParams *cparams)
if (rv != VBERROR_SUCCESS)
return rv;
- rv = VbExEcStayInRO();
+ rv = VbExEcDisableJump();
if (rv != VBERROR_SUCCESS) {
VBDEBUG(("VbEcSoftwareSync() - "
- "VbExEcStayInRO() returned %d\n", rv));
+ "VbExEcDisableJump() returned %d\n", rv));
VbSetRecoveryRequest(VBNV_RECOVERY_EC_SOFTWARE_SYNC);
return VBERROR_EC_REBOOT_TO_RO_REQUIRED;
}
@@ -803,6 +803,15 @@ VbError_t VbEcSoftwareSync(VbCommonParams *cparams)
VbSetRecoveryRequest(VBNV_RECOVERY_EC_JUMP_RW);
return VBERROR_EC_REBOOT_TO_RO_REQUIRED;
}
+ VBDEBUG(("VbEcSoftwareSync() jumped to EC-RW\n"));
+
+ rv = VbExEcDisableJump();
+ if (rv != VBERROR_SUCCESS) {
+ VBDEBUG(("VbEcSoftwareSync() - "
+ "VbExEcDisableJump() returned %d\n", rv));
+ VbSetRecoveryRequest(VBNV_RECOVERY_EC_SOFTWARE_SYNC);
+ return VBERROR_EC_REBOOT_TO_RO_REQUIRED;
+ }
VBDEBUG(("VbEcSoftwareSync() in RW; done\n"));
return VBERROR_SUCCESS;
diff --git a/firmware/stub/vboot_api_stub.c b/firmware/stub/vboot_api_stub.c
index 36d56032..e82be5b2 100644
--- a/firmware/stub/vboot_api_stub.c
+++ b/firmware/stub/vboot_api_stub.c
@@ -91,7 +91,7 @@ VbError_t VbExEcRebootToRO(void)
return VBERROR_UNKNOWN;
}
-VbError_t VbExEcStayInRO(void)
+VbError_t VbExEcDisableJump(void)
{
return VBERROR_SUCCESS;
}
diff --git a/tests/vboot_api_kernel3_tests.c b/tests/vboot_api_kernel3_tests.c
index fa13d4e9..cefbf416 100644
--- a/tests/vboot_api_kernel3_tests.c
+++ b/tests/vboot_api_kernel3_tests.c
@@ -74,7 +74,7 @@ static void ResetMocks(void)
trust_ec = 0;
mock_in_rw = 0;
ec_protected = 0;
- ec_run_image = -1; /* 0 = RO, 1 = RW */
+ ec_run_image = 0; /* 0 = RO, 1 = RW */
ec_updated = 0;
in_rw_retval = VBERROR_SUCCESS;
protect_retval = VBERROR_SUCCESS;
@@ -129,9 +129,8 @@ VbError_t VbExEcProtectRW(void)
return protect_retval;
}
-VbError_t VbExEcStayInRO(void)
+VbError_t VbExEcDisableJump(void)
{
- ec_run_image = 0;
return run_retval;
}