57 lines
2.0 KiB
Diff
57 lines
2.0 KiB
Diff
From 412f1d68c610f69384b156f09f0b326af984b7cc Mon Sep 17 00:00:00 2001
|
|
From: Bill XIE <persmule@hardenedlinux.org>
|
|
Date: Sat, 7 Oct 2023 01:32:51 +0800
|
|
Subject: [PATCH 1/2] drivers/pc80/rtc/option.c: Stop resetting CMOS during s3
|
|
resume
|
|
|
|
After commit e12b313844da ("drivers/pc80/rtc/option.c: Allow CMOS
|
|
defaults to extend to bank 1"), Thinkpad X200 with
|
|
CONFIG(STATIC_OPTION_TABLE) can no longer resume from s3 (detected via
|
|
bisect).
|
|
|
|
Further inspection shows that DRAM training result of GM45 is stored
|
|
in CMOS above 128 bytes in raminit_read_write_training.c, for s3 resume
|
|
to restore, but it will be erased by sanitize_cmos(), which now clears
|
|
both bank 0 and bank 1, leaving only "untrained" result restored, so s3
|
|
resume will fail.
|
|
|
|
However, resetting CMOS seems unnecessary during s3 resume. Now,
|
|
cmos_need_reset will be negated when acpi_is_wakeup_s3() returns true.
|
|
|
|
Tested: Thinkpad X200 with CONFIG(STATIC_OPTION_TABLE) can resume from
|
|
s3 again with these changes.
|
|
|
|
Change-Id: I533e83f3b95f327b0e24f4d750f8812325b7770b
|
|
Signed-off-by: Bill XIE <persmule@hardenedlinux.org>
|
|
Reviewed-on: https://review.coreboot.org/c/coreboot/+/78288
|
|
Reviewed-by: Jonathon Hall <jonathon.hall@puri.sm>
|
|
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
|
|
---
|
|
src/drivers/pc80/rtc/option.c | 4 +++-
|
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/drivers/pc80/rtc/option.c b/src/drivers/pc80/rtc/option.c
|
|
index e8e2345133..e6cfa175ad 100644
|
|
--- a/src/drivers/pc80/rtc/option.c
|
|
+++ b/src/drivers/pc80/rtc/option.c
|
|
@@ -1,5 +1,6 @@
|
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
+#include <acpi/acpi.h>
|
|
#include <console/console.h>
|
|
#include <string.h>
|
|
#include <cbfs.h>
|
|
@@ -200,7 +201,8 @@ void sanitize_cmos(void)
|
|
{
|
|
const unsigned char *cmos_default;
|
|
const bool cmos_need_reset =
|
|
- CONFIG(STATIC_OPTION_TABLE) || cmos_error() || !cmos_lb_cks_valid();
|
|
+ (CONFIG(STATIC_OPTION_TABLE) || cmos_error() || !cmos_lb_cks_valid())
|
|
+ && !acpi_is_wakeup_s3();
|
|
size_t length = 128;
|
|
size_t i;
|
|
|
|
--
|
|
2.39.2
|
|
|