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