blob: 1c7d626a9c70dac82682d3c916fa7c90bd54b4d4 [file] [log] [blame]
Angel Ponsd32b6de2020-04-03 01:23:13 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Stefan Reinauer155e9b52012-04-27 23:19:58 +02002
Stefan Reinauer155e9b52012-04-27 23:19:58 +02003#include <console/console.h>
4#include <cpu/x86/smm.h>
Stefan Reinauer155e9b52012-04-27 23:19:58 +02005#include <southbridge/intel/bd82x6x/pch.h>
6#include <southbridge/intel/bd82x6x/me.h>
Patrick Rudolpha28eb8b2018-06-28 14:10:49 +02007#include <southbridge/intel/common/pmbase.h>
Stefan Reinauer155e9b52012-04-27 23:19:58 +02008#include <northbridge/intel/sandybridge/sandybridge.h>
Stefan Reinauer155e9b52012-04-27 23:19:58 +02009#include <ec/smsc/mec1308/ec.h>
10#include "ec.h"
11
Stefan Reinauer155e9b52012-04-27 23:19:58 +020012static u8 mainboard_smi_ec(void)
13{
14 u8 cmd;
Stefan Reinauer155e9b52012-04-27 23:19:58 +020015
16 cmd = read_ec_command_byte(EC_GET_SMI_CAUSE);
17
18 switch (cmd) {
19 case EC_LID_CLOSE:
20 printk(BIOS_DEBUG, "LID CLOSED, SHUTDOWN\n");
21
22 /* Go to S5 */
Patrick Rudolpha28eb8b2018-06-28 14:10:49 +020023 write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));
Stefan Reinauer155e9b52012-04-27 23:19:58 +020024 break;
25 }
26
27 return cmd;
28}
29
Duncan Laurie0edc2242013-04-29 15:04:30 -070030void mainboard_smi_gpi(u32 gpi_sts)
Stefan Reinauer155e9b52012-04-27 23:19:58 +020031{
32 if (gpi_sts & (1 << EC_SMI_GPI)) {
33 /* Process all pending EC requests */
34 ec_set_ports(EC_MAILBOX_PORT, EC_MAILBOX_PORT+1);
35 while (mainboard_smi_ec() != 0xff);
36
37 /* The EC may keep asserting SMI# for some
38 * period unless we kick it here.
39 */
40 send_ec_command(EC_SMI_DISABLE);
41 send_ec_command(EC_SMI_ENABLE);
42 }
43}
44
Stefan Reinauer155e9b52012-04-27 23:19:58 +020045int mainboard_smi_apmc(u8 apmc)
46{
47 ec_set_ports(EC_MAILBOX_PORT, EC_MAILBOX_PORT+1);
48
49 switch (apmc) {
50 case 0xe1: /* ACPI ENABLE */
51 send_ec_command(EC_SMI_DISABLE);
52 send_ec_command(EC_ACPI_ENABLE);
53 break;
54
55 case 0x1e: /* ACPI DISABLE */
56 send_ec_command(EC_SMI_ENABLE);
57 send_ec_command(EC_ACPI_DISABLE);
58 break;
Stefan Reinauer155e9b52012-04-27 23:19:58 +020059 }
60 return 0;
61}