1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <common.h>
17#include <init.h>
18#include <net.h>
19#include <vsprintf.h>
20#include <watchdog.h>
21#include <command.h>
22#include <asm/global_data.h>
23#include <asm/immap.h>
24#include <asm/io.h>
25#include <netdev.h>
26#include <linux/delay.h>
27#include "cpu.h"
28
29DECLARE_GLOBAL_DATA_PTR;
30
31#ifdef CONFIG_M5208
32int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
33{
34 rcm_t *rcm = (rcm_t *)(MMAP_RCM);
35
36 udelay(1000);
37
38 out_8(&rcm->rcr, RCM_RCR_SOFTRST);
39
40
41 return 0;
42};
43
44#if defined(CONFIG_DISPLAY_CPUINFO)
45int print_cpuinfo(void)
46{
47 char buf1[32], buf2[32];
48
49 printf("CPU: Freescale Coldfire MCF5208\n"
50 " CPU CLK %s MHz BUS CLK %s MHz\n",
51 strmhz(buf1, gd->cpu_clk),
52 strmhz(buf2, gd->bus_clk));
53 return 0;
54};
55#endif
56
57#if defined(CONFIG_WATCHDOG)
58
59void watchdog_reset(void)
60{
61 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
62
63 out_be16(&wdt->sr, 0x5555);
64 out_be16(&wdt->sr, 0xaaaa);
65}
66
67int watchdog_disable(void)
68{
69 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
70
71
72 out_be16(&wdt->sr, 0x5555);
73 out_be16(&wdt->sr, 0xaaaa);
74
75 out_be16(&wdt->cr, 0);
76
77 puts("WATCHDOG:disabled\n");
78 return (0);
79}
80
81int watchdog_init(void)
82{
83 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
84
85
86 out_be16(&wdt->cr, 0);
87
88
89 out_be16(&wdt->mr,
90 (CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
91
92
93 out_be16(&wdt->sr, 0x5555);
94 out_be16(&wdt->sr, 0xaaaa);
95
96 puts("WATCHDOG:enabled\n");
97 return (0);
98}
99#endif
100#endif
101
102#ifdef CONFIG_M5271
103#if defined(CONFIG_DISPLAY_CPUINFO)
104
105
106
107
108
109int print_cpuinfo(void)
110{
111 char buf[32];
112 unsigned short cir;
113 unsigned short pin;
114 unsigned char prn;
115 char *cpu_model;
116
117 cir = mbar_readShort(MCF_CCM_CIR);
118 pin = cir >> MCF_CCM_CIR_PIN_LEN;
119 prn = cir & MCF_CCM_CIR_PRN_MASK;
120
121 switch (pin) {
122 case MCF_CCM_CIR_PIN_MCF5270:
123 cpu_model = "5270";
124 break;
125 case MCF_CCM_CIR_PIN_MCF5271:
126 cpu_model = "5271";
127 break;
128 default:
129 cpu_model = NULL;
130 break;
131 }
132
133 if (cpu_model)
134 printf("CPU: Freescale ColdFire MCF%s rev. %hu, at %s MHz\n",
135 cpu_model, prn, strmhz(buf, CONFIG_SYS_CLK));
136 else
137 printf("CPU: Unknown - Freescale ColdFire MCF5271 family"
138 " (PIN: 0x%x) rev. %hu, at %s MHz\n",
139 pin, prn, strmhz(buf, CONFIG_SYS_CLK));
140
141 return 0;
142}
143#endif
144
145int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
146{
147
148 if(board_reset) {
149 board_reset();
150 }
151
152 mbar_writeByte(MCF_RCM_RCR,
153 MCF_RCM_RCR_SOFTRST | MCF_RCM_RCR_FRCRSTOUT);
154 return 0;
155};
156
157#if defined(CONFIG_WATCHDOG)
158void watchdog_reset(void)
159{
160 mbar_writeShort(MCF_WTM_WSR, 0x5555);
161 mbar_writeShort(MCF_WTM_WSR, 0xAAAA);
162}
163
164int watchdog_disable(void)
165{
166 mbar_writeShort(MCF_WTM_WCR, 0);
167 return (0);
168}
169
170int watchdog_init(void)
171{
172 mbar_writeShort(MCF_WTM_WCR, MCF_WTM_WCR_EN);
173 return (0);
174}
175#endif
176
177#endif
178
179#ifdef CONFIG_M5272
180int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
181{
182 wdog_t *wdp = (wdog_t *) (MMAP_WDOG);
183
184 out_be16(&wdp->wdog_wrrr, 0);
185 udelay(1000);
186
187
188 out_be16(&wdp->wdog_wrrr, 1);
189 while (1) ;
190
191
192 return 0;
193};
194
195#if defined(CONFIG_DISPLAY_CPUINFO)
196int print_cpuinfo(void)
197{
198 sysctrl_t *sysctrl = (sysctrl_t *) (MMAP_CFG);
199 uchar msk;
200 char *suf;
201
202 puts("CPU: ");
203 msk = (in_be32(&sysctrl->sc_dir) > 28) & 0xf;
204 switch (msk) {
205 case 0x2:
206 suf = "1K75N";
207 break;
208 case 0x4:
209 suf = "3K75N";
210 break;
211 default:
212 suf = NULL;
213 printf("Freescale MCF5272 (Mask:%01x)\n", msk);
214 break;
215 }
216
217 if (suf)
218 printf("Freescale MCF5272 %s\n", suf);
219 return 0;
220};
221#endif
222
223#if defined(CONFIG_WATCHDOG)
224
225void watchdog_reset(void)
226{
227 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
228
229 out_be16(&wdt->wdog_wcr, 0);
230}
231
232int watchdog_disable(void)
233{
234 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
235
236
237 out_be16(&wdt->wdog_wcr, 0);
238
239 out_be16(&wdt->wdog_wirr, 0);
240
241 out_be16(&wdt->wdog_wrrr, 0);
242
243 puts("WATCHDOG:disabled\n");
244 return (0);
245}
246
247int watchdog_init(void)
248{
249 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
250
251
252 out_be16(&wdt->wdog_wirr, 0);
253
254
255 out_be16(&wdt->wdog_wrrr,
256 (CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
257
258
259 out_be16(&wdt->wdog_wcr, 0);
260
261 puts("WATCHDOG:enabled\n");
262 return (0);
263}
264#endif
265
266#endif
267
268#ifdef CONFIG_M5275
269int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
270{
271 rcm_t *rcm = (rcm_t *)(MMAP_RCM);
272
273 udelay(1000);
274
275 out_8(&rcm->rcr, RCM_RCR_SOFTRST);
276
277
278 return 0;
279};
280
281#if defined(CONFIG_DISPLAY_CPUINFO)
282int print_cpuinfo(void)
283{
284 char buf[32];
285
286 printf("CPU: Freescale Coldfire MCF5275 at %s MHz\n",
287 strmhz(buf, CONFIG_SYS_CLK));
288 return 0;
289};
290#endif
291
292#if defined(CONFIG_WATCHDOG)
293
294void watchdog_reset(void)
295{
296 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
297
298 out_be16(&wdt->wsr, 0x5555);
299 out_be16(&wdt->wsr, 0xaaaa);
300}
301
302int watchdog_disable(void)
303{
304 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
305
306
307 out_be16(&wdt->wsr, 0x5555);
308 out_be16(&wdt->wsr, 0xaaaa);
309
310
311 out_be16(&wdt->wcr, 0);
312
313 puts("WATCHDOG:disabled\n");
314 return (0);
315}
316
317int watchdog_init(void)
318{
319 wdog_t *wdt = (wdog_t *)(MMAP_WDOG);
320
321
322 out_be16(&wdt->wcr, 0);
323
324
325 out_be16(&wdt->wmr,
326 (CONFIG_WATCHDOG_TIMEOUT * CONFIG_SYS_HZ) / (32768 * 1000) - 1);
327
328
329 out_be16(&wdt->wsr, 0x5555);
330 out_be16(&wdt->wsr, 0xaaaa);
331
332 puts("WATCHDOG:enabled\n");
333 return (0);
334}
335#endif
336
337#endif
338
339#ifdef CONFIG_M5282
340#if defined(CONFIG_DISPLAY_CPUINFO)
341int print_cpuinfo(void)
342{
343 unsigned char resetsource = MCFRESET_RSR;
344
345 printf("CPU: Freescale Coldfire MCF5282 (PIN: %2.2x REV: %2.2x)\n",
346 MCFCCM_CIR >> 8, MCFCCM_CIR & MCFCCM_CIR_PRN_MASK);
347 printf("Reset:%s%s%s%s%s%s%s\n",
348 (resetsource & MCFRESET_RSR_LOL) ? " Loss of Lock" : "",
349 (resetsource & MCFRESET_RSR_LOC) ? " Loss of Clock" : "",
350 (resetsource & MCFRESET_RSR_EXT) ? " External" : "",
351 (resetsource & MCFRESET_RSR_POR) ? " Power On" : "",
352 (resetsource & MCFRESET_RSR_WDR) ? " Watchdog" : "",
353 (resetsource & MCFRESET_RSR_SOFT) ? " Software" : "",
354 (resetsource & MCFRESET_RSR_LVD) ? " Low Voltage" : "");
355 return 0;
356}
357#endif
358
359int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
360{
361 MCFRESET_RCR = MCFRESET_RCR_SOFTRST;
362 return 0;
363};
364#endif
365
366#ifdef CONFIG_M5249
367#if defined(CONFIG_DISPLAY_CPUINFO)
368int print_cpuinfo(void)
369{
370 char buf[32];
371
372 printf("CPU: Freescale Coldfire MCF5249 at %s MHz\n",
373 strmhz(buf, CONFIG_SYS_CLK));
374 return 0;
375}
376#endif
377
378int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
379{
380
381 mbar_writeByte(MCFSIM_SYPCR, 0xc0);
382 while (1) ;
383
384
385 return 0;
386};
387#endif
388
389#ifdef CONFIG_M5253
390#if defined(CONFIG_DISPLAY_CPUINFO)
391int print_cpuinfo(void)
392{
393 char buf[32];
394
395 unsigned char resetsource = mbar_readLong(SIM_RSR);
396 printf("CPU: Freescale Coldfire MCF5253 at %s MHz\n",
397 strmhz(buf, CONFIG_SYS_CLK));
398
399 if ((resetsource & SIM_RSR_HRST) || (resetsource & SIM_RSR_SWTR)) {
400 printf("Reset:%s%s\n",
401 (resetsource & SIM_RSR_HRST) ? " Hardware/ System Reset"
402 : "",
403 (resetsource & SIM_RSR_SWTR) ? " Software Watchdog" :
404 "");
405 }
406 return 0;
407}
408#endif
409
410int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
411{
412
413 mbar_writeByte(SIM_SYPCR, 0xc0);
414 while (1) ;
415
416
417 return 0;
418};
419#endif
420
421#if defined(CONFIG_MCFFEC)
422
423
424
425
426
427int cpu_eth_init(struct bd_info *bis)
428{
429 return mcffec_initialize(bis);
430}
431#endif
432