aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorOlivier Cochard <olivier@FreeBSD.org>2026-06-26 19:20:30 +0000
committerOlivier Cochard <olivier@FreeBSD.org>2026-06-26 19:56:17 +0000
commite4c50d86796d07cf90e6a683234e1c0e9ca5e03c (patch)
treec704a2125fd32b3e5d9b0887a1a3bae68ac88921 /sys
parentdcc684ddccd60d1079eefec06266de04641e319b (diff)
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/tpm/tpm_tis_core.c10
1 files changed, 10 insertions, 0 deletions
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;