[coreboot-gerrit] New patch to review for coreboot: d74be0e storm: reset TPM properly on proto0

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Fri Mar 27 19:05:06 CET 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9118

-gerrit

commit d74be0e53f7f4c2ffda2a52e746b2c6a428132ac
Author: Vadim Bendebury <vbendeb at chromium.org>
Date:   Thu Aug 7 15:20:21 2014 -0700

    storm: reset TPM properly on proto0
    
    The proto0 storm hardware has the TPM reset line wired to the SOC GPIO22
    pin instead of the system reset. This causes all kind of TPM behavior
    problems and requires frequent power cycles. Adding explicit TPM reset
    makes all those problems go away.
    
    BUG=chrome-os-partner:30705, chrome-os-partner:30829
    TEST=tried resetting proto0 at different moments during boot up - the
         TPM does not fail anymore.
    
    Change-Id: Idfa16e6e868336f38861edeb75703fff3f35172c
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: d5e07815c227089b7f266ba5329812bf309b87e6
    Original-Change-Id: Ia877fcd9efaf3ba12c8fe8c2958bd81c4bf22799
    Original-Signed-off-by: Vadim Bendebury <vbendeb at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/211497
    Original-Reviewed-by: Trevor Bourget <tbourget at codeaurora.org>
    Original-Reviewed-by: David Hendricks <dhendrix at chromium.org>
---
 src/mainboard/google/storm/mainboard.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/mainboard/google/storm/mainboard.c b/src/mainboard/google/storm/mainboard.c
index 442e9e9..268ed46 100644
--- a/src/mainboard/google/storm/mainboard.c
+++ b/src/mainboard/google/storm/mainboard.c
@@ -18,10 +18,12 @@
  */
 
 #include <arch/cache.h>
+#include <boardid.h>
 #include <boot/coreboot_tables.h>
 #include <console/console.h>
-#include <device/device.h>
 #include <delay.h>
+#include <device/device.h>
+#include <gpiolib.h>
 #include <string.h>
 
 #include <soc/qualcomm/ipq806x/include/clock.h>
@@ -71,10 +73,29 @@ static void setup_mmu(void)
 	dcache_mmu_enable();
 }
 
+#define TPM_RESET_GPIO 22
+static void setup_tpm(void)
+{
+	if (board_id() != 0)
+		return; /* Only proto0 have TPM reset connected to GPIO22 */
+
+	gpio_tlmm_config_set(TPM_RESET_GPIO, FUNC_SEL_GPIO, GPIO_PULL_UP,
+			     GPIO_4MA, GPIO_ENABLE);
+	/*
+	 * Generate a reset pulse. The spec calls for 80 us minimum, let's
+	 * make it twice as long. If the output was driven low originally, the
+	 * reset pulse will be even longer.
+	 */
+	gpio_set_out_value(TPM_RESET_GPIO, 0);
+	udelay(160);
+	gpio_set_out_value(TPM_RESET_GPIO, 1);
+}
+
 static void mainboard_init(device_t dev)
 {
 	 setup_mmu();
 	 setup_usb();
+	 setup_tpm();
 }
 
 static void mainboard_enable(device_t dev)



More information about the coreboot-gerrit mailing list