1*0ae76531SDavid Feng /* 2*0ae76531SDavid Feng * (C) Copyright 2013 3*0ae76531SDavid Feng * David Feng <fenghua@phytium.com.cn> 4*0ae76531SDavid Feng * 5*0ae76531SDavid Feng * SPDX-License-Identifier: GPL-2.0+ 6*0ae76531SDavid Feng */ 7*0ae76531SDavid Feng 8*0ae76531SDavid Feng #include <common.h> 9*0ae76531SDavid Feng #include <linux/compiler.h> 10*0ae76531SDavid Feng 11*0ae76531SDavid Feng 12*0ae76531SDavid Feng int interrupt_init(void) 13*0ae76531SDavid Feng { 14*0ae76531SDavid Feng return 0; 15*0ae76531SDavid Feng } 16*0ae76531SDavid Feng 17*0ae76531SDavid Feng void enable_interrupts(void) 18*0ae76531SDavid Feng { 19*0ae76531SDavid Feng return; 20*0ae76531SDavid Feng } 21*0ae76531SDavid Feng 22*0ae76531SDavid Feng int disable_interrupts(void) 23*0ae76531SDavid Feng { 24*0ae76531SDavid Feng return 0; 25*0ae76531SDavid Feng } 26*0ae76531SDavid Feng 27*0ae76531SDavid Feng void show_regs(struct pt_regs *regs) 28*0ae76531SDavid Feng { 29*0ae76531SDavid Feng int i; 30*0ae76531SDavid Feng 31*0ae76531SDavid Feng printf("ELR: %lx\n", regs->elr); 32*0ae76531SDavid Feng printf("LR: %lx\n", regs->regs[30]); 33*0ae76531SDavid Feng for (i = 0; i < 29; i += 2) 34*0ae76531SDavid Feng printf("x%-2d: %016lx x%-2d: %016lx\n", 35*0ae76531SDavid Feng i, regs->regs[i], i+1, regs->regs[i+1]); 36*0ae76531SDavid Feng printf("\n"); 37*0ae76531SDavid Feng } 38*0ae76531SDavid Feng 39*0ae76531SDavid Feng /* 40*0ae76531SDavid Feng * do_bad_sync handles the impossible case in the Synchronous Abort vector. 41*0ae76531SDavid Feng */ 42*0ae76531SDavid Feng void do_bad_sync(struct pt_regs *pt_regs, unsigned int esr) 43*0ae76531SDavid Feng { 44*0ae76531SDavid Feng printf("Bad mode in \"Synchronous Abort\" handler, esr 0x%08x\n", esr); 45*0ae76531SDavid Feng show_regs(pt_regs); 46*0ae76531SDavid Feng panic("Resetting CPU ...\n"); 47*0ae76531SDavid Feng } 48*0ae76531SDavid Feng 49*0ae76531SDavid Feng /* 50*0ae76531SDavid Feng * do_bad_irq handles the impossible case in the Irq vector. 51*0ae76531SDavid Feng */ 52*0ae76531SDavid Feng void do_bad_irq(struct pt_regs *pt_regs, unsigned int esr) 53*0ae76531SDavid Feng { 54*0ae76531SDavid Feng printf("Bad mode in \"Irq\" handler, esr 0x%08x\n", esr); 55*0ae76531SDavid Feng show_regs(pt_regs); 56*0ae76531SDavid Feng panic("Resetting CPU ...\n"); 57*0ae76531SDavid Feng } 58*0ae76531SDavid Feng 59*0ae76531SDavid Feng /* 60*0ae76531SDavid Feng * do_bad_fiq handles the impossible case in the Fiq vector. 61*0ae76531SDavid Feng */ 62*0ae76531SDavid Feng void do_bad_fiq(struct pt_regs *pt_regs, unsigned int esr) 63*0ae76531SDavid Feng { 64*0ae76531SDavid Feng printf("Bad mode in \"Fiq\" handler, esr 0x%08x\n", esr); 65*0ae76531SDavid Feng show_regs(pt_regs); 66*0ae76531SDavid Feng panic("Resetting CPU ...\n"); 67*0ae76531SDavid Feng } 68*0ae76531SDavid Feng 69*0ae76531SDavid Feng /* 70*0ae76531SDavid Feng * do_bad_error handles the impossible case in the Error vector. 71*0ae76531SDavid Feng */ 72*0ae76531SDavid Feng void do_bad_error(struct pt_regs *pt_regs, unsigned int esr) 73*0ae76531SDavid Feng { 74*0ae76531SDavid Feng printf("Bad mode in \"Error\" handler, esr 0x%08x\n", esr); 75*0ae76531SDavid Feng show_regs(pt_regs); 76*0ae76531SDavid Feng panic("Resetting CPU ...\n"); 77*0ae76531SDavid Feng } 78*0ae76531SDavid Feng 79*0ae76531SDavid Feng /* 80*0ae76531SDavid Feng * do_sync handles the Synchronous Abort exception. 81*0ae76531SDavid Feng */ 82*0ae76531SDavid Feng void do_sync(struct pt_regs *pt_regs, unsigned int esr) 83*0ae76531SDavid Feng { 84*0ae76531SDavid Feng printf("\"Synchronous Abort\" handler, esr 0x%08x\n", esr); 85*0ae76531SDavid Feng show_regs(pt_regs); 86*0ae76531SDavid Feng panic("Resetting CPU ...\n"); 87*0ae76531SDavid Feng } 88*0ae76531SDavid Feng 89*0ae76531SDavid Feng /* 90*0ae76531SDavid Feng * do_irq handles the Irq exception. 91*0ae76531SDavid Feng */ 92*0ae76531SDavid Feng void do_irq(struct pt_regs *pt_regs, unsigned int esr) 93*0ae76531SDavid Feng { 94*0ae76531SDavid Feng printf("\"Irq\" handler, esr 0x%08x\n", esr); 95*0ae76531SDavid Feng show_regs(pt_regs); 96*0ae76531SDavid Feng panic("Resetting CPU ...\n"); 97*0ae76531SDavid Feng } 98*0ae76531SDavid Feng 99*0ae76531SDavid Feng /* 100*0ae76531SDavid Feng * do_fiq handles the Fiq exception. 101*0ae76531SDavid Feng */ 102*0ae76531SDavid Feng void do_fiq(struct pt_regs *pt_regs, unsigned int esr) 103*0ae76531SDavid Feng { 104*0ae76531SDavid Feng printf("\"Fiq\" handler, esr 0x%08x\n", esr); 105*0ae76531SDavid Feng show_regs(pt_regs); 106*0ae76531SDavid Feng panic("Resetting CPU ...\n"); 107*0ae76531SDavid Feng } 108*0ae76531SDavid Feng 109*0ae76531SDavid Feng /* 110*0ae76531SDavid Feng * do_error handles the Error exception. 111*0ae76531SDavid Feng * Errors are more likely to be processor specific, 112*0ae76531SDavid Feng * it is defined with weak attribute and can be redefined 113*0ae76531SDavid Feng * in processor specific code. 114*0ae76531SDavid Feng */ 115*0ae76531SDavid Feng void __weak do_error(struct pt_regs *pt_regs, unsigned int esr) 116*0ae76531SDavid Feng { 117*0ae76531SDavid Feng printf("\"Error\" handler, esr 0x%08x\n", esr); 118*0ae76531SDavid Feng show_regs(pt_regs); 119*0ae76531SDavid Feng panic("Resetting CPU ...\n"); 120*0ae76531SDavid Feng } 121