Subversion Repositories freemyipod

Rev

Rev 881 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 881 Rev 946
Line 24... Line 24...
24
.extern _reserved_handler
24
.extern _reserved_handler
25
.extern _irq_handler
25
.extern _irq_handler
26
.extern _fiq_handler
26
.extern _fiq_handler
27
 
27
 
28
 
28
 
29
.global _vectors
-
 
30
.section .vectors,"ax",%progbits
29
.section .vectors,"ax",%progbits
31
_vectors:
-
 
32
    b _reset_handler
30
    ldr pc, =_reserved_handler
33
    b _undef_instr_handler
31
    ldr pc, =_undef_instr_handler
34
    b _syscall_handler
32
    ldr pc, =_syscall_handler
35
    b _prefetch_abort_handler
33
    ldr pc, =_prefetch_abort_handler
36
    b _data_abort_handler
34
    ldr pc, =_data_abort_handler
37
    b _reserved_handler
35
    ldr pc, =_reserved_handler
38
    b _irq_handler
36
    ldr pc, =_irq_handler
39
    b _fiq_handler
37
    ldr pc, =_fiq_handler
40
 
38
 
-
 
39
 
41
_reset_handler:
40
.section .init,"ax",%progbits
42
    @ Check if we need to relocate ourselves
41
    @ Check if we need to relocate ourselves
43
    adr r0, _vectors
42
    adr r0, _init_end
44
    ldr r1, =_vectors
43
    ldr r1, =_text
45
    cmp r0, r1
44
    cmp r0, r1
46
    beq _relocated
45
    beq _relocated
47
    @ Move around as necessary
46
    @ Move around as necessary
48
    ldr r2, =(_text_size + 31)
47
    ldr r2, =(_text_size + 31)
49
    mov r2, r2,lsr#5
48
    mov r2, r2,lsr#5
Line 51... Line 50...
51
    ldmia r0!, {r4-r11}
50
    ldmia r0!, {r4-r11}
52
    stmia r1!, {r4-r11}
51
    stmia r1!, {r4-r11}
53
    subs r2, r2, #1
52
    subs r2, r2, #1
54
    bne _copy
53
    bne _copy
55
_relocated:
54
_relocated:
-
 
55
    @ Check if the vectors need to be copied
-
 
56
    ldr r2, =_vectors_src
-
 
57
    sub r0, r0, r1
-
 
58
    add r0, r0, r2
-
 
59
    ldr r2, =(_vectors_size + 31)
-
 
60
    ldr r1, =_vectors
-
 
61
    mov r2, r2,lsr#5
-
 
62
    @ Copy vectors
-
 
63
_vectors_copy:
-
 
64
    ldmia r0!, {r4-r11}
-
 
65
    stmia r1!, {r4-r11}
-
 
66
    subs r2, r2, #1
-
 
67
    bne _vectors_copy
56
#ifdef SOC_S5L8701
68
#ifdef SOC_S5L8701
57
    @ Detect execution base address and remap memory at 0x0 accordingly (for IRQ vectors)
69
    @ Detect execution base address and remap memory at 0x0 accordingly (for IRQ vectors)
58
    tst r1, #0x20000000
70
    tst r1, #0x20000000
59
    ldr r1, =0x38200000
71
    ldr r1, =0x38200000
60
    ldr r0, [r1]
72
    ldr r0, [r1]
Line 134... Line 146...
134
#endif
146
#endif
135
#endif
147
#endif
136
 
148
 
137
    @ Jump to final execution address (after relocation)
149
    @ Jump to final execution address (after relocation)
138
    ldr pc, =_enable_irqs
150
    ldr pc, =_enable_irqs
-
 
151
.ltorg
-
 
152
_init_end:
139
 
153
 
-
 
154
.section .text,"ax",%progbits
140
_enable_irqs:
155
_enable_irqs:
141
    @ Mask and clear all IRQs
156
    @ Mask and clear all IRQs
142
#ifdef SOC_S5L8701 
157
#ifdef SOC_S5L8701 
143
    mov r1, #0x39c00000
158
    mov r1, #0x39c00000
144
    str r0, [r1,#4]
159
    str r0, [r1,#4]
Line 226... Line 241...
226
    msr cpsr_c, #0xd3
241
    msr cpsr_c, #0xd3
227
    mcr p15, 0, r0,c7,c0,4
242
    mcr p15, 0, r0,c7,c0,4
228
    b hang
243
    b hang
229
.size reset, .-reset
244
.size reset, .-reset
230
.size hang, .-hang
245
.size hang, .-hang
-
 
246