Merge tag 'xilinx-for-v2018.09-rc2' of git://git.denx.de/u-boot-microblaze
[oweals/u-boot.git] / arch / arm / lib / interrupts_64.c
index b4767225564f97627ac39f09137206a5e1c0bbcf..458319ab4878865dec7f8f0f1e5324e2a28968ff 100644 (file)
@@ -1,13 +1,14 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2013
  * David Feng <fenghua@phytium.com.cn>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
 #include <linux/compiler.h>
+#include <efi_loader.h>
 
+DECLARE_GLOBAL_DATA_PTR;
 
 int interrupt_init(void)
 {
@@ -28,8 +29,12 @@ void show_regs(struct pt_regs *regs)
 {
        int i;
 
-       printf("ELR:     %lx\n", regs->elr);
-       printf("LR:      %lx\n", regs->regs[30]);
+       if (gd->flags & GD_FLG_RELOC)
+               printf("elr: %016lx lr : %016lx (reloc)\n",
+                      regs->elr - gd->reloc_off,
+                      regs->regs[30] - gd->reloc_off);
+       printf("elr: %016lx lr : %016lx\n", regs->elr, regs->regs[30]);
+
        for (i = 0; i < 29; i += 2)
                printf("x%-2d: %016lx x%-2d: %016lx\n",
                       i, regs->regs[i], i+1, regs->regs[i+1]);
@@ -41,6 +46,7 @@ void show_regs(struct pt_regs *regs)
  */
 void do_bad_sync(struct pt_regs *pt_regs, unsigned int esr)
 {
+       efi_restore_gd();
        printf("Bad mode in \"Synchronous Abort\" handler, esr 0x%08x\n", esr);
        show_regs(pt_regs);
        panic("Resetting CPU ...\n");
@@ -51,6 +57,7 @@ void do_bad_sync(struct pt_regs *pt_regs, unsigned int esr)
  */
 void do_bad_irq(struct pt_regs *pt_regs, unsigned int esr)
 {
+       efi_restore_gd();
        printf("Bad mode in \"Irq\" handler, esr 0x%08x\n", esr);
        show_regs(pt_regs);
        panic("Resetting CPU ...\n");
@@ -61,6 +68,7 @@ void do_bad_irq(struct pt_regs *pt_regs, unsigned int esr)
  */
 void do_bad_fiq(struct pt_regs *pt_regs, unsigned int esr)
 {
+       efi_restore_gd();
        printf("Bad mode in \"Fiq\" handler, esr 0x%08x\n", esr);
        show_regs(pt_regs);
        panic("Resetting CPU ...\n");
@@ -71,6 +79,7 @@ void do_bad_fiq(struct pt_regs *pt_regs, unsigned int esr)
  */
 void do_bad_error(struct pt_regs *pt_regs, unsigned int esr)
 {
+       efi_restore_gd();
        printf("Bad mode in \"Error\" handler, esr 0x%08x\n", esr);
        show_regs(pt_regs);
        panic("Resetting CPU ...\n");
@@ -81,6 +90,7 @@ void do_bad_error(struct pt_regs *pt_regs, unsigned int esr)
  */
 void do_sync(struct pt_regs *pt_regs, unsigned int esr)
 {
+       efi_restore_gd();
        printf("\"Synchronous Abort\" handler, esr 0x%08x\n", esr);
        show_regs(pt_regs);
        panic("Resetting CPU ...\n");
@@ -91,6 +101,7 @@ void do_sync(struct pt_regs *pt_regs, unsigned int esr)
  */
 void do_irq(struct pt_regs *pt_regs, unsigned int esr)
 {
+       efi_restore_gd();
        printf("\"Irq\" handler, esr 0x%08x\n", esr);
        show_regs(pt_regs);
        panic("Resetting CPU ...\n");
@@ -101,6 +112,7 @@ void do_irq(struct pt_regs *pt_regs, unsigned int esr)
  */
 void do_fiq(struct pt_regs *pt_regs, unsigned int esr)
 {
+       efi_restore_gd();
        printf("\"Fiq\" handler, esr 0x%08x\n", esr);
        show_regs(pt_regs);
        panic("Resetting CPU ...\n");
@@ -114,6 +126,7 @@ void do_fiq(struct pt_regs *pt_regs, unsigned int esr)
  */
 void __weak do_error(struct pt_regs *pt_regs, unsigned int esr)
 {
+       efi_restore_gd();
        printf("\"Error\" handler, esr 0x%08x\n", esr);
        show_regs(pt_regs);
        panic("Resetting CPU ...\n");