target/openrisc: Fix writes to interrupt mask register
authorStafford Horne <shorne@gmail.com>
Sun, 1 Jul 2018 08:02:54 +0000 (17:02 +0900)
committerStafford Horne <shorne@gmail.com>
Tue, 3 Jul 2018 13:40:33 +0000 (22:40 +0900)
The interrupt controller mask register (PICMR) allows writing any value
to any of the 32 interrupt mask bits.  Writing a 0 masks the interrupt
writing a 1 unmasks (enables) the the interrupt.

For some reason the old code was or'ing the write values to the PICMR
meaning it was not possible to ever mask a interrupt once it was
enabled.

I have tested this by running linux 4.18 and my regular checks, I don't
see any issues.

Reported-by: Davidson Francis <davidsondfgl@gmail.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Stafford Horne <shorne@gmail.com>
target/openrisc/sys_helper.c

index 541615bfb34a7ba869a64b77ccdcd9a10cf927b0..b66a45c1e0b8e1251e88fcc959ead09693f13993 100644 (file)
@@ -142,7 +142,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb)
         }
         break;
     case TO_SPR(9, 0):  /* PICMR */
-        env->picmr |= rb;
+        env->picmr = rb;
         break;
     case TO_SPR(9, 2):  /* PICSR */
         env->picsr &= ~rb;