git: e4c50d86796d - main - tpm_tis: release TPM resources after reading response

From: Olivier Cochard <olivier_at_FreeBSD.org>
Date: Fri, 26 Jun 2026 19:57:07 UTC
The branch main has been updated by olivier:

URL: https://cgit.FreeBSD.org/src/commit/?id=e4c50d86796d07cf90e6a683234e1c0e9ca5e03c

commit e4c50d86796d07cf90e6a683234e1c0e9ca5e03c
Author:     Olivier Cochard <olivier@FreeBSD.org>
AuthorDate: 2026-06-26 19:20:30 +0000
Commit:     Olivier Cochard <olivier@FreeBSD.org>
CommitDate: 2026-06-26 19:56:17 +0000

    tpm_tis: release TPM resources after reading response
    
    Per TIS 1.3 section 5.6.12, write commandReady to TPM_STS after reading the
    response so the TPM can free its ReadFIFO and other internal resources.
    The subsequent tpmtis_go_ready() provides the second write the spec describes
    and waits for the state transition.
    
    PR:             295103
    Reported by:    Benoit Sansoni <benoit.sansoni@gmail.com>
    Reviewed by:    kevans
    Approved by:    kevans
    Differential Revision:  https://reviews.freebsd.org/D57841
---
 sys/dev/tpm/tpm_tis_core.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/sys/dev/tpm/tpm_tis_core.c b/sys/dev/tpm/tpm_tis_core.c
index f49a1f982e82..95e914fa570b 100644
--- a/sys/dev/tpm/tpm_tis_core.c
+++ b/sys/dev/tpm/tpm_tis_core.c
@@ -474,6 +474,16 @@ tpmtis_transmit(device_t dev, struct tpm_priv *priv, size_t length)
 		    "Failed to read response\n");
 		return (EIO);
 	}
+
+	/*
+	 * Per TIS 1.3 section 5.6.12, write commandReady after reading the
+	 * response so the TPM can free the ReadFIFO and other internal
+	 * resources. The next tpmtis_go_ready() provides the second
+	 * write the spec mentions, and waits for the state transition,
+	 * so no wait is needed here.
+	 */
+	TPM_WRITE_4(sc->dev, TPM_STS, TPM_STS_CMD_RDY);
+	TPM_WRITE_BARRIER(sc->dev, TPM_STS, 4);
 	tpmtis_relinquish_locality(sc);
 	priv->offset = 0;
 	priv->len = bytes_available;