1 #define ASM_CONSOLE_LOGLEVEL 8
3 #include <device/pci_def.h>
5 #include <device/pnp_def.h>
6 #include <arch/romcc_io.h>
8 #include "pc80/mc146818rtc_early.c"
9 #include "pc80/serial.c"
10 #include "console/console.c"
11 #include "lib/ramtest.c"
12 #include "cpu/x86/bist.h"
13 //#include "lib/delay.c"
17 volatile unsigned long *par;
18 /* as per the book: */
19 /* PAR register setup */
20 /* set up the PAR registers as they are on the MSM586SEG */
21 par = (unsigned long *) 0xfffef088;
23 /* NOTE: move this to mainboard.c ASAP */
24 *par++ = 0x607c00a0; /*PAR0: PCI:Base 0xa0000; size 0x1f000:*/
25 *par++ = 0x480400d8; /*PAR1: GP BUS MEM:CS2:Base 0xd8, size 0x4:*/
26 *par++ = 0x340100ea; /*PAR2: GP BUS IO:CS5:Base 0xea, size 0x1:*/
27 *par++ = 0x380701f0; /*PAR3: GP BUS IO:CS6:Base 0x1f0, size 0x7:*/
28 *par++ = 0x3c0003f6; /*PAR4: GP BUS IO:CS7:Base 0x3f6, size 0x0:*/
29 *par++ = 0x35ff0400; /*PAR5: GP BUS IO:CS5:Base 0x400, size 0xff:*/
30 *par++ = 0x35ff0600; /*PAR6: GP BUS IO:CS5:Base 0x600, size 0xff:*/
31 *par++ = 0x35ff0800; /*PAR7: GP BUS IO:CS5:Base 0x800, size 0xff:*/
32 *par++ = 0x35ff0a00; /*PAR8: GP BUS IO:CS5:Base 0xa00, size 0xff:*/
33 *par++ = 0x35ff0e00; /*PAR9: GP BUS IO:CS5:Base 0xe00, size 0xff:*/
34 *par++ = 0x34fb0104; /*PAR10: GP BUS IO:CS5:Base 0x104, size 0xfb:*/
35 *par++ = 0x35af0200; /*PAR11: GP BUS IO:CS5:Base 0x200, size 0xaf:*/
36 *par++ = 0x341f03e0; /*PAR12: GP BUS IO:CS5:Base 0x3e0, size 0x1f:*/
37 *par++ = 0xe41c00c0; /*PAR13: SDRAM:code:cache:nowrite:Base 0xc0000, size 0x7000:*/
38 *par++ = 0x545c00c8; /*PAR14: GP BUS MEM:CS5:Base 0xc8, size 0x5c:*/
39 *par++ = 0x8a020200; /*PAR15: BOOTCS:code:nocache:write:Base 0x2000000, size 0x80000:*/
42 #include "cpu/amd/sc520/raminit.c"
44 typedef void (*lj)(void);
46 struct mem_controller {
50 static void memreset_setup(void)
54 static void memreset(int controllers, const struct mem_controller *ctrl)
58 static inline void activate_spd_rom(const struct mem_controller *ctrl)
63 static inline int spd_read_byte(unsigned device, unsigned address)
65 // return smbus_read_byte(device, address);
68 //#include "lib/generic_sdram.c"
70 static inline void dumpmem(void){
75 for(i = 0x4000; i < 0x5000; i += 16) {
76 print_err_hex32(i); print_err(":");
77 for(j = 0; j < 16; j++) {
78 l = (unsigned char *)i + j;
87 static inline void irqinit(void){
88 volatile unsigned char *cp;
90 /* these values taken from the msm board itself.
91 * and they cause the board to not even come out of calibrating_delay_loop
92 * if you can believe it. Our problem right now is no IDE or serial interrupts
93 * So we'll try to put interrupts in, one at a time. IDE first.
95 cp = (volatile unsigned char *) 0xfffefd00;
97 cp = (volatile unsigned char *) 0xfffefd02;
99 cp = (volatile unsigned char *) 0xfffefd03;
101 cp = (volatile unsigned char *) 0xfffefd04;
103 cp = (volatile unsigned char *) 0xfffefd08;
105 cp = (volatile unsigned char *) 0xfffefd0a;
107 cp = (volatile unsigned char *) 0xfffefd10;
109 cp = (volatile unsigned char *) 0xfffefd14;
111 cp = (volatile unsigned char *) 0xfffefd18;
113 cp = (volatile unsigned char *) 0xfffefd1a;
115 cp = (volatile unsigned char *) 0xfffefd1b;
117 cp = (volatile unsigned char *) 0xfffefd1c;
119 cp = (volatile unsigned char *) 0xfffefd20;
121 cp = (volatile unsigned char *) 0xfffefd21;
123 cp = (volatile unsigned char *) 0xfffefd22;
125 cp = (volatile unsigned char *) 0xfffefd28;
127 cp = (volatile unsigned char *) 0xfffefd29;
129 cp = (volatile unsigned char *) 0xfffefd30;
131 cp = (volatile unsigned char *) 0xfffefd31;
133 cp = (volatile unsigned char *) 0xfffefd32;
135 cp = (volatile unsigned char *) 0xfffefd33;
137 cp = (volatile unsigned char *) 0xfffefd40;
139 cp = (volatile unsigned char *) 0xfffefd41;
141 cp = (volatile unsigned char *) 0xfffefd42;
143 cp = (volatile unsigned char *) 0xfffefd43;
145 cp = (volatile unsigned char *) 0xfffefd44;
147 cp = (volatile unsigned char *) 0xfffefd45;
149 cp = (volatile unsigned char *) 0xfffefd46;
151 cp = (volatile unsigned char *) 0xfffefd50;
153 cp = (volatile unsigned char *) 0xfffefd51;
155 cp = (volatile unsigned char *) 0xfffefd52;
157 cp = (volatile unsigned char *) 0xfffefd53;
159 cp = (volatile unsigned char *) 0xfffefd54;
161 cp = (volatile unsigned char *) 0xfffefd55;
163 cp = (volatile unsigned char *) 0xfffefd56;
165 cp = (volatile unsigned char *) 0xfffefd57;
167 cp = (volatile unsigned char *) 0xfffefd58;
169 cp = (volatile unsigned char *) 0xfffefd59;
171 cp = (volatile unsigned char *) 0xfffefd5a;
177 cp = (volatile unsigned char *) 0xfffefd56;
182 static void main(unsigned long bist)
185 for(i = 0; i < 100; i++)
192 for(i = 0; i < 100; i++)
193 print_err("fill usart\r\n");
195 print_err("HI THERE!\r\n");
198 print_err("c60 is "); print_err_hex16(*(unsigned short *)0xfffefc60);
202 print_err("STATIC MEM DONE\r\n");
204 print_err("loop forever ...\n");
208 /* clear memory 1meg */
211 "movl %0, %%fs:(%1)\n\t"
216 : "a" (0), "D" (0), "c" (1024*1024)
226 dump_pci_device(PCI_DEV(0, 0, 0));
230 print_err("RAM CHECK!\r\n");
231 // Check 16MB of memory @ 0
232 ram_check(0x00000000, 0x01000000);
235 print_err("RAM CHECK for 32 MB!\r\n");
236 // Check 32MB of memory @ 0
237 ram_check(0x00000000, 0x02000000);
241 volatile unsigned char *src = (unsigned char *) 0x2000000 + 0x60000;
242 volatile unsigned char *dst = (unsigned char *) 0x4000;
243 for(i = 0; i < 0x20000; i++) {
245 print_err("Set dst "); print_err_hex32((unsigned long) dst);
246 print_err(" to "); print_err_hex32(*src); print_err("\r\n");
249 //print_err(" dst is now "); print_err_hex32(*dst); print_err("\r\n");
251 outb((unsigned char)i, 0x80);
256 print_err("loop forever\r\n");
265 print_err("Oh dear, I'm afraid it didn't work...\r\n");