[coreboot-gerrit] New patch to review for coreboot: arch/riscv: Only initialize virtual memory if it's available

Jonathan Neuschäfer (j.neuschaefer@gmx.net) gerrit at coreboot.org
Mon Jul 25 02:51:16 CEST 2016


Jonathan Neuschäfer (j.neuschaefer at gmx.net) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/15831

-gerrit

commit 072e2444b3398fb3b216759b4a4f635c92540e39
Author: Jonathan Neuschäfer <j.neuschaefer at gmx.net>
Date:   Mon Jul 25 00:42:24 2016 +0200

    arch/riscv: Only initialize virtual memory if it's available
    
    And do the detection just before the initialization.
    
    Change-Id: I9a52430262f799baa298dc4f4ea459880abe250e
    Signed-off-by: Jonathan Neuschäfer <j.neuschaefer at gmx.net>
---
 src/arch/riscv/virtual_memory.c | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/arch/riscv/virtual_memory.c b/src/arch/riscv/virtual_memory.c
index bfdd84d..f0cd5f6 100644
--- a/src/arch/riscv/virtual_memory.c
+++ b/src/arch/riscv/virtual_memory.c
@@ -96,6 +96,22 @@ void init_vm(uintptr_t virtMemStart, uintptr_t physMemStart, uintptr_t pageTable
 }
 
 void initVirtualMemory(void) {
+	uintptr_t ms;
+
+	ms = read_csr(mstatus);
+	ms = INSERT_FIELD(ms, MSTATUS_VM, VM_CHOICE);
+	write_csr(mstatus, ms);
+	ms = read_csr(mstatus);
+
+	if (EXTRACT_FIELD(ms, MSTATUS_VM) != VM_CHOICE) {
+		printk(BIOS_DEBUG, "We don't have virtual memory...\n");
+		return;
+	} else {
+		printk(BIOS_DEBUG, "-----------------------------\n");
+		printk(BIOS_DEBUG, "Virtual memory status enabled\n");
+		printk(BIOS_DEBUG, "-----------------------------\n");
+	}
+
 	printk(BIOS_DEBUG, "Initializing virtual memory...\n");
 	uintptr_t physicalStart = 0x1000000; // TODO: Figure out how to grab this from cbfs
 	uintptr_t virtualStart = 0xffffffff81000000;
@@ -115,19 +131,9 @@ void mstatus_init(void)
 	ms = INSERT_FIELD(ms, MSTATUS_PRV1, PRV_S);
 	ms = INSERT_FIELD(ms, MSTATUS_PRV2, PRV_U);
 	ms = INSERT_FIELD(ms, MSTATUS_IE2, 1);
-	ms = INSERT_FIELD(ms, MSTATUS_VM, VM_CHOICE);
 	ms = INSERT_FIELD(ms, MSTATUS_FS, 3);
 	ms = INSERT_FIELD(ms, MSTATUS_XS, 3);
 	write_csr(mstatus, ms);
-	ms = read_csr(mstatus);
-
-	if (EXTRACT_FIELD(ms, MSTATUS_VM) != VM_CHOICE) {
-		printk(BIOS_DEBUG, "we don't have virtual memory...\n");
-	} else {
-		printk(BIOS_DEBUG, "-----------------------------\n");
-		printk(BIOS_DEBUG, "virtual memory status enabled\n");
-		printk(BIOS_DEBUG, "-----------------------------\n");
-	}
 
 	clear_csr(mip, MIP_MSIP);
 	set_csr(mie, MIP_MSIP);



More information about the coreboot-gerrit mailing list