[coreboot-gerrit] Patch set updated for coreboot: arch/riscv: Fix the page table setup code

Jonathan Neuschäfer (j.neuschaefer@gmx.net) gerrit at coreboot.org
Tue Aug 9 03:29:51 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/16120

-gerrit

commit 02b42da5e1e68a1f18f94280c91de2594aa747ed
Author: Jonathan Neuschäfer <j.neuschaefer at gmx.net>
Date:   Tue Aug 9 02:07:12 2016 +0200

    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
    
    Change-Id: I575093445edfdf5a8f54b0f8622ff0e89f77ccec
    Signed-off-by: Jonathan Neuschäfer <j.neuschaefer at gmx.net>
---
 src/arch/riscv/virtual_memory.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/arch/riscv/virtual_memory.c b/src/arch/riscv/virtual_memory.c
index ba83804..3e5e333 100644
--- a/src/arch/riscv/virtual_memory.c
+++ b/src/arch/riscv/virtual_memory.c
@@ -131,7 +131,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);
 
 	// 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;
 		size_t l2_idx = (virtMemStart >> l2_shift) & ((1 << RISCV_PGLEVEL_BITS)-1);
 		l2_idx += ((vaddr - virtMemStart) >> l2_shift);
@@ -152,7 +154,8 @@ void init_vm(uintptr_t virtMemStart, uintptr_t physMemStart, uintptr_t pageTable
 
 	mb();
 	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) {



More information about the coreboot-gerrit mailing list