void rcar_swdt_exec(uint64_t p) { gicv2_end_of_interrupt(ARM_IRQ_SEC_WDT); rcar_swdt_release(); ERROR("\n"); ERROR("System WDT overflow, occured address is %p\n", (void *)p); panic(); }
void bl2_interrupt_error_id(uint32_t int_id) { ERROR("\n"); if (int_id >= SWDT_ERROR_ID) { ERROR("Unhandled exception occurred.\n"); ERROR(" Exception type = FIQ_SP_ELX\n"); panic(); } /* Clear the interrupt request */ gicv2_end_of_interrupt((uint32_t) int_id); rcar_swdt_release(); ERROR("Unhandled exception occurred.\n"); ERROR(" Exception type = FIQ_SP_ELX\n"); ERROR(" SPSR_EL1 = 0x%x\n", (uint32_t) read_spsr_el1()); ERROR(" ELR_EL1 = 0x%x\n", (uint32_t) read_elr_el1()); ERROR(" ESR_EL1 = 0x%x\n", (uint32_t) read_esr_el1()); ERROR(" FAR_EL1 = 0x%x\n", (uint32_t) read_far_el1()); ERROR("\n"); panic(); }
/******************************************************************************* * STM32MP1 handler called when a CPU is about to enter standby. * call by core 1 to enter in wfi ******************************************************************************/ static void stm32_cpu_standby(plat_local_state_t cpu_state) { uint32_t interrupt = GIC_SPURIOUS_INTERRUPT; assert(cpu_state == ARM_LOCAL_STATE_RET); /* * Enter standby state * dsb is good practice before using wfi to enter low power states */ dsb(); while (interrupt == GIC_SPURIOUS_INTERRUPT) { wfi(); /* Acknoledge IT */ interrupt = gicv2_acknowledge_interrupt(); /* If Interrupt == 1022 it will be acknowledged by non secure */ if ((interrupt != PENDING_G1_INTID) && (interrupt != GIC_SPURIOUS_INTERRUPT)) { gicv2_end_of_interrupt(interrupt); } } }
/* * This functions is used to indicate to the interrupt controller that * the processing of the interrupt corresponding to the `id` has * finished. */ void plat_ic_end_of_interrupt(uint32_t id) { gicv2_end_of_interrupt(id); }