[coreboot-gerrit] Patch set updated 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 15:32:46 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 2c9d3b8fab2912bf68acebf1a9194db73d9fa427
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