hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
 * Copyright (C) 2009 Samsung Electronics
 * Kyungmin Park <kyungmin.park@samsung.com>
 * Minkyu Kang <mk7.kang@samsung.com>
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
 
#include <config.h>
#include <asm/arch/cpu.h>
#include <asm/arch/power.h>
 
/*
 * Register usages:
 *
 * r5 has zero always
 */
 
   .globl lowlevel_init
lowlevel_init:
   mov    r9, lr
 
   /* r5 has always zero */
   mov    r5, #0
 
   ldr    r8, =S5PC100_GPIO_BASE
 
   /* Disable Watchdog */
   ldr    r0, =S5PC100_WATCHDOG_BASE        @0xEA200000
   orr    r0, r0, #0x0
   str    r5, [r0]
 
   /* setting SRAM */
   ldr    r0, =S5PC100_SROMC_BASE
   ldr    r1, =0x9
   str    r1, [r0]
 
   /* S5PC100 has 3 groups of interrupt sources */
   ldr    r0, =S5PC100_VIC0_BASE            @0xE4000000
   ldr    r1, =S5PC100_VIC1_BASE            @0xE4000000
   ldr    r2, =S5PC100_VIC2_BASE            @0xE4000000
 
   /* Disable all interrupts (VIC0, VIC1 and VIC2) */
   mvn    r3, #0x0
   str    r3, [r0, #0x14]                @INTENCLEAR
   str    r3, [r1, #0x14]                @INTENCLEAR
   str    r3, [r2, #0x14]                @INTENCLEAR
 
   /* Set all interrupts as IRQ */
   str    r5, [r0, #0xc]                @INTSELECT
   str    r5, [r1, #0xc]                @INTSELECT
   str    r5, [r2, #0xc]                @INTSELECT
 
   /* Pending Interrupt Clear */
   str    r5, [r0, #0xf00]            @INTADDRESS
   str    r5, [r1, #0xf00]            @INTADDRESS
   str    r5, [r2, #0xf00]            @INTADDRESS
 
   /* for UART */
   bl uart_asm_init
 
   /* for TZPC */
   bl tzpc_asm_init
 
1:
   mov    lr, r9
   mov    pc, lr
 
/*
 * system_clock_init: Initialize core clock and bus clock.
 * void system_clock_init(void)
 */
system_clock_init:
   ldr    r8, =S5PC100_CLOCK_BASE        @ 0xE0100000
 
   /* Set Clock divider */
   ldr    r1, =0x00011110
   str    r1, [r8, #0x304]
   ldr    r1, =0x1
   str    r1, [r8, #0x308]
   ldr    r1, =0x00011301
   str    r1, [r8, #0x300]
 
   /* Set Lock Time */
   ldr    r1, =0xe10            @ Locktime : 0xe10 = 3600
   str    r1, [r8, #0x000]        @ APLL_LOCK
   str    r1, [r8, #0x004]        @ MPLL_LOCK
   str    r1, [r8, #0x008]        @ EPLL_LOCK
   str    r1, [r8, #0x00C]        @ HPLL_LOCK
 
   /* APLL_CON */
   ldr    r1, =0x81bc0400        @ SDIV 0, PDIV 4, MDIV 444 (1332MHz)
   str    r1, [r8, #0x100]
   /* MPLL_CON */
   ldr    r1, =0x80590201        @ SDIV 1, PDIV 2, MDIV 89 (267MHz)
   str    r1, [r8, #0x104]
   /* EPLL_CON */
   ldr    r1, =0x80870303        @ SDIV 3, PDIV 3, MDIV 135 (67.5MHz)
   str    r1, [r8, #0x108]
   /* HPLL_CON */
   ldr    r1, =0x80600603
   str    r1, [r8, #0x10C]
 
   /* Set Source Clock */
   ldr    r1, =0x1111            @ A, M, E, HPLL Muxing
   str    r1, [r8, #0x200]        @ CLK_SRC0
 
   ldr    r1, =0x1000001            @ Uart Clock & CLK48M Muxing
   str    r1, [r8, #0x204]        @ CLK_SRC1
 
   ldr    r1, =0x9000            @ ARMCLK/4
   str    r1, [r8, #0x400]        @ CLK_OUT
 
   /* wait at least 200us to stablize all clock */
   mov    r2, #0x10000
1:    subs    r2, r2, #1
   bne    1b
 
   mov    pc, lr
 
/*
 * uart_asm_init: Initialize UART's pins
 */
uart_asm_init:
   mov    r0, r8
   ldr    r1, =0x22222222
   str    r1, [r0, #0x0]            @ GPA0_CON
   ldr    r1, =0x00022222
   str    r1, [r0, #0x20]            @ GPA1_CON
 
   mov    pc, lr
 
/*
 * tzpc_asm_init: Initialize TZPC
 */
tzpc_asm_init:
   ldr    r0, =0xE3800000
   mov    r1, #0x0
   str    r1, [r0]
   mov    r1, #0xff
   str    r1, [r0, #0x804]
   str    r1, [r0, #0x810]
 
   ldr    r0, =0xE2800000
   str    r1, [r0, #0x804]
   str    r1, [r0, #0x810]
   str    r1, [r0, #0x81C]
 
   ldr    r0, =0xE2900000
   str    r1, [r0, #0x804]
   str    r1, [r0, #0x810]
 
   mov    pc, lr