aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/mach-bf527
diff options
context:
space:
mode:
authorMike Frysinger <vapier.adi@gmail.com>2008-08-06 05:23:50 -0400
committerBryan Wu <cooloney@kernel.org>2008-08-06 05:23:50 -0400
commit17e89bcfa12f71b840361da07fe6c2f9c48d0605 (patch)
treec5ab94b397bcdfc5ffe0363f24ff83e012e8801a /arch/blackfin/mach-bf527
parent67618fd8748a5d83f6bdcd578c8e748c3f47c4d4 (diff)
Blackfin arch: unify the duplicated portions of __start and split mach-specific pieces into _mach_early_start where they will be easier to trim over time
Signed-off-by: Mike Frysinger <vapier.adi@gmail.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
Diffstat (limited to 'arch/blackfin/mach-bf527')
-rw-r--r--arch/blackfin/mach-bf527/head.S132
1 files changed, 3 insertions, 129 deletions
diff --git a/arch/blackfin/mach-bf527/head.S b/arch/blackfin/mach-bf527/head.S
index 9173dcecd158..af20183d0d94 100644
--- a/arch/blackfin/mach-bf527/head.S
+++ b/arch/blackfin/mach-bf527/head.S
@@ -30,93 +30,16 @@
30#include <linux/linkage.h> 30#include <linux/linkage.h>
31#include <linux/init.h> 31#include <linux/init.h>
32#include <asm/blackfin.h> 32#include <asm/blackfin.h>
33#include <asm/trace.h>
34
35#ifdef CONFIG_BFIN_KERNEL_CLOCK 33#ifdef CONFIG_BFIN_KERNEL_CLOCK
36#include <asm/mach-common/clocks.h> 34#include <asm/mach-common/clocks.h>
37#include <asm/mach/mem_init.h> 35#include <asm/mach/mem_init.h>
38#endif 36#endif
39 37
40.extern ___bss_stop
41.extern ___bss_start
42.extern _bf53x_relocate_l1_mem 38.extern _bf53x_relocate_l1_mem
43 39
44#define INITIAL_STACK 0xFFB01000
45
46__INIT 40__INIT
47 41
48ENTRY(__start) 42ENTRY(_mach_early_start)
49 /* R0: argument of command line string, passed from uboot, save it */
50 R7 = R0;
51 /* Enable Cycle Counter and Nesting Of Interrupts */
52#ifdef CONFIG_BFIN_SCRATCH_REG_CYCLES
53 R0 = SYSCFG_SNEN;
54#else
55 R0 = SYSCFG_SNEN | SYSCFG_CCEN;
56#endif
57 SYSCFG = R0;
58 R0 = 0;
59
60 /* Clear Out All the data and pointer Registers */
61 R1 = R0;
62 R2 = R0;
63 R3 = R0;
64 R4 = R0;
65 R5 = R0;
66 R6 = R0;
67
68 P0 = R0;
69 P1 = R0;
70 P2 = R0;
71 P3 = R0;
72 P4 = R0;
73 P5 = R0;
74
75 LC0 = r0;
76 LC1 = r0;
77 L0 = r0;
78 L1 = r0;
79 L2 = r0;
80 L3 = r0;
81
82 /* Clear Out All the DAG Registers */
83 B0 = r0;
84 B1 = r0;
85 B2 = r0;
86 B3 = r0;
87
88 I0 = r0;
89 I1 = r0;
90 I2 = r0;
91 I3 = r0;
92
93 M0 = r0;
94 M1 = r0;
95 M2 = r0;
96 M3 = r0;
97
98 trace_buffer_init(p0,r0);
99 P0 = R1;
100 R0 = R1;
101
102 /* Turn off the icache */
103 p0.l = LO(IMEM_CONTROL);
104 p0.h = HI(IMEM_CONTROL);
105 R1 = [p0];
106 R0 = ~ENICPLB;
107 R0 = R0 & R1;
108 [p0] = R0;
109 SSYNC;
110
111 /* Turn off the dcache */
112 p0.l = LO(DMEM_CONTROL);
113 p0.h = HI(DMEM_CONTROL);
114 R1 = [p0];
115 R0 = ~ENDCPLB;
116 R0 = R0 & R1;
117 [p0] = R0;
118 SSYNC;
119
120#if defined(CONFIG_BF527) 43#if defined(CONFIG_BF527)
121 p0.h = hi(EMAC_SYSTAT); 44 p0.h = hi(EMAC_SYSTAT);
122 p0.l = lo(EMAC_SYSTAT); 45 p0.l = lo(EMAC_SYSTAT);
@@ -152,57 +75,8 @@ ENTRY(__start)
152 w[p0] = r0.L; /* To enable UART clock */ 75 w[p0] = r0.L; /* To enable UART clock */
153 ssync; 76 ssync;
154 77
155 /* Initialize stack pointer */ 78 rts;
156 sp.l = lo(INITIAL_STACK); 79ENDPROC(_mach_early_start)
157 sp.h = hi(INITIAL_STACK);
158 fp = sp;
159 usp = sp;
160
161#ifdef CONFIG_EARLY_PRINTK
162 SP += -12;
163 call _init_early_exception_vectors;
164 SP += 12;
165#endif
166
167 /* Put The Code for PLL Programming and SDRAM Programming in L1 ISRAM */
168 call _bf53x_relocate_l1_mem;
169#ifdef CONFIG_BFIN_KERNEL_CLOCK
170 call _start_dma_code;
171#endif
172
173 /* This section keeps the processor in supervisor mode
174 * during kernel boot. Switches to user mode at end of boot.
175 * See page 3-9 of Hardware Reference manual for documentation.
176 */
177
178 /* EVT15 = _real_start */
179
180 p0.l = lo(EVT15);
181 p0.h = hi(EVT15);
182 p1.l = _real_start;
183 p1.h = _real_start;
184 [p0] = p1;
185 csync;
186
187 p0.l = lo(IMASK);
188 p0.h = hi(IMASK);
189 p1.l = IMASK_IVG15;
190 p1.h = 0x0;
191 [p0] = p1;
192 csync;
193
194 raise 15;
195 p0.l = .LWAIT_HERE;
196 p0.h = .LWAIT_HERE;
197 reti = p0;
198#if ANOMALY_05000281
199 nop; nop; nop;
200#endif
201 rti;
202
203.LWAIT_HERE:
204 jump .LWAIT_HERE;
205ENDPROC(__start)
206 80
207__FINIT 81__FINIT
208 82