From 5973871ed2b3c181feb92d0e4a9e0446545a90d7 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 8 Mar 2009 00:54:06 +0000 Subject: [PATCH] Author: Alexander Graf PPC64: Switch to 32-bit mode in interrupts All the code in OpenBIOS runs in 32 bits, which is fine. Now, when an interrupt arrives, the 970 CPU automatically sets the MSR_SF bit, making us run in 64 bit mode. That breaks address calculation, because 'lis' and 'ba' get sign extended. In order to circumvent that mess, let's just go back to 32 bit mode whenever we get an interrupt. Signed-off-by: Alexander Graf Signed-off-by: Laurent Vivier git-svn-id: svn://coreboot.org/openbios/openbios-devel@464 f158a5a8-5612-0410-a976-696ce0be7e32 --- arch/ppc/qemu/start.S | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/ppc/qemu/start.S b/arch/ppc/qemu/start.S index 857885a..66df9a2 100644 --- a/arch/ppc/qemu/start.S +++ b/arch/ppc/qemu/start.S @@ -34,6 +34,9 @@ #define EXCEPTION_PREAMBLE_TEMPLATE \ mtsprg1 r1 ; /* scratch */ \ + mfmsr r1 ; /* unset MSR_SF */ \ + clrlwi r1,r1,0 ; \ + mtmsr r1 ; \ mfsprg0 r1 ; /* exception stack in sprg0 */ \ .ifc ULONG_SIZE, 8 ; \ addi r1,r1,-(40 * ULONG_SIZE) ; /* push exception frame */ \