Commit cfad709b authored by Alexandre Mergnat's avatar Alexandre Mergnat Committed by Alistair Francis
Browse files

target/riscv: Fix pmp NA4 implementation



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: default avatarAlexandre Mergnat <amergnat@baylibre.com>
Reviewed-by: default avatarAlistair 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: default avatarAlistair Francis <alistair.francis@wdc.com>
parent 895bfa84
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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: