mb/google/brya/var/uldrenite: Generate RAM ID and SPD file
[coreboot2.git] / src / mainboard / google / cyan / smihandler.c
blobd0af1d4a69bf3ce92000af91cd43c49596cef6f9
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <acpi/acpi.h>
4 #include <device/mmio.h>
5 #include <cpu/x86/smm.h>
6 #include "ec.h"
7 #include <ec/google/chromeec/smm.h>
8 #include <soc/pm.h>
9 #include <soc/gpio.h>
11 #include <variant/onboard.h>
13 /* The wake gpio is SUS_GPIO[0]. */
14 #define WAKE_GPIO_EN SUS_GPIO_EN0
15 #define GPIO_SUS7_WAKE_MASK (1 << 12)
16 #define GPIO_SUS1_WAKE_MASK (1 << 13)
19 * The entire 32-bit ALT_GPIO_SMI register is passed as a parameter. Note, that
20 * this includes the enable bits in the lower 16 bits.
22 void mainboard_smi_gpi(uint32_t alt_gpio_smi)
24 if (alt_gpio_smi & (1 << EC_SMI_GPI))
25 chromeec_smi_process_events();
28 void mainboard_smi_sleep(uint8_t slp_typ)
30 void *addr;
31 uint32_t mask;
33 /* Disable USB charging if required */
34 chromeec_set_usb_charge_mode(slp_typ);
36 switch (slp_typ) {
37 case ACPI_S3:
38 /* Enable wake pin in GPE block. */
39 enable_gpe(WAKE_GPIO_EN);
40 break;
41 case ACPI_S5:
42 /* Disabling wake from SUS_GPIO1 (TOUCH INT) and
43 * SUS_GPIO7 (TRACKPAD INT) in North bank as they are not
44 * valid S5 wake sources
46 addr = (void *)(IO_BASE_ADDRESS + COMMUNITY_OFFSET_GPNORTH +
47 GPIO_WAKE_MASK_REG0);
48 mask = ~(GPIO_SUS1_WAKE_MASK | GPIO_SUS7_WAKE_MASK);
49 write32(addr, read32(addr) & mask);
50 break;
53 chromeec_smi_sleep(slp_typ, MAINBOARD_EC_S3_WAKE_EVENTS, MAINBOARD_EC_S5_WAKE_EVENTS);
55 /* Set LPC lines to low power in S3/S5. */
56 if ((slp_typ == ACPI_S3) || (slp_typ == ACPI_S5)) {
57 lpc_set_low_power();
61 int mainboard_smi_apmc(uint8_t apmc)
63 chromeec_smi_apmc(apmc, MAINBOARD_EC_SCI_EVENTS, MAINBOARD_EC_SMI_EVENTS);
64 return 0;