在 2025/7/2 上午11:20, Bibo Mao 写道:


On 2025/6/27 上午11:01, Song Gao wrote:
when loongarch cpu set irq is INT_AVEC, we need set CSR_ESTAT.MSGINT bit
and CSR_ECFG.MSGINT bit.

Signed-off-by: Song Gao <gaos...@loongson.cn>
---
  target/loongarch/cpu-csr.h |  6 ++++--
  target/loongarch/cpu.c     | 10 ++++++++++
  2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/target/loongarch/cpu-csr.h b/target/loongarch/cpu-csr.h
index 4792677086..6ec13d13d1 100644
--- a/target/loongarch/cpu-csr.h
+++ b/target/loongarch/cpu-csr.h
@@ -34,11 +34,13 @@ FIELD(CSR_MISC, ALCL, 12, 4)
  FIELD(CSR_MISC, DWPL, 16, 3)
    #define LOONGARCH_CSR_ECFG           0x4 /* Exception config */
-FIELD(CSR_ECFG, LIE, 0, 13)
+FIELD(CSR_ECFG, LIE, 0, 15)        /*bit 15 is msg interrupt enabled */
+FIELD(CSR_ECFG, MSGINT, 14, 1)
  FIELD(CSR_ECFG, VS, 16, 3)
    #define LOONGARCH_CSR_ESTAT          0x5 /* Exception status */
-FIELD(CSR_ESTAT, IS, 0, 13)
+FIELD(CSR_ESTAT, IS, 0, 15)        /*bit 15 is msg interrupt enabled */
+FIELD(CSR_ESTAT, MSGINT, 14, 1)
  FIELD(CSR_ESTAT, ECODE, 16, 6)
  FIELD(CSR_ESTAT, ESUBCODE, 22, 9)
  diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
index bde9f917fc..c5924bb94f 100644
--- a/target/loongarch/cpu.c
+++ b/target/loongarch/cpu.c
@@ -127,6 +127,16 @@ void loongarch_cpu_set_irq(void *opaque, int irq, int level)
          return;
      }
  +    /* do INTC_AVEC irqs */
+    if (irq == INT_AVEC) {
+        for (int i = 256; i >= 0; i--) {
+            if (test_bit(i, &(env->CSR_MSGIS[i / 64]))) {
+                env->CSR_ESTAT = FIELD_DP64(env->CSR_ESTAT, CSR_ESTAT, MSGINT, 1); +                env->CSR_ECFG = FIELD_DP64(env->CSR_ECFG, CSR_ECFG, MSGINT, 1);
+            }
+        }
+    }
I think it can be simplified as follows:
  /* do INTC_AVEC irqs */
  if (irq == INT_AVEC) {
      env->CSR_ESTAT = FIELD_DP64(env->CSR_ESTAT, CSR_ESTAT, MSGINT, 1);
      env->CSR_ECFG = FIELD_DP64(env->CSR_ECFG, CSR_ECFG, MSGINT, 1);
  }

Got it.  I will corrrect it on v3 .  thanks for your suggestions and comments.

Thanks.
Song Gao
Regards
Bibo Mao
+
      if (kvm_enabled()) {
          kvm_loongarch_set_interrupt(cpu, irq, level);
      } else if (tcg_enabled()) {



Reply via email to