From 06feed1443cc1ecb653f50a1afb8306c6351a221 Mon Sep 17 00:00:00 2001 From: YenHaoChen Date: Tue, 23 Jul 2024 12:27:27 +0800 Subject: [PATCH] hvip: Correct logging value of mip on writing hvip The logging value is the read value on updating. The read value of mip depends on the value of hvip. Updating mip before hvip leaves an incorrect logging mip value that does not consider the new hvip. Thus, updating mip should be after basic_csr_t::unlogged_write() of hvip to log the correct value. The return value of basic_csr_t::unlogged_write() is a constant true. Thus, the return value does not change after this commit. --- riscv/csrs.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/riscv/csrs.cc b/riscv/csrs.cc index 068c6402e7..fb07153996 100644 --- a/riscv/csrs.cc +++ b/riscv/csrs.cc @@ -1777,8 +1777,9 @@ reg_t hvip_csr_t::read() const noexcept { } bool hvip_csr_t::unlogged_write(const reg_t val) noexcept { + basic_csr_t::unlogged_write(val & (MIP_VSEIP | MIP_VSTIP)); state->mip->write_with_mask(MIP_VSSIP, val); // hvip.VSSIP is an alias of mip.VSSIP - return basic_csr_t::unlogged_write(val & (MIP_VSEIP | MIP_VSTIP)); + return true; } ssp_csr_t::ssp_csr_t(processor_t* const proc, const reg_t addr, const reg_t mask, const reg_t init):