1 /* SPDX-License-Identifier: GPL-2.0-only */
4 #include <console/console.h>
5 #include <cpu/x86/smm.h>
7 #include <southbridge/intel/bd82x6x/pch.h>
8 #include <southbridge/intel/bd82x6x/me.h>
9 #include <southbridge/intel/common/pmbase.h>
10 #include <northbridge/intel/sandybridge/sandybridge.h>
13 /* Include EC functions */
14 #include <ec/google/chromeec/ec.h>
17 static u8
mainboard_smi_ec(void)
19 u8 cmd
= google_chromeec_get_event();
23 elog_gsmi_add_event_byte(ELOG_TYPE_EC_EVENT
, cmd
);
26 case EC_HOST_EVENT_LID_CLOSED
:
27 printk(BIOS_DEBUG
, "LID CLOSED, SHUTDOWN\n");
30 write_pmbase32(PM1_CNT
, read_pmbase32(PM1_CNT
) | (0xf << 10));
37 void mainboard_smi_gpi(u32 gpi_sts
)
39 if (gpi_sts
& (1 << EC_SMI_GPI
)) {
40 /* Process all pending events */
41 while (mainboard_smi_ec() != 0);
45 void mainboard_smi_sleep(u8 slp_typ
)
47 /* Disable USB charging if required */
51 google_chromeec_set_usb_charge_mode(
52 0, USB_CHARGE_MODE_DISABLED
);
54 google_chromeec_set_usb_charge_mode(
55 1, USB_CHARGE_MODE_DISABLED
);
59 google_chromeec_set_usb_charge_mode(
60 0, USB_CHARGE_MODE_DISABLED
);
62 google_chromeec_set_usb_charge_mode(
63 1, USB_CHARGE_MODE_DISABLED
);
67 /* Disable SCI and SMI events */
68 google_chromeec_set_smi_mask(0);
69 google_chromeec_set_sci_mask(0);
71 /* Clear pending events that may trigger immediate wake */
72 while (google_chromeec_get_event() != EC_HOST_EVENT_NONE
)
75 /* Enable wake events */
76 google_chromeec_set_wake_mask(LINK_EC_S3_WAKE_EVENTS
);
79 int mainboard_smi_apmc(u8 apmc
)
82 case APM_CNT_ACPI_ENABLE
:
83 google_chromeec_set_smi_mask(0);
84 /* Clear all pending events */
85 while (google_chromeec_get_event() != EC_HOST_EVENT_NONE
)
87 google_chromeec_set_sci_mask(LINK_EC_SCI_EVENTS
);
89 case APM_CNT_ACPI_DISABLE
:
90 google_chromeec_set_sci_mask(0);
91 /* Clear all pending events */
92 while (google_chromeec_get_event() != EC_HOST_EVENT_NONE
)
94 google_chromeec_set_smi_mask(LINK_EC_SMI_EVENTS
);