]> git.ipfire.org Git - thirdparty/u-boot.git/blame - board/dave/PPChameleonEVB/PPChameleonEVB.c
Add GPL-2.0+ SPDX-License-Identifier to source files
[thirdparty/u-boot.git] / board / dave / PPChameleonEVB / PPChameleonEVB.c
CommitLineData
12f34241 1/*
180d3f74
WD
2 * (C) Copyright 2003
3 * DAVE Srl
4 * http://www.dave-tech.it
5 * http://www.wawnet.biz
6 * mailto:info@wawnet.biz
12f34241 7 *
1a459660 8 * SPDX-License-Identifier: GPL-2.0+
12f34241
WD
9 */
10
11#include <common.h>
12#include <asm/processor.h>
13#include <command.h>
14#include <malloc.h>
15
d87080b7
WD
16DECLARE_GLOBAL_DATA_PTR;
17
e55ca7e2 18/* ------------------------------------------------------------------------- */
12f34241 19
c837dcb1 20int board_early_init_f (void)
12f34241 21{
6d0f6bcf
JCPV
22 out32(GPIO0_OR, CONFIG_SYS_NAND0_CE); /* set initial outputs */
23 out32(GPIO0_OR, CONFIG_SYS_NAND1_CE); /* set initial outputs */
12f34241
WD
24
25 /*
26 * IRQ 0-15 405GP internally generated; active high; level sensitive
27 * IRQ 16 405GP internally generated; active low; level sensitive
28 * IRQ 17-24 RESERVED
e55ca7e2
WD
29 * IRQ 25 (EXT IRQ 0)
30 * IRQ 26 (EXT IRQ 1)
31 * IRQ 27 (EXT IRQ 2)
32 * IRQ 28 (EXT IRQ 3)
33 * IRQ 29 (EXT IRQ 4)
34 * IRQ 30 (EXT IRQ 5)
35 * IRQ 31 (EXT IRQ 6)
12f34241 36 */
952e7760
SR
37 mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */
38 mtdcr(UIC0ER, 0x00000000); /* disable all ints */
39 mtdcr(UIC0CR, 0x00000000); /* set all to be non-critical*/
40 mtdcr(UIC0PR, 0xFFFFFF80); /* set int polarities */
41 mtdcr(UIC0TR, 0x10000000); /* set int trigger levels */
42 mtdcr(UIC0VCR, 0x00000001); /* set vect base=0,INT0 highest priority*/
43 mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */
12f34241
WD
44
45 /*
46 * EBC Configuration Register: set ready timeout to 512 ebc-clks -> ca. 15 us
47 */
48#if 1 /* test-only */
d1c3b275 49 mtebc (EBC0_CFG, 0xa8400000); /* ebc always driven */
12f34241 50#else
d1c3b275 51 mtebc (EBC0_CFG, 0x28400000); /* ebc in high-z */
12f34241 52#endif
12f34241
WD
53 return 0;
54}
55
12f34241
WD
56/* ------------------------------------------------------------------------- */
57
58int misc_init_f (void)
59{
60 return 0; /* dummy implementation */
61}
62
46a414dc 63extern flash_info_t flash_info[]; /* info for FLASH chips */
12f34241
WD
64
65int misc_init_r (void)
66{
46a414dc
WD
67 /* adjust flash start and size as well as the offset */
68 gd->bd->bi_flashstart = 0 - flash_info[0].size;
6d0f6bcf 69 gd->bd->bi_flashoffset= flash_info[0].size - CONFIG_SYS_MONITOR_LEN;
12f34241
WD
70#if 0
71 volatile unsigned short *fpga_mode =
6d0f6bcf 72 (unsigned short *)((ulong)CONFIG_SYS_FPGA_BASE_ADDR + CONFIG_SYS_FPGA_CTRL);
12f34241
WD
73 volatile unsigned char *duart0_mcr =
74 (unsigned char *)((ulong)DUART0_BA + 4);
75 volatile unsigned char *duart1_mcr =
76 (unsigned char *)((ulong)DUART1_BA + 4);
77
78 bd_t *bd = gd->bd;
79 char * tmp; /* Temporary char pointer */
80 unsigned char *dst;
81 ulong len = sizeof(fpgadata);
82 int status;
83 int index;
84 int i;
d1c3b275 85 unsigned long CPC0_CR0Reg;
12f34241 86
6d0f6bcf
JCPV
87 dst = malloc(CONFIG_SYS_FPGA_MAX_SIZE);
88 if (gunzip (dst, CONFIG_SYS_FPGA_MAX_SIZE, (uchar *)fpgadata, &len) != 0) {
12f34241
WD
89 printf ("GUNZIP ERROR - must RESET board to recover\n");
90 do_reset (NULL, 0, 0, NULL);
91 }
92
93 status = fpga_boot(dst, len);
94 if (status != 0) {
95 printf("\nFPGA: Booting failed ");
96 switch (status) {
97 case ERROR_FPGA_PRG_INIT_LOW:
98 printf("(Timeout: INIT not low after asserting PROGRAM*)\n ");
99 break;
100 case ERROR_FPGA_PRG_INIT_HIGH:
101 printf("(Timeout: INIT not high after deasserting PROGRAM*)\n ");
102 break;
103 case ERROR_FPGA_PRG_DONE:
104 printf("(Timeout: DONE not high after programming FPGA)\n ");
105 break;
106 }
107
108 /* display infos on fpgaimage */
109 index = 15;
110 for (i=0; i<4; i++) {
111 len = dst[index];
112 printf("FPGA: %s\n", &(dst[index+1]));
113 index += len+3;
114 }
115 putc ('\n');
116 /* delayed reboot */
117 for (i=20; i>0; i--) {
118 printf("Rebooting in %2d seconds \r",i);
119 for (index=0;index<1000;index++)
120 udelay(1000);
121 }
122 putc ('\n');
123 do_reset(NULL, 0, 0, NULL);
124 }
125
126 puts("FPGA: ");
127
128 /* display infos on fpgaimage */
129 index = 15;
130 for (i=0; i<4; i++) {
131 len = dst[index];
132 printf("%s ", &(dst[index+1]));
133 index += len+3;
134 }
135 putc ('\n');
136
137 free(dst);
138
139 /*
140 * Reset FPGA via FPGA_DATA pin
141 */
142 SET_FPGA(FPGA_PRG | FPGA_CLK);
143 udelay(1000); /* wait 1ms */
144 SET_FPGA(FPGA_PRG | FPGA_CLK | FPGA_DATA);
145 udelay(1000); /* wait 1ms */
12f34241
WD
146#endif
147
148#if 0
149 /*
150 * Enable power on PS/2 interface
151 */
6d0f6bcf 152 *fpga_mode |= CONFIG_SYS_FPGA_CTRL_PS2_RESET;
12f34241
WD
153
154 /*
155 * Enable interrupts in exar duart mcr[3]
156 */
157 *duart0_mcr = 0x08;
158 *duart1_mcr = 0x08;
159#endif
12f34241
WD
160 return (0);
161}
162
12f34241
WD
163/*
164 * Check Board Identity:
165 */
166
167int checkboard (void)
168{
77ddac94 169 char str[64];
cdb74977 170 int i = getenv_f("serial#", str, sizeof(str));
12f34241
WD
171
172 puts ("Board: ");
173
174 if (i == -1) {
175 puts ("### No HW ID - assuming PPChameleonEVB");
176 } else {
177 puts(str);
178 }
179
180 putc ('\n');
181
182 return 0;
183}
184
185/* ------------------------------------------------------------------------- */
186
12f34241
WD
187int testdram (void)
188{
189 /* TODO: XXX XXX XXX */
190 printf ("test: 16 MB - ok\n");
191
192 return (0);
193}
194
195/* ------------------------------------------------------------------------- */
196
e55ca7e2
WD
197#ifdef CONFIG_CFB_CONSOLE
198# ifdef CONFIG_CONSOLE_EXTRA_INFO
199# include <video_fb.h>
200extern GraphicDevice smi;
201
202void video_get_info_str (int line_number, char *info)
203{
204 uint pvr = get_pvr ();
205
206 /* init video info strings for graphic console */
207 switch (line_number) {
208 case 1:
209 switch (pvr) {
210 case PVR_405EP_RB:
0c8721a4 211 sprintf (info, " AMCC PowerPC 405EP Rev. B");
e55ca7e2
WD
212 break;
213 default:
0c8721a4 214 sprintf (info, " AMCC PowerPC 405EP Rev. <unknown>");
e55ca7e2
WD
215 break;
216 }
217 return;
218 case 2:
219 sprintf (info, " DAVE Srl PPChameleonEVB - www.dave-tech.it");
220 return;
221 case 3:
222 sprintf (info, " %s", smi.modeIdent);
223 return;
224 }
225
226 /* no more info lines */
227 *info = 0;
228 return;
229}
230# endif /* CONFIG_CONSOLE_EXTRA_INFO */
231#endif /* CONFIG_CFB_CONSOLE */