Skip to content

Commit 6cc342b

Browse files
committed
pointer masking: Let menvcfg.PMM be WARL if with Smnpm
1 parent eea20ae commit 6cc342b

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

riscv/csrs.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,12 @@ envcfg_csr_t::envcfg_csr_t(processor_t* const proc, const reg_t addr, const reg_
975975

976976
bool envcfg_csr_t::unlogged_write(const reg_t val) noexcept {
977977
const reg_t cbie_reserved = 2; // Reserved value of xenvcfg.CBIE
978-
const reg_t adjusted_val = get_field(val, MENVCFG_CBIE) != cbie_reserved ? val : set_field(val, MENVCFG_CBIE, 0);
978+
reg_t adjusted_val = get_field(val, MENVCFG_CBIE) != cbie_reserved ? val : set_field(val, MENVCFG_CBIE, 0);
979+
980+
const reg_t pmm_reserved = 1; // Reserved value of xseccfg.PMM
981+
const reg_t pmm = get_field(adjusted_val, MENVCFG_PMM);
982+
adjusted_val = set_field(adjusted_val, MENVCFG_PMM, pmm != pmm_reserved ? pmm : 0);
983+
979984
return masked_csr_t::unlogged_write(adjusted_val);
980985
}
981986

riscv/processor.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,7 @@ void state_t::reset(processor_t* const proc, reg_t max_isa)
388388
if (proc->extension_enabled_const('U')) {
389389
const reg_t menvcfg_mask = (proc->extension_enabled(EXT_ZICBOM) ? MENVCFG_CBCFE | MENVCFG_CBIE : 0) |
390390
(proc->extension_enabled(EXT_ZICBOZ) ? MENVCFG_CBZE : 0) |
391+
(proc->extension_enabled(EXT_SMNPM) ? MENVCFG_PMM : 0) |
391392
(proc->extension_enabled(EXT_SVADU) ? MENVCFG_ADUE: 0) |
392393
(proc->extension_enabled(EXT_SVPBMT) ? MENVCFG_PBMTE : 0) |
393394
(proc->extension_enabled(EXT_SSTC) ? MENVCFG_STCE : 0) |

0 commit comments

Comments
 (0)