|
@@ -1017,7 +1017,7 @@ _GLOBAL(enter_rtas)
|
|
|
|
|
|
li r9,1
|
|
|
rldicr r9,r9,MSR_SF_LG,(63-MSR_SF_LG)
|
|
|
- ori r9,r9,MSR_IR|MSR_DR|MSR_FE0|MSR_FE1|MSR_FP|MSR_RI
|
|
|
+ ori r9,r9,MSR_IR|MSR_DR|MSR_FE0|MSR_FE1|MSR_FP|MSR_RI|MSR_LE
|
|
|
andc r6,r0,r9
|
|
|
sync /* disable interrupts so SRR0/1 */
|
|
|
mtmsrd r0 /* don't get trashed */
|
|
@@ -1032,6 +1032,8 @@ _GLOBAL(enter_rtas)
|
|
|
b . /* prevent speculative execution */
|
|
|
|
|
|
_STATIC(rtas_return_loc)
|
|
|
+ FIXUP_ENDIAN
|
|
|
+
|
|
|
/* relocation is off at this point */
|
|
|
GET_PACA(r4)
|
|
|
clrldi r4,r4,2 /* convert to realmode address */
|
|
@@ -1103,28 +1105,30 @@ _GLOBAL(enter_prom)
|
|
|
std r10,_CCR(r1)
|
|
|
std r11,_MSR(r1)
|
|
|
|
|
|
- /* Get the PROM entrypoint */
|
|
|
- mtlr r4
|
|
|
+ /* Put PROM address in SRR0 */
|
|
|
+ mtsrr0 r4
|
|
|
+
|
|
|
+ /* Setup our trampoline return addr in LR */
|
|
|
+ bcl 20,31,$+4
|
|
|
+0: mflr r4
|
|
|
+ addi r4,r4,(1f - 0b)
|
|
|
+ mtlr r4
|
|
|
|
|
|
- /* Switch MSR to 32 bits mode
|
|
|
+ /* Prepare a 32-bit mode big endian MSR
|
|
|
*/
|
|
|
#ifdef CONFIG_PPC_BOOK3E
|
|
|
rlwinm r11,r11,0,1,31
|
|
|
- mtmsr r11
|
|
|
+ mtsrr1 r11
|
|
|
+ rfi
|
|
|
#else /* CONFIG_PPC_BOOK3E */
|
|
|
- mfmsr r11
|
|
|
- li r12,1
|
|
|
- rldicr r12,r12,MSR_SF_LG,(63-MSR_SF_LG)
|
|
|
- andc r11,r11,r12
|
|
|
- li r12,1
|
|
|
- rldicr r12,r12,MSR_ISF_LG,(63-MSR_ISF_LG)
|
|
|
- andc r11,r11,r12
|
|
|
- mtmsrd r11
|
|
|
+ LOAD_REG_IMMEDIATE(r12, MSR_SF | MSR_ISF | MSR_LE)
|
|
|
+ andc r11,r11,r12
|
|
|
+ mtsrr1 r11
|
|
|
+ rfid
|
|
|
#endif /* CONFIG_PPC_BOOK3E */
|
|
|
- isync
|
|
|
|
|
|
- /* Enter PROM here... */
|
|
|
- blrl
|
|
|
+1: /* Return from OF */
|
|
|
+ FIXUP_ENDIAN
|
|
|
|
|
|
/* Just make sure that r1 top 32 bits didn't get
|
|
|
* corrupt by OF
|