diff options
Diffstat (limited to 'kernel/start.c')
| -rw-r--r-- | kernel/start.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/kernel/start.c b/kernel/start.c index 1876680..2d89d90 100644 --- a/kernel/start.c +++ b/kernel/start.c @@ -44,7 +44,16 @@ start() // keep each CPU's hartid in its tp register, for cpuid(). int id = r_mhartid(); w_tp(id); - + + // allow access to all physical memory by S mode + // see figure 3.27 "PMP address register format, RV64" and table 3.10 "NAPOT + // range encoding in PMP address and configuration registers" in the RISC-V + // privileged specification + // we set the bits such that this matches any 56-bit physical address + w_pmpaddr0((~0ULL) >> 10); + // then we allow the access + w_pmpcfg0(PMP_R | PMP_W | PMP_X | PMP_MATCH_NAPOT); + // switch to supervisor mode and jump to main(). asm volatile("mret"); } |
