chromeec: Depend on events_copy_b to identify the wake source

google_chromec_get_event() depends on the main copy of EC which is
used by ACPI subsytem in the kernel for querying events.
google_chromeec_get_event() also clears the event from EC. Thus if the
kernel has to identify the wake source, it has no way to do that. Thus
instead depend on events_copy_b to log the wake source. Please look at
go/hostevent-refactor for more info.

BUG=b:133262012
BRANCH=None
TEST=Hack hatch bios and make sure hostevent log is correct.

Change-Id: I39caae2689e0c2a7bec16416978877885a9afc6c
Signed-off-by: Ravi Chandra Sadineni <ravisadineni@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/34801
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
Ravi Chandra Sadineni 2019-06-18 10:10:19 -07:00 committed by Furquan Shaikh
parent 6aa094e30d
commit 6ae8b5034b
1 changed files with 7 additions and 22 deletions

View File

@ -428,30 +428,19 @@ static void google_chromeec_log_device_events(uint64_t mask)
void google_chromeec_log_events(uint64_t mask)
{
u8 event;
uint64_t wake_mask;
bool restore_wake_mask = false;
uint64_t events;
int i;
if (!CONFIG(ELOG))
return;
/*
* 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;
events = google_chromeec_get_events_b() & mask;
for (i = 0; i < sizeof(events) * 8; i++) {
if (EC_HOST_EVENT_MASK(i) & events)
elog_add_event_byte(ELOG_TYPE_EC_EVENT, i);
}
while ((event = google_chromeec_get_event()) != 0) {
if (EC_HOST_EVENT_MASK(event) & mask)
elog_add_event_byte(ELOG_TYPE_EC_EVENT, event);
}
if (restore_wake_mask)
google_chromeec_set_wake_mask(wake_mask);
google_chromeec_clear_events_b(events);
}
void google_chromeec_events_init(const struct google_chromeec_event_info *info,
@ -467,10 +456,6 @@ void google_chromeec_events_init(const struct google_chromeec_event_info *info,
/* Disable SMI and wake events. */
google_chromeec_set_smi_mask(0);
/* Clear pending events. */
while (google_chromeec_get_event() != 0)
;
/* Restore SCI event mask. */
google_chromeec_set_sci_mask(info->sci_events);