UPSTREAM: arch/riscv: Only initialize virtual memory if it's available
And do the detection just before the initialization. BUG=None BRANCH=None TEST=None Change-Id: I60b2aed845d1a75516b14a7721050565e5535f73 Signed-off-by: Jonathan Neuschfer <j.neuschaefer@gmx.net> Reviewed-on: https://review.coreboot.org/15831 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com> Reviewed-on: https://chromium-review.googlesource.com/365312 Commit-Ready: Furquan Shaikh <furquan@chromium.org> Tested-by: Furquan Shaikh <furquan@chromium.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
37c9fc3bdf
commit
e55585224d
1 changed files with 16 additions and 10 deletions
|
|
@ -95,6 +95,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;
|
||||
|
|
@ -114,19 +130,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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue