]> Git Repo - qemu.git/commitdiff
target/arm: Handle VIRQ and VFIQ in arm_cpu_do_interrupt_aarch32()
authorPeter Maydell <[email protected]>
Fri, 20 Jan 2017 11:15:07 +0000 (11:15 +0000)
committerPeter Maydell <[email protected]>
Fri, 20 Jan 2017 11:15:07 +0000 (11:15 +0000)
To run a VM in 32-bit EL1 our AArch32 interrupt handling code
needs to be able to cope with VIRQ and VFIQ exceptions.
These behave like IRQ and FIQ except that we don't need to try
to route them to Monitor mode.

Signed-off-by: Peter Maydell <[email protected]>
Reviewed-by: Edgar E. Iglesias <[email protected]>
target/arm/helper.c

index b3875c7c6eeee842716cb599683a0b0367a63087..ba72ebbb073acc09d8f5496499466a7271736613 100644 (file)
@@ -6399,6 +6399,20 @@ static void arm_cpu_do_interrupt_aarch32(CPUState *cs)
         }
         offset = 4;
         break;
+    case EXCP_VIRQ:
+        new_mode = ARM_CPU_MODE_IRQ;
+        addr = 0x18;
+        /* Disable IRQ and imprecise data aborts.  */
+        mask = CPSR_A | CPSR_I;
+        offset = 4;
+        break;
+    case EXCP_VFIQ:
+        new_mode = ARM_CPU_MODE_FIQ;
+        addr = 0x1c;
+        /* Disable FIQ, IRQ and imprecise data aborts.  */
+        mask = CPSR_A | CPSR_I | CPSR_F;
+        offset = 4;
+        break;
     case EXCP_SMC:
         new_mode = ARM_CPU_MODE_MON;
         addr = 0x08;
This page took 0.036748 seconds and 4 git commands to generate.