On 03/19/2018 12:00 PM, Stefan Berger wrote:
Wait for the tpmRegValidSts flag on the TPM_LOC_STATE_x register to
be set; we espect the locAssigned flag to not be set.

s/espect/expect/ and in the subject line s/CRQ/CRB

Just retested the v2 series on my board so:
Tested-by: Stephen Douthit <steph...@silicom-usa.com>

Real hardware seems to set the tpmRegValidSts flag without for
example requesting access to a locality.

Signed-off-by: Stefan Berger <stef...@linux.vnet.ibm.com>
---
  src/hw/tpm_drivers.c | 10 ++++++++++
  1 file changed, 10 insertions(+)

diff --git a/src/hw/tpm_drivers.c b/src/hw/tpm_drivers.c
index ed58bf5..7e6a96a 100644
--- a/src/hw/tpm_drivers.c
+++ b/src/hw/tpm_drivers.c
@@ -374,12 +374,22 @@ static u32 tis_waitrespready(enum tpmDurationType to_t)
      return rc;
  }
+#define CRB_STATE_VALID_STS 0b10000000
+#define CRB_STATE_LOC_ASSIGNED 0x00000010
+#define CRB_STATE_READY_MASK (CRB_STATE_VALID_STS | CRB_STATE_LOC_ASSIGNED)
+
  /* if device is not there, return '0', '1' otherwise */
  static u32 crb_probe(void)
  {
      if (!CONFIG_TCGBIOS)
          return 0;
+ /* Wait for the interface to report it's ready */
+    u32 rc = crb_wait_reg(0, CRB_REG_LOC_STATE, TIS2_DEFAULT_TIMEOUT_D,
+                          CRB_STATE_READY_MASK, CRB_STATE_VALID_STS);
+    if (rc)
+        return 0;
+
      u32 ifaceid = readl(CRB_REG(0, CRB_REG_INTF_ID));
if ((ifaceid & 0xf) != 0xf) {



_______________________________________________
SeaBIOS mailing list
SeaBIOS@seabios.org
https://mail.coreboot.org/mailman/listinfo/seabios

Reply via email to