Hi, Ross and Christian,
According to TCG PC Client Sepcific TPM Interface Specification (TIS), calling the TPM_GetCapability command with the capability TPM_CAP_PROP_TIS_TIMEOUTS return an array of uint32 values each representing the number of microseconds for the associated timeout. And the structure we used represents the number of milliseconds. I also tested the code with some TPMs. I guess maybe your hp6930p doesn't conform to the spec.

From: Ross Philipson [mailto:Ross.Philipson@citrix.com]
Sent: 2010129 18:45
To: tboot-devel@lists.sourceforge.net
Cc: Christian Limpach
Subject: [tboot-devel] [PATCH] Fix timeout bug introduced by tboot.hg changeset 176.

Patch to fix timeout bug introduced by tboot.hg changeset 176. Either the TPM in the hp6930p doesn't operate to spec or the code was never tested.  With the patch, the values read from the tpm are equal to the default values used before tpm timeout code was added in changesets 163 and 176.


Signed-off-by: Christian Limpach christian.limpach@eu.citrix.com

Acked-by: Ross Philipson ross.philipson@citrix.com



diff -r 75e242a56344 tboot/common/tpm.c

--- a/tboot/common/tpm.c      Tue Jan 05 23:05:07 2010 -0800

+++ b/tboot/common/tpm.c      Fri Jan 29 00:59:05 2010 +0000

@@ -1944,10 +1944,10 @@

          * timeout_x represents the number of milliseconds for the timeout

          * and timeout[x] represents the number of microseconds.


-        g_timeout.timeout_a = timeout[0]/1000;

-        g_timeout.timeout_b = timeout[1]/1000;

-        g_timeout.timeout_c = timeout[2]/1000;

-        g_timeout.timeout_d = timeout[3]/1000;

+        g_timeout.timeout_a = timeout[0];

+        g_timeout.timeout_b = timeout[1];

+        g_timeout.timeout_c = timeout[2];

+        g_timeout.timeout_d = timeout[3];

         printk("TPM timeout values: A: %u, B: %u, C: %u, D: %u\n",

                g_timeout.timeout_a, g_timeout.timeout_b, g_timeout.timeout_c,