summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@chromium.org>2017-10-13 11:31:35 -0700
committerFurquan Shaikh <furquan@google.com>2017-10-19 00:44:31 +0000
commit1432cbc4da8991bcddd15e847a73792760edc62e (patch)
tree753974c3bbc68d4d7fd547a0721921b4959725d0 /src
parent4854761ba49696050fa00e04ccd461a8e91e21fa (diff)
google/chromeec: Do not set wake mask before logging EC events
Earlier the EC expected the host to set appropriate masks before reading host events. However, with recent change in EC, this is no longer required. This change removes the setting of wake_mask before and after reading the host events. However, in order to support older versions of EC, a new feature flag is added on the EC side that informs the host whether or not it is using the new way of reporting host events without having to set wake mask. CQ-DEPEND=CL:719578 TEST=Verified that EC wake events are correctly logged with both old and new versions of EC. Change-Id: Ib17e1296fb7d3bbc84fc7581fd0a9bd179ac87b9 Signed-off-by: Furquan Shaikh <furquan@chromium.org> Reviewed-on: https://review.coreboot.org/22006 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/ec/google/chromeec/ec.c16
-rw-r--r--src/ec/google/chromeec/ec_commands.h2
2 files changed, 14 insertions, 4 deletions
diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index de7c317d93..537fe25283 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -261,20 +261,28 @@ void google_chromeec_log_events(u32 mask)
{
u8 event;
u32 wake_mask;
+ bool restore_wake_mask = false;
if (!IS_ENABLED(CONFIG_ELOG))
return;
- /* Set wake mask so events will be read from ACPI interface */
- wake_mask = google_chromeec_get_wake_mask();
- google_chromeec_set_wake_mask(mask);
+ /*
+ * If the EC supports unified wake masks, then there is no need to set
+ * wake mask before reading out the host events.
+ */
+ if (google_chromeec_check_feature(EC_FEATURE_UNIFIED_WAKE_MASKS) != 1) {
+ wake_mask = google_chromeec_get_wake_mask();
+ google_chromeec_set_wake_mask(mask);
+ restore_wake_mask = true;
+ }
while ((event = google_chromeec_get_event()) != 0) {
if (EC_HOST_EVENT_MASK(event) & mask)
elog_add_event_byte(ELOG_TYPE_EC_EVENT, event);
}
- google_chromeec_set_wake_mask(wake_mask);
+ if (restore_wake_mask)
+ google_chromeec_set_wake_mask(wake_mask);
}
void google_chromeec_events_init(const struct google_chromeec_event_info *info,
diff --git a/src/ec/google/chromeec/ec_commands.h b/src/ec/google/chromeec/ec_commands.h
index c5d27d2149..c4e4e3175a 100644
--- a/src/ec/google/chromeec/ec_commands.h
+++ b/src/ec/google/chromeec/ec_commands.h
@@ -1112,6 +1112,8 @@ enum ec_feature_code {
EC_FEATURE_RWSIG = 30,
/* EC has device events support */
EC_FEATURE_DEVICE_EVENT = 31,
+ /* EC supports the unified wake masks for LPC/eSPI systems */
+ EC_FEATURE_UNIFIED_WAKE_MASKS = 32,
};
#define EC_FEATURE_MASK_0(event_code) (1UL << (event_code % 32))