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