In case a TPM in failure mode is detected, the TPM should be accessible through a transparent communication channel for analysing purposes (e.g. TPM_GetTestResult) or a field upgrade. Since a TPM in failure mode has similar reduced functionality as in field upgrade mode, the flag TPM_CHIP_FLAG_FIRMWARE_UPGRADE_MODE is also valid. As described in TCG TPM Main Part1 Design Principles, Revision 116, chapter 9.2.1. the TPM also allows an update function in case a TPM is in failure mode. If the TPM in failure mode is detected, the function tpm1_auto_startup() sets TPM_CHIP_FLAG_FIRMWARE_UPGRADE_MODE flag. This patch simply follows the same rationale as TPM2 in field upgrade mode. Signed-off-by: Stefan Mahnke-Hartmann <stefan.mahnke-hartmann@xxxxxxxxxxxx> --- If you have any better suggestions, please let me know. drivers/char/tpm/tpm1-cmd.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/char/tpm/tpm1-cmd.c b/drivers/char/tpm/tpm1-cmd.c index f7dc986fa4a0..7a42d74c450c 100644 --- a/drivers/char/tpm/tpm1-cmd.c +++ b/drivers/char/tpm/tpm1-cmd.c @@ -710,8 +710,10 @@ int tpm1_auto_startup(struct tpm_chip *chip) goto out; rc = tpm1_do_selftest(chip); if (rc) { - dev_err(&chip->dev, "TPM self test failed\n"); - goto out; + dev_err(&chip->dev, "TPM self test failed, so the TPM has limited functionality\n"); + /* A TPM in this state possibly allows or needs a firmware upgrade */ + chip->flags |= TPM_CHIP_FLAG_FIRMWARE_UPGRADE; + rc = 0; } return rc; -- 2.25.1