From 33efd98cfd92f4e7c2cfc670c718c5b187f11659 Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Mon, 13 Mar 2017 17:25:36 -0700 Subject: 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 Reviewed-on: https://review.coreboot.org/18798 Tested-by: Martin Roth Reviewed-by: Aaron Durbin --- src/vboot/Kconfig | 4 ++++ src/vboot/secdata_tpm.c | 33 ++++++++++++++++----------------- 2 files changed, 20 insertions(+), 17 deletions(-) (limited to 'src/vboot') 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 -- cgit v1.2.3