Browse Source

Reserve the PMP R=0 W=1 combination

This was a post-v1.10 amendment to the privileged spec.

059f64c941
pull/269/head
Andrew Waterman 7 years ago
parent
commit
06bafbf547
  1. 7
      riscv/processor.cc

7
riscv/processor.cc

@ -350,8 +350,11 @@ void processor_t::set_csr(int which, reg_t val)
if (which >= CSR_PMPCFG0 && which < CSR_PMPCFG0 + state.n_pmp / 4) {
for (size_t i0 = (which - CSR_PMPCFG0) * 4, i = i0; i < i0 + xlen / 8; i++) {
if (!(state.pmpcfg[i] & PMP_L))
state.pmpcfg[i] = (val >> (8 * (i - i0))) & (PMP_R | PMP_W | PMP_X | PMP_A | PMP_L);
if (!(state.pmpcfg[i] & PMP_L)) {
uint8_t cfg = (val >> (8 * (i - i0))) & (PMP_R | PMP_W | PMP_X | PMP_A | PMP_L);
cfg &= ~PMP_W | ((cfg & PMP_R) ? PMP_W : 0); // Disallow R=0 W=1
state.pmpcfg[i] = cfg;
}
}
mmu->flush_tlb();
}

Loading…
Cancel
Save