[coreboot-gerrit] New patch to review for coreboot: ec/google/chromeec: query cbmem for retrain status

Aaron Durbin (adurbin@chromium.org) gerrit at coreboot.org
Wed Dec 14 23:05:43 CET 2016


Aaron Durbin (adurbin at chromium.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17869

-gerrit

commit 8f3ccdcf08bc5490898f4926e5f6ff32e1deba6f
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Wed Dec 14 14:46:20 2016 -0600

    ec/google/chromeec: query cbmem for retrain status
    
    The EC switches, including the hardware retrain flag, are
    cleared when handing off the vboot state in romstage. However,
    one may still want to query the state of the hardware retrain
    flag. Thus, add a method to get the flag from cbmem.
    
    BUG=chrome-os-partner:60592
    BRANCH=reef
    
    Change-Id: Ic76cfb3255a8d3c179d5f8b13fa13c518f79faa2
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
---
 src/ec/google/chromeec/switches.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/ec/google/chromeec/switches.c b/src/ec/google/chromeec/switches.c
index 74f7210..7ed4bfd 100644
--- a/src/ec/google/chromeec/switches.c
+++ b/src/ec/google/chromeec/switches.c
@@ -14,6 +14,7 @@
  */
 
 #include <bootmode.h>
+#include <cbmem.h>
 #include <ec/google/chromeec/ec.h>
 
 #if IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC_LPC)
@@ -41,12 +42,25 @@ int get_recovery_mode_switch(void)
 
 int get_recovery_mode_retrain_switch(void)
 {
+	uint32_t events;
+	const uint32_t mask =
+		EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT);
+
 	/*
 	 * Check if the EC has posted the keyboard recovery event with memory
 	 * retrain.
 	 */
-	return !!(google_chromeec_get_events_b() &
-		EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY_HW_REINIT));
+	events = google_chromeec_get_events_b();
+
+	if (cbmem_possibly_online()) {
+		const uint32_t *events_save;
+
+		events_save = cbmem_find(CBMEM_ID_EC_HOSTEVENT);
+		if (events_save != NULL)
+			events |= *events_save;
+	}
+
+	return !!(events & mask);
 }
 
 int clear_recovery_mode_switch(void)



More information about the coreboot-gerrit mailing list