Back to home page

OSCL-LXR

 
 

    


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