aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/tpm/tpm2-cmd.c
diff options
context:
space:
mode:
authorStefan Mahnke-Hartmann <stefan.mahnke-hartmann@infineon.com>2022-05-13 15:41:53 +0200
committerJarkko Sakkinen <jarkko@kernel.org>2022-05-23 18:47:50 +0300
commitaf402ee3c045b0cbd10b7e66d2431304ac9e69bb (patch)
treece57a42d24ae8695f6d94e1596e70cc34fec6235 /drivers/char/tpm/tpm2-cmd.c
parenttpm: Fix buffer access in tpm2_get_tpm_pt() (diff)
downloadlinux-dev-af402ee3c045b0cbd10b7e66d2431304ac9e69bb.tar.xz
linux-dev-af402ee3c045b0cbd10b7e66d2431304ac9e69bb.zip
tpm: Add field upgrade mode support for Infineon TPM2 modules
TPM2_GetCapability with a capability that has the property type value of TPM_PT_TOTAL_COMMANDS returns a zero length list, when an Infineon TPM2 is in field upgrade mode. Since an Infineon TPM2.0 in field upgrade mode returns RC_SUCCESS on TPM2_Startup, the field upgrade mode has to be detected by TPM2_GetCapability. Signed-off-by: Stefan Mahnke-Hartmann <stefan.mahnke-hartmann@infineon.com> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
Diffstat (limited to 'drivers/char/tpm/tpm2-cmd.c')
-rw-r--r--drivers/char/tpm/tpm2-cmd.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c
index 04a3e23a4afc..c1eb5d223839 100644
--- a/drivers/char/tpm/tpm2-cmd.c
+++ b/drivers/char/tpm/tpm2-cmd.c
@@ -754,7 +754,11 @@ int tpm2_auto_startup(struct tpm_chip *chip)
rc = tpm2_get_cc_attrs_tbl(chip);
out:
- if (rc == TPM2_RC_UPGRADE) {
+ /*
+ * Infineon TPM in field upgrade mode will return no data for the number
+ * of supported commands.
+ */
+ if (rc == TPM2_RC_UPGRADE || rc == -ENODATA) {
dev_info(&chip->dev, "TPM in field upgrade mode, requires firmware upgrade\n");
chip->flags |= TPM_CHIP_FLAG_FIRMWARE_UPGRADE;
rc = 0;