smaug: Fix TPM failure causing system entering recovery mode
Based on SLB9645 4.7, it is more safe to send first command to TPM 150 ms
after the deassertion of the RESET# signal.
The failed unit tested with this patch can no long reproduce the issue
after 1000+ cycles reboot test.
BUG=chrome-os-partner:46039
BRANCH=firmware-smaug-7132.B
TEST=reboot test
Signed-off-by: Jimmy Zhang <jimmzhang@nvidia.com>
Change-Id: I7f8b159d872936ac41c477cdb38cbb1f73cb8d1b
Reviewed-on: https://chromium-review.googlesource.com/313138
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Tested-by: Jimmy Zhang <jimmzhang@nvidia.com>
Reviewed-by: Tom Warren <twarren@nvidia.com>
Tested-by: Joseph Lo <yushun.lo@gmail.com>
Commit-Queue: Jimmy Zhang <jimmzhang@nvidia.com>
diff --git a/src/soc/nvidia/tegra210/verstage.c b/src/soc/nvidia/tegra210/verstage.c
index 1117db4..7e3ba3e 100644
--- a/src/soc/nvidia/tegra210/verstage.c
+++ b/src/soc/nvidia/tegra210/verstage.c
@@ -22,6 +22,7 @@
#include <arch/hlt.h>
#include <arch/stages.h>
#include <console/console.h>
+#include <delay.h>
#include <soc/verstage.h>
#include <timestamp.h>
#include <vendorcode/google/chromeos/chromeos.h>
@@ -38,6 +39,13 @@
timestamp_add_now(TS_START_VBOOT);
verstage_mainboard_init();
+ /*
+ * SLB9645 implies TPM requires 150 ms power-on tests.
+ * add +5 ms margin
+ */
+ while (timestamp_get() < (uint64_t)155000)
+ mdelay(1);
+
entry = vboot2_verify_firmware();
if (entry != (void *)-1)
stage_exit(entry);