qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH v5 06/22] target/arm: Add support for Non-maskable Interr


From: Richard Henderson
Subject: Re: [RFC PATCH v5 06/22] target/arm: Add support for Non-maskable Interrupt
Date: Thu, 29 Feb 2024 12:42:49 -1000
User-agent: Mozilla Thunderbird

On 2/29/24 03:10, Jinjie Ruan via wrote:
@@ -900,6 +945,31 @@ void arm_cpu_update_vfiq(ARMCPU *cpu)
      }
  }
+void arm_cpu_update_vnmi(ARMCPU *cpu)
+{
+    /*
+     * Update the interrupt level for VNMI, which is the logical OR of
+     * the HCRX_EL2.VINMI or HCRX_EL2.VFNMI bit and the input line level from
+     * the GIC.
+     */
+    CPUARMState *env = &cpu->env;
+    CPUState *cs = CPU(cpu);
+
+    bool new_state = ((env->cp15.hcr_el2 & HCR_VI) &&
+                      (env->cp15.hcrx_el2 & HCRX_VINMI)) ||
+                     ((env->cp15.hcr_el2 & HCR_VF) &&
+                      (env->cp15.hcrx_el2 & HCRX_VFNMI)) ||

Need to use arm_hcr_el2_eff and arm_hcrx_el2_eff. I see this is an existing error from the other functions too.

+        (env->irq_line_state & CPU_INTERRUPT_VNMI);
+
+    if (new_state != ((cs->interrupt_request & CPU_INTERRUPT_VNMI) != 0)) {
+        if (new_state) {
+            cpu_interrupt(cs, CPU_INTERRUPT_VNMI);
+        } else {
+            cpu_reset_interrupt(cs, CPU_INTERRUPT_VNMI);
+        }
+    }
+}

This is incomplete, as you need additional changes within the other two functions to not raise IRQ when VINMI is set, etc.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]