mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
UPSTREAM: arch/riscv: Fix the page table setup code
In particular: - Fix the condition of the loop that fills the mid-level page table - Adhere to the format of sptbr BUG=None BRANCH=None TEST=None Signed-off-by: Jonathan Neuschfer <j.neuschaefer@gmx.net> Reviewed-on: https://review.coreboot.org/16120 Reviewed-by: Ronald G. Minnich <rminnich@gmail.com> Change-Id: I575093445edfdf5a8f54b0f8622ff0e89f77ccec Reviewed-on: https://chromium-review.googlesource.com/369148 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
29c4f0ec73
commit
fb0699a9ec
1 changed files with 5 additions and 2 deletions
|
@ -74,7 +74,9 @@ void init_vm(uintptr_t virtMemStart, uintptr_t physMemStart, uintptr_t pageTable
|
||||||
root_pt[(1<<RISCV_PGLEVEL_BITS)-num_middle_pts+i] = ptd_create(((uintptr_t)middle_pt >> RISCV_PGSHIFT) + i);
|
root_pt[(1<<RISCV_PGLEVEL_BITS)-num_middle_pts+i] = ptd_create(((uintptr_t)middle_pt >> RISCV_PGSHIFT) + i);
|
||||||
|
|
||||||
// fill the middle page table
|
// fill the middle page table
|
||||||
for (uintptr_t vaddr = virtMemStart, paddr = physMemStart; paddr < memorySize; vaddr += SUPERPAGE_SIZE, paddr += SUPERPAGE_SIZE) {
|
for (uintptr_t vaddr = virtMemStart, paddr = physMemStart;
|
||||||
|
paddr < physMemStart + memorySize;
|
||||||
|
vaddr += SUPERPAGE_SIZE, paddr += SUPERPAGE_SIZE) {
|
||||||
int l2_shift = RISCV_PGLEVEL_BITS + RISCV_PGSHIFT;
|
int l2_shift = RISCV_PGLEVEL_BITS + RISCV_PGSHIFT;
|
||||||
size_t l2_idx = (virtMemStart >> l2_shift) & ((1 << RISCV_PGLEVEL_BITS)-1);
|
size_t l2_idx = (virtMemStart >> l2_shift) & ((1 << RISCV_PGLEVEL_BITS)-1);
|
||||||
l2_idx += ((vaddr - virtMemStart) >> l2_shift);
|
l2_idx += ((vaddr - virtMemStart) >> l2_shift);
|
||||||
|
@ -95,7 +97,8 @@ void init_vm(uintptr_t virtMemStart, uintptr_t physMemStart, uintptr_t pageTable
|
||||||
|
|
||||||
mb();
|
mb();
|
||||||
root_page_table = root_pt;
|
root_page_table = root_pt;
|
||||||
write_csr(sptbr, root_pt);
|
uintptr_t ptbr = ((uintptr_t) root_pt) >> RISCV_PGSHIFT;
|
||||||
|
write_csr(sptbr, ptbr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initVirtualMemory(void) {
|
void initVirtualMemory(void) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue