Merge commit 'remotes/wd/master' into newmaster
[oweals/u-boot.git] / cpu / mpc824x / start.S
index a22137ceb61078aaf45c1b792314f7964fa640c8..784edc36a0c8b433ed58e735089e32e54c27805b 100644 (file)
@@ -220,7 +220,7 @@ _start_of_vectors:
 /* Alignment exception. */
        . = EXC_OFF_ALIGN
 Alignment:
-       EXCEPTION_PROLOG
+       EXCEPTION_PROLOG(SRR0, SRR1)
        mfspr   r4,DAR
        stw     r4,_DAR(r21)
        mfspr   r5,DSISR
@@ -238,7 +238,7 @@ Alignment:
 /* Program check exception */
        . = EXC_OFF_PROGRAM
 ProgramCheck:
-       EXCEPTION_PROLOG
+       EXCEPTION_PROLOG(SRR0, SRR1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
        li      r20,MSR_KERNEL
        rlwimi  r20,r23,0,16,16         /* copy EE bit from saved MSR */
@@ -526,11 +526,26 @@ relocate_code:
        stwu    r0,-4(r7)
        bdnz    3b
 
+4:
+#if !defined(CONFIG_BMW)
+/* Unlock the data cache and invalidate locked area */
+       xor     r0, r0, r0
+       mtspr   1011, r0
+       lis     r4, CFG_INIT_RAM_ADDR@h
+       ori     r4, r4, CFG_INIT_RAM_ADDR@l
+       li      r0, 128
+       mtctr   r0
+41:
+       dcbi    r0, r4
+       addi    r4, r4, 32
+       bdnz    41b
+#endif
+
 /*
  * Now flush the cache: note that we must start from a cache aligned
  * address. Otherwise we might miss one cache line.
  */
-4:     cmpwi   r6,0
+       cmpwi   r6,0
        add     r5,r3,r5
        beq     7f              /* Always flush prefetch queue in any case */
        subi    r0,r6,1