summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8702/crt0.S
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s5l8702/crt0.S')
-rw-r--r--firmware/target/arm/s5l8702/crt0.S96
1 files changed, 38 insertions, 58 deletions
diff --git a/firmware/target/arm/s5l8702/crt0.S b/firmware/target/arm/s5l8702/crt0.S
index 563e863a66..3d1ee2bdfd 100644
--- a/firmware/target/arm/s5l8702/crt0.S
+++ b/firmware/target/arm/s5l8702/crt0.S
@@ -23,9 +23,6 @@
23#include "config.h" 23#include "config.h"
24#include "cpu.h" 24#include "cpu.h"
25 25
26#define CACHE_NONE 0
27#define CACHE_ALL 0x0C
28
29 .section .intvect,"ax",%progbits 26 .section .intvect,"ax",%progbits
30 .global start 27 .global start
31 .global _newstart 28 .global _newstart
@@ -50,65 +47,48 @@ newstart2:
50 47
51#ifdef BOOTLOADER 48#ifdef BOOTLOADER
52 /* Relocate ourself to IRAM - we have been loaded to DRAM */ 49 /* Relocate ourself to IRAM - we have been loaded to DRAM */
53 mov r0, #0x08000000 /* source (DRAM) */ 50 mov r0, #0x08000000 /* source (DRAM) */
54 mov r1, #0x22000000 /* dest (IRAM) */ 51 mov r1, #0x22000000 /* dest (IRAM) */
55 ldr r2, =_dataend 52 ldr r2, =_dataend
561: 531:
57 cmp r2, r1 54 cmp r2, r1
58 ldrhi r3, [r0], #4 55 ldrhi r3, [r0], #4
59 strhi r3, [r1], #4 56 strhi r3, [r1], #4
60 bhi 1b 57 bhi 1b
61 58
62 ldr pc, =start_loc /* jump to the relocated start_loc: */ 59 ldr pc, =start_loc /* jump to the relocated start_loc: */
63start_loc: 60start_loc:
64#endif 61#endif
65 62
66 mrc 15, 0, r0, c1, c0, 0 63 mrc p15, 0, r0, c1, c0, 0
67 bic r0, r0, #0x1000 64 bic r0, r0, #0x1000
68 bic r0, r0, #0x5 65 bic r0, r0, #0x5
69 mcr 15, 0, r0, c1, c0, 0 // disable caches and protection unit 66 mcr p15, 0, r0, c1, c0, 0 /* disable caches and protection unit */
70 67
71.cleancache: 68.cleancache:
72 mrc p15, 0, r15,c7,c10,3 69 mrc p15, 0, r15,c7,c10,3
73 bne .cleancache 70 bne .cleancache
74 mov r0, #0 71 mov r0, #0
75 mcr p15, 0, r0,c7,c10,4 72 mcr p15, 0, r0,c7,c10,4
76 mcr p15, 0, r0,c7,c5,0 73 mcr p15, 0, r0,c7,c5,0
77 bl ttb_init 74
78 75 /* reset VIC controller */
79 mov r0, #0 @ physical address 76 ldr r1, =0x38e00000
80 mov r1, #0 @ virtual address 77 add r2, r1, #0x00001000
81 mov r2, #0x380 @ size (all memory) 78 add r3, r1, #0x00002000
82 mov r3, #CACHE_ALL 79 sub r4, r0, #1
83 bl map_section 80 str r4, [r1,#0x14]
84 81 str r4, [r2,#0x14]
85 mov r0, #0x38000000 @ physical address 82 str r4, [r1,#0xf00]
86 mov r1, #0x38000000 @ virtual address 83 str r4, [r2,#0xf00]
87 mov r2, #0x80 @ size (AHB/APB) 84 str r4, [r3,#0x08]
88 mov r3, #CACHE_NONE 85 str r4, [r3,#0x0c]
89 bl map_section 86 str r0, [r1,#0x14]
90 87 str r0, [r2,#0x14]
91 bl enable_mmu 88
92
93 mrc 15, 0, r0, c1, c0, 0
94 orr r0, r0, #0x5
95 orr r0, r0, #0x1000
96 mcr 15, 0, r0, c1, c0, 0 // re-enable protection unit and caches
97
98 ldr r1, =0x38e00000
99 add r2, r1, #0x00001000
100 add r3, r1, #0x00002000
101 sub r4, r0, #1
102 str r4, [r1,#0x14]
103 str r4, [r2,#0x14]
104 str r4, [r1,#0xf00]
105 str r4, [r2,#0xf00]
106 str r4, [r3,#0x08]
107 str r4, [r3,#0x0c]
108 str r0, [r1,#0x14]
109 str r0, [r2,#0x14]
110
111#if !defined(BOOTLOADER) 89#if !defined(BOOTLOADER)
90 bl memory_init
91
112 /* Copy interrupt vectors to iram */ 92 /* Copy interrupt vectors to iram */
113 ldr r2, =_intvectstart 93 ldr r2, =_intvectstart
114 ldr r3, =_intvectend 94 ldr r3, =_intvectend
@@ -139,7 +119,7 @@ start_loc:
139 ldrhi r1, [r4], #4 119 ldrhi r1, [r4], #4
140 strhi r1, [r2], #4 120 strhi r1, [r2], #4
141 bhi 1b 121 bhi 1b
142 122
143 /* Initialise ibss section to zero */ 123 /* Initialise ibss section to zero */
144 ldr r2, =_iedata 124 ldr r2, =_iedata
145 ldr r3, =_iend 125 ldr r3, =_iend
@@ -150,11 +130,11 @@ start_loc:
150 bhi 1b 130 bhi 1b
151#endif 131#endif
152 132
153 /* Set up stack for IRQ mode */ 133 /* Set up stack for IRQ mode */
154 msr cpsr_c, #0xd2 134 msr cpsr_c, #0xd2
155 ldr sp, =_irqstackend 135 ldr sp, =_irqstackend
156 136
157 /* Set up stack for FIQ mode */ 137 /* Set up stack for FIQ mode */
158 msr cpsr_c, #0xd1 138 msr cpsr_c, #0xd1
159 ldr sp, =_fiqstackend 139 ldr sp, =_fiqstackend
160 140
@@ -178,4 +158,4 @@ start_loc:
178 strhi r3, [r2], #4 158 strhi r3, [r2], #4
179 bhi 1b 159 bhi 1b
180 160
181 bl main 161 b main