diff options
author | Bibo Mao <maobibo@loongson.cn> | 2025-05-07 10:31:40 +0800 |
---|---|---|
committer | Song Gao <gaosong@loongson.cn> | 2025-05-14 15:47:56 +0800 |
commit | 6dab13c4152b5b3c35b627483bfdce2d331d95f2 (patch) | |
tree | e9f68e4fd61ab703c5a53d2589a7b3132fe81bc3 | |
parent | 9e29bf4e4c5d34ace0c75737f740f1f86236dba9 (diff) | |
download | qemu-6dab13c4152b5b3c35b627483bfdce2d331d95f2.zip qemu-6dab13c4152b5b3c35b627483bfdce2d331d95f2.tar.gz qemu-6dab13c4152b5b3c35b627483bfdce2d331d95f2.tar.bz2 |
hw/intc/loongarch_pch: Use generic read callback for iomem32_high region
Add register read operation emulation in generic read function
loongarch_pch_pic_read(), and use this function for iomem32_high region.
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Song Gao <gaosong@loongson.cn>
Message-Id: <20250507023148.1877287-9-maobibo@loongson.cn>
Signed-off-by: Song Gao <gaosong@loongson.cn>
-rw-r--r-- | hw/intc/loongarch_pch_pic.c | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/hw/intc/loongarch_pch_pic.c b/hw/intc/loongarch_pch_pic.c index 599a271..e477a60 100644 --- a/hw/intc/loongarch_pch_pic.c +++ b/hw/intc/loongarch_pch_pic.c @@ -97,6 +97,12 @@ static uint64_t pch_pic_read(void *opaque, hwaddr addr, uint64_t field_mask) case PCH_PIC_AUTO_CTRL1: /* PCH PIC connect to EXTIOI always, discard auto_ctrl access */ break; + case PCH_PIC_INT_STATUS: + val = s->intisr & (~s->int_mask); + break; + case PCH_PIC_INT_POL: + val = s->int_polarity; + break; default: qemu_log_mask(LOG_GUEST_ERROR, "pch_pic_read: Bad address 0x%"PRIx64"\n", addr); @@ -226,27 +232,10 @@ static void loongarch_pch_pic_low_writew(void *opaque, hwaddr addr, static uint64_t loongarch_pch_pic_high_readw(void *opaque, hwaddr addr, unsigned size) { - LoongArchPICCommonState *s = LOONGARCH_PIC_COMMON(opaque); - uint64_t val = 0; + uint64_t val; addr += PCH_PIC_INT_STATUS; - switch (addr) { - case PCH_PIC_INT_STATUS: - val = (uint32_t)(s->intisr & (~s->int_mask)); - break; - case PCH_PIC_INT_STATUS + 4: - val = (s->intisr & (~s->int_mask)) >> 32; - break; - case PCH_PIC_INT_POL: - val = (uint32_t)s->int_polarity; - break; - case PCH_PIC_INT_POL + 4: - val = s->int_polarity >> 32; - break; - default: - break; - } - + val = loongarch_pch_pic_read(opaque, addr, size); trace_loongarch_pch_pic_high_readw(size, addr, val); return val; } |