]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - board/samsung/smdkc100/lowlevel_init.S
Merge branch 'master' of git://git.denx.de/u-boot-video
[karo-tx-uboot.git] / board / samsung / smdkc100 / lowlevel_init.S
1 /*
2  * Copyright (C) 2009 Samsung Electronics
3  * Kyungmin Park <kyungmin.park@samsung.com>
4  * Minkyu Kang <mk7.kang@samsung.com>
5  *
6  * See file CREDITS for list of people who contributed to this
7  * project.
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License as
11  * published by the Free Software Foundation; either version 2 of
12  * the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
22  * MA 02111-1307 USA
23  */
24
25 #include <config.h>
26 #include <version.h>
27 #include <asm/arch/cpu.h>
28 #include <asm/arch/power.h>
29
30 /*
31  * Register usages:
32  *
33  * r5 has zero always
34  */
35
36 _TEXT_BASE:
37         .word   CONFIG_SYS_TEXT_BASE
38
39         .globl lowlevel_init
40 lowlevel_init:
41         mov     r9, lr
42
43         /* r5 has always zero */
44         mov     r5, #0
45
46         ldr     r8, =S5PC100_GPIO_BASE
47
48         /* Disable Watchdog */
49         ldr     r0, =S5PC100_WATCHDOG_BASE              @0xEA200000
50         orr     r0, r0, #0x0
51         str     r5, [r0]
52
53         /* setting SRAM */
54         ldr     r0, =S5PC100_SROMC_BASE
55         ldr     r1, =0x9
56         str     r1, [r0]
57
58         /* S5PC100 has 3 groups of interrupt sources */
59         ldr     r0, =S5PC100_VIC0_BASE                  @0xE4000000
60         ldr     r1, =S5PC100_VIC1_BASE                  @0xE4000000
61         ldr     r2, =S5PC100_VIC2_BASE                  @0xE4000000
62
63         /* Disable all interrupts (VIC0, VIC1 and VIC2) */
64         mvn     r3, #0x0
65         str     r3, [r0, #0x14]                         @INTENCLEAR
66         str     r3, [r1, #0x14]                         @INTENCLEAR
67         str     r3, [r2, #0x14]                         @INTENCLEAR
68
69         /* Set all interrupts as IRQ */
70         str     r5, [r0, #0xc]                          @INTSELECT
71         str     r5, [r1, #0xc]                          @INTSELECT
72         str     r5, [r2, #0xc]                          @INTSELECT
73
74         /* Pending Interrupt Clear */
75         str     r5, [r0, #0xf00]                        @INTADDRESS
76         str     r5, [r1, #0xf00]                        @INTADDRESS
77         str     r5, [r2, #0xf00]                        @INTADDRESS
78
79         /* for UART */
80         bl uart_asm_init
81
82         /* for TZPC */
83         bl tzpc_asm_init
84
85 1:
86         mov     lr, r9
87         mov     pc, lr
88
89 /*
90  * system_clock_init: Initialize core clock and bus clock.
91  * void system_clock_init(void)
92  */
93 system_clock_init:
94         ldr     r8, =S5PC100_CLOCK_BASE         @ 0xE0100000
95
96         /* Set Clock divider */
97         ldr     r1, =0x00011110
98         str     r1, [r8, #0x304]
99         ldr     r1, =0x1
100         str     r1, [r8, #0x308]
101         ldr     r1, =0x00011301
102         str     r1, [r8, #0x300]
103
104         /* Set Lock Time */
105         ldr     r1, =0xe10                      @ Locktime : 0xe10 = 3600
106         str     r1, [r8, #0x000]                @ APLL_LOCK
107         str     r1, [r8, #0x004]                @ MPLL_LOCK
108         str     r1, [r8, #0x008]                @ EPLL_LOCK
109         str     r1, [r8, #0x00C]                @ HPLL_LOCK
110
111         /* APLL_CON */
112         ldr     r1, =0x81bc0400         @ SDIV 0, PDIV 4, MDIV 444 (1332MHz)
113         str     r1, [r8, #0x100]
114         /* MPLL_CON */
115         ldr     r1, =0x80590201         @ SDIV 1, PDIV 2, MDIV 89 (267MHz)
116         str     r1, [r8, #0x104]
117         /* EPLL_CON */
118         ldr     r1, =0x80870303         @ SDIV 3, PDIV 3, MDIV 135 (67.5MHz)
119         str     r1, [r8, #0x108]
120         /* HPLL_CON */
121         ldr     r1, =0x80600603
122         str     r1, [r8, #0x10C]
123
124         /* Set Source Clock */
125         ldr     r1, =0x1111                     @ A, M, E, HPLL Muxing
126         str     r1, [r8, #0x200]                @ CLK_SRC0
127
128         ldr     r1, =0x1000001                  @ Uart Clock & CLK48M Muxing
129         str     r1, [r8, #0x204]                @ CLK_SRC1
130
131         ldr     r1, =0x9000                     @ ARMCLK/4
132         str     r1, [r8, #0x400]                @ CLK_OUT
133
134         /* wait at least 200us to stablize all clock */
135         mov     r2, #0x10000
136 1:      subs    r2, r2, #1
137         bne     1b
138
139         mov     pc, lr
140
141 /*
142  * uart_asm_init: Initialize UART's pins
143  */
144 uart_asm_init:
145         mov     r0, r8
146         ldr     r1, =0x22222222
147         str     r1, [r0, #0x0]                  @ GPA0_CON
148         ldr     r1, =0x00022222
149         str     r1, [r0, #0x20]                 @ GPA1_CON
150
151         mov     pc, lr
152
153 /*
154  * tzpc_asm_init: Initialize TZPC
155  */
156 tzpc_asm_init:
157         ldr     r0, =0xE3800000
158         mov     r1, #0x0
159         str     r1, [r0]
160         mov     r1, #0xff
161         str     r1, [r0, #0x804]
162         str     r1, [r0, #0x810]
163
164         ldr     r0, =0xE2800000
165         str     r1, [r0, #0x804]
166         str     r1, [r0, #0x810]
167         str     r1, [r0, #0x81C]
168
169         ldr     r0, =0xE2900000
170         str     r1, [r0, #0x804]
171         str     r1, [r0, #0x810]
172
173         mov     pc, lr