summaryrefslogtreecommitdiff
path: root/config/coreboot/default/patches/0037-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2024-07-31 12:26:25 +0100
committerLeah Rowe <leah@libreboot.org>2024-08-09 20:50:37 +0100
commitdbe24b039d381365b62c02802016f108c3efe8eb (patch)
tree435214dc54b53a560e2d2a9fff3dfe5864943dc6 /config/coreboot/default/patches/0037-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch
parent1b55fc790c1eebc8db16dab0611f08df36acd793 (diff)
coreboot/default: Update to 97bc693ab (2024-07-29)
Several patches are now merged upstream and no longer needed in lbmk, such as the HP EliteBook 8560w patch, and related patches. Some patches were changed, for example the Dell Latitude ivb/snb laptops are now variants in coreboot, instead of being individual ports; now they re-use the same base code. This this, the corresponding files under config/submodules have changed, for things like 3rdparty submodules e.g. libgfxinit, and tarballs e.g. crossgcc. This is long overdue, and will enable more boards to be added. This newer revision will be used in the next release, and some follow-up patches will merge these trees into default: * coreboot/haswell * coreboot/dell Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'config/coreboot/default/patches/0037-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch')
-rw-r--r--config/coreboot/default/patches/0037-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch117
1 files changed, 117 insertions, 0 deletions
diff --git a/config/coreboot/default/patches/0037-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch b/config/coreboot/default/patches/0037-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch
new file mode 100644
index 00000000..8947fe3c
--- /dev/null
+++ b/config/coreboot/default/patches/0037-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch
@@ -0,0 +1,117 @@
+From 7e921212d3113320b2d28e66cd6a6788533fcab7 Mon Sep 17 00:00:00 2001
+From: Nicholas Chin <nic.c3.14@gmail.com>
+Date: Fri, 3 May 2024 11:03:32 -0600
+Subject: [PATCH 37/39] ec/dell/mec5035: Add S3 suspend SMI handler
+
+Change-Id: I655868aba46911d128f6c24f410dc6fdf83f3070
+Signed-off-by: Nicholas Chin <nic.c3.14@gmail.com>
+---
+ src/ec/dell/mec5035/Makefile.mk | 1 +
+ src/ec/dell/mec5035/mec5035.c | 14 ++++++++++++++
+ src/ec/dell/mec5035/mec5035.h | 19 +++++++++++++++++++
+ src/ec/dell/mec5035/smihandler.c | 17 +++++++++++++++++
+ 4 files changed, 51 insertions(+)
+ create mode 100644 src/ec/dell/mec5035/smihandler.c
+
+diff --git a/src/ec/dell/mec5035/Makefile.mk b/src/ec/dell/mec5035/Makefile.mk
+index 4ebdd811f9..be557e4599 100644
+--- a/src/ec/dell/mec5035/Makefile.mk
++++ b/src/ec/dell/mec5035/Makefile.mk
+@@ -5,5 +5,6 @@ ifeq ($(CONFIG_EC_DELL_MEC5035),y)
+ bootblock-y += mec5035.c
+ romstage-y += mec5035.c
+ ramstage-y += mec5035.c
++smm-y += mec5035.c smihandler.c
+
+ endif
+diff --git a/src/ec/dell/mec5035/mec5035.c b/src/ec/dell/mec5035/mec5035.c
+index 68b6b2f7fb..33bf046634 100644
+--- a/src/ec/dell/mec5035/mec5035.c
++++ b/src/ec/dell/mec5035/mec5035.c
+@@ -94,6 +94,20 @@ void mec5035_control_radio(enum ec_radio_dev dev, enum ec_radio_state state)
+ ec_command(CMD_RADIO_CTRL);
+ }
+
++void mec5035_sleep_enable(void)
++{
++ u8 buf[SLEEP_EN_NUM_ARGS] = {3, 0};
++ write_mailbox_regs(buf, 2, SLEEP_EN_NUM_ARGS);
++ ec_command(CMD_SLEEP_ENABLE);
++}
++
++void mec5035_change_wake(u8 source, enum ec_wake_change change)
++{
++ u8 buf[ACPI_WAKEUP_NUM_ARGS] = {change, source, 0, 0x40};
++ write_mailbox_regs(buf, 2, ACPI_WAKEUP_NUM_ARGS);
++ ec_command(CMD_ACPI_WAKEUP_CHANGE);
++}
++
+ void mec5035_early_init(void)
+ {
+ /* If this isn't sent the EC shuts down the system after about 15
+diff --git a/src/ec/dell/mec5035/mec5035.h b/src/ec/dell/mec5035/mec5035.h
+index fa15a9d621..069616fbc5 100644
+--- a/src/ec/dell/mec5035/mec5035.h
++++ b/src/ec/dell/mec5035/mec5035.h
+@@ -4,6 +4,7 @@
+ #define _EC_DELL_MEC5035_H_
+
+ #include <stdint.h>
++#include <types.h>
+
+ #define NUM_REGISTERS 32
+
+@@ -29,9 +30,27 @@ enum ec_radio_state {
+ RADIO_ON
+ };
+
++#define CMD_ACPI_WAKEUP_CHANGE 0x4a
++#define ACPI_WAKEUP_NUM_ARGS 4
++enum ec_wake_change {
++ WAKE_OFF = 0,
++ WAKE_ON
++};
++enum ec_acpi_wake_events {
++ EC_ACPI_WAKE_PWRB = BIT(0), /* Wake up by power button */
++ EC_ACPI_WAKE_LID = BIT(1), /* Wake up by lid switch */
++ EC_ACPI_WAKE_RTC = BIT(5), /* Wake up by RTC */
++};
++
++#define CMD_SLEEP_ENABLE 0x64
++#define SLEEP_EN_NUM_ARGS 2
++
+ u8 mec5035_mouse_touchpad(u8 setting);
+ void mec5035_cpu_ok(void);
+ void mec5035_early_init(void);
+ void mec5035_control_radio(enum ec_radio_dev device, enum ec_radio_state state);
++void mec5035_sleep(int slp_type);
++void mec5035_change_wake(u8 source, enum ec_wake_change change);
++void mec5035_sleep_enable(void);
+
+ #endif /* _EC_DELL_MEC5035_H_ */
+diff --git a/src/ec/dell/mec5035/smihandler.c b/src/ec/dell/mec5035/smihandler.c
+new file mode 100644
+index 0000000000..1db834773d
+--- /dev/null
++++ b/src/ec/dell/mec5035/smihandler.c
+@@ -0,0 +1,17 @@
++/* SPDX-License-Identifier: GPL-2.0-only */
++
++#include <acpi/acpi.h>
++#include <console/console.h>
++#include <ec/acpi/ec.h>
++#include "mec5035.h"
++
++void mec5035_sleep(int slp_type)
++{
++ switch (slp_type) {
++ case ACPI_S3:
++ /* System does not yet resume properly if woken by lid */
++ mec5035_change_wake(EC_ACPI_WAKE_LID, WAKE_OFF);
++ mec5035_sleep_enable();
++ break;
++ }
++}
+--
+2.39.2
+