arm64: show_regs: Dump the LRs HW values
[people/ms/u-boot.git] / arch / arm / lib / interrupts_64.c
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>
10 #include <efi_loader.h>
11
12 DECLARE_GLOBAL_DATA_PTR;
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
33         if (gd->flags & GD_FLG_RELOC)
34                 printf("elr: %016lx lr : %016lx (reloc)\n",
35                        regs->elr - gd->reloc_off,
36                        regs->regs[30] - gd->reloc_off);
37         printf("elr: %016lx lr : %016lx\n", regs->elr, regs->regs[30]);
38
39         for (i = 0; i < 29; i += 2)
40                 printf("x%-2d: %016lx x%-2d: %016lx\n",
41                        i, regs->regs[i], i+1, regs->regs[i+1]);
42         printf("\n");
43 }
44
45 /*
46  * do_bad_sync handles the impossible case in the Synchronous Abort vector.
47  */
48 void do_bad_sync(struct pt_regs *pt_regs, unsigned int esr)
49 {
50         efi_restore_gd();
51         printf("Bad mode in \"Synchronous Abort\" handler, esr 0x%08x\n", esr);
52         show_regs(pt_regs);
53         panic("Resetting CPU ...\n");
54 }
55
56 /*
57  * do_bad_irq handles the impossible case in the Irq vector.
58  */
59 void do_bad_irq(struct pt_regs *pt_regs, unsigned int esr)
60 {
61         efi_restore_gd();
62         printf("Bad mode in \"Irq\" handler, esr 0x%08x\n", esr);
63         show_regs(pt_regs);
64         panic("Resetting CPU ...\n");
65 }
66
67 /*
68  * do_bad_fiq handles the impossible case in the Fiq vector.
69  */
70 void do_bad_fiq(struct pt_regs *pt_regs, unsigned int esr)
71 {
72         efi_restore_gd();
73         printf("Bad mode in \"Fiq\" handler, esr 0x%08x\n", esr);
74         show_regs(pt_regs);
75         panic("Resetting CPU ...\n");
76 }
77
78 /*
79  * do_bad_error handles the impossible case in the Error vector.
80  */
81 void do_bad_error(struct pt_regs *pt_regs, unsigned int esr)
82 {
83         efi_restore_gd();
84         printf("Bad mode in \"Error\" handler, esr 0x%08x\n", esr);
85         show_regs(pt_regs);
86         panic("Resetting CPU ...\n");
87 }
88
89 /*
90  * do_sync handles the Synchronous Abort exception.
91  */
92 void do_sync(struct pt_regs *pt_regs, unsigned int esr)
93 {
94         efi_restore_gd();
95         printf("\"Synchronous Abort\" handler, esr 0x%08x\n", esr);
96         show_regs(pt_regs);
97         panic("Resetting CPU ...\n");
98 }
99
100 /*
101  * do_irq handles the Irq exception.
102  */
103 void do_irq(struct pt_regs *pt_regs, unsigned int esr)
104 {
105         efi_restore_gd();
106         printf("\"Irq\" handler, esr 0x%08x\n", esr);
107         show_regs(pt_regs);
108         panic("Resetting CPU ...\n");
109 }
110
111 /*
112  * do_fiq handles the Fiq exception.
113  */
114 void do_fiq(struct pt_regs *pt_regs, unsigned int esr)
115 {
116         efi_restore_gd();
117         printf("\"Fiq\" handler, esr 0x%08x\n", esr);
118         show_regs(pt_regs);
119         panic("Resetting CPU ...\n");
120 }
121
122 /*
123  * do_error handles the Error exception.
124  * Errors are more likely to be processor specific,
125  * it is defined with weak attribute and can be redefined
126  * in processor specific code.
127  */
128 void __weak do_error(struct pt_regs *pt_regs, unsigned int esr)
129 {
130         efi_restore_gd();
131         printf("\"Error\" handler, esr 0x%08x\n", esr);
132         show_regs(pt_regs);
133         panic("Resetting CPU ...\n");
134 }