printk_foo -> printk(BIOS_FOO, ...)
[coreboot.git] / src / mainboard / sunw / ultra40 / get_bus_conf.c
1 #include <console/console.h>
2 #include <device/pci.h>
3 #include <device/pci_ids.h>
4 #include <string.h>
5 #include <stdint.h>
6 #if CONFIG_LOGICAL_CPUS==1
7 #include <cpu/amd/dualcore.h>
8 #endif
9 #include <stdlib.h>
10
11
12 // Global variables for MB layouts and these will be shared by irqtable mptable and acpi_tables
13 //busnum is default
14         unsigned char bus_isa;
15         unsigned char bus_ck804_0; //1
16         unsigned char bus_ck804_1; //2
17         unsigned char bus_ck804_2; //3
18         unsigned char bus_ck804_3; //4
19         unsigned char bus_ck804_4; //5
20         unsigned char bus_ck804_5; //6
21         unsigned char bus_8131_0;  //7
22         unsigned char bus_8131_1;  //8
23         unsigned char bus_8131_2;  //9
24         unsigned char bus_ck804b_0;//a
25         unsigned char bus_ck804b_1;//b
26         unsigned char bus_ck804b_2;//c
27         unsigned char bus_ck804b_3;//d
28         unsigned char bus_ck804b_4;//e
29         unsigned char bus_ck804b_5;//f
30         unsigned apicid_ck804;
31         unsigned apicid_8131_1;
32         unsigned apicid_8131_2;
33         unsigned apicid_ck804b;
34
35 unsigned sblk;
36 unsigned pci1234[] = 
37 {        //Here you only need to set value in pci1234 for HT-IO that could be installed or not
38          //You may need to preset pci1234 for HTIO board, please refer to src/northbridge/amd/amdk8/get_sblk_pci1234.c for detail
39         0x0000ff0,
40         0x0000ff0,
41         0x0000ff0,
42 //        0x0000ff0,
43 //        0x0000ff0,
44 //        0x0000ff0,
45 //        0x0000ff0,
46 //        0x0000ff0
47 };
48 unsigned hc_possible_num;
49 unsigned sbdn;
50 unsigned hcdn[] = 
51 { //HT Chain device num, actually it is unit id base of every ht device in chain, assume every chain only have 4 ht device at most
52         0x20202020,
53         0x20202020,
54         0x20202020,
55 //        0x20202020,
56 //        0x20202020,
57 //        0x20202020,
58 //        0x20202020,
59 //        0x20202020,
60 };
61 unsigned sbdn3;
62 unsigned sbdnb;
63
64 extern void get_sblk_pci1234(void);
65
66 static unsigned get_bus_conf_done = 0;
67
68 void get_bus_conf(void)
69 {
70
71         unsigned apicid_base;
72
73         device_t dev;
74
75         if(get_bus_conf_done==1) return; //do it only once
76
77         get_bus_conf_done = 1;
78
79         hc_possible_num = ARRAY_SIZE(pci1234);  
80         
81         get_sblk_pci1234();
82         
83         sbdn = (hcdn[0] & 0xff); // first byte of first chain
84
85         sbdn3 = (hcdn[1] & 0xff);
86
87         sbdnb = (hcdn[2] & 0xff); // first byte of second chain
88
89 //      bus_ck804_0 = node_link_to_bus(0, sblk);
90         bus_ck804_0 = (pci1234[0] >> 16) & 0xff;
91
92                 /* CK804 */
93                 dev = dev_find_slot(bus_ck804_0, PCI_DEVFN(sbdn + 0x09,0));
94                 if (dev) {
95                         bus_ck804_1 = pci_read_config8(dev, PCI_SECONDARY_BUS);
96 #if 0
97                         bus_ck804_2 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
98                         bus_ck804_2++;
99 #else
100                         bus_ck804_5 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
101                         bus_ck804_5++;
102 #endif
103                 }
104                 else {
105                         printk(BIOS_DEBUG, "ERROR - could not find PCI 1:%02x.0, using defaults\n", sbdn + 0x09);
106
107                         bus_ck804_1 = 2;
108 #if 0
109                         bus_ck804_2 = 3;
110 #else
111                         bus_ck804_5 = 3;
112 #endif
113
114                 }
115 #if 0
116                 dev = dev_find_slot(bus_ck804_0, PCI_DEVFN(sbdn + 0x0b,0));
117                 if (dev) {
118                         bus_ck804_2 = pci_read_config8(dev, PCI_SECONDARY_BUS);
119                         bus_ck804_3 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
120                         bus_ck804_3++;
121                 }
122                 else {
123                         printk(BIOS_DEBUG, "ERROR - could not find PCI 1:%02x.0, using defaults\n", sbdn + 0x0b);
124
125                         bus_ck804_3 = bus_ck804_2+1;
126                 }
127
128                 dev = dev_find_slot(bus_ck804_0, PCI_DEVFN(sbdn + 0x0c,0));
129                 if (dev) {
130                         bus_ck804_3 = pci_read_config8(dev, PCI_SECONDARY_BUS);
131                         bus_ck804_4 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
132                         bus_ck804_4++;
133                 }
134                 else {
135                         printk(BIOS_DEBUG, "ERROR - could not find PCI 1:%02x.0, using defaults\n", sbdn + 0x0c);
136
137                         bus_ck804_4 = bus_ck804_3+1;
138                 }
139
140
141                 dev = dev_find_slot(bus_ck804_0, PCI_DEVFN(sbdn + 0x0d,0));
142                 if (dev) {
143                         bus_ck804_4 = pci_read_config8(dev, PCI_SECONDARY_BUS);
144                         bus_ck804_5 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
145                         bus_ck804_5++;
146                 }
147                 else {
148                         printk(BIOS_DEBUG, "ERROR - could not find PCI 1:%02x.0, using defaults\n",sbdn + 0x0d);
149
150                         bus_ck804_5 = bus_ck804_4+1;
151                 }
152 #endif
153
154                 dev = dev_find_slot(bus_ck804_0, PCI_DEVFN(sbdn+ 0x0e,0));
155                 if (dev) {
156                         bus_ck804_5 = pci_read_config8(dev, PCI_SECONDARY_BUS);
157                 }
158                 else {
159                         printk(BIOS_DEBUG, "ERROR - could not find PCI 1:%02x.0, using defaults\n", sbdn+ 0x0e);
160                 }
161
162                 bus_8131_0 = (pci1234[1] >> 16) & 0xff;
163                 /* 8131-1 */
164                 dev = dev_find_slot(bus_8131_0, PCI_DEVFN(sbdn3,0));
165                 if (dev) {
166                         bus_8131_1 = pci_read_config8(dev, PCI_SECONDARY_BUS);
167                         bus_8131_2 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
168                         bus_8131_2++;
169                 }
170                 else {
171                         printk(BIOS_DEBUG, "ERROR - could not find PCI %02x:01.0, using defaults\n", bus_8131_0);
172
173                         bus_8131_1 = bus_8131_0+1;
174                         bus_8131_2 = bus_8131_0+2;
175                 }
176                 /* 8131-2 */
177                 dev = dev_find_slot(bus_8131_0, PCI_DEVFN(sbdn3,0));
178                 if (dev) {
179                         bus_8131_2 = pci_read_config8(dev, PCI_SECONDARY_BUS);
180                         bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
181                         bus_isa++;
182                 }
183                 else {
184                         printk(BIOS_DEBUG, "ERROR - could not find PCI %02x:02.0, using defaults\n", bus_8131_0);
185
186                         bus_8131_2 = bus_8131_1+1;
187                 }
188
189                 /* CK804b */
190
191         if(pci1234[2] & 0xf) { //if the second cpu is installed
192                 bus_ck804b_0 = (pci1234[2]>>16) & 0xff;
193 #if 0
194                 dev = dev_find_slot(bus_ck804b_0, PCI_DEVFN(sbdnb + 0x09,0));
195                 if (dev) {
196                         bus_ck804b_1 = pci_read_config8(dev, PCI_SECONDARY_BUS);
197                         bus_ck804b_2 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
198                         bus_ck804b_2++;
199                 }
200                 else {
201                         printk(BIOS_DEBUG, "ERROR - could not find PCI %02x:%02x.0, using defaults\n", bus_ck804b_0,sbdnb+0x09);
202
203                         bus_ck804b_1 = bus_ck804b_0+1;
204                         bus_ck804b_2 = bus_ck804b_0+2;
205                 }
206
207                 dev = dev_find_slot(bus_ck804b_0, PCI_DEVFN(sbdnb + 0x0b,0));
208                 if (dev) {
209                         bus_ck804b_2 = pci_read_config8(dev, PCI_SECONDARY_BUS);
210                         bus_ck804b_3 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
211                         bus_ck804b_3++;
212                 }
213                 else {
214                         printk(BIOS_DEBUG, "ERROR - could not find PCI %02x:%02x.0, using defaults\n", bus_ck804b_0,sbdnb+0x0b);
215
216                         bus_ck804b_2 = bus_ck804b_0+1;
217                         bus_ck804b_3 = bus_ck804b_0+2;
218                 }
219
220                 dev = dev_find_slot(bus_ck804b_0, PCI_DEVFN(sbdnb + 0x0c,0));
221                 if (dev) {
222                         bus_ck804b_3 = pci_read_config8(dev, PCI_SECONDARY_BUS);
223                         bus_ck804b_4 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
224                         bus_ck804b_4++;
225                 }
226                 else {
227                         printk(BIOS_DEBUG, "ERROR - could not find PCI %02x:%02x.0, using defaults\n", bus_ck804b_0,sbdnb+0x0c);
228
229                         bus_ck804b_4 = bus_ck804b_3+1;
230                 }
231                 dev = dev_find_slot(bus_ck804b_0, PCI_DEVFN(sbdnb + 0x0d,0));
232                 if (dev) {
233                         bus_ck804b_4 = pci_read_config8(dev, PCI_SECONDARY_BUS);
234                         bus_ck804b_5 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
235                         bus_ck804b_5++;
236                 }
237                 else {
238                         printk(BIOS_DEBUG, "ERROR - could not find PCI %02x:%02x.0, using defaults\n", bus_ck804b_0,sbdnb+0x0d);
239
240                         bus_ck804b_5 = bus_ck804b_4+1;
241                 }
242 #endif
243
244                 dev = dev_find_slot(bus_ck804b_0, PCI_DEVFN(sbdnb + 0x0e,0));
245                 if (dev) {
246                         bus_ck804b_5 = pci_read_config8(dev, PCI_SECONDARY_BUS);
247                         bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
248                         bus_isa++;
249                 }
250                 else {
251                         printk(BIOS_DEBUG, "ERROR - could not find PCI %02x:%02x.0, using defaults\n", bus_ck804b_0,sbdnb+0x0e);
252 #if 1
253                         bus_ck804b_5 = bus_ck804b_4+1;
254 #endif
255
256                         bus_isa = bus_ck804b_5+1;
257                 }
258         }
259
260
261 /*I/O APICs:    APIC ID Version State           Address*/
262 #if CONFIG_LOGICAL_CPUS==1
263         apicid_base = get_apicid_base(4);
264 #else 
265         apicid_base = CONFIG_MAX_PHYSICAL_CPUS; 
266 #endif
267         apicid_ck804 = apicid_base+0;
268         apicid_8131_1 = apicid_base+1;
269         apicid_8131_2 = apicid_base+2;
270         apicid_ck804b = apicid_base+3;
271
272 }