blob: e20976c5f144e654dc6273bfc49480b941cd696f [file] [log] [blame]
Angel Pons58c0d322020-04-05 13:20:46 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Marc Jones07cf24c2015-06-09 14:42:55 -06002
Furquan Shaikh76cedd22020-05-02 10:24:23 -07003#include <acpi/acpi.h>
Marc Jones07cf24c2015-06-09 14:42:55 -06004#include <cpu/x86/smm.h>
Marc Jonesd8621212015-06-09 21:18:38 -06005#include <soc/pm.h>
Marc Jones07cf24c2015-06-09 14:42:55 -06006#include <ec/google/chromeec/ec.h>
Kyösti Mälkki923b8ec2022-11-29 07:36:44 +02007#include <ec/google/chromeec/smm.h>
Angel Pons52e48b52021-01-28 17:03:19 +01008#include <southbridge/intel/lynxpoint/lp_gpio.h>
Marc Jonesd8621212015-06-09 21:18:38 -06009#include <soc/iomap.h>
Marc Jones07cf24c2015-06-09 14:42:55 -060010#include "ec.h"
Matt DeVillier45e11aa2016-12-18 11:59:58 -060011#include <variant/onboard.h>
Marc Jonesd8621212015-06-09 21:18:38 -060012
Marc Jones07cf24c2015-06-09 14:42:55 -060013/* gpi_sts is GPIO 47:32 */
14void mainboard_smi_gpi(u32 gpi_sts)
15{
Kyösti Mälkki83faa5d2023-01-05 15:39:16 +020016 if (gpi_sts & (1 << (EC_SMI_GPI - 32)))
17 chromeec_smi_process_events();
Marc Jones07cf24c2015-06-09 14:42:55 -060018}
19
Matt DeVillier45e11aa2016-12-18 11:59:58 -060020static void mainboard_disable_gpios(void)
21{
Julius Wernercd49cce2019-03-05 16:53:33 -080022#if CONFIG(BOARD_GOOGLE_SAMUS)
Matt DeVillier45e11aa2016-12-18 11:59:58 -060023 /* Put SSD in reset to prevent leak */
24 set_gpio(BOARD_SSD_RESET_GPIO, 0);
25 /* Disable LTE */
26 set_gpio(BOARD_LTE_DISABLE_GPIO, 0);
27#else
28 set_gpio(BOARD_PP3300_CODEC_GPIO, 0);
29#endif
30 /* Prevent leak from standby rail to WLAN rail */
31 set_gpio(BOARD_WLAN_DISABLE_GPIO, 0);
32}
33
Marc Jones07cf24c2015-06-09 14:42:55 -060034void mainboard_smi_sleep(u8 slp_typ)
35{
36 /* Disable USB charging if required */
Kyösti Mälkki027f86e2022-12-02 15:30:10 +020037 /* NOTE: Setting of usb0 _may_ also control usb1 here. */
38 chromeec_set_usb_charge_mode(slp_typ);
39
Marc Jones07cf24c2015-06-09 14:42:55 -060040 switch (slp_typ) {
Aaron Durbin30b0c7a2016-07-13 13:01:13 -050041 case ACPI_S3:
Aaron Durbin30b0c7a2016-07-13 13:01:13 -050042 case ACPI_S5:
Matt DeVillier45e11aa2016-12-18 11:59:58 -060043 mainboard_disable_gpios();
Marc Jones07cf24c2015-06-09 14:42:55 -060044 break;
45 }
46
Kyösti Mälkkiaf656f92023-01-05 18:05:11 +020047 chromeec_smi_sleep(slp_typ, MAINBOARD_EC_S3_WAKE_EVENTS, MAINBOARD_EC_S5_WAKE_EVENTS);
Marc Jones07cf24c2015-06-09 14:42:55 -060048}
49
Marc Jones07cf24c2015-06-09 14:42:55 -060050int mainboard_smi_apmc(u8 apmc)
51{
Kyösti Mälkki923b8ec2022-11-29 07:36:44 +020052 chromeec_smi_apmc(apmc, MAINBOARD_EC_SCI_EVENTS, MAINBOARD_EC_SMI_EVENTS);
Marc Jones07cf24c2015-06-09 14:42:55 -060053 return 0;
54}