[coreboot-gerrit] New patch to review for coreboot: 63b5281 broadwell: Add small delay before Flex Ratio reboot

Marc Jones (marc.jones@se-eng.com) gerrit at coreboot.org
Tue Mar 24 21:35:48 CET 2015


Marc Jones (marc.jones at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8957

-gerrit

commit 63b528175ac53d2e1af23fdb19568c90497c1590
Author: Duncan Laurie <dlaurie at chromium.org>
Date:   Mon Aug 11 13:38:26 2014 -0700

    broadwell: Add small delay before Flex Ratio reboot
    
    In order to prevent possible TPM lockout due to PLTRST assertion
    shortly after powering up add a small delay before the reset.
    This will affect cold power up only, reboot/resume/warmboot will
    all have the flex ratio locked already so this reset is unneeded.
    
    BUG=chrome-os-partner:29859
    BRANCH=None
    TEST=build and boot on samus.  I tried unsuccessfully to trigger the
    TPM lockout, but I was not able to do that consistently without this
    patch so it is unknown yet whether this is 100% effective.
    
    Original-Change-Id: Ief8c9261c0268b0f90a3022213ebd2b06633b481
    Original-Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/211893
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
    (cherry picked from commit 20413f2eafa144f5f381eb6f92d8b959415ca049)
    Signed-off-by: Marc Jones <marc.jones at se-eng.com>
    
    Change-Id: I665e9ed1faa65e88d988660a24bdad40a4c5ab7e
---
 src/soc/intel/broadwell/bootblock/cpu.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/soc/intel/broadwell/bootblock/cpu.c b/src/soc/intel/broadwell/bootblock/cpu.c
index e20ced2..796f884 100644
--- a/src/soc/intel/broadwell/bootblock/cpu.c
+++ b/src/soc/intel/broadwell/bootblock/cpu.c
@@ -57,6 +57,17 @@ static void enable_rom_caching(void)
 	wrmsr(MTRRdefType_MSR, msr);
 }
 
+static void bootblock_mdelay(int ms)
+{
+	u32 target = ms * 24 * 1000;
+	msr_t current;
+	msr_t start = rdmsr(MSR_COUNTER_24_MHZ);
+
+	do {
+		current = rdmsr(MSR_COUNTER_24_MHZ);
+	} while ((current.lo - start.lo) < target);
+}
+
 static void set_flex_ratio_to_tdp_nominal(void)
 {
 	msr_t flex_ratio, msr;
@@ -97,6 +108,9 @@ static void set_flex_ratio_to_tdp_nominal(void)
 	/* Set soft reset control to use register value */
 	RCBA32_OR(SOFT_RESET_CTRL, 1);
 
+	/* Delay before reset to avoid potential TPM lockout */
+	bootblock_mdelay(30);
+
 	/* Issue warm reset, will be "CPU only" due to soft reset data */
 	outb(0x0, 0xcf9);
 	outb(0x6, 0xcf9);



More information about the coreboot-gerrit mailing list