drivers/pc80/rtc/option.c: Stop resetting CMOS during s3 resume

After commit e12b313844 ("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>
This commit is contained in:
Bill XIE 2023-10-07 01:32:51 +08:00 committed by Felix Held
parent 51eee89c78
commit 29030d0f3d
1 changed files with 3 additions and 1 deletions

View File

@ -1,5 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */ /* SPDX-License-Identifier: GPL-2.0-only */
#include <acpi/acpi.h>
#include <console/console.h> #include <console/console.h>
#include <string.h> #include <string.h>
#include <cbfs.h> #include <cbfs.h>
@ -200,7 +201,8 @@ void sanitize_cmos(void)
{ {
const unsigned char *cmos_default; const unsigned char *cmos_default;
const bool cmos_need_reset = 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 length = 128;
size_t i; size_t i;