diff options
author | Leah Rowe <leah@libreboot.org> | 2024-11-01 15:59:30 +0000 |
---|---|---|
committer | Leah Rowe <leah@libreboot.org> | 2024-11-01 15:59:30 +0000 |
commit | 14b4838d49556eb544c0f6a96d72128c3480ec2c (patch) | |
tree | 71cc7fb04cd7871ddfc4377b9653990a3d712578 /config/coreboot/default/patches/0038-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch | |
parent | 67c92889a866d67132bcc37de6444e0bc56f548c (diff) |
coreboot/default: Re-base all patches
There were a lot of unnecessary patches, such as the VRAM
patches; as Nicholas Chin has explained to me, the drivers
for these machines will just allocate what RAM they want
anyway, so in a lot of cases the extra allocated Video RAM
simply reduces the total amount of memory for other uses.
In general, we have a lot of patches that have existed for
years. A much more aggressive sweep will be done in the next
major audit, especially when the revisions are updated again.
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'config/coreboot/default/patches/0038-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch')
-rw-r--r-- | config/coreboot/default/patches/0038-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/config/coreboot/default/patches/0038-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch b/config/coreboot/default/patches/0038-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch deleted file mode 100644 index 7c96d9f9..00000000 --- a/config/coreboot/default/patches/0038-ec-dell-mec5035-Add-S3-suspend-SMI-handler.patch +++ /dev/null @@ -1,147 +0,0 @@ -From 762f5d95d2314c3d09c1562d36d111dcdb9c8b93 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 38/38] ec/dell/mec5035: Add S3 suspend SMI handler - -This is necessary for S3 resume to work on SNB and newer Dell Latitude -laptops. If a command isn't sent, the EC cuts power to the DIMMs, -preventing the system from resuming. These commands were found using an -FPGA to log all LPC bus transactions between the host and the EC and -then narrowing down which ones were actually necessary. - -Interestingly, the command IDs appear to be identical to those in -ec/google/wilco, the EC used on Dell Latitude Chromebooks, and that EC -implements a similar S3 SMI handler as the one implemented in this -commit. The Wilco EC Kconfig does suggest that its firmware is a -modified version of Dell's usual Latitude EC firmware, so the -similarities seem to be intentional. - -These similarities also identified a command to enable or disable wake -sources like the power button and lid switch, and this was added to the -SMI handler to disable lid wake as the system does not yet resume -properly from a like wake with coreboot. - -Tested on the Latitude E6430 (Ivy Bridge) and the Precision M6800 -(Haswell, not yet pushed). - -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 | 22 ++++++++++++++++++++++ - src/ec/dell/mec5035/smihandler.c | 17 +++++++++++++++++ - 4 files changed, 54 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 dffbb7960c..85c2ab0140 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_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_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_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 32f791cb01..8d4fded28b 100644 ---- a/src/ec/dell/mec5035/mec5035.h -+++ b/src/ec/dell/mec5035/mec5035.h -@@ -4,12 +4,15 @@ - #define _EC_DELL_MEC5035_H_ - - #include <stdint.h> -+#include <types.h> - - #define NUM_REGISTERS 32 - - enum mec5035_cmd { - CMD_MOUSE_TP = 0x1a, - CMD_RADIO_CTRL = 0x2b, -+ CMD_ACPI_WAKEUP_CHANGE = 0x4a, -+ CMD_SLEEP_ENABLE = 0x64, - CMD_CPU_OK = 0xc2, - }; - -@@ -33,9 +36,28 @@ enum ec_radio_state { - RADIO_ON - }; - -+#define ACPI_WAKEUP_NUM_ARGS 4 -+enum ec_wake_change { -+ WAKE_OFF = 0, -+ WAKE_ON -+}; -+ -+/* Copied from ec/google/wilco/commands.h. Not sure if these all apply */ -+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 SLEEP_EN_NUM_ARGS 2 -+ - u8 mec5035_mouse_touchpad(enum ec_mouse_setting 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_change_wake(u8 source, enum ec_wake_change change); -+void mec5035_sleep_enable(void); -+ -+void mec5035_smi_sleep(int slp_type); - - #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..958733bf97 ---- /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_smi_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.47.0 - |