mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
hw/intc/aplic: refine kvm_msicfgaddr
Let kvm_msicfgaddr use the same format with mmsicfgaddr and smsicfgaddr. Signed-off-by: Yong-Xuan Wang <yongxuan.wang@sifive.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Message-ID: <20250224025722.3999-4-yongxuan.wang@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
489840a012
commit
f0fe655502
1 changed files with 13 additions and 11 deletions
|
@ -181,8 +181,10 @@ void riscv_aplic_set_kvm_msicfgaddr(RISCVAPLICState *aplic, hwaddr addr)
|
|||
{
|
||||
#ifdef CONFIG_KVM
|
||||
if (riscv_use_emulated_aplic(aplic->msimode)) {
|
||||
addr >>= APLIC_xMSICFGADDR_PPN_SHIFT;
|
||||
aplic->kvm_msicfgaddr = extract64(addr, 0, 32);
|
||||
aplic->kvm_msicfgaddrH = extract64(addr, 32, 32);
|
||||
aplic->kvm_msicfgaddrH = extract64(addr, 32, 32) &
|
||||
APLIC_xMSICFGADDRH_VALID_MASK;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -403,12 +405,17 @@ static void riscv_aplic_msi_send(RISCVAPLICState *aplic,
|
|||
}
|
||||
}
|
||||
|
||||
if (aplic->mmode) {
|
||||
msicfgaddr = aplic_m->mmsicfgaddr;
|
||||
msicfgaddrH = aplic_m->mmsicfgaddrH;
|
||||
if (aplic->kvm_splitmode) {
|
||||
msicfgaddr = aplic->kvm_msicfgaddr;
|
||||
msicfgaddrH = ((uint64_t)aplic->kvm_msicfgaddrH << 32);
|
||||
} else {
|
||||
msicfgaddr = aplic_m->smsicfgaddr;
|
||||
msicfgaddrH = aplic_m->smsicfgaddrH;
|
||||
if (aplic->mmode) {
|
||||
msicfgaddr = aplic_m->mmsicfgaddr;
|
||||
msicfgaddrH = aplic_m->mmsicfgaddrH;
|
||||
} else {
|
||||
msicfgaddr = aplic_m->smsicfgaddr;
|
||||
msicfgaddrH = aplic_m->smsicfgaddrH;
|
||||
}
|
||||
}
|
||||
|
||||
lhxs = (msicfgaddrH >> APLIC_xMSICFGADDRH_LHXS_SHIFT) &
|
||||
|
@ -431,11 +438,6 @@ static void riscv_aplic_msi_send(RISCVAPLICState *aplic,
|
|||
addr |= (uint64_t)(guest_idx & APLIC_xMSICFGADDR_PPN_HART(lhxs));
|
||||
addr <<= APLIC_xMSICFGADDR_PPN_SHIFT;
|
||||
|
||||
if (aplic->kvm_splitmode) {
|
||||
addr |= aplic->kvm_msicfgaddr;
|
||||
addr |= ((uint64_t)aplic->kvm_msicfgaddrH << 32);
|
||||
}
|
||||
|
||||
address_space_stl_le(&address_space_memory, addr,
|
||||
eiid, MEMTXATTRS_UNSPECIFIED, &result);
|
||||
if (result != MEMTX_OK) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue