Back to home page

LXR

 
 

    


0001 /*
0002  * linux/arch/arm/boot/compressed/head-xscale.S
0003  *
0004  * XScale specific tweaks.  This is merged into head.S by the linker.
0005  *
0006  */
0007 
0008 #include <linux/linkage.h>
0009 
0010         .section        ".start", "ax"
0011 
0012 __XScale_start:
0013 
0014         @ Preserve r8/r7 i.e. kernel entry values
0015 
0016         @ Data cache might be active.
0017         @ Be sure to flush kernel binary out of the cache,
0018         @ whatever state it is, before it is turned off.
0019         @ This is done by fetching through currently executed
0020         @ memory to be sure we hit the same cache.
0021         bic r2, pc, #0x1f
0022         add r3, r2, #0x10000    @ 64 kb is quite enough...
0023 1:      ldr r0, [r2], #32
0024         teq r2, r3
0025         bne 1b
0026         mcr p15, 0, r0, c7, c10, 4  @ drain WB
0027         mcr p15, 0, r0, c7, c7, 0   @ flush I & D caches
0028 
0029         @ disabling MMU and caches
0030         mrc p15, 0, r0, c1, c0, 0   @ read control reg
0031         bic r0, r0, #0x05       @ clear DC, MMU
0032         bic r0, r0, #0x1000     @ clear Icache
0033         mcr p15, 0, r0, c1, c0, 0
0034