Drop per-board ram_check() calls for now.
[coreboot.git] / src / mainboard / technologic / ts5300 / romstage.c
1 /*
2  * TS5300 specific initialization code.
3  *   written by Stefan Reinauer <stepan@coresystems.de>
4  *   (c) 2006 coresystems GmbH
5  */
6
7 #include <stdint.h>
8 #include <device/pci_def.h>
9 #include <arch/io.h>
10 #include <device/pnp_def.h>
11 #include <arch/romcc_io.h>
12 #include <arch/hlt.h>
13 #include <pc80/mc146818rtc.h>
14 #include <console/console.h>
15 #include "cpu/x86/bist.h"
16
17 #define TS5300_LED_OFF outb((inb(0x77)&0xfe), 0x77)
18 #define TS5300_LED_ON  outb((inb(0x77)|1), 0x77)
19
20 #define TS9500_LED_OFF outb((inb(0x19a)&0xfe), 0x19a)
21 #define TS9500_LED_ON  outb((inb(0x19a)|1), 0x19a)
22
23 /* PAR register setup */
24 void setup_pars(void)
25 {
26         volatile unsigned long *par;
27         par = (unsigned long *) 0xfffef088;
28
29         /* NOTE: Ron says, move this to mainboard.c */
30         *par++ = 0x00000000;
31         *par++ = 0x340f0070;
32         *par++ = 0x380701f0;
33         *par++ = 0x3c0103f6;
34         *par++ = 0x2c0f0300;
35         *par++ = 0x447c00a0;
36         *par++ = 0xe600000c;
37         *par++ = 0x300046e8;
38         *par++ = 0x500400d0;
39         *par++ = 0x281f0140;
40         *par++ = 0x00000000;
41         *par++ = 0x00000000;
42         *par++ = 0x00000000;
43         *par++ = 0x8a07c940; /* Flash setup */
44         *par++ = 0x00000000;
45         *par++ = 0xee00400e;
46 }
47
48 #include "cpu/amd/sc520/raminit.c"
49
50 static void identify_ts9500(void)
51 {
52         unsigned i, val;
53
54         TS9500_LED_ON;
55
56         print_err("TS-9500 add-on found:\n");
57         val=inb(0x19b);
58         for (i=0; i<8; i++) {
59                 print_err("  DIP");
60                 print_err_char(i+0x31);
61                 print_err(": ");
62                 if((val&(1<<i))!=0)
63                         print_err("on\n");
64                 else
65                         print_err("off\n");
66         }
67         print_err("\n");
68
69         val=inb(0x19a);
70
71         for (i=6; i<8; i++) {
72                 print_err("  JP");
73                 print_err_char(i+0x30-5);
74                 print_err(": ");
75                 if((val&(1<<i))!=0)
76                         print_err("on\n");
77                 else
78                         print_err("off\n");
79         }
80         print_err("\n");
81
82         TS9500_LED_OFF;
83 }
84
85 static void identify_system(void)
86 {
87         unsigned i,val;
88
89         print_err("Mainboard: ");
90         val=inb(0x74);
91         switch(val) {
92         case 0x50: print_err("TS-5300\n"); break;
93         case 0x40: print_err("TS-5400\n"); break;
94         case 0x60: print_err("TS-5500\n"); break;
95         case 0x20: print_err("TS-5600\n"); break;
96         case 0x70: print_err("TS-5700\n"); break;
97         default:   print_err("unknown\n"); break;
98         }
99
100         val=inb(0x75);
101         print_err("  SRAM option:   ");
102         if((val&1)==0) print_err("not ");
103         print_err("installed\n");
104
105         print_err("  RS-485 option: ");
106         if((val&2)==0) print_err("not ");
107         print_err("installed\n");
108
109         val=inb(0x76);
110         print_err("  Temp. range:   ");
111         if((val&2)==0) print_err("commercial\n");
112         else print_err("industrial\n");
113
114         print_err("\n");
115
116         val=inb(0x77);
117         for (i=1; i<8; i++) {
118                 print_err("  JP");
119                 print_err_char(i+0x30);
120                 print_err(": ");
121                 if((val&(1<<i))!=0)
122                         print_err("on\n");
123                 else
124                         print_err("off\n");
125         }
126         print_err("\n");
127
128         /* Detect TS-9500 */
129         val=inb(0x19d);
130         if(val==0x5f)
131                 identify_ts9500();
132 }
133
134 static void hard_reset(void)
135 {
136         print_err("Hard reset called.\n");
137         while (1) ;
138 }
139
140 static void main(unsigned long bist)
141 {
142         volatile int i;
143         unsigned val;
144
145         TS5300_LED_ON;
146
147         // Let the hardware settle a bit.
148         for(i = 0; i < 100; i++)
149                 ;
150
151         setupsc520();
152         uart_init();
153         console_init();
154
155
156         print_err("Technologic Systems TS5300 - http://www.embeddedx86.com/\n");
157         staticmem();
158         print_err("Memory initialized: 32MB\n");
159
160 #if 1
161         identify_system();
162 #endif
163
164         TS5300_LED_OFF;
165 }