aboutsummaryrefslogtreecommitdiff
path: root/hw/intc
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2025-07-30 09:59:30 -0400
committerStefan Hajnoczi <stefanha@redhat.com>2025-07-30 09:59:30 -0400
commit4e06566dbd1b1251c2788af26a30bd148d4eb6c1 (patch)
treec2be25100602f36312b07b98b0bc3785b8f06478 /hw/intc
parent9b80226ece693197af8a981b424391b68b5bc38e (diff)
parent86bc3a0abf10072081cddd8dff25aa72c60e67b8 (diff)
downloadqemu-4e06566dbd1b1251c2788af26a30bd148d4eb6c1.zip
qemu-4e06566dbd1b1251c2788af26a30bd148d4eb6c1.tar.gz
qemu-4e06566dbd1b1251c2788af26a30bd148d4eb6c1.tar.bz2
Merge tag 'pull-riscv-to-apply-20250730-2' of https://github.com/alistair23/qemu into staging
Third RISC-V PR for 10.1 * Fix pmp range wraparound on zero * Update FADT and MADT versions in ACPI tables * Fix target register read when source is inactive * Add riscv_hwprobe entry to linux-user strace list * Do not call GETPC() in check_ret_from_m_mode() * Revert "Generate strided vector loads/stores with tcg nodes." * Fix exception type when VU accesses supervisor CSRs * Restrict mideleg/medeleg/medelegh access to S-mode harts * Restrict midelegh access to S-mode harts # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCgAdFiEEaukCtqfKh31tZZKWr3yVEwxTgBMFAmiJbsUACgkQr3yVEwxT # gBPXCxAAhgcGh/mbdk/DZM4Gx9WqbfjU/1jZR9FCld9im3GLtJfq7IdEcsUZzpNb # E4sp49lr99qoogKhh3exYhBl0/t0WBoT5mtHNPLFRD3LX2gw6EFQWnD8FN1D//sO # QvyulomYbmI/Ywf5n5SszF4BpOKh7nyUEZBp4PU6vLT5btsZheSoTyCypH4a7KAy # GMFNO+O1k6NEwkUqqiIb9Pg8NOp/R3TlNWOjS8fwqyPSU/F8/pzehJQu4WOMAyM8 # eGvqCZiwTg5CcLZfhQZ8dmqJ2qqI44FEzPjyq/Woq5hDmGDMl1iYhgjX5Ozy0X5j # m4Q+ZH0KIr18EkUD9z4fJbcQAMIm/2b90TShYon6+JYXX8DI8gUCvtg2vgsPAlnS # M6vgNT25qY8QZa/FbUGcP2+96AlaqX11jUou+TMuJMSr036gTP7gXux5hqYDrd0B # 4WL1XPcfNZshK5+LAQ+2uwQ9JcKlEaw/mkZHvHgYN7a03UynjCn0oFZtTYvaB4Qx # Du8Rm9VPlLp3e25VmOiObYyq2Cf6sQXlWomKLJbvfCj217ZXvjOwEjj8hBcg3zJ/ # 6ix/wmDic+YtwmYE7EaGZaExpV5ZjZog61jzMziilZrCJarAoguq0P9tThXGtViX # TqQcn1V391EfVZYbS3JBO08xmkkX2k7Ia//Th35nByLt7zzrRbs= # =pKhf # -----END PGP SIGNATURE----- # gpg: Signature made Tue 29 Jul 2025 21:00:53 EDT # gpg: using RSA key 6AE902B6A7CA877D6D659296AF7C95130C538013 # gpg: Good signature from "Alistair Francis <alistair@alistair23.me>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6AE9 02B6 A7CA 877D 6D65 9296 AF7C 9513 0C53 8013 * tag 'pull-riscv-to-apply-20250730-2' of https://github.com/alistair23/qemu: target/riscv: Restrict midelegh access to S-mode harts target/riscv: Restrict mideleg/medeleg/medelegh access to S-mode harts target/riscv: Fix exception type when VU accesses supervisor CSRs riscv: Revert "Generate strided vector loads/stores with tcg nodes." target/riscv: do not call GETPC() in check_ret_from_m_mode() linux-user/strace.list: add riscv_hwprobe entry intc/riscv_aplic: Fix target register read when source is inactive tests/data/acpi/riscv64: Update expected FADT and MADT hw/riscv/virt-acpi-build.c: Update FADT and MADT versions bios-tables-test-allowed-diff.h: Allow RISC-V FADT and MADT changes target/riscv: Fix pmp range wraparound on zero Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'hw/intc')
-rw-r--r--hw/intc/riscv_aplic.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c
index 4fa5f75..a1d9fa5 100644
--- a/hw/intc/riscv_aplic.c
+++ b/hw/intc/riscv_aplic.c
@@ -628,7 +628,7 @@ static void riscv_aplic_request(void *opaque, int irq, int level)
static uint64_t riscv_aplic_read(void *opaque, hwaddr addr, unsigned size)
{
- uint32_t irq, word, idc;
+ uint32_t irq, word, idc, sm;
RISCVAPLICState *aplic = opaque;
/* Reads must be 4 byte words */
@@ -696,6 +696,10 @@ static uint64_t riscv_aplic_read(void *opaque, hwaddr addr, unsigned size)
} else if ((APLIC_TARGET_BASE <= addr) &&
(addr < (APLIC_TARGET_BASE + (aplic->num_irqs - 1) * 4))) {
irq = ((addr - APLIC_TARGET_BASE) >> 2) + 1;
+ sm = aplic->sourcecfg[irq] & APLIC_SOURCECFG_SM_MASK;
+ if (sm == APLIC_SOURCECFG_SM_INACTIVE) {
+ return 0;
+ }
return aplic->target[irq];
} else if (!aplic->msimode && (APLIC_IDC_BASE <= addr) &&
(addr < (APLIC_IDC_BASE + aplic->num_harts * APLIC_IDC_SIZE))) {