Subversion Repositories freemyipod

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
273 theseven 1
@
2
@
3
@    Copyright 2010 TheSeven
4
@
5
@
427 farthen 6
@    This file is part of emCORE.
273 theseven 7
@
427 farthen 8
@    emCORE is free software: you can redistribute it and/or
273 theseven 9
@    modify it under the terms of the GNU General Public License as
10
@    published by the Free Software Foundation, either version 2 of the
11
@    License, or (at your option) any later version.
12
@
427 farthen 13
@    emCORE is distributed in the hope that it will be useful,
273 theseven 14
@    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
@    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
@    See the GNU General Public License for more details.
17
@
18
@    You should have received a copy of the GNU General Public License
427 farthen 19
@    along with emCORE.  If not, see <http://www.gnu.org/licenses/>.
273 theseven 20
@
21
@
22
 
23
 
24
.section .intvect,"ax",%progbits
25
	ldr pc, =reset_handler
26
	ldr pc, =undef_instr_handler
27
	ldr pc, =syscall_handler
28
	ldr pc, =prefetch_abort_handler
29
	ldr pc, =data_abort_handler
30
	ldr pc, =reserved_handler
31
	ldr pc, =irq_handler
32
	ldr pc, =fiq_handler
33
.ltorg
34
 
35
 
36
.section .inithead,"ax",%progbits
37
.global __start
38
__start:
39
	b	_start
40
 
41
.section .initcode,"ax",%progbits
42
.global _start
43
_start:
700 theseven 44
	mov	r0, #0x22000000
45
	orr	r1, r0, #0x00000c00
46
	orr	r0, r0, #0x0003c000
47
	orr	r1, r1, #0x0000001e
48
	add	r2, r0, #0x200
49
	mov	r3, #0
50
	str	r1, [r0], #4
51
.mmuloop1:
52
	str	r3, [r0], #4
53
	cmp	r0, r2
54
	bne	.mmuloop1
55
	add	r0, r0, #0x100
56
	add	r2, r0, #0x500
57
.mmuloop2:
58
	str	r3, [r0], #4
59
	cmp	r0, r2
60
	bne	.mmuloop2
61
	add	r0, r0, #0x4
62
	add	r2, r0, #0x7c
63
.mmuloop3:
64
	str	r3, [r0], #4
65
	cmp	r0, r2
66
	bne	.mmuloop3
67
	add	r0, r0, #0x4
68
	add	r2, r0, #0x500
69
	add	r2, r2, #0x7c
70
.mmuloop4:
71
	str	r3, [r0], #4
72
	cmp	r0, r2
73
	bne	.mmuloop4
74
	add	r0, r0, #0x200
75
	add	r2, r0, #0x3000
76
.mmuloop5:
77
	str	r3, [r0], #4
78
	cmp	r0, r2
79
	bne	.mmuloop5
273 theseven 80
	mrc	p15, 0, r0,c1,c0
312 theseven 81
	orr	r0, r0, #5
273 theseven 82
	mcr	p15, 0, r0,c1,c0
83
	ldr	r0, =_sramsource
84
	ldr	r1, =_sramstart
85
	ldr	r2, =_sramend
86
.copysram:
87
	cmp	r2, r1
88
	ldrhi	r3, [r0], #4
89
	strhi	r3, [r1], #4
90
	bhi	.copysram
91
	ldr	r0, =_sdramsource
92
	ldr	r1, =_sdramstart
93
	ldr	r2, =_sdramend
94
.copysdram:
95
	cmp	r2, r1
96
	ldrhi	r3, [r0], #4
97
	strhi	r3, [r1], #4
98
	bhi	.copysdram
99
	ldr	r0, =_ibssstart
100
	ldr	r1, =_ibssend
437 theseven 101
	mov	r2, #0
273 theseven 102
.clearibss:
103
	cmp	r1, r0
104
	strhi	r2, [r0], #4
105
	bhi	.clearibss
106
	ldr	r0, =_bssstart
107
	ldr	r1, =_bssend
108
.clearbss:
109
	cmp	r1, r0
110
	strhi	r2, [r0], #4
111
	bhi	.clearbss
112
	ldr	r1, =0x38200000
113
	ldr	r0, [r1]
114
	orr	r0, r0, #1
115
	bic	r0, r0, #0x10000
116
	str	r0, [r1]
117
.cleancache:
118
	mrc	p15, 0, r15,c7,c10,3
119
	bne	.cleancache
120
	mov	r0, #0
121
	mcr	p15, 0, r0,c7,c10,4
122
	mcr	p15, 0, r0,c7,c5,0
123
	ldr	r1, =0x38200000
124
	ldr	r0, [r1]
125
	orr	r0, r0, #1
126
	bic	r0, r0, #0x10000
