[Skiboot] [PATCH 2/4] hdata: Add TPM timeout workaround

Oliver O'Halloran oohall at gmail.com
Mon May 21 11:29:24 AEST 2018

Set the default timeout for any bus containing a TPM to one second. This
is needed to work around a bug in the firmware of certain TPMs that will
clock strech the I2C port the for up to a second. Additionally, when the
TPM is clock streching it responds to a STOP condition on the bus by
bricking itself. Clearing this error requires a hard power cycle of the
system since the TPM is powered by standby power.

Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
 hdata/i2c.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/hdata/i2c.c b/hdata/i2c.c
index 5dfdb10721b1..5cb56fafb120 100644
--- a/hdata/i2c.c
+++ b/hdata/i2c.c
@@ -343,6 +343,16 @@ int parse_i2c_devs(const struct HDIF_common_hdr *hdr, int idata_index,
 		if (label)
 			dt_add_property_string(node, "label", label);
+		/*
+		 * Set a default timeout of 2s on the ports with a TPM. This is
+		 * to work around a bug with certain TPM firmwares that can
+		 * clock stretch for long periods of time and will lock up
+		 * until they are power cycled if a STOP condition is sent
+		 * during this period.
+		 */
+		if (dev->type == 0x3)
+			dt_add_property_cells(bus, "timeout-ms", 2000);
 		/* XXX: SLCA index? */

More information about the Skiboot mailing list