]> git.sur5r.net Git - u-boot/blob - cpu/s3c44b0/cpu.c
752191dc4d8b9b7f073d373c3fa44fb34c30b2fc
[u-boot] / cpu / s3c44b0 / cpu.c
1 /*
2  * (C) Copyright 2004
3  * DAVE Srl
4  * http://www.dave-tech.it
5  * http://www.wawnet.biz
6  * mailto:info@wawnet.biz
7  *
8  * See file CREDITS for list of people who contributed to this
9  * project.
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License as
13  * published by the Free Software Foundation; either version 2 of
14  * the License, or (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
24  * MA 02111-1307 USA
25  */
26
27 /*
28  * S3C44B0 CPU specific code
29  */
30
31 #include <common.h>
32 #include <command.h>
33 #include <asm/hardware.h>
34
35 static void s3c44b0_flush_cache(void)
36 {
37         volatile int i;
38         /* flush cycle */
39         for(i=0x10002000;i<0x10004800;i+=16)
40         {
41                 *((int *)i)=0x0;
42         }
43 }
44
45
46 int cpu_init (void)
47 {
48         icache_enable();
49
50         return 0;
51 }
52
53 int cleanup_before_linux (void)
54 {
55         /*
56                 cache memory should be enabled before calling
57                 Linux to make the kernel uncompression faster
58         */
59         icache_enable();
60
61         disable_interrupts ();
62
63         return 0;
64 }
65
66 void reset_cpu (ulong addr)
67 {
68         /*
69                 reset the cpu using watchdog
70         */
71
72         /* Disable the watchdog.*/
73         WTCON&=~(1<<5);
74
75         /* set the timeout value to a short time... */
76         WTCNT = 0x1;
77
78         /* Enable the watchdog. */
79         WTCON|=1;
80         WTCON|=(1<<5);
81
82         while(1) {
83                 /*NOP*/
84         }
85 }
86
87 int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
88 {
89         disable_interrupts ();
90         reset_cpu (0);
91
92         /*NOTREACHED*/
93         return (0);
94 }
95
96 void icache_enable (void)
97 {
98         ulong reg;
99
100         s3c44b0_flush_cache();
101
102         /*
103                 Init cache
104                 Non-cacheable area (everything outside RAM)
105                 0x0000:0000 - 0x0C00:0000
106          */
107         NCACHBE0 = 0xC0000000;
108         NCACHBE1 = 0x00000000;
109
110         /*
111                 Enable chache
112         */
113         reg = SYSCFG;
114         reg |= 0x00000006; /* 8kB */
115         SYSCFG = reg;
116 }
117
118 void icache_disable (void)
119 {
120         ulong reg;
121
122         reg = SYSCFG;
123         reg &= ~0x00000006; /* 8kB */
124         SYSCFG = reg;
125 }
126
127 int icache_status (void)
128 {
129         return 0;
130 }
131
132 void dcache_enable (void)
133 {
134         icache_enable();
135 }
136
137 void dcache_disable (void)
138 {
139         icache_disable();
140 }
141
142 int dcache_status (void)
143 {
144         return dcache_status();
145 }