src/coreboot/patches: add !CONFIG_USE_OPTION_TABLE patches
This commit imports four patches which fix bugs in coreboot's behavior when !CONFIG_USE_OPTION_TABLE on KGPE-D16.master
parent
277ec9e263
commit
1e33255408
@ -0,0 +1,35 @@
|
|||||||
|
From b675046088b682b05742758ac4bf6ee3c70a166d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Your Name <you@example.com>
|
||||||
|
Date: Wed, 3 May 2023 15:07:04 -0700
|
||||||
|
Subject: [PATCH 1/4] mc146818rtc.c: mute erroneous warning
|
||||||
|
|
||||||
|
mc146818rtc.c includes a BIOS_NOTICE warning message about accessing
|
||||||
|
the CMOS from non-ROMCC code, but the accsess is guarded by
|
||||||
|
IS_ENABLED(CONFIG_USE_OPTION_TABLE) whereas the warning message
|
||||||
|
isn't. So the warning shouldn't be emitted if
|
||||||
|
!IS_ENABLED(CONFIG_USE_OPTION_TABLE).
|
||||||
|
|
||||||
|
This commit fixes the warning by moving the warning inside the
|
||||||
|
if-block where like the access takes place.
|
||||||
|
---
|
||||||
|
src/drivers/pc80/rtc/mc146818rtc.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/drivers/pc80/rtc/mc146818rtc.c b/src/drivers/pc80/rtc/mc146818rtc.c
|
||||||
|
index eaa71c908f..ebc5774b16 100644
|
||||||
|
--- a/src/drivers/pc80/rtc/mc146818rtc.c
|
||||||
|
+++ b/src/drivers/pc80/rtc/mc146818rtc.c
|
||||||
|
@@ -385,9 +385,9 @@ static enum cb_err set_cmos_value(unsigned long bit, unsigned long length,
|
||||||
|
unsigned int read_option_lowlevel(unsigned int start, unsigned int size,
|
||||||
|
unsigned int def)
|
||||||
|
{
|
||||||
|
+ if (IS_ENABLED(CONFIG_USE_OPTION_TABLE)) {
|
||||||
|
printk(BIOS_NOTICE, "NOTICE: read_option() used to access CMOS "
|
||||||
|
"from non-ROMCC code, please use get_option() instead.\n");
|
||||||
|
- if (IS_ENABLED(CONFIG_USE_OPTION_TABLE)) {
|
||||||
|
const unsigned char byte = cmos_read(start / 8);
|
||||||
|
return (byte >> (start & 7U)) & ((1U << size) - 1U);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
From 063f922b034161b269af460bd4b02965f9c9ebaa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Your Name <you@example.com>
|
||||||
|
Date: Wed, 3 May 2023 15:09:58 -0700
|
||||||
|
Subject: [PATCH 2/4] mc146818rtc_boot.c: always report cmos_chksum_valid() if
|
||||||
|
!CONFIG_USE_OPTION_TABLE
|
||||||
|
|
||||||
|
If !CONFIG_USE_OPTION_TABLE then coreboot should not use the CMOS
|
||||||
|
NVRAM *except* for the RTC_BOOT_BYTE.
|
||||||
|
|
||||||
|
Unfortunately when !CONFIG_USE_OPTION_TABLE, coreboot will still
|
||||||
|
calculate the CMOS checksum, and erase the RTC_BOOT_BYTE if it finds
|
||||||
|
an invalid checksum. Since !CONFIG_USE_OPTION_TABLE the checksum
|
||||||
|
will never be fixed, meaning that RTC_BOOT_BYTE becomes effectively
|
||||||
|
useless.
|
||||||
|
|
||||||
|
This commit causes coreboot to assume that the cmos checksum is
|
||||||
|
always valid when !CONFIG_USE_OPTION_TABLE, since under that
|
||||||
|
condition coreboot shouldn't expect to be able to use any part of
|
||||||
|
the CMOS NVRAM other than the RTC_BOOT_BYTE.
|
||||||
|
---
|
||||||
|
src/drivers/pc80/rtc/mc146818rtc_boot.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/drivers/pc80/rtc/mc146818rtc_boot.c b/src/drivers/pc80/rtc/mc146818rtc_boot.c
|
||||||
|
index e5164d11ea..dd23f52a8a 100644
|
||||||
|
--- a/src/drivers/pc80/rtc/mc146818rtc_boot.c
|
||||||
|
+++ b/src/drivers/pc80/rtc/mc146818rtc_boot.c
|
||||||
|
@@ -50,7 +50,7 @@ int cmos_chksum_valid(void)
|
||||||
|
|
||||||
|
return sum == old_sum;
|
||||||
|
#else
|
||||||
|
- return 0;
|
||||||
|
+ return 1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 72884c3492c623c5239a2ac664a3f1249d234dd6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Your Name <you@example.com>
|
||||||
|
Date: Wed, 3 May 2023 15:12:42 -0700
|
||||||
|
Subject: [PATCH 3/4] kgpe-d16/bootblock.c: use RTC_BOOT_BYTE even when
|
||||||
|
!CONFIG_USE_OPTION_TABLE
|
||||||
|
|
||||||
|
My initial implementation of the fallback mechanism assumed
|
||||||
|
CONFIG_USE_OPTION_TABLE. This commit expands it to function
|
||||||
|
properly even when !CONFIG_USE_OPTION_TABLE.
|
||||||
|
---
|
||||||
|
src/mainboard/asus/kgpe-d16/bootblock.c | 9 ++-------
|
||||||
|
1 file changed, 2 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/mainboard/asus/kgpe-d16/bootblock.c b/src/mainboard/asus/kgpe-d16/bootblock.c
|
||||||
|
index 8a149737e8..9687d20a3d 100644
|
||||||
|
--- a/src/mainboard/asus/kgpe-d16/bootblock.c
|
||||||
|
+++ b/src/mainboard/asus/kgpe-d16/bootblock.c
|
||||||
|
@@ -33,21 +33,16 @@ void bootblock_mainboard_init(void)
|
||||||
|
if (recovery_enabled) {
|
||||||
|
#if IS_ENABLED(CONFIG_USE_OPTION_TABLE)
|
||||||
|
/* Clear NVRAM checksum */
|
||||||
|
-/*
|
||||||
|
+
|
||||||
|
for (addr = LB_CKS_RANGE_START; addr <= LB_CKS_RANGE_END; addr++) {
|
||||||
|
cmos_write(0x0, addr);
|
||||||
|
}
|
||||||
|
-*/
|
||||||
|
rewrite_cmos();
|
||||||
|
+#endif /* IS_ENABLED(CONFIG_USE_OPTION_TABLE) */
|
||||||
|
|
||||||
|
/* Set fallback boot */
|
||||||
|
byte = cmos_read(RTC_BOOT_BYTE);
|
||||||
|
byte &= 0xfc;
|
||||||
|
cmos_write(byte, RTC_BOOT_BYTE);
|
||||||
|
-#else
|
||||||
|
- /* FIXME
|
||||||
|
- * Figure out how to recover if the option table is not available
|
||||||
|
- */
|
||||||
|
-#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
From 1b8c0f721ccd6fd43bd6a636fc3439f41e98e552 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Your Name <you@example.com>
|
||||||
|
Date: Wed, 3 May 2023 15:13:42 -0700
|
||||||
|
Subject: [PATCH 4/4] superio/winbond/w83667hg-a/superio.c: do not use
|
||||||
|
get_option() if CONFIG_USE_OPTION_TABLE
|
||||||
|
|
||||||
|
Prior to this commit, w83667hg-a/superio.c would attempt to read the
|
||||||
|
"power on after power loss" byte from CMOS NVRAM even if
|
||||||
|
!CONFIG_USE_OPTION_TABLE.
|
||||||
|
|
||||||
|
This commit removes that read, since when !CONFIG_USE_OPTION_TABLE
|
||||||
|
coreboot should not expect to be able to get useful information from
|
||||||
|
any part of the CMOS NVRAM other than RTC_BOOT_BYTE.
|
||||||
|
|
||||||
|
When !CONFIG_USE_OPTION_TABLE coreboot will use the safest possible
|
||||||
|
option: the system is always configured to power on after a power
|
||||||
|
loss, every time coreboot starts up.
|
||||||
|
---
|
||||||
|
src/superio/winbond/w83667hg-a/superio.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/superio/winbond/w83667hg-a/superio.c b/src/superio/winbond/w83667hg-a/superio.c
|
||||||
|
index 09859cf2c7..ec1de699d0 100644
|
||||||
|
--- a/src/superio/winbond/w83667hg-a/superio.c
|
||||||
|
+++ b/src/superio/winbond/w83667hg-a/superio.c
|
||||||
|
@@ -69,7 +69,9 @@ static void w83667hg_a_init(struct device *dev)
|
||||||
|
case W83667HG_A_ACPI:
|
||||||
|
/* Set power state after power fail */
|
||||||
|
power_status = CONFIG_MAINBOARD_POWER_ON_AFTER_POWER_FAIL;
|
||||||
|
+#if IS_ENABLED(CONFIG_USE_OPTION_TABLE)
|
||||||
|
get_option(&power_status, "power_on_after_fail");
|
||||||
|
+#endif
|
||||||
|
pnp_enter_conf_mode_8787(dev);
|
||||||
|
pnp_set_logical_device(dev);
|
||||||
|
byte = pnp_read_config(dev, 0xe4);
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
Loading…
Reference in New Issue