aboutsummaryrefslogtreecommitdiff
path: root/target/hppa/mem_helper.c
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2024-02-03 00:04:30 +0100
committerHelge Deller <deller@gmx.de>2024-02-11 13:20:23 +0100
commit9ccbe394d2818002fce6c83e801990c6fe18a6c9 (patch)
treebaf8e171a0c6ebd9bb1161a9f46ac73cfc4fd88f /target/hppa/mem_helper.c
parentf2ffd6fb4059d22e18b23c2112419320345aeacf (diff)
target/hppa: Implement do_transaction_failed handler for I/O errors
Add the do_transaction_failed() handler to tigger a HPMC to the CPU in case of I/O transaction errors. This is a preparation commit. We still lack implementation for some registers, so do not yet enable sending HPMCs. Having this hunk here now nevertheless helps for the further development, so that it can easily be enabled later on. Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'target/hppa/mem_helper.c')
-rw-r--r--target/hppa/mem_helper.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/target/hppa/mem_helper.c b/target/hppa/mem_helper.c
index 629a9d90ef..676c0b3003 100644
--- a/target/hppa/mem_helper.c
+++ b/target/hppa/mem_helper.c
@@ -353,6 +353,25 @@ raise_exception_with_ior(CPUHPPAState *env, int excp, uintptr_t retaddr,
cpu_loop_exit_restore(cs, retaddr);
}
+void hppa_cpu_do_transaction_failed(CPUState *cs, hwaddr physaddr,
+ vaddr addr, unsigned size,
+ MMUAccessType access_type,
+ int mmu_idx, MemTxAttrs attrs,
+ MemTxResult response, uintptr_t retaddr)
+{
+ CPUHPPAState *env = cpu_env(cs);
+
+ qemu_log_mask(LOG_GUEST_ERROR, "HPMC at " TARGET_FMT_lx ":" TARGET_FMT_lx
+ " while accessing I/O at %#08" HWADDR_PRIx "\n",
+ env->iasq_f, env->iaoq_f, physaddr);
+
+ /* FIXME: Enable HPMC exceptions when firmware has clean device probing */
+ if (0) {
+ raise_exception_with_ior(env, EXCP_HPMC, retaddr, addr,
+ MMU_IDX_MMU_DISABLED(mmu_idx));
+ }
+}
+
bool hppa_cpu_tlb_fill(CPUState *cs, vaddr addr, int size,
MMUAccessType type, int mmu_idx,
bool probe, uintptr_t retaddr)