Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff75c853 authored by Alexander Steffen's avatar Alexander Steffen Committed by Greg Kroah-Hartman
Browse files

tpm_tis: Resend command to recover from data transfer errors



[ Upstream commit 280db21e153d8810ce3b93640c63ae922bcb9e8e ]

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: default avatarAlexander Steffen <Alexander.Steffen@infineon.com>
Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 61f5453e
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -421,10 +421,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;

	for (try = 0; try < TPM_RETRY; try++) {
		rc = tpm_tis_send_data(chip, buf, len);
	if (rc < 0)
		if (rc >= 0)
			/* Data transfer done successfully */
			break;
		else if (rc != -EIO)
			/* Data transfer failed, not recoverable */
			return rc;
	}

	/* go and do it */
	rc = tpm_tis_write8(priv, TPM_STS(priv->locality), TPM_STS_GO);