blob: f1864d6317f4a3b2fd56e2d224d3387cb4cdbd7a [file] [log] [blame]
wdenkbd1575f2003-10-14 19:43:55 +00001/*
2 * (C) Copyright 2002
3 * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
4 * Marius Groeger <mgroeger@sysgo.de>
5 *
6 * (C) Copyright 2002
7 * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
8 * Alex Zuepke <azu@sysgo.de>
9 *
10 * See file CREDITS for list of people who contributed to this
11 * project.
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License as
15 * published by the Free Software Foundation; either version 2 of
16 * the License, or (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
26 * MA 02111-1307 USA
27 */
28
29/*
30 * CPU specific code
31 */
32
33#include <common.h>
34#include <command.h>
Ben Warren3ead27f2008-09-05 01:55:22 -040035#include <netdev.h>
wdenkbd1575f2003-10-14 19:43:55 +000036#include <asm/arch/ixp425.h>
Jean-Christophe PLAGNIOL-VILLARD9053b5a2009-04-05 13:02:43 +020037#include <asm/system.h>
wdenkbd1575f2003-10-14 19:43:55 +000038
Jean-Christophe PLAGNIOL-VILLARDe6b5f1b2009-04-05 13:06:31 +020039static void cache_flush(void);
40
Wolfgang Denk4646d2a2006-05-30 15:56:48 +020041#if defined(CONFIG_DISPLAY_CPUINFO)
42int print_cpuinfo (void)
43{
44 unsigned long id;
45 int speed = 0;
46
47 asm ("mrc p15, 0, %0, c0, c0, 0":"=r" (id));
48
49 puts("CPU: Intel IXP425 at ");
50 switch ((id & 0x000003f0) >> 4) {
51 case 0x1c:
Wolfgang Denk4646d2a2006-05-30 15:56:48 +020052 speed = 533;
53 break;
54
55 case 0x1d:
Wolfgang Denk4646d2a2006-05-30 15:56:48 +020056 speed = 400;
57 break;
58
59 case 0x1f:
Wolfgang Denk4646d2a2006-05-30 15:56:48 +020060 speed = 266;
61 break;
62 }
63
64 if (speed)
65 printf("%d MHz\n", speed);
66 else
67 puts("unknown revision\n");
68
69 return 0;
70}
71#endif /* CONFIG_DISPLAY_CPUINFO */
72
wdenkbd1575f2003-10-14 19:43:55 +000073int cleanup_before_linux (void)
74{
75 /*
76 * this function is called just before we call linux
77 * it prepares the processor for linux
78 *
79 * just disable everything that can disturb booting linux
80 */
81
wdenkbd1575f2003-10-14 19:43:55 +000082 disable_interrupts ();
83
84 /* turn off I-cache */
Jean-Christophe PLAGNIOL-VILLARDe6b5f1b2009-04-05 13:06:31 +020085 icache_disable();
86 dcache_disable();
wdenkbd1575f2003-10-14 19:43:55 +000087
88 /* flush I-cache */
Jean-Christophe PLAGNIOL-VILLARDe6b5f1b2009-04-05 13:06:31 +020089 cache_flush();
wdenkbd1575f2003-10-14 19:43:55 +000090
Jean-Christophe PLAGNIOL-VILLARDe6b5f1b2009-04-05 13:06:31 +020091 return 0;
wdenkbd1575f2003-10-14 19:43:55 +000092}
93
Jean-Christophe PLAGNIOL-VILLARDe6b5f1b2009-04-05 13:06:31 +020094/* flush I/D-cache */
95static void cache_flush (void)
wdenkbd1575f2003-10-14 19:43:55 +000096{
Jean-Christophe PLAGNIOL-VILLARDe6b5f1b2009-04-05 13:06:31 +020097 unsigned long i = 0;
wdenkbd1575f2003-10-14 19:43:55 +000098
Jean-Christophe PLAGNIOL-VILLARDe6b5f1b2009-04-05 13:06:31 +020099 asm ("mcr p15, 0, %0, c7, c5, 0": :"r" (i));
wdenkbd1575f2003-10-14 19:43:55 +0000100}
101
102/* FIXME */
wdenk26c58432005-01-09 17:12:27 +0000103/*
wdenkbd1575f2003-10-14 19:43:55 +0000104void pci_init(void)
105{
106 return;
107}
wdenk26c58432005-01-09 17:12:27 +0000108*/
Wolfgang Denk4646d2a2006-05-30 15:56:48 +0200109
Ben Warren3ead27f2008-09-05 01:55:22 -0400110int cpu_eth_init(bd_t *bis)
111{
112#ifdef CONFIG_IXP4XX_NPE
113 npe_initialize(bis);
114#endif
115 return 0;
116}