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