aboutsummaryrefslogtreecommitdiff
path: root/target/riscv/csr.c
diff options
context:
space:
mode:
authorPalmer Dabbelt <palmer@sifive.com>2019-06-24 01:59:51 -0700
committerPalmer Dabbelt <palmer@sifive.com>2019-06-25 22:32:42 -0700
commit591bddea8d874e1500921de0353818e5586618f5 (patch)
tree89a3ca7210f98e3cdf6bd85ac83c228c87b28262 /target/riscv/csr.c
parent50fba816cd226001bec3e495c39879deb2fa5432 (diff)
downloadqemu-591bddea8d874e1500921de0353818e5586618f5.zip
qemu-591bddea8d874e1500921de0353818e5586618f5.tar.gz
qemu-591bddea8d874e1500921de0353818e5586618f5.tar.bz2
RISC-V: Add support for the Zicsr extension
The various CSR instructions have been split out of the base ISA as part of the ratification process. This patch adds a Zicsr argument, which disables all the CSR instructions. Signed-off-by: Palmer Dabbelt <palmer@sifive.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Diffstat (limited to 'target/riscv/csr.c')
-rw-r--r--target/riscv/csr.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index de67741..e0d4586 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -793,6 +793,7 @@ int riscv_csrrw(CPURISCVState *env, int csrno, target_ulong *ret_value,
{
int ret;
target_ulong old_value;
+ RISCVCPU *cpu = env_archcpu(env);
/* check privileges and return -1 if check fails */
#if !defined(CONFIG_USER_ONLY)
@@ -803,6 +804,11 @@ int riscv_csrrw(CPURISCVState *env, int csrno, target_ulong *ret_value,
}
#endif
+ /* ensure the CSR extension is enabled. */
+ if (!cpu->cfg.ext_icsr) {
+ return -1;
+ }
+
/* check predicate */
if (!csr_ops[csrno].predicate || csr_ops[csrno].predicate(env, csrno) < 0) {
return -1;