static int cbe_system_reset_exception(struct pt_regs *regs) { switch (regs->msr & SRR1_WAKEMASK) { case SRR1_WAKEEE: do_IRQ(regs); break; case SRR1_WAKEDEC: timer_interrupt(regs); break; case SRR1_WAKEMT: return cbe_sysreset_hack(); #ifdef CONFIG_CBE_RAS case SRR1_WAKESYSERR: cbe_system_error_exception(regs); break; case SRR1_WAKETHERM: cbe_thermal_exception(regs); break; #endif /* CONFIG_CBE_RAS */ default: /* do system reset */ return 0; } /* everything handled */ return 1; }
static int cbe_system_reset_exception(struct pt_regs *regs) { int cpu; struct cbe_pmd_regs __iomem *pmd; switch (regs->msr & SRR1_WAKEMASK) { case SRR1_WAKEEE: do_IRQ(regs); break; case SRR1_WAKEDEC: timer_interrupt(regs); break; case SRR1_WAKEMT: /* * The BMC can inject user triggered system reset exceptions, * but cannot set the system reset reason in srr1, * so check an extra register here. */ if (sysreset_hack && (cpu = smp_processor_id()) == 0) { pmd = cbe_get_cpu_pmd_regs(cpu); if (in_be64(&pmd->ras_esc_0) & 0xffff) { out_be64(&pmd->ras_esc_0, 0); return 0; } } break; #ifdef CONFIG_CBE_RAS case SRR1_WAKESYSERR: cbe_system_error_exception(regs); break; case SRR1_WAKETHERM: cbe_thermal_exception(regs); break; #endif /* CONFIG_CBE_RAS */ default: /* do system reset */ return 0; } /* everything handled */ return 1; }