tpm_tis: Resend command to recover from data transfer errors

[ Upstream commit 280db21e15 ]

Similar to the transmission of TPM responses, also the transmission of TPM
commands may become corrupted. Instead of aborting when detecting such
issues, try resending the command again.

Signed-off-by: Alexander Steffen <Alexander.Steffen@infineon.com>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Alexander Steffen 2023-06-13 20:02:59 +02:00 committed by Greg Kroah-Hartman
parent c2b226f223
commit b62e8838e9

View file

@ -498,10 +498,17 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len)
int rc;
u32 ordinal;
unsigned long dur;
unsigned int try;
rc = tpm_tis_send_data(chip, buf, len);
if (rc < 0)
return rc;
for (try = 0; try < TPM_RETRY; try++) {
rc = tpm_tis_send_data(chip, buf, len);
if (rc >= 0)
/* Data transfer done successfully */
break;
else if (rc != -EIO)
/* Data transfer failed, not recoverable */
return rc;
}
rc = tpm_tis_verify_crc(priv, len, buf);
if (rc < 0) {