127
	str	r0, [r1]
128
	mov	r0, #0
129
	mcr	p15, 0, r0,c7,c5,0
130
	add	r1, r1, #0x00c00000
131
	add	r2, r1, #0x00001000
132
	add	r3, r1, #0x00002000
133
	sub	r4, r0, #1
134
	str	r4, [r1,#0x14]
135
	str	r4, [r2,#0x14]
136
	str	r4, [r1,#0xf00]
137
	str	r4, [r2,#0xf00]
138
	str	r4, [r3,#0x08]
139
	str	r4, [r3,#0x0c]
140
	str	r0, [r1,#0x14]
141
	str	r0, [r2,#0x14]
142
	msr	cpsr_c, #0xd2
143
	ldr	sp, =_irqstackend
144
	msr	cpsr_c, #0xd7
145
	ldr	sp, =_abortstackend
146
	msr	cpsr_c, #0xdb
147
	ldr	sp, =_abortstackend
148
	msr	cpsr_c, #0x1f
436 theseven 149
	ldr	sp, =_abortstackend
273 theseven 150
	bl	init
593 theseven 151
	bl	yield
273 theseven 152
	mov	r0, #0
153
	ldr	pc, =idleloop
154
.ltorg
155
 
156
 
157
.section .icode, "ax", %progbits
158
.align 2
159
idleloop:
160
	mcr	p15, 0, r0,c7,c0,4
161
	b	idleloop
162
 
163
.global reset
164
.global hang
165
.type reset, %function
166
.type hang, %function
167
reset:
168
	msr	cpsr_c, #0xd3
169
	mov	r0, #0x100000
170
	mov	r1, #0x3c800000
171
	str	r0, [r1]
172
hang:
173
	msr	cpsr_c, #0xd3
283 theseven 174
	mov	r0, #0
273 theseven 175
	mcr	p15, 0, r0,c7,c0,4
176
	b	hang
177
.size reset, .-reset
178
.size hang, .-hang
179
 
180
.type reset_handler, %function
181
reset_handler:
182
	mov	r0, #0
183
	adr	r1, reset_text
184
	b	panic
185
reset_text:
186
	.ascii	"Hit reset vector!\0"
187
.size reset_handler, .-reset_handler
188
 
189
.type undef_instr_handler, %function
190
undef_instr_handler:
191
	mov	r0, #0
192
	adr	r1, undef_instr_text
193
	sub	r2, lr, #4
194
	b	panicf
195
.size undef_instr_handler, .-undef_instr_handler
196
 
197
.type prefetch_abort_handler, %function
198
prefetch_abort_handler:
199
	mov	r0, #0
200
	adr	r1, prefetch_abort_text
201
	sub	r2, lr, #4
202
	b	panicf
203
.size prefetch_abort_handler, .-prefetch_abort_handler
204
 
205
.type data_abort_handler, %function
206
data_abort_handler:
207
	mov	r0, #0
208
	adr	r1, data_abort_text
209
	sub	r2, lr, #4
210
	b	panicf
211
.size data_abort_handler, .-data_abort_handler
212
 
213
.type reserved_handler, %function
214
reserved_handler:
215
	mov	r0, #0
216
	adr	r1, reserved_text
217
	b	panic
218
.size reserved_handler, .-reserved_handler
219
 
220
.type fiq_handler, %function
221
fiq_handler:
222
	mov	r0, #2
223
	adr	r1, fiq_text
224
	b	panic
225
.size fiq_handler, .-fiq_handler
226
 
227
undef_instr_text:
228
	.ascii	"Undefined instruction at %08X!\0"
229
 
230
prefetch_abort_text:
231
	.ascii	"Prefetch abort at %08X!\0"
232
 
233
data_abort_text:
234
	.ascii	"Data abort at %08X!\0"
235
 
236
reserved_text:
237
	.ascii	"Hit reserved exception handler!\0"
238
 
239
fiq_text:
240
	.ascii	"Unhandled FIQ!\0"
241
 
242
syscall_text:
243
	.ascii	"Unhandled syscall!\0"
244
 
245
 
246
.section .icode.usec_timer, "ax", %progbits
247
.align 2
248
.global read_native_timer
249
.type read_native_timer, %function
250
read_native_timer:
251
	ldr	r0, val_3c700000
252
	ldr	r1, [r0,#0xb4]
253
	mov	r0, #0
254
	bx	lr
255
.size read_native_timer, .-read_native_timer
256
 
257
.global read_usec_timer
258
.type read_usec_timer, %function
259
read_usec_timer:
260
	ldr	r0, val_3c700000
261
	ldr	r0, [r0,#0xb4]
262
	bx	lr
263
.size read_usec_timer, .-read_usec_timer
264
 
265
val_3c700000:
266
	.word	0x3c700000