locore.S revision 1.7 1 1.7 wiz /* $NetBSD: locore.S,v 1.7 2004/01/04 16:19:43 wiz Exp $ */
2 1.6 agc
3 1.6 agc /*-
4 1.6 agc * Copyright (c) 1990 The Regents of the University of California.
5 1.6 agc * All rights reserved.
6 1.6 agc *
7 1.6 agc * This code is derived from software contributed to Berkeley by
8 1.6 agc * William Jolitz.
9 1.6 agc *
10 1.6 agc * Redistribution and use in source and binary forms, with or without
11 1.6 agc * modification, are permitted provided that the following conditions
12 1.6 agc * are met:
13 1.6 agc * 1. Redistributions of source code must retain the above copyright
14 1.6 agc * notice, this list of conditions and the following disclaimer.
15 1.6 agc * 2. Redistributions in binary form must reproduce the above copyright
16 1.6 agc * notice, this list of conditions and the following disclaimer in the
17 1.6 agc * documentation and/or other materials provided with the distribution.
18 1.6 agc * 3. Neither the name of the University nor the names of its contributors
19 1.6 agc * may be used to endorse or promote products derived from this software
20 1.6 agc * without specific prior written permission.
21 1.6 agc *
22 1.6 agc * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 1.6 agc * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 1.6 agc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 1.6 agc * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 1.6 agc * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 1.6 agc * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 1.6 agc * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 1.6 agc * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 1.6 agc * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 1.6 agc * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 1.6 agc * SUCH DAMAGE.
33 1.6 agc *
34 1.6 agc * @(#)locore.s 7.3 (Berkeley) 5/13/91
35 1.6 agc */
36 1.1 uch
37 1.1 uch /*-
38 1.1 uch * Copyright (c) 1993, 1994, 1995, 1997
39 1.1 uch * Charles M. Hannum. All rights reserved.
40 1.1 uch *
41 1.1 uch * This code is derived from software contributed to Berkeley by
42 1.1 uch * William Jolitz.
43 1.1 uch *
44 1.1 uch * Redistribution and use in source and binary forms, with or without
45 1.1 uch * modification, are permitted provided that the following conditions
46 1.1 uch * are met:
47 1.1 uch * 1. Redistributions of source code must retain the above copyright
48 1.1 uch * notice, this list of conditions and the following disclaimer.
49 1.1 uch * 2. Redistributions in binary form must reproduce the above copyright
50 1.1 uch * notice, this list of conditions and the following disclaimer in the
51 1.1 uch * documentation and/or other materials provided with the distribution.
52 1.1 uch * 3. All advertising materials mentioning features or use of this software
53 1.1 uch * must display the following acknowledgement:
54 1.1 uch * This product includes software developed by the University of
55 1.1 uch * California, Berkeley and its contributors.
56 1.1 uch * 4. Neither the name of the University nor the names of its contributors
57 1.1 uch * may be used to endorse or promote products derived from this software
58 1.1 uch * without specific prior written permission.
59 1.1 uch *
60 1.1 uch * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
61 1.1 uch * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
62 1.1 uch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
63 1.1 uch * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
64 1.1 uch * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
65 1.1 uch * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
66 1.1 uch * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
67 1.1 uch * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
68 1.1 uch * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
69 1.1 uch * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
70 1.1 uch * SUCH DAMAGE.
71 1.1 uch *
72 1.1 uch * @(#)locore.s 7.3 (Berkeley) 5/13/91
73 1.1 uch */
74 1.1 uch
75 1.5 uch #include "opt_cputype.h"
76 1.2 uch #include "opt_memsize.h"
77 1.1 uch #include "assym.h"
78 1.1 uch
79 1.2 uch #if defined(SH3) && defined(SH4)
80 1.2 uch #error "evbsh3 port don't support SH3,SH4 common kernel."
81 1.2 uch #endif
82 1.1 uch
83 1.2 uch #include <sh3/asm.h>
84 1.4 uch #include <sh3/exception.h>
85 1.2 uch #include <sh3/locore.h>
86 1.2 uch #include <sh3/mmu_sh3.h>
87 1.2 uch #include <sh3/mmu_sh4.h>
88 1.2 uch #include <sh3/cache_sh3.h>
89 1.2 uch #include <sh3/cache_sh4.h>
90 1.1 uch
91 1.5 uch #define INIT_STACK \
92 1.5 uch ((IOM_RAM_BEGIN + IOM_RAM_SIZE - 0x00001000) | 0x80000000)
93 1.1 uch
94 1.1 uch NENTRY(start)
95 1.1 uch /* Set SP to initial position */
96 1.1 uch mov.l XLtmpstk, r15
97 1.1 uch
98 1.2 uch /* Mask all interrupt */
99 1.2 uch __INTR_MASK(r0, r1)
100 1.1 uch
101 1.1 uch /* Set Register Bank to Bank 0 */
102 1.1 uch mov.l SR_init, r0
103 1.1 uch ldc r0, sr
104 1.1 uch
105 1.2 uch /* MMU off */
106 1.1 uch xor r0, r0
107 1.2 uch MOV (MMUCR, r2)
108 1.2 uch mov.l r0, @r2
109 1.1 uch
110 1.1 uch bra start1
111 1.1 uch nop
112 1.1 uch .align 2
113 1.1 uch SR_init: .long 0x500000F0
114 1.2 uch REG_SYMBOL(MMUCR)
115 1.1 uch start1:
116 1.1 uch
117 1.1 uch #ifdef ROMIMAGE
118 1.1 uch /* Initialize BUS State Control Regs. */
119 1.1 uch mov.l _ROM_START, r3
120 1.1 uch mov.l XL_ram_start, r4
121 1.1 uch mov.l @r4, r4
122 1.1 uch sub r3, r4
123 1.7 wiz /* Set Bus State Controller */
124 1.1 uch mov.l XLInitializeBsc, r0
125 1.1 uch sub r4, r0
126 1.1 uch jsr @r0
127 1.1 uch nop
128 1.1 uch
129 1.1 uch /* Move kernel image from ROM area to RAM area */
130 1.1 uch mov.l ___end, r0
131 1.1 uch mov.l ___start, r1
132 1.1 uch mov.l _KERNBASE, r2
133 1.1 uch sub r2, r0
134 1.1 uch sub r2, r1
135 1.1 uch sub r1, r0
136 1.1 uch add #4, r0 /* size of bytes to be copied */
137 1.1 uch shlr2 r0 /* number of long word */
138 1.1 uch mov.l _ROM_START, r3
139 1.1 uch add r3, r1 /* src address */
140 1.1 uch mov.l ___start, r3
141 1.1 uch sub r2, r3
142 1.1 uch mov.l XL_ram_start, r4
143 1.1 uch mov.l @r4, r4
144 1.1 uch add r4, r3 /* dest address */
145 1.1 uch 1:
146 1.1 uch mov.l @r1+, r4
147 1.1 uch mov.l r4, @r3
148 1.1 uch add #4, r3
149 1.1 uch dt r0 /* decrement and Test */
150 1.1 uch bf 1b
151 1.1 uch /* kernel image copy end */
152 1.1 uch
153 1.1 uch mov.l LXstart_in_RAM, r0
154 1.1 uch jmp @r0 /* jump to RAM area */
155 1.1 uch nop
156 1.1 uch
157 1.1 uch .align 2
158 1.1 uch LXstart_in_RAM:
159 1.1 uch .long start_in_RAM
160 1.1 uch XL_ram_start:
161 1.1 uch .long _C_LABEL(ram_start)
162 1.2 uch #else /* ROMIMAGE */
163 1.1 uch #ifndef DONT_INIT_BSC
164 1.7 wiz /* Set Bus State Controller */
165 1.1 uch mov.l XLInitializeBsc, r0
166 1.1 uch jsr @r0
167 1.1 uch nop
168 1.2 uch #endif /* !DONT_INIT_BSC */
169 1.2 uch #endif /* ROMIMAGE */
170 1.1 uch
171 1.1 uch start_in_RAM:
172 1.1 uch mova 1f, r0
173 1.1 uch mov r0, r4
174 1.1 uch mov.l XLinitSH3, r0
175 1.1 uch jsr @r0 /* call initSH3() */
176 1.1 uch nop
177 1.1 uch
178 1.1 uch .align 2
179 1.1 uch 1:
180 1.1 uch
181 1.1 uch #ifdef SH4
182 1.1 uch /* CCR must be accessed from P2 area */
183 1.1 uch mova cache_on, r0
184 1.1 uch mov r0, r5
185 1.1 uch mov.l XLtoP2, r1
186 1.1 uch add r1, r5
187 1.1 uch mova main_label, r0
188 1.1 uch mov r0, r2
189 1.2 uch MOV (CCR, r3)
190 1.1 uch mov.l XL_CCRVAL, r4
191 1.1 uch jmp @r5
192 1.1 uch nop
193 1.1 uch
194 1.1 uch .align 2
195 1.1 uch cache_on:
196 1.1 uch mov.l r4, @r3 /* Write to CCR */
197 1.1 uch nop
198 1.1 uch nop
199 1.1 uch nop
200 1.1 uch nop
201 1.1 uch nop
202 1.1 uch nop
203 1.1 uch nop
204 1.1 uch nop
205 1.1 uch jmp @r2
206 1.1 uch nop
207 1.1 uch
208 1.1 uch .align 2
209 1.1 uch main_label:
210 1.2 uch #endif /* SH4 */
211 1.1 uch mov.l XLmain, r0
212 1.1 uch jsr @r0 /* call main() */
213 1.1 uch nop
214 1.1 uch
215 1.1 uch .align 2
216 1.1 uch
217 1.1 uch #ifndef DONT_INIT_BSC
218 1.1 uch XLInitializeBsc:.long _C_LABEL(InitializeBsc)
219 1.2 uch #endif /* DONT_INIT_BSC */
220 1.1 uch ___start: .long start
221 1.1 uch ___etext: .long _etext
222 1.1 uch ___end: .long _end
223 1.1 uch XLtmpstk: .long INIT_STACK
224 1.2 uch _KERNBASE: .long 0x8c000000
225 1.1 uch _ROM_START: .long IOM_ROM_BEGIN
226 1.1 uch XLinitSH3: .long _C_LABEL(initSH3)
227 1.1 uch XLmain: .long _C_LABEL(main)
228 1.1 uch XLtoP2: .long 0x20000000
229 1.2 uch REG_SYMBOL(CCR)
230 1.1 uch #ifdef SH4
231 1.1 uch XL_CCRVAL: .long 0x0909 /* Operand cache ON */
232 1.2 uch #endif /* SH4 */
233 1.1 uch
234 1.1 uch load_and_reset:
235 1.1 uch mov.l XL_start_address, r0
236 1.1 uch mov r0, r8
237 1.1 uch mov.l @r4+, r1 /* r1 = osimage size */
238 1.1 uch mov.l @r4+, r2 /* r2 = check sum */
239 1.1 uch shlr2 r1 /* r1 = osimage size in dword */
240 1.1 uch 1:
241 1.1 uch mov.l @r4+, r3
242 1.1 uch mov.l r3, @r0
243 1.1 uch add #4, r0
244 1.1 uch dt r1
245 1.1 uch bf 1b
246 1.1 uch
247 1.1 uch jmp @r8 /* jump to start address */
248 1.1 uch nop
249 1.1 uch
250 1.1 uch .align 2
251 1.1 uch XL_start_address:
252 1.1 uch .long IOM_RAM_BEGIN + 0x00010000
253 1.1 uch load_and_reset_end:
254 1.1 uch
255 1.1 uch ENTRY(XLoadAndReset)
256 1.2 uch __INTR_MASK(r0, r1)
257 1.1 uch /* copy trampoline code to RAM area top */
258 1.1 uch mov.l XL_load_and_reset, r0
259 1.1 uch mov.l XL_load_and_reset_end, r1
260 1.1 uch mov.l XL_load_trampoline_addr, r2
261 1.1 uch mov r2, r8
262 1.1 uch sub r0, r1 /* r1 = bytes to be copied */
263 1.1 uch 1: mov.b @r0+, r3
264 1.1 uch mov.b r3, @r2
265 1.1 uch add #1, r2
266 1.1 uch dt r1
267 1.1 uch bf 1b
268 1.1 uch
269 1.1 uch jmp @r8 /* jump to trampoline code */
270 1.1 uch nop
271 1.1 uch
272 1.1 uch .align 2
273 1.1 uch XL_load_trampoline_addr:
274 1.1 uch .long IOM_RAM_BEGIN + 0x00008000
275 1.1 uch XL_load_and_reset:
276 1.1 uch .long load_and_reset
277 1.1 uch XL_load_and_reset_end:
278 1.1 uch .long load_and_reset_end
279 1.1 uch .data
280 1.1 uch .align 2
281 1.1 uch .globl _C_LABEL(intrcnt), _C_LABEL(eintrcnt)
282 1.1 uch .globl _C_LABEL(intrnames), _C_LABEL(eintrnames)
283 1.1 uch _C_LABEL(intrcnt):
284 1.1 uch _C_LABEL(eintrcnt):
285 1.1 uch _C_LABEL(intrnames):
286 1.1 uch _C_LABEL(eintrnames):
287