mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
Revert "xen/riscv: introduce decode_cause() stuff"
This reverts commit 22e71609ad,
which breaks both release and randconfig builds.
This commit is contained in:
1 parent
22e71609ad
commit
2909596927
1 file changed
+1
-83
+1
-83
@@ -4,92 +4,10 @@
|
||||
*
|
||||
* RISC-V Trap handlers
|
||||
*/
|
||||
|
||||
#include <xen/lib.h>
|
||||
|
||||
#include <asm/csr.h>
|
||||
#include <asm/early_printk.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/traps.h>
|
||||
|
||||
static const char *decode_trap_cause(unsigned long cause)
|
||||
{
|
||||
static const char *const trap_causes[] = {
|
||||
[CAUSE_MISALIGNED_FETCH] = "Instruction Address Misaligned",
|
||||
[CAUSE_FETCH_ACCESS] = "Instruction Access Fault",
|
||||
[CAUSE_ILLEGAL_INSTRUCTION] = "Illegal Instruction",
|
||||
[CAUSE_BREAKPOINT] = "Breakpoint",
|
||||
[CAUSE_MISALIGNED_LOAD] = "Load Address Misaligned",
|
||||
[CAUSE_LOAD_ACCESS] = "Load Access Fault",
|
||||
[CAUSE_MISALIGNED_STORE] = "Store/AMO Address Misaligned",
|
||||
[CAUSE_STORE_ACCESS] = "Store/AMO Access Fault",
|
||||
[CAUSE_USER_ECALL] = "Environment Call from U-Mode",
|
||||
[CAUSE_SUPERVISOR_ECALL] = "Environment Call from S-Mode",
|
||||
[CAUSE_MACHINE_ECALL] = "Environment Call from M-Mode",
|
||||
[CAUSE_FETCH_PAGE_FAULT] = "Instruction Page Fault",
|
||||
[CAUSE_LOAD_PAGE_FAULT] = "Load Page Fault",
|
||||
[CAUSE_STORE_PAGE_FAULT] = "Store/AMO Page Fault",
|
||||
[CAUSE_FETCH_GUEST_PAGE_FAULT] = "Instruction Guest Page Fault",
|
||||
[CAUSE_LOAD_GUEST_PAGE_FAULT] = "Load Guest Page Fault",
|
||||
[CAUSE_VIRTUAL_INST_FAULT] = "Virtualized Instruction Fault",
|
||||
[CAUSE_STORE_GUEST_PAGE_FAULT] = "Guest Store/AMO Page Fault",
|
||||
};
|
||||
|
||||
if ( cause < ARRAY_SIZE(trap_causes) && trap_causes[cause] )
|
||||
return trap_causes[cause];
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
||||
static const char *decode_reserved_interrupt_cause(unsigned long irq_cause)
|
||||
{
|
||||
switch ( irq_cause )
|
||||
{
|
||||
case IRQ_M_SOFT:
|
||||
return "M-mode Software Interrupt";
|
||||
case IRQ_M_TIMER:
|
||||
return "M-mode Timer Interrupt";
|
||||
case IRQ_M_EXT:
|
||||
return "M-mode External Interrupt";
|
||||
default:
|
||||
return "UNKNOWN IRQ type";
|
||||
}
|
||||
}
|
||||
|
||||
static const char *decode_interrupt_cause(unsigned long cause)
|
||||
{
|
||||
unsigned long irq_cause = cause & ~CAUSE_IRQ_FLAG;
|
||||
|
||||
switch ( irq_cause )
|
||||
{
|
||||
case IRQ_S_SOFT:
|
||||
return "Supervisor Software Interrupt";
|
||||
case IRQ_S_TIMER:
|
||||
return "Supervisor Timer Interrupt";
|
||||
case IRQ_S_EXT:
|
||||
return "Supervisor External Interrupt";
|
||||
default:
|
||||
return decode_reserved_interrupt_cause(irq_cause);
|
||||
}
|
||||
}
|
||||
|
||||
static const char *decode_cause(unsigned long cause)
|
||||
{
|
||||
if ( cause & CAUSE_IRQ_FLAG )
|
||||
return decode_interrupt_cause(cause);
|
||||
|
||||
return decode_trap_cause(cause);
|
||||
}
|
||||
|
||||
static void do_unexpected_trap(const struct cpu_user_regs *regs)
|
||||
{
|
||||
unsigned long cause = csr_read(CSR_SCAUSE);
|
||||
|
||||
printk("Unhandled exception: %s\n", decode_cause(cause));
|
||||
|
||||
die();
|
||||
}
|
||||
|
||||
void do_trap(struct cpu_user_regs *cpu_regs)
|
||||
{
|
||||
do_unexpected_trap(cpu_regs);
|
||||
die();
|
||||
}
|
||||