]> git.proxmox.com Git - mirror_qemu.git/commitdiff
target/riscv: Fix pmp NA4 implementation
authorAlexandre Mergnat <amergnat@baylibre.com>
Mon, 6 Jul 2020 08:45:50 +0000 (10:45 +0200)
committerAlistair Francis <alistair.francis@wdc.com>
Tue, 14 Jul 2020 00:25:37 +0000 (17:25 -0700)
The end address calculation for NA4 mode is wrong because the address
used isn't shifted.

It doesn't watch 4 bytes but a huge range because the end address
calculation is wrong.

The solution is to use the shifted address calculated for start address
variable.

Modifications are tested on Zephyr OS userspace test suite which works
for other RISC-V boards (E31 and E34 core).

Signed-off-by: Alexandre Mergnat <amergnat@baylibre.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-id: 20200706084550.24117-1-amergnat@baylibre.com
Message-Id: <20200706084550.24117-1-amergnat@baylibre.com>
[ Changes by AF:
 - Improve the commit title and message
]
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
target/riscv/pmp.c

index 9418660f1bd31f26f6605b3f599c34d3de7676e9..2a2b9f5363b6e6e5b038187360a9ade9a39c22de 100644 (file)
@@ -171,7 +171,7 @@ static void pmp_update_rule(CPURISCVState *env, uint32_t pmp_index)
 
     case PMP_AMATCH_NA4:
         sa = this_addr << 2; /* shift up from [xx:0] to [xx+2:2] */
-        ea = (this_addr + 4u) - 1u;
+        ea = (sa + 4u) - 1u;
         break;
 
     case PMP_AMATCH_NAPOT: