From 6985c90ff44edc07224bf1b71df7f7630f700e25 Mon Sep 17 00:00:00 2001 From: Furquan Shaikh Date: Sat, 6 Oct 2018 12:03:23 -0700 Subject: mb/google/poppy: Allow variants to provide event info at runtime This change adds a variant callback to read google_chromeec_event_info from variant at runtime to allow override of any events based on factors like board id. This callback is used in ramstage and smm to get google_chromeec_event_info structure for performing various actions like setting masks and logging wake events from EC. BUG=b:112366846,b:112112483,b:112111610 Change-Id: If89e904c92372530a0f555952f87702f068e0b03 Signed-off-by: Furquan Shaikh Reviewed-on: https://review.coreboot.org/28983 Tested-by: build bot (Jenkins) Reviewed-by: Enrico Granata Reviewed-by: Aaron Durbin --- src/mainboard/google/poppy/Makefile.inc | 1 + src/mainboard/google/poppy/ec.c | 12 +++++++++--- src/mainboard/google/poppy/smihandler.c | 22 ++++++++++++++++------ .../baseboard/include/baseboard/variants.h | 7 +++++++ 4 files changed, 33 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/mainboard/google/poppy/Makefile.inc b/src/mainboard/google/poppy/Makefile.inc index 133317c07e..86754e62eb 100644 --- a/src/mainboard/google/poppy/Makefile.inc +++ b/src/mainboard/google/poppy/Makefile.inc @@ -26,6 +26,7 @@ ramstage-y += mainboard.c ramstage-y += ramstage.c smm-$(CONFIG_HAVE_SMI_HANDLER) += smihandler.c +smm-$(CONFIG_EC_GOOGLE_CHROMEEC) += ec.c subdirs-y += variants/baseboard CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/baseboard/include diff --git a/src/mainboard/google/poppy/ec.c b/src/mainboard/google/poppy/ec.c index 7b9b9a7b33..71327be385 100644 --- a/src/mainboard/google/poppy/ec.c +++ b/src/mainboard/google/poppy/ec.c @@ -14,13 +14,14 @@ */ #include +#include #include #include -void mainboard_ec_init(void) +__weak const struct google_chromeec_event_info *variant_get_event_info(void) { - const struct google_chromeec_event_info info = { + static const struct google_chromeec_event_info info = { .log_events = MAINBOARD_EC_LOG_EVENTS, .sci_events = MAINBOARD_EC_SCI_EVENTS, .s3_wake_events = MAINBOARD_EC_S3_WAKE_EVENTS, @@ -28,6 +29,11 @@ void mainboard_ec_init(void) .s0ix_wake_events = MAINBOARD_EC_S0IX_WAKE_EVENTS, }; - google_chromeec_events_init(&info, acpi_is_wakeup_s3()); + return &info; +} +void mainboard_ec_init(void) +{ + google_chromeec_events_init(variant_get_event_info(), + acpi_is_wakeup_s3()); } diff --git a/src/mainboard/google/poppy/smihandler.c b/src/mainboard/google/poppy/smihandler.c index c8ff7499ba..4f45687700 100644 --- a/src/mainboard/google/poppy/smihandler.c +++ b/src/mainboard/google/poppy/smihandler.c @@ -34,20 +34,30 @@ void __weak variant_smi_sleep(u8 slp_typ) {} void mainboard_smi_sleep(u8 slp_typ) { + const struct google_chromeec_event_info *info; + + info = variant_get_event_info(); + variant_smi_sleep(slp_typ); - chromeec_smi_sleep(slp_typ, MAINBOARD_EC_S3_WAKE_EVENTS, - MAINBOARD_EC_S5_WAKE_EVENTS); + chromeec_smi_sleep(slp_typ, info->s3_wake_events, info->s5_wake_events); } int mainboard_smi_apmc(u8 apmc) { - chromeec_smi_apmc(apmc, MAINBOARD_EC_SCI_EVENTS, - MAINBOARD_EC_SMI_EVENTS); + const struct google_chromeec_event_info *info; + + info = variant_get_event_info(); + + chromeec_smi_apmc(apmc, info->sci_events, info->smi_events); + return 0; } void elog_gsmi_cb_mainboard_log_wake_source(void) { - google_chromeec_log_events(MAINBOARD_EC_LOG_EVENTS | - MAINBOARD_EC_S0IX_WAKE_EVENTS); + const struct google_chromeec_event_info *info; + + info = variant_get_event_info(); + + google_chromeec_log_events(info->log_events | info->s0ix_wake_events); } diff --git a/src/mainboard/google/poppy/variants/baseboard/include/baseboard/variants.h b/src/mainboard/google/poppy/variants/baseboard/include/baseboard/variants.h index 3c589713f3..31370aed2b 100644 --- a/src/mainboard/google/poppy/variants/baseboard/include/baseboard/variants.h +++ b/src/mainboard/google/poppy/variants/baseboard/include/baseboard/variants.h @@ -73,4 +73,11 @@ void variant_nhlt_init(struct nhlt *nhlt); void variant_nhlt_oem_overrides(const char **oem_id, const char **oem_table_id, uint32_t *oem_revision); +struct google_chromeec_event_info; +/* + * Read google_chromeec_event_info structure from variant to set different masks + * on the EC e.g. SCI, S3, S5, S0ix, SMI. + */ +const struct google_chromeec_event_info *variant_get_event_info(void); + #endif /* __BASEBOARD_VARIANTS_H__ */ -- cgit v1.2.3