MOXA linux-2.6.x / linux-2.6.19-uc1 from UC-7110-LX-BOOTLOADER-1.9_VERSION-4.2.tgz
[linux-2.6.19-moxart.git] / arch / arm / boot / compressed / head-xscale.S
blob0dda8aebf68febd6a43b9aab9e950bf0910d4eae
1 /*
2  * linux/arch/arm/boot/compressed/head-xscale.S
3  *
4  * XScale specific tweaks.  This is merged into head.S by the linker.
5  *
6  */
8 #include <linux/linkage.h>
9 #include <asm/mach-types.h>
11                 .section        ".start", "ax"
13 __XScale_start:
15                 @ Preserve r8/r7 i.e. kernel entry values
17                 @ Data cache might be active.
18                 @ Be sure to flush kernel binary out of the cache,
19                 @ whatever state it is, before it is turned off.
20                 @ This is done by fetching through currently executed
21                 @ memory to be sure we hit the same cache.
22                 bic     r2, pc, #0x1f
23                 add     r3, r2, #0x10000        @ 64 kb is quite enough...
24 1:              ldr     r0, [r2], #32
25                 teq     r2, r3
26                 bne     1b
27                 mcr     p15, 0, r0, c7, c10, 4  @ drain WB
28                 mcr     p15, 0, r0, c7, c7, 0   @ flush I & D caches
30                 @ disabling MMU and caches
31                 mrc     p15, 0, r0, c1, c0, 0   @ read control reg
32                 bic     r0, r0, #0x05           @ clear DC, MMU
33                 bic     r0, r0, #0x1000         @ clear Icache
34                 mcr     p15, 0, r0, c1, c0, 0
36 #ifdef CONFIG_ARCH_LUBBOCK
37                 mov     r7, #MACH_TYPE_LUBBOCK
38 #endif
40 #ifdef CONFIG_ARCH_COTULLA_IDP
41                 mov     r7, #MACH_TYPE_COTULLA_IDP
42 #endif
44 #ifdef CONFIG_ARCH_IQ80310
45                 /*
46                  * Crank the CPU up to 733MHz
47                  */
48                 mov     r1, #9
49                 mcr     p14, 0, r1, c6, c0, 0
51                 /*
52                  * Disable ECC error notification
53                  * At some point, we should add an ECC handler to Linux
54                  */
55                 mov     r1, #0x1500
56                 mov     r0, #0x4
57                 str     r0, [r1, #0x34]
59                 mov     r7, #MACH_TYPE_IQ80310
60 #endif
62 #ifdef CONFIG_ARCH_IXDP425
63                 mov     r7, #MACH_TYPE_IXDP425
64 #endif
66 #ifdef CONFIG_MACH_IXDP465
67                 mov r7, #MACH_TYPE_IXDP465 & 0xff
68                 orr r7, r7, #MACH_TYPE_IXDP465 & 0xff00
69 #endif
71 #ifdef CONFIG_MACH_IXDPG425
72                 mov r7, #MACH_TYPE_IXDPG425 & 0xff
73                 orr r7, r7, #MACH_TYPE_IXDPG425 & 0xff00
74 #endif
76 #ifdef CONFIG_ARCH_PRPMC1100
77                 mov     r7, #(MACH_TYPE_PRPMC1100 & 0xff)
78                 orr     r7, r7, #(MACH_TYPE_PRPMC1100 & 0xff00)
79 #endif
81 #ifdef CONFIG_ARCH_ADI_COYOTE
82                 # Set machine ID into r7 (Coyote ID > 255 hence needs
83                 # two instructions to build the ID safely).
84                 mov r7, #MACH_TYPE_ADI_COYOTE & 0xff
85                 orr r7, r7, #MACH_TYPE_ADI_COYOTE & 0xff00
86 #endif
88 #ifdef CONFIG_ARCH_SE4000
89                 mov r7, #MACH_TYPE_SE4000 & 0xff
90                 orr r7, r7, #MACH_TYPE_SE4000 & 0xff00
91 #endif
93 #ifdef CONFIG_MACH_ESS710
94                 mov r7, #MACH_TYPE_ESS710 & 0xff
95                 orr r7, r7, #MACH_TYPE_ESS710 & 0xff00
96 #endif
98 #ifdef CONFIG_MACH_SG720
99                 mov r7, #MACH_TYPE_SG720 & 0xff
100                 orr r7, r7, #MACH_TYPE_SG720 & 0xff00
101 #endif
103 #ifdef CONFIG_MACH_MONTEJADE
104                 mov r7, #MACH_TYPE_MONTEJADE & 0xff
105                 orr r7, r7, #MACH_TYPE_MONTEJADE & 0xff00
106 #endif
108 #ifdef CONFIG_MACH_IVPN
109                 mov r7, #MACH_TYPE_IVPN & 0xff
110                 orr r7, r7, #MACH_TYPE_IVPN & 0xff00
111 #endif
113 #ifdef CONFIG_MACH_SE5100
114                 mov r7, #MACH_TYPE_SE5100 & 0xff
115                 orr r7, r7, #MACH_TYPE_SE5100 & 0xff00
116 #endif
118 #ifdef CONFIG_MACH_SG560
119                 mov r7, #MACH_TYPE_SG560 & 0xff
120                 orr r7, r7, #MACH_TYPE_SG560 & 0xff00
121 #endif
123 #ifdef CONFIG_MACH_SG565
124                 mov r7, #MACH_TYPE_SG565 & 0xff
125                 orr r7, r7, #MACH_TYPE_SG565 & 0xff00
126 #endif
128 #ifdef CONFIG_MACH_SG580
129                 mov r7, #MACH_TYPE_SG580 & 0xff
130                 orr r7, r7, #MACH_TYPE_SG580 & 0xff00
131 #endif
133 #ifdef CONFIG_MACH_SG590
134                 mov r7, #MACH_TYPE_SG590 & 0xff
135                 orr r7, r7, #MACH_TYPE_SG590 & 0xff00
136 #endif
138 #ifdef CONFIG_MACH_SG640
139                 mov r7, #MACH_TYPE_SG640 & 0xff
140                 orr r7, r7, #MACH_TYPE_SG640 & 0xff00
141 #endif
143 #ifdef  CONFIG_MACH_GTWX5715
144                mov     r7, #(MACH_TYPE_GTWX5715 & 0xff)
145                orr     r7, r7, #(MACH_TYPE_GTWX5715 & 0xff00)
146 #endif
148 #ifdef CONFIG_ARCH_IXP2000
149                 mov     r1, #-1
150                 mov     r0, #0xd6000000
151                 str     r1, [r0, #0x14]
152                 str     r1, [r0, #0x18]
153 #endif