for tyan. recover from Eric B's error additions to via code :-)
[coreboot.git] / src / mainboard / via / epia / auto.c
1 #define ASSEMBLY 1
2
3
4 #include <stdint.h>
5 #include <device/pci_def.h>
6 #include <cpu/p6/apic.h>
7 #include <arch/io.h>
8 #include <device/pnp.h>
9 #include <arch/romcc_io.h>
10 #include "pc80/serial.c"
11 #include "arch/i386/lib/console.c"
12 #include "ram/ramtest.c"
13 #include "northbridge/via/vt8601/raminit.h"
14 /*
15  */
16 void udelay(int usecs) 
17 {
18         int i;
19         for(i = 0; i < usecs; i++)
20                 outb(i&0xff, 0x80);
21 }
22
23 #include "lib/delay.c"
24 #include "cpu/p6/boot_cpu.c"
25 #include "debug.c"
26
27 #include "southbridge/via/vt8231/vt8231_early_smbus.c"
28
29 #define MAXIMUM_CONSOLE_LOGLEVEL 6
30 #define DEFAULT_CONSOLE_LOGLEVEL 6
31
32 #include "southbridge/via/vt8231/vt8231_early_serial.c"
33 static void memreset_setup(void)
34 {
35 }
36
37 /*
38   static void memreset(int controllers, const struct mem_controller *ctrl)
39   {
40   }
41 */
42 static inline int spd_read_byte(unsigned device, unsigned address)
43 {
44         unsigned char c;
45         c = smbus_read_byte(device, address);
46         return c;
47 }
48
49
50
51 #include "northbridge/via/vt8601/raminit.c"
52 /*
53   #include "sdram/generic_sdram.c"
54 */
55
56 static void enable_mainboard_devices(void) 
57 {
58         device_t dev;
59         /* dev 0 for southbridge */
60   
61         dev = pci_locate_device(PCI_ID(0x1106,0x8231), 0);
62   
63         if (dev == PCI_DEV_INVALID) {
64                 die("Southbridge not found!!!\n");
65         }
66         pci_write_config8(dev, 0x50, 7);
67         pci_write_config8(dev, 0x51, 0xff);
68 #if 0
69         // This early setup switches IDE into compatibility mode before PCI gets 
70         // // a chance to assign I/Os
71         //         movl    $CONFIG_ADDR(0, 0x89, 0x42), %eax
72         //         //      movb    $0x09, %dl
73         //                 movb    $0x00, %dl
74         //                         PCI_WRITE_CONFIG_BYTE
75         //
76 #endif
77         /* we do this here as in V2, we can not yet do raw operations 
78          * to pci!
79          */
80         dev++; /* ICKY */
81         pci_write_config8(dev, 0x42, 0);
82 }
83
84 static void enable_shadow_ram(void) 
85 {
86         device_t dev = 0; /* no need to look up 0:0.0 */
87         unsigned char shadowreg;
88         /* dev 0 for southbridge */
89         shadowreg = pci_read_config8(dev, 0x63);
90         /* 0xf0000-0xfffff */
91         shadowreg |= 0x30;
92         pci_write_config8(dev, 0x63, shadowreg);
93 }
94
95 static void main(void)
96 {
97         unsigned long x;
98         /*      init_timer();*/
99         outb(5, 0x80);
100         
101         enable_vt8231_serial();
102         enable_mainboard_devices();
103         uart_init();
104         console_init();
105         
106         enable_smbus();
107         enable_shadow_ram();
108         /*
109           memreset_setup();
110           this is way more generic than we need.
111           sdram_initialize(sizeof(cpu)/sizeof(cpu[0]), cpu);
112         */
113         sdram_set_registers((const struct mem_controller *) 0);
114         sdram_set_spd_registers((const struct mem_controller *) 0);
115         sdram_enable(0, (const struct mem_controller *) 0);
116         
117         /* Check all of memory */
118 #if 0
119         ram_check(0x00000000, msr.lo);
120 #endif
121 #if 0
122         static const struct {
123                 unsigned long lo, hi;
124         } check_addrs[] = {
125                 /* Check 16MB of memory @ 0*/
126                 { 0x00000000, 0x01000000 },
127 #if TOTAL_CPUS > 1
128                 /* Check 16MB of memory @ 2GB */
129                 { 0x80000000, 0x81000000 },
130 #endif
131         };
132         int i;
133         for(i = 0; i < sizeof(check_addrs)/sizeof(check_addrs[0]); i++) {
134                 ram_check(check_addrs[i].lo, check_addrs[i].hi);
135         }
136 #endif
137 }