summaryrefslogtreecommitdiffstats
path: root/asm
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2019-01-08 00:04:18 +1000
committerStewart Smith <stewart@linux.ibm.com>2019-02-12 15:08:17 +1100
commite1d44e8c117f4efa24fcfb7ceb25131774eebfa0 (patch)
tree0501bee92518d5461d33d94f6bcd65be00136c43 /asm
parent9c58bbd720b73b9c9c3bf9e86797077f053a9eb3 (diff)
downloadtalos-skiboot-e1d44e8c117f4efa24fcfb7ceb25131774eebfa0.tar.gz
talos-skiboot-e1d44e8c117f4efa24fcfb7ceb25131774eebfa0.zip
asm/head: use HSRR exception registers in FIXUP_ENDIAN
Taken from the Linux FIXUP_ENDIAN_HV macro, use the HSRR registers in FIXUP_ENDIAN. This allows the 0x100 exception handler (the single user of the macro) to preserve SRR registers and potentially recover, debug, or do something useful with them. This also allows the maco to be used in code with MSR[RI]=1, if the need arises. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
Diffstat (limited to 'asm')
-rw-r--r--asm/head.S23
1 files changed, 12 insertions, 11 deletions
diff --git a/asm/head.S b/asm/head.S
index 336afc9d..8006025c 100644
--- a/asm/head.S
+++ b/asm/head.S
@@ -483,17 +483,18 @@ call_relocate:
1: /* Fatal relocate failure */
attn
-#define FIXUP_ENDIAN \
- tdi 0,0,0x48; /* Reverse endian of b . + 8 */ \
- b $+36; /* Skip trampoline if endian is good */ \
- .long 0x05009f42; /* bcl 20,31,$+4 */ \
- .long 0xa602487d; /* mflr r10 */ \
- .long 0x1c004a39; /* addi r10,r10,28 */ \
- .long 0xa600607d; /* mfmsr r11 */ \
- .long 0x01006b69; /* xori r11,r11,1 */ \
- .long 0xa6035a7d; /* mtsrr0 r10 */ \
- .long 0xa6037b7d; /* mtsrr1 r11 */ \
- .long 0x2400004c /* rfid */
+#define FIXUP_ENDIAN \
+ tdi 0,0,0x48; /* Reverse endian of b . + 8 */ \
+ b 191f; /* Skip trampoline if endian is good */ \
+ .long 0xa600607d; /* mfmsr r11 */ \
+ .long 0x01006b69; /* xori r11,r11,1 */ \
+ .long 0x05009f42; /* bcl 20,31,$+4 */ \
+ .long 0xa602487d; /* mflr r10 */ \
+ .long 0x14004a39; /* addi r10,r10,20 */ \
+ .long 0xa64b5a7d; /* mthsrr0 r10 */ \
+ .long 0xa64b7b7d; /* mthsrr1 r11 */ \
+ .long 0x2402004c; /* hrfid */ \
+191:
.global enable_machine_check
enable_machine_check:
OpenPOWER on IntegriCloud