diff options
author | Furquan Shaikh <furquan@chromium.org> | 2017-10-13 11:31:35 -0700 |
---|---|---|
committer | Furquan Shaikh <furquan@google.com> | 2017-10-19 00:44:31 +0000 |
commit | 1432cbc4da8991bcddd15e847a73792760edc62e (patch) | |
tree | 753974c3bbc68d4d7fd547a0721921b4959725d0 | |
parent | 4854761ba49696050fa00e04ccd461a8e91e21fa (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>
-rw-r--r-- | src/ec/google/chromeec/ec.c | 16 | ||||
-rw-r--r-- | src/ec/google/chromeec/ec_commands.h | 2 |
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)) |