qemu-devel
[Top][All Lists]
Advanced

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

Re: [RFC PATCH v3 14/21] hw/intc/arm_gicv3_redist: Implement GICR_INMIR0


From: Richard Henderson
Subject: Re: [RFC PATCH v3 14/21] hw/intc/arm_gicv3_redist: Implement GICR_INMIR0
Date: Fri, 23 Feb 2024 10:14:02 -1000
User-agent: Mozilla Thunderbird

On 2/23/24 00:32, Jinjie Ruan via wrote:
Add GICR_INMIR0 register and support access GICR_INMIR0.

Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
---
  hw/intc/arm_gicv3_redist.c | 23 +++++++++++++++++++++++
  hw/intc/gicv3_internal.h   |  1 +
  2 files changed, 24 insertions(+)

diff --git a/hw/intc/arm_gicv3_redist.c b/hw/intc/arm_gicv3_redist.c
index 8153525849..87e7823f34 100644
--- a/hw/intc/arm_gicv3_redist.c
+++ b/hw/intc/arm_gicv3_redist.c
@@ -35,6 +35,15 @@ static int gicr_ns_access(GICv3CPUState *cs, int irq)
      return extract32(cs->gicr_nsacr, irq * 2, 2);
  }
+static void gicr_write_bitmap_reg(GICv3CPUState *cs, MemTxAttrs attrs,
+                                  uint32_t *reg, uint32_t val)
+{
+    /* Helper routine to implement writing to a "set" register */
+    val &= mask_group(cs, attrs);
+    *reg = val;
+    gicv3_redist_update(cs);
+}
+
  static void gicr_write_set_bitmap_reg(GICv3CPUState *cs, MemTxAttrs attrs,
                                        uint32_t *reg, uint32_t val)
  {
@@ -406,6 +415,13 @@ static MemTxResult gicr_readl(GICv3CPUState *cs, hwaddr 
offset,
          *data = value;
          return MEMTX_OK;
      }
+    case GICR_INMIR0:
+        if (!cs->gic->nmi_support) {
+            *data = 0;
+            return MEMTX_OK;
+        }
+        *data = gicr_read_bitmap_reg(cs, attrs, cs->gicr_isuperprio);
+        return MEMTX_OK;

Clearer as

    *data = (cs->gic->nmi_support
             ? gicr_read_bitmap_reg(cs, attrs, cs->gicr_isuperprio)
             : 0);
    return MEMTX_OK;

+    case GICR_INMIR0:
+        if (!cs->gic->nmi_support) {
+            return MEMTX_OK;
+        }
+        gicr_write_bitmap_reg(cs, attrs, &cs->gicr_isuperprio, value);
+        return MEMTX_OK;

Likewise,

    if (cs->gic->nmi_support) {
        gicr_write_bitmap_reg(cs, attrs, &cs->gicr_isuperprio, value);
    }
    return MEMTX_OK;


r~



reply via email to

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