mainboards/apollolake: use common Chrome EC SMI helpers

Reduce duplicate code by using the Chrome EC SMI helper functions.

BUG=chrome-os-partner:54977

Change-Id: Iba2ca7185ad7f0566858ce99f5ad8325ecc243cf
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/15687
Tested-by: build bot (Jenkins)
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Shaunak Saha <shaunak.saha@intel.com>
This commit is contained in:
Aaron Durbin 2016-07-14 00:43:11 -05:00
parent c2b7779d60
commit 1a75560599
2 changed files with 16 additions and 80 deletions

View File

@ -16,56 +16,24 @@
#include <arch/acpi.h> #include <arch/acpi.h>
#include <cpu/x86/smm.h> #include <cpu/x86/smm.h>
#include <ec/google/chromeec/ec.h> #include <ec/google/chromeec/smm.h>
#include <soc/pm.h> #include <soc/pm.h>
#include "ec.h" #include "ec.h"
void mainboard_smi_sleep(u8 slp_typ) void mainboard_smi_sleep(u8 slp_typ)
{ {
if (!IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)) if (slp_typ == ACPI_S3)
return;
switch (slp_typ) {
case ACPI_S3:
/* Enable wake events */
google_chromeec_set_wake_mask(MAINBOARD_EC_S3_WAKE_EVENTS);
enable_gpe(GPIO_TIER_1_SCI); enable_gpe(GPIO_TIER_1_SCI);
break;
case ACPI_S5:
/* Enable wake events */
google_chromeec_set_wake_mask(MAINBOARD_EC_S5_WAKE_EVENTS);
break;
}
/* Disable SCI and SMI events */ if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC))
google_chromeec_set_smi_mask(0); chromeec_smi_sleep(slp_typ, MAINBOARD_EC_S3_WAKE_EVENTS,
google_chromeec_set_sci_mask(0); MAINBOARD_EC_S5_WAKE_EVENTS);
/* Clear pending events that may trigger immediate wake */
while (google_chromeec_get_event() != 0)
;
} }
int mainboard_smi_apmc(u8 apmc) int mainboard_smi_apmc(u8 apmc)
{ {
if (!IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)) if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC))
return 0; chromeec_smi_apmc(apmc, MAINBOARD_EC_SCI_EVENTS,
MAINBOARD_EC_SMI_EVENTS);
switch (apmc) {
case APM_CNT_ACPI_ENABLE:
google_chromeec_set_smi_mask(0);
/* Clear all pending events */
while (google_chromeec_get_event() != 0)
;
google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);
break;
case APM_CNT_ACPI_DISABLE:
google_chromeec_set_sci_mask(0);
/* Clear all pending events */
while (google_chromeec_get_event() != 0)
;
google_chromeec_set_smi_mask(MAINBOARD_EC_SMI_EVENTS);
break;
}
return 0; return 0;
} }

View File

@ -16,56 +16,24 @@
#include <arch/acpi.h> #include <arch/acpi.h>
#include <cpu/x86/smm.h> #include <cpu/x86/smm.h>
#include <ec/google/chromeec/ec.h> #include <ec/google/chromeec/smm.h>
#include <soc/pm.h> #include <soc/pm.h>
#include "ec.h" #include "ec.h"
void mainboard_smi_sleep(u8 slp_typ) void mainboard_smi_sleep(u8 slp_typ)
{ {
if (!IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)) if (slp_typ == ACPI_S3)
return;
switch (slp_typ) {
case ACPI_S3:
/* Enable wake events */
google_chromeec_set_wake_mask(MAINBOARD_EC_S3_WAKE_EVENTS);
enable_gpe(GPIO_TIER_1_SCI); enable_gpe(GPIO_TIER_1_SCI);
break;
case ACPI_S5:
/* Enable wake events */
google_chromeec_set_wake_mask(MAINBOARD_EC_S5_WAKE_EVENTS);
break;
}
/* Disable SCI and SMI events */ if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC))
google_chromeec_set_smi_mask(0); chromeec_smi_sleep(slp_typ, MAINBOARD_EC_S3_WAKE_EVENTS,
google_chromeec_set_sci_mask(0); MAINBOARD_EC_S5_WAKE_EVENTS);
/* Clear pending events that may trigger immediate wake */
while (google_chromeec_get_event() != 0)
;
} }
int mainboard_smi_apmc(u8 apmc) int mainboard_smi_apmc(u8 apmc)
{ {
if (!IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)) if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC))
return 0; chromeec_smi_apmc(apmc, MAINBOARD_EC_SCI_EVENTS,
MAINBOARD_EC_SMI_EVENTS);
switch (apmc) {
case APM_CNT_ACPI_ENABLE:
google_chromeec_set_smi_mask(0);
/* Clear all pending events */
while (google_chromeec_get_event() != 0)
;
google_chromeec_set_sci_mask(MAINBOARD_EC_SCI_EVENTS);
break;
case APM_CNT_ACPI_DISABLE:
google_chromeec_set_sci_mask(0);
/* Clear all pending events */
while (google_chromeec_get_event() != 0)
;
google_chromeec_set_smi_mask(MAINBOARD_EC_SMI_EVENTS);
break;
}
return 0; return 0;
} }