Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Jun 2021 21:49:30 GMT
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 33e1287b6a54 - main - amd64: do not touch BIOS reset flag halfword, unless we boot through BIOS
Message-ID:  <202106232149.15NLnUVh090258@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=33e1287b6a54672860d6646111ef0e544a00c569

commit 33e1287b6a54672860d6646111ef0e544a00c569
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-06-20 14:58:11 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-06-23 21:38:00 +0000

    amd64: do not touch BIOS reset flag halfword, unless we boot through BIOS
    
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D30872
---
 sys/amd64/amd64/locore.S  |  3 ---
 sys/amd64/amd64/machdep.c | 12 ++++++++++--
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/sys/amd64/amd64/locore.S b/sys/amd64/amd64/locore.S
index 4f6283b88bd2..a9bb9be330d8 100644
--- a/sys/amd64/amd64/locore.S
+++ b/sys/amd64/amd64/locore.S
@@ -56,9 +56,6 @@
  */
 ENTRY(btext)
 
-	/* Tell the bios to warmboot next time */
-	movw	$0x1234,0x472
-
 	/* Don't trust what the loader gives for rflags. */
 	pushq	$PSL_KERNEL
 	popfq
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index 9ddad323449b..83fc6b26fa44 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -1604,11 +1604,20 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
 	struct region_descriptor r_gdt;
 	size_t kstack0_sz;
 	int late_console;
+	bool efi_boot;
 
 	TSRAW(&thread0, TS_ENTER, __func__, NULL);
 
 	kmdp = init_ops.parse_preload_data(modulep);
 
+	efi_boot = preload_search_info(kmdp, MODINFO_METADATA |
+	    MODINFOMD_EFI_MAP) != NULL;
+
+	if (!efi_boot) {
+		/* Tell the bios to warmboot next time */
+		atomic_store_short((u_short *)0x472, 0x1234);
+	}
+
 	physfree += ucode_load_bsp(physfree + KERNBASE);
 	physfree = roundup2(physfree, PAGE_SIZE);
 
@@ -1760,8 +1769,7 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
 	 * Once bootblocks have updated, we can test directly for
 	 * efi_systbl != NULL here...
 	 */
-	if (preload_search_info(kmdp, MODINFO_METADATA | MODINFOMD_EFI_MAP)
-	    != NULL)
+	if (efi_boot)
 		vty_set_preferred(VTY_VT);
 
 	TUNABLE_INT_FETCH("hw.ibrs_disable", &hw_ibrs_disable);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106232149.15NLnUVh090258>