]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * linux/arch/m68knommu/platform/68328/head-rom.S | |
3 | * - A startup file for the MC68328 | |
4 | * | |
5 | * Copyright (C) 1998 D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>, | |
6 | * Kenneth Albanowski <kjahds@kjahds.com>, | |
7 | * The Silver Hammer Group, Ltd. | |
8 | * | |
9 | * (c) 1995, Dionne & Associates | |
10 | * (c) 1995, DKG Display Tech. | |
11 | */ | |
12 | ||
13 | #define ASSEMBLY | |
14 | ||
15 | #define IMMED # | |
16 | #define DBG_PUTC(x) moveb IMMED x, 0xfffff907 | |
17 | ||
1da177e4 LT |
18 | |
19 | .global _stext | |
20 | .global _start | |
21 | ||
22 | .global _rambase | |
1da177e4 LT |
23 | .global _ramvec |
24 | .global _ramstart | |
25 | .global _ramend | |
26 | ||
27 | .global penguin_bits | |
28 | ||
29 | #ifdef CONFIG_PILOT | |
30 | ||
31 | #define IMR 0xFFFFF304 | |
32 | ||
33 | .data | |
34 | .align 16 | |
35 | ||
36 | penguin_bits: | |
37 | #include "bootlogo.rh" | |
38 | ||
39 | #endif | |
40 | ||
41 | /*****************************************************************************/ | |
42 | ||
43 | .data | |
44 | ||
45 | /* | |
46 | * Set up the usable of RAM stuff. Size of RAM is determined then | |
47 | * an initial stack set up at the end. | |
48 | */ | |
49 | .align 4 | |
50 | _ramvec: | |
51 | .long 0 | |
52 | _rambase: | |
53 | .long 0 | |
54 | _ramstart: | |
55 | .long 0 | |
56 | _ramend: | |
57 | .long 0 | |
58 | ||
59 | .text | |
60 | ||
61 | _start: | |
62 | _stext: | |
63 | ||
64 | ||
65 | #ifdef CONFIG_M68328 | |
66 | ||
67 | #ifdef CONFIG_PILOT | |
68 | .byte 0x4e, 0xfa, 0x00, 0x0a /* Jmp +X bytes */ | |
69 | .byte 'b', 'o', 'o', 't' | |
70 | .word 10000 | |
71 | ||
72 | nop | |
73 | #endif | |
74 | ||
75 | moveq #0, %d0 | |
76 | movew %d0, 0xfffff618 /* Watchdog off */ | |
77 | movel #0x00011f07, 0xfffff114 /* CS A1 Mask */ | |
78 | ||
79 | movew #0x0800, 0xfffff906 /* Ignore CTS */ | |
80 | movew #0x010b, 0xfffff902 /* BAUD to 9600 */ | |
81 | ||
82 | movew #0x2410, 0xfffff200 /* PLLCR */ | |
83 | movew #0x123, 0xfffff202 /* PLLFSR */ | |
84 | ||
85 | #ifdef CONFIG_PILOT | |
86 | moveb #0, 0xfffffA27 /* LCKCON */ | |
87 | movel #_start, 0xfffffA00 /* LSSA */ | |
88 | moveb #0xa, 0xfffffA05 /* LVPW */ | |
89 | movew #0x9f, 0xFFFFFa08 /* LXMAX */ | |
90 | movew #0x9f, 0xFFFFFa0a /* LYMAX */ | |
91 | moveb #9, 0xfffffa29 /* LBAR */ | |
92 | moveb #0, 0xfffffa25 /* LPXCD */ | |
93 | moveb #0x04, 0xFFFFFa20 /* LPICF */ | |
94 | moveb #0x58, 0xfffffA27 /* LCKCON */ | |
95 | moveb #0x85, 0xfffff429 /* PFDATA */ | |
96 | moveb #0xd8, 0xfffffA27 /* LCKCON */ | |
97 | moveb #0xc5, 0xfffff429 /* PFDATA */ | |
98 | moveb #0xd5, 0xfffff429 /* PFDATA */ | |
99 | ||
100 | moveal #0x00100000, %a3 | |
101 | moveal #0x100ffc00, %a4 | |
102 | #endif /* CONFIG_PILOT */ | |
103 | ||
104 | #endif /* CONFIG_M68328 */ | |
105 | ||
106 | movew #0x2700, %sr | |
107 | lea %a4@(-4), %sp | |
108 | ||
109 | DBG_PUTC('\r') | |
110 | DBG_PUTC('\n') | |
111 | DBG_PUTC('A') | |
112 | ||
113 | moveq #0,%d0 | |
114 | movew #16384, %d0 /* PLL settle wait loop */ | |
115 | L0: | |
116 | subw #1, %d0 | |
117 | bne L0 | |
118 | ||
119 | DBG_PUTC('B') | |
120 | ||
121 | /* Copy command line from beginning of RAM (+16) to end of bss */ | |
2ae9cb6b | 122 | movel #CONFIG_VECTORBASE, %d7 |
1da177e4 LT |
123 | addl #16, %d7 |
124 | moveal %d7, %a0 | |
125 | moveal #_ebss, %a1 | |
126 | lea %a1@(512), %a2 | |
127 | ||
128 | DBG_PUTC('C') | |
129 | ||
130 | /* Copy %a0 to %a1 until %a1 == %a2 */ | |
131 | L2: | |
132 | movel %a0@+, %d0 | |
133 | movel %d0, %a1@+ | |
134 | cmpal %a1, %a2 | |
135 | bhi L2 | |
136 | ||
137 | /* Copy data+init segment from ROM to RAM */ | |
138 | moveal #_etext, %a0 | |
139 | moveal #_sdata, %a1 | |
140 | moveal #__init_end, %a2 | |
141 | ||
142 | DBG_PUTC('D') | |
143 | ||
144 | /* Copy %a0 to %a1 until %a1 == %a2 */ | |
145 | LD1: | |
146 | movel %a0@+, %d0 | |
147 | movel %d0, %a1@+ | |
148 | cmpal %a1, %a2 | |
149 | bhi LD1 | |
150 | ||
151 | DBG_PUTC('E') | |
152 | ||
153 | moveal #_sbss, %a0 | |
154 | moveal #_ebss, %a1 | |
155 | ||
156 | /* Copy 0 to %a0 until %a0 == %a1 */ | |
157 | L1: | |
158 | movel #0, %a0@+ | |
159 | cmpal %a0, %a1 | |
160 | bhi L1 | |
161 | ||
162 | DBG_PUTC('F') | |
163 | ||
164 | /* Copy command line from end of bss to command line */ | |
165 | moveal #_ebss, %a0 | |
166 | moveal #command_line, %a1 | |
167 | lea %a1@(512), %a2 | |
168 | ||
169 | DBG_PUTC('G') | |
170 | ||
171 | /* Copy %a0 to %a1 until %a1 == %a2 */ | |
172 | L3: | |
173 | movel %a0@+, %d0 | |
174 | movel %d0, %a1@+ | |
175 | cmpal %a1, %a2 | |
176 | bhi L3 | |
177 | ||
178 | movel #_sdata, %d0 | |
179 | movel %d0, _rambase | |
180 | movel #_ebss, %d0 | |
181 | movel %d0, _ramstart | |
182 | ||
183 | movel %a4, %d0 | |
184 | subl #4096, %d0 /* Reserve 4K of stack */ | |
185 | moveq #79, %d7 | |
186 | movel %d0, _ramend | |
187 | ||
188 | movel %a3, %d0 | |
189 | movel %d0, rom_length | |
190 | ||
191 | pea 0 | |
192 | pea env | |
193 | pea %sp@(4) | |
194 | pea 0 | |
195 | ||
196 | DBG_PUTC('H') | |
197 | ||
198 | #ifdef CONFIG_PILOT | |
199 | movel #penguin_bits, 0xFFFFFA00 | |
200 | moveb #10, 0xFFFFFA05 | |
201 | movew #160, 0xFFFFFA08 | |
202 | movew #160, 0xFFFFFA0A | |
203 | #endif /* CONFIG_PILOT */ | |
204 | ||
205 | DBG_PUTC('I') | |
206 | ||
207 | lea init_thread_union, %a0 | |
208 | lea 0x2000(%a0), %sp | |
209 | ||
210 | DBG_PUTC('J') | |
211 | DBG_PUTC('\r') | |
212 | DBG_PUTC('\n') | |
213 | ||
214 | jsr start_kernel | |
215 | _exit: | |
216 | ||
217 | jmp _exit | |
218 | ||
219 | ||
220 | .data | |
221 | env: | |
222 | .long 0 |