s3c2410_vector.S revision 1.1 1 1.1 mycroft /* $NetBSD: s3c2410_vector.S,v 1.1 2003/09/03 03:18:30 mycroft Exp $ */
2 1.1 mycroft
3 1.1 mycroft /*
4 1.1 mycroft * Copyright (c) 2003 By Noon Software, Inc. All rights reserved.
5 1.1 mycroft *
6 1.1 mycroft * Redistribution and use in source and binary forms, with or without
7 1.1 mycroft * modification, are permitted provided that the following conditions
8 1.1 mycroft * are met:
9 1.1 mycroft * 1. Redistributions of source code must retain the above copyright
10 1.1 mycroft * notice, this list of conditions and the following disclaimer.
11 1.1 mycroft * 2. Redistributions in binary form must reproduce the above copyright
12 1.1 mycroft * notice, this list of conditions and the following disclaimer in the
13 1.1 mycroft * documentation and/or other materials provided with the distribution.
14 1.1 mycroft * 3. The names of the authors may not be used to endorse or promote products
15 1.1 mycroft * derived from this software without specific prior written permission.
16 1.1 mycroft *
17 1.1 mycroft * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
18 1.1 mycroft * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 1.1 mycroft * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 1.1 mycroft * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21 1.1 mycroft * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 1.1 mycroft * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 1.1 mycroft * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 1.1 mycroft * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 1.1 mycroft * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 1.1 mycroft * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 1.1 mycroft */
28 1.1 mycroft
29 1.1 mycroft /*
30 1.1 mycroft * Vector and initialize for S3C2410 based systems.
31 1.1 mycroft */
32 1.1 mycroft
33 1.1 mycroft #include <machine/asm.h>
34 1.1 mycroft #include <arm/armreg.h>
35 1.1 mycroft #include <arm/s3c2xx0/s3c2410reg.h>
36 1.1 mycroft
37 1.1 mycroft
38 1.1 mycroft #define TEMP_STACK_SIZE (4*1024)
39 1.1 mycroft
40 1.1 mycroft .code 32
41 1.1 mycroft .section ".vectors"
42 1.1 mycroft
43 1.1 mycroft reset_vector:
44 1.1 mycroft b __reset_entry
45 1.1 mycroft undef:
46 1.1 mycroft b .
47 1.1 mycroft swi:
48 1.1 mycroft b .
49 1.1 mycroft abrtp:
50 1.1 mycroft b .
51 1.1 mycroft abrtd:
52 1.1 mycroft b .
53 1.1 mycroft resv:
54 1.1 mycroft b .
55 1.1 mycroft irq:
56 1.1 mycroft b .
57 1.1 mycroft fiq:
58 1.1 mycroft b .
59 1.1 mycroft
60 1.1 mycroft /*
61 1.1 mycroft * Normally this code lives on ROM and runs immediately after reset, but
62 1.1 mycroft * it may run on RAM and/or be called after system has been initialized.
63 1.1 mycroft */
64 1.1 mycroft __reset_entry:
65 1.1 mycroft mrs r0, cpsr
66 1.1 mycroft /* SVC mode, Disable interrupts */
67 1.1 mycroft bic r0, r0, #PSR_MODE
68 1.1 mycroft orr r0, r0, #(I32_bit|F32_bit|PSR_SVC32_MODE)
69 1.1 mycroft msr cpsr, r0
70 1.1 mycroft
71 1.1 mycroft /* Disable MMU, Disable cache */
72 1.1 mycroft mrc p15, 0, r10, c1, c0, 0
73 1.1 mycroft ldr r0, =(CPU_CONTROL_MMU_ENABLE|CPU_CONTROL_DC_ENABLE|CPU_CONTROL_IC_ENABLE)
74 1.1 mycroft bic r10, r10, r0
75 1.1 mycroft mcr p15, 0, r10, c1, c0, 0
76 1.1 mycroft nop
77 1.1 mycroft nop
78 1.1 mycroft nop
79 1.1 mycroft
80 1.1 mycroft /* invalidate I-cache */
81 1.1 mycroft mcr p15, 0, r2, c7, c5, 0
82 1.1 mycroft nop
83 1.1 mycroft nop
84 1.1 mycroft nop
85 1.1 mycroft
86 1.1 mycroft /* Enable I-cache */
87 1.1 mycroft orr r10, r10, #CPU_CONTROL_IC_ENABLE
88 1.1 mycroft mcr p15, 0, r10, c1, c0, 0
89 1.1 mycroft nop
90 1.1 mycroft nop
91 1.1 mycroft nop
92 1.1 mycroft
93 1.1 mycroft /* Stop WDT */
94 1.1 mycroft ldr r0, Lwdt_wtcon_addr
95 1.1 mycroft mov r1, #WTCON_WDTSTOP
96 1.1 mycroft str r1, [r0]
97 1.1 mycroft
98 1.1 mycroft /* Disable all interrupts */
99 1.1 mycroft ldr r0, Lintctl_intmsk_addr
100 1.1 mycroft mov r1, #0x0
101 1.1 mycroft str r1, [r0]
102 1.1 mycroft
103 1.1 mycroft ldr r9, =S3C2410_GPIO_BASE
104 1.1 mycroft /* LEDs on SMDK2410 */
105 1.1 mycroft mov r1, #0x5500
106 1.1 mycroft str r1, [r9, #GPIO_PFCON]
107 1.1 mycroft mov r1, #0xe0
108 1.1 mycroft str r1, [r9, #GPIO_PFDAT]
109 1.1 mycroft
110 1.1 mycroft mov r0, pc
111 1.1 mycroft cmp r0, #S3C2410_SDRAM_START
112 1.1 mycroft bhs running_on_ram
113 1.1 mycroft
114 1.1 mycroft ldr r8, =S3C2410_CLKMAN_BASE
115 1.1 mycroft ldr r1, [r8,#CLKMAN_CLKDIVN]
116 1.1 mycroft orr r1, r1, #CLKDIVN_HDIVN|CLKDIVN_PDIVN
117 1.1 mycroft str r1, [r8,#CLKMAN_CLKDIVN]
118 1.1 mycroft
119 1.1 mycroft ldr r1, Lclkman_locktime_data
120 1.1 mycroft str r1, [r8,#CLKMAN_LOCKTIME]
121 1.1 mycroft
122 1.1 mycroft /* Initialize PLL */
123 1.1 mycroft ldr r1, Lclkman_mpllcon_data
124 1.1 mycroft str r1, [r8,#CLKMAN_MPLLCON]
125 1.1 mycroft ldr r1, Lclkman_upllcon_data
126 1.1 mycroft str r1, [r8,#CLKMAN_UPLLCON]
127 1.1 mycroft
128 1.1 mycroft ldr r9, =S3C2410_GPIO_BASE
129 1.1 mycroft mov r1, #0xd0
130 1.1 mycroft str r1, [r9, #GPIO_PFDAT]
131 1.1 mycroft
132 1.1 mycroft #ifdef RAM_INIT_HOOK
133 1.1 mycroft bl RAM_INIT_HOOK
134 1.1 mycroft #endif
135 1.1 mycroft
136 1.1 mycroft running_on_ram:
137 1.1 mycroft /* Change Bus mode to Sync */
138 1.1 mycroft mrc p15, 0, r0, c1, c0, 0
139 1.1 mycroft bic r0, r0, #(1<<31) /* unset iA bit */
140 1.1 mycroft orr r0, r0, #(1<<30) /* set nF bit */
141 1.1 mycroft mcr p15, 0, r0, c1, c0, 0
142 1.1 mycroft nop
143 1.1 mycroft nop
144 1.1 mycroft nop
145 1.1 mycroft
146 1.1 mycroft ldr r9, =S3C2410_GPIO_BASE
147 1.1 mycroft mov r1, #0xb0
148 1.1 mycroft str r1, [r9, #GPIO_PFDAT]
149 1.1 mycroft
150 1.1 mycroft /* set temporary stack */
151 1.1 mycroft adr sp, reset_vector
152 1.1 mycroft /* do we have a room below? */
153 1.1 mycroft ldr r1, =(S3C2410_SDRAM_START+TEMP_STACK_SIZE)
154 1.1 mycroft cmp sp, r1
155 1.1 mycroft /* otherwise use top area of RAM */
156 1.1 mycroft ldrlo sp, =(S3C2410_SDRAM_START+SDRAM_SIZE)
157 1.1 mycroft
158 1.1 mycroft #ifdef IO_INIT_HOOK
159 1.1 mycroft bl IO_INIT_HOOK
160 1.1 mycroft #endif
161 1.1 mycroft
162 1.1 mycroft ldr r9, =S3C2410_GPIO_BASE
163 1.1 mycroft mov r1, #0x70
164 1.1 mycroft str r1, [r9, #GPIO_PFDAT]
165 1.1 mycroft
166 1.1 mycroft b start
167 1.1 mycroft
168 1.1 mycroft Lwdt_wtcon_addr:
169 1.1 mycroft .word (S3C2410_WDT_BASE + WDT_WTCON)
170 1.1 mycroft
171 1.1 mycroft Lintctl_intmsk_addr:
172 1.1 mycroft .word (S3C2410_INTCTL_BASE + INTCTL_INTMSK)
173 1.1 mycroft
174 1.1 mycroft .ltorg
175 1.1 mycroft
176 1.1 mycroft Lclkman_locktime_data:
177 1.1 mycroft .word (0xffffff)
178 1.1 mycroft
179 1.1 mycroft Lclkman_mpllcon_data:
180 1.1 mycroft #if XTAL_CLK == 12000000 && FCLK == 180000000
181 1.1 mycroft .word 0x00052011 /* M=82, P=1, S=1 */
182 1.1 mycroft #else
183 1.1 mycroft #error illegal XTAL_CLK/FCLK combination
184 1.1 mycroft #endif
185 1.1 mycroft Lclkman_upllcon_data:
186 1.1 mycroft .word 0x00078023 /* M=120, P=2, S=3 */
187