]> Git Repo - qemu.git/commitdiff
hw/intc/arm_gicv3_cpuif: Don't let BPR be set below its minimum
authorPeter Maydell <[email protected]>
Fri, 2 Jun 2017 10:51:47 +0000 (11:51 +0100)
committerPeter Maydell <[email protected]>
Fri, 2 Jun 2017 10:51:47 +0000 (11:51 +0100)
icc_bpr_write() was not enforcing that writing a value below the
minimum for the BPR should behave as if the BPR was set to the
minimum value. This doesn't make a difference for the secure
BPRs (since we define the minimum for the QEMU implementation
as zero) but did mean we were allowing the NS BPR1 to be set to
0 when 1 should be the lowest value.

Signed-off-by: Peter Maydell <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Message-id: 1493226792[email protected]

hw/intc/arm_gicv3_cpuif.c

index d31eba0289c89356b55de6239afc229ba0339e1a..e660b3ff28c0d6cadac463d8ed091ea2feec0a0f 100644 (file)
@@ -1388,6 +1388,7 @@ static void icc_bpr_write(CPUARMState *env, const ARMCPRegInfo *ri,
 {
     GICv3CPUState *cs = icc_cs_from_env(env);
     int grp = (ri->crm == 8) ? GICV3_G0 : GICV3_G1;
+    uint64_t minval;
 
     if (icv_access(env, grp == GICV3_G0 ? HCR_FMO : HCR_IMO)) {
         icv_bpr_write(env, ri, value);
@@ -1415,6 +1416,11 @@ static void icc_bpr_write(CPUARMState *env, const ARMCPRegInfo *ri,
         return;
     }
 
+    minval = (grp == GICV3_G1NS) ? GIC_MIN_BPR_NS : GIC_MIN_BPR;
+    if (value < minval) {
+        value = minval;
+    }
+
     cs->icc_bpr[grp] = value & 7;
     gicv3_cpuif_update(cs);
 }
This page took 0.029536 seconds and 4 git commands to generate.