summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLee Leahy <leroy.p.leahy@intel.com>2017-03-13 17:25:36 -0700
committerLee Leahy <leroy.p.leahy@intel.com>2017-03-14 23:10:00 +0100
commit33efd98cfd92f4e7c2cfc670c718c5b187f11659 (patch)
tree879770fd98418a312ad4aa44edf0591e2e13c3b2
parentc253a92299d832a39af4bed1818255ab61674d10 (diff)
vboot: Allow other platforms to use soft reboot workaround
Add a Kconfig value to enable other platforms to use the soft reboot workaround. TEST=Build and run on Galileo Gen2 Change-Id: I5a7ebd200229654128d367ecb50647ff69bb5258 Signed-off-by: Lee Leahy <leroy.p.leahy@intel.com> Reviewed-on: https://review.coreboot.org/18798 Tested-by: Martin Roth <martinroth@google.com> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r--src/vboot/Kconfig4
-rw-r--r--src/vboot/secdata_tpm.c33
2 files changed, 20 insertions, 17 deletions
diff --git a/src/vboot/Kconfig b/src/vboot/Kconfig
index b5c862620f..e67c108d4a 100644
--- a/src/vboot/Kconfig
+++ b/src/vboot/Kconfig
@@ -142,6 +142,10 @@ config VBOOT_HAS_REC_HASH_SPACE
Set this option to indicate to vboot that recovery data hash space
is present in TPM.
+config VBOOT_SOFT_REBOOT_WORKAROUND
+ bool
+ default n
+
config VBOOT
bool "Verify firmware with vboot."
default n
diff --git a/src/vboot/secdata_tpm.c b/src/vboot/secdata_tpm.c
index c5d08ce27f..37bba80f06 100644
--- a/src/vboot/secdata_tpm.c
+++ b/src/vboot/secdata_tpm.c
@@ -424,23 +424,22 @@ uint32_t setup_tpm(struct vb2_context *ctx)
return TPM_SUCCESS;
}
-#ifdef TEGRA_SOFT_REBOOT_WORKAROUND
- result = tlcl_startup();
- if (result == TPM_E_INVALID_POSTINIT) {
- /*
- * Some prototype hardware doesn't reset the TPM on a CPU
- * reset. We do a hard reset to get around this.
- */
- VBDEBUG("TPM: soft reset detected\n", result);
- ctx->flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT;
- return TPM_E_MUST_REBOOT;
- } else if (result != TPM_SUCCESS) {
- VBDEBUG("TPM: tlcl_startup returned %08x\n", result);
- return result;
- }
-#else
- RETURN_ON_FAILURE(tlcl_startup());
-#endif
+ if (IS_ENABLED(CONFIG_VBOOT_SOFT_REBOOT_WORKAROUND)) {
+ result = tlcl_startup();
+ if (result == TPM_E_INVALID_POSTINIT) {
+ /*
+ * Some prototype hardware doesn't reset the TPM on a CPU
+ * reset. We do a hard reset to get around this.
+ */
+ VBDEBUG("TPM: soft reset detected\n");
+ ctx->flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT;
+ return TPM_E_MUST_REBOOT;
+ } else if (result != TPM_SUCCESS) {
+ VBDEBUG("TPM: tlcl_startup returned %08x\n", result);
+ return result;
+ }
+ } else
+ RETURN_ON_FAILURE(tlcl_startup());
/*
* Some TPMs start the self test automatically at power on. In that case