rockchip: rk3399: Add Nanopi M4 2GB board support
[platform/kernel/u-boot.git] / arch / arm / lib / interrupts_m.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * (C) Copyright 2015
4  * Kamil Lulko, <kamil.lulko@gmail.com>
5  */
6
7 #include <common.h>
8 #include <cpu_func.h>
9 #include <irq_func.h>
10
11 /*
12  * Upon exception entry ARMv7-M processors automatically save stack
13  * frames containing some registers. For simplicity initial
14  * implementation uses only this auto-saved stack frame.
15  * This does not contain complete register set dump,
16  * only R0-R3, R12, LR, PC and xPSR are saved.
17  */
18
19 struct autosave_regs {
20         long uregs[8];
21 };
22
23 #define ARM_XPSR        uregs[7]
24 #define ARM_PC          uregs[6]
25 #define ARM_LR          uregs[5]
26 #define ARM_R12         uregs[4]
27 #define ARM_R3          uregs[3]
28 #define ARM_R2          uregs[2]
29 #define ARM_R1          uregs[1]
30 #define ARM_R0          uregs[0]
31
32 int interrupt_init(void)
33 {
34         return 0;
35 }
36
37 void enable_interrupts(void)
38 {
39         return;
40 }
41
42 int disable_interrupts(void)
43 {
44         return 0;
45 }
46
47 void dump_regs(struct autosave_regs *regs)
48 {
49         printf("pc : %08lx    lr : %08lx    xPSR : %08lx\n",
50                regs->ARM_PC, regs->ARM_LR, regs->ARM_XPSR);
51         printf("r12 : %08lx   r3 : %08lx    r2 : %08lx\n"
52                 "r1 : %08lx    r0 : %08lx\n",
53                 regs->ARM_R12, regs->ARM_R3, regs->ARM_R2,
54                 regs->ARM_R1, regs->ARM_R0);
55 }
56
57 void bad_mode(void)
58 {
59         panic("Resetting CPU ...\n");
60         reset_cpu(0);
61 }
62
63 void do_hard_fault(struct autosave_regs *autosave_regs)
64 {
65         printf("Hard fault\n");
66         dump_regs(autosave_regs);
67         bad_mode();
68 }
69
70 void do_mm_fault(struct autosave_regs *autosave_regs)
71 {
72         printf("Memory management fault\n");
73         dump_regs(autosave_regs);
74         bad_mode();
75 }
76
77 void do_bus_fault(struct autosave_regs *autosave_regs)
78 {
79         printf("Bus fault\n");
80         dump_regs(autosave_regs);
81         bad_mode();
82 }
83
84 void do_usage_fault(struct autosave_regs *autosave_regs)
85 {
86         printf("Usage fault\n");
87         dump_regs(autosave_regs);
88         bad_mode();
89 }
90
91 void do_invalid_entry(struct autosave_regs *autosave_regs)
92 {
93         printf("Exception\n");
94         dump_regs(autosave_regs);
95         bad_mode();
96 }