]>
git.ipfire.org Git - people/ms/u-boot.git/blob - arch/nds32/lib/interrupts.c
3 * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
4 * Alex Zuepke <azu@sysgo.de>
6 * Copyright (C) 2011 Andes Technology Corporation
7 * Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
8 * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
10 * See file CREDITS for list of people who contributed to this
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License as
15 * published by the Free Software Foundation; either version 2 of
16 * the License, or (at your option) any later version.
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
30 #include <asm/ptrace.h>
31 #include <asm/system.h>
36 int irq_flags
; /* needed by asm-nds32/system.h */
42 __asm__
__volatile__ (
44 "andi %0, %0, 0x1\n\t"
52 #ifdef CONFIG_USE_INTERRUPT
54 /* enable interrupts */
55 void enable_interrupts(void)
57 local_irq_restore(int_flag
);
62 * Return TRUE if GIE is enabled before we disable it.
64 int disable_interrupts(void)
69 gie_ori_status
= GIE_STATUS();
71 local_irq_save(int_flag
);
73 return gie_ori_status
;
79 panic("Resetting CPU ...\n");
83 void show_regs(struct pt_regs
*regs
)
85 const char *processor_modes
[] = {"USER", "SuperUser" , "HyperVisor"};
88 printf("pc : [<%08lx>] sp: [<%08lx>]\n"
89 "lp : %08lx gp : %08lx fp : %08lx\n",
90 regs
->ipc
, regs
->sp
, regs
->lp
, regs
->gp
, regs
->fp
);
91 printf("D1H: %08lx D1L: %08lx D0H: %08lx D0L: %08lx\n",
92 regs
->d1hi
, regs
->d1lo
, regs
->d0hi
, regs
->d0lo
);
93 printf("r27: %08lx r26: %08lx r25: %08lx r24: %08lx\n",
94 regs
->r
[27], regs
->r
[26], regs
->r
[25], regs
->r
[24]);
95 printf("r23: %08lx r22: %08lx r21: %08lx r20: %08lx\n",
96 regs
->r
[23], regs
->r
[22], regs
->r
[21], regs
->r
[20]);
97 printf("r19: %08lx r18: %08lx r17: %08lx r16: %08lx\n",
98 regs
->r
[19], regs
->r
[18], regs
->r
[17], regs
->r
[16]);
99 printf("r15: %08lx r14: %08lx r13: %08lx r12: %08lx\n",
100 regs
->r
[15], regs
->r
[14], regs
->r
[13], regs
->r
[12]);
101 printf("r11: %08lx r10: %08lx r9 : %08lx r8 : %08lx\n",
102 regs
->r
[11], regs
->r
[10], regs
->r
[9], regs
->r
[8]);
103 printf("r7 : %08lx r6 : %08lx r5 : %08lx r4 : %08lx\n",
104 regs
->r
[7], regs
->r
[6], regs
->r
[5], regs
->r
[4]);
105 printf("r3 : %08lx r2 : %08lx r1 : %08lx r0 : %08lx\n",
106 regs
->r
[3], regs
->r
[2], regs
->r
[1], regs
->r
[0]);
107 printf(" Interrupts %s Mode %s\n",
108 interrupts_enabled(regs
) ? "on" : "off",
109 processor_modes
[processor_mode(regs
)]);
112 void do_interruption(struct pt_regs
*pt_regs
, int EVIC_num
)
114 const char *interruption_type
[] = {
120 "Cache Parity Error",
126 printf("%s\n", interruption_type
[EVIC_num
]);