printk_foo -> printk(BIOS_FOO, ...)
[coreboot.git] / src / northbridge / via / vx800 / examples / chipset_init.c
1 /*
2  * This file is part of the coreboot project.
3  *
4  * Copyright (C) 2009 One Laptop per Child, Association, Inc.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
19  */
20
21 #if CONFIG_HAVE_ACPI_RESUME == 1
22 #include <arch/acpi.h>
23 #endif
24 #include <../northbridge/via/vx800/vx800.h>
25
26 #include <arch/io.h>
27 #include "pci_rawops.h"
28
29 static const struct VIA_PCI_REG_INIT_TABLE mSbStage1InitTbl[] = {
30         // Combine Stage1 registers
31         {0x00, 0xFF, SB_LPC_REG(0x41), 0x40, 0x40},
32
33         // Acpi init registers in sb stage1
34         {0x00, 0xFF, SB_LPC_REG(0x40), 0x04, 0x04},     // Enable 4D0/4D1 support
35         {0x00, 0xFF, SB_LPC_REG(0x4E), 0x00, 0x08},     // Enable RTC port 74/75
36         {0x00, 0xFF, SB_LPC_REG(0x51), 0x0D, 0x0D},     // and KBC
37         {0x00, 0xFF, SB_LPC_REG(0x52), 0x0F, 0x09},     // Enable Serial IRQ
38         {0x00, 0xFF, SB_LPC_REG(0x67), 0x00, 0x04},     // Set FERR voltage to 1.5v
39         {0x00, 0xFF, SB_LPC_REG(0x98), 0xFF, 0x00},     // Disable GP3 Timer
40
41         {0x00, 0xFF, SB_IDEC_REG(0xb9), 0x01, 0x01},
42
43         {0x00, 0xFF, SB_VLINK_REG(0xE6), 0xFF, 0x39},   // Enable SMM A-Seg, MSI and Io APIC
44         ///// SPI-BAR.
45         //// SPI_BASE_ADDRESS = 0xFED1 0000
46         0x00, 0xFF, SB_LPC_REG(0xBC), 0xFF, 0x00,
47         0x00, 0xFF, SB_LPC_REG(0xBD), 0xFF, 0xD1,
48         0x00, 0xFF, SB_LPC_REG(0xBE), 0xFF, 0xFE,
49 //      0x00, 0xFF, ((0x11<<16)|(0x00<<8)|0xBC), 0xFF, 0x00,//this , for the different macro
50 //      0x00, 0xFF, ((0x11<<16)|(0x00<<8)|0xBD), 0xFF, 0xD1,
51 //      0x00, 0xFF, ((0x11<<16)|(0x00<<8)|0xBE), 0xFF, 0xFE,
52         ///// End of 2008-04-17
53
54         {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // End of Table
55 };
56
57 static const struct VIA_PCI_REG_INIT_TABLE mNbStage2InitTable[] = {
58         // D0F0: AGP Feature. For 3353, No AGP Feature
59
60         // D0F2~D0F3 is configured by MemoryInit Peim
61
62         // D0F4: NB PMU
63         0x00, 0xFF, NB_PMU_REG(0x84), 0x00, 0xDB,
64         0x00, 0xFF, NB_PMU_REG(0x85), 0x00, 0x05,
65         0x00, 0xFF, NB_PMU_REG(0x89), 0x00, 0xF8,
66         0x00, 0xFF, NB_PMU_REG(0x8B), 0x00, 0xBF,
67         0x00, 0xFF, NB_PMU_REG(0x8D), 0x00, 0xFC,
68         0x00, 0xFF, NB_PMU_REG(0x8E), 0x00, 0x19,
69         0x00, 0xFF, NB_PMU_REG(0x8F), 0x03, 0x00,
70         0x00, 0xFF, NB_PMU_REG(0x90), 0x00, 0xFF,
71         0x00, 0xFF, NB_PMU_REG(0x91), 0x00, 0xFF,
72         0x00, 0xFF, NB_PMU_REG(0x92), 0x00, 0xCC,
73         0x00, 0xFF, NB_PMU_REG(0xA0), 0x00, 0x80,
74         0x00, 0xFF, NB_PMU_REG(0xA1), 0x00, 0xE0,
75         0x00, 0xFF, NB_PMU_REG(0xA2), 0x00, 0xD6,
76         0x00, 0xFF, NB_PMU_REG(0xA3), 0x00, 0x80,
77         0x00, 0xFF, NB_PMU_REG(0xA8), 0x00, 0x20,
78
79         // D0F5: NB APIC, PXPTRF and MSGC
80         //Note: the Rx6A, RCRBH Base Address, is not set, which is related to PCIE Root Complex.
81         //Note: the Rx60, Extended CFG Address. Support and Rx61, Extended CFG Address, are set by NB Peim that is in the PEI Phase.
82         //Note: the Rx42, APIC Interrupt((BT_INTR)) Control, is set by NB Peim that is in PEI phase.
83         0x00, 0xFF, NB_PXPTRF_REG(0x50), 0x00, 0x00,
84         0x00, 0xFF, NB_PXPTRF_REG(0x54), 0x00, 0x80,
85         0x00, 0xFF, NB_PXPTRF_REG(0x55), 0x00, 0x04,
86         0x00, 0xFF, NB_PXPTRF_REG(0x58), 0x00, 0x00,
87         0x00, 0xFF, NB_PXPTRF_REG(0x59), 0x00, 0x02,
88         0x00, 0xFF, NB_PXPTRF_REG(0x5E), 0x00, 0x00,
89         0x00, 0xFF, NB_PXPTRF_REG(0x5F), 0x00, 0x06,
90         0x00, 0xFF, NB_PXPTRF_REG(0x80), 0x00, 0x18,    //Set RVC1DM, RTHBHIT, RUWRDYD, RUPRRDY1, RUWPOPHD to 1.
91         0x00, 0xFF, NB_PXPTRF_REG(0x82), 0x00, 0x00,    //Set RVC1RPSW, RVC1RQ1T to 1.
92         0x00, 0xFF, NB_PXPTRF_REG(0x83), 0x00, 0x81,
93         0x00, 0xFF, NB_PXPTRF_REG(0x84), 0x00, 0x28,
94         0x00, 0xFF, NB_PXPTRF_REG(0x85), 0x00, 0xC0,
95         0x00, 0xFF, NB_MSGC_REG(0xA3), 0x00, 0x01,      // RWAKEEN
96 //  0x00, 0xFF, NB_PXPTRF_REG(0x64), 0x40, 0x00, //RTDNP2B32EN
97         0x00, 0xFF, NB_PXPTRF_REG(0xF3), 0xFC, 0x20,
98         0x00, 0xFF, NB_PXPTRF_REG(0x85), 0x00, 0x00,    //RP2P1ABORT
99
100
101 // fine-tune
102 // If no settings, C7 will hang or reboot in XP, but CN will not.
103         0x00, 0xFF, NB_HOST_REG(0x51), 0x84, 0x00,
104         0x00, 0xFF, NB_HOST_REG(0x52), 0x0F, 0x03,
105         0x00, 0xFF, NB_HOST_REG(0x54), 0x04, 0x00,
106         0x00, 0xFF, NB_HOST_REG(0x55), 0x04, 0x00,
107         0x00, 0xFF, NB_HOST_REG(0x59), 0x09, 0x01,
108         0x00, 0xFF, NB_HOST_REG(0x5C), 0x10, 0x10,
109         0x00, 0xFF, NB_HOST_REG(0x5F), 0x0E, 0x08,
110         0x00, 0xFF, NB_HOST_REG(0x92), 0xFF, 0x04,      // ACPI Base addr
111         0x00, 0xFF, NB_HOST_REG(0x97), 0x01, 0x01,      // APIC MSI
112         0x00, 0xFF, NB_HOST_REG(0x99), 0x02, 0x00,      // APIC MSI
113         //GTL
114         0x00, 0xFF, NB_HOST_REG(0x73), 0xFF, 0x66,
115         0x00, 0xFF, NB_HOST_REG(0xB2), 0xFF, 0x33,
116         0x00, 0xFF, NB_HOST_REG(0xB3), 0xFF, 0x33,
117         0x00, 0xFF, NB_HOST_REG(0xBC), 0xFF, 0x33,
118         0x00, 0xFF, NB_HOST_REG(0xBD), 0xFF, 0x33,
119         0x00, 0xFF, NB_HOST_REG(0xC5), 0x30, 0x20,
120         0x00, 0xFF, NB_HOST_REG(0xC8), 0x10, 0x00,
121
122
123         // End of Table
124         {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // End of Table
125
126 };
127
128 static const struct VIA_PCI_REG_INIT_TABLE mBusControllerInitTable[] = {
129         // D17F0: LPC
130         0x00, 0xFF, SB_LPC_REG(0x40), 0x44, 0x44,       //  Enable I/O Recovery Time,  4D0/4D1 Support
131         0x00, 0xFF, SB_LPC_REG(0x42), 0xF8, 0xF0,       //  ENLBUF, GINTREN, FLUSHEN, RBRSTRD
132         0x00, 0xFF, SB_LPC_REG(0x43), 0x0F, 0x0B,       //  RENDTX, ENWBTO, ENRBTO
133         //  0x00, 0xFF, SB_LPC_REG(0x46), 0x00, 0x10,     // It is related to INTH#
134         //0x00, 0xFF, SB_LPC_REG(0x48), 0x00, 0x0C,      //RMRPW, RIRPW  // Reserved in 409 by Eric
135
136         // Internal RTC, Mouse, Keyboard // set in PEI by Eric
137         //0x00, 0xFF, SB_LPC_REG(0x51), 0x10, 0x0D,      // Enable Internal RTC, Internal PS2 Mouse/Keyboard
138
139         // RTC
140         0x00, 0xFF, SB_LPC_REG(0x58), 0x00, 0x01,       //RTC Rx32 Map to Centrury Byte
141
142         // 0x00, 0xFF, SB_LPC_REG(0x40), 0x00, 0x02,    // RDMEGAS
143         //0x00, 0xFF, SB_LPC_REG(0x4E), 0x00, 0x08,  // Enable RTC port 74/75, ENEXRTC // set in PEI by Eric
144
145         // Serial IRQ  // set in PEI by Eric
146         //0x00, 0xFF, SB_LPC_REG(0x52), 0x0F, 0x09,    // Enable Serial IRQ, Start Frame Width is 6 PCI Clock.
147
148         // Enable 4D0h/4D1h Port
149         //0x00, 0xFF, SB_LPC_REG(0x40), 0x00, 0x04,    // EISAXT // set in PEI by Eric
150
151         // Config ROM Interface
152         // Enable SPI/Set SPI Memory Base Address
153         // It is initialized in PEI Phase
154
155         // Subsystem ID/Vendor ID Back Door
156         0x00, 0xFF, SB_LPC_REG(0x70), 0xFF, 0x06,
157         0x00, 0xFF, SB_LPC_REG(0x71), 0xFF, 0x11,
158         0x00, 0xFF, SB_LPC_REG(0x72), 0xFF, 0x09,
159         0x00, 0xFF, SB_LPC_REG(0x73), 0xFF, 0x34,
160
161         0x00, 0xFF, SB_LPC_REG(0x4C), 0xC0, 0x40,
162         0x00, 0xFF, SB_LPC_REG(0x5B), 0x00, 0x51,       // Orgin value 0x53, modify for 409 by Eric
163         0x00, 0xFF, SB_LPC_REG(0x67), 0x03, 0x01,
164
165
166         0x00, 0xFF, SB_LPC_REG(0x50), 0x7E, 0x00,       // Setting PCI device enable
167         0x00, 0xFF, SB_LPC_REG(0x51), 0xD0, 0x00,       // Setting PCI device enable
168         0x00, 0xFF, SB_VLINK_REG(0xD1), 0x04, 0x00,     // Setting HDAC enable
169         {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // End of Table
170 };
171
172 static const struct VIA_PCI_REG_INIT_TABLE mPCI1InitTable[] = {
173         //PCI1 Programming Sequence
174         //(1)Configure D17F7
175         0x00, 0xFF, SB_VLINK_REG(0x04), 0x00, 0x03,
176         0x00, 0xFF, SB_VLINK_REG(0x0C), 0x00, 0x08,     // Reserved in 409 by Eric
177         0x00, 0xFF, SB_VLINK_REG(0x4F), 0x40, 0x41,     //RENPPB, RP2CFLSH
178         0x00, 0xFF, SB_VLINK_REG(0x77), 0x00, 0x48,     //ROP2CFLSH, RFFTMR[1:0]. ROP2CFLSH work with Rx4F[0](RP2CFLSH) assertion
179         // 0x00, 0xFF, SB_VLINK_REG(0x51), 0x00, 0x80,      //RSUB_DEC_P2P, RSUBDECOD(Window xp). If Bit7 is set, PCI lock will occured.
180         //0x00, 0xFF, SB_VLINK_REG(0x51), 0x00, 0x81,      //RSUB_DEC_P2P, RSUBDECOD(Window Vista)
181         //(2)Configure D19F0
182         0x00, 0xFF, SB_P2PB_REG(0x04), 0x00, 0x07,
183
184         //(3)Performance Recommended Setting
185
186         //Save Power
187         0x00, 0xFF, SB_VLINK_REG(0xE2), 0x1F, 0x01,
188         0x00, 0xFF, SB_VLINK_REG(0xE3), 0xF1, 0x5E,
189         0x00, 0xFF, SB_VLINK_REG(0x74), 0x40, 0x00,
190         //Enhence Host To PCI cycle performance and PCI-To-Host Cycle performance
191         0x00, 0xFF, SB_VLINK_REG(0x70), 0x00, 0x82,
192         0x00, 0xFF, SB_VLINK_REG(0x71), 0x30, 0xC0,
193         0x00, 0xFF, SB_VLINK_REG(0x72), 0x00, 0xEE,
194
195         //Cycle Control
196         0x00, 0xFF, SB_VLINK_REG(0x73), 0x00, 0x01,
197         0x00, 0xFF, SB_VLINK_REG(0x74), 0x00, 0x0C,
198         //Arbitration control
199         0x00, 0xFF, SB_VLINK_REG(0x75), 0x00, 0x0F,
200         0x00, 0xFF, SB_VLINK_REG(0x76), 0x00, 0xD0,
201         {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // End of Table
202 };
203
204 static const struct VIA_PCI_REG_INIT_TABLE mCCAInitTable[] = {
205
206         0x00, 0xFF, SB_VLINK_REG(0xFC), 0x02, 0x08,     //RVWREQ, ROABKDOOR
207
208         //CCA's Register Programming sequence
209         0x00, 0xFF, SB_VLINK_REG(0x50), 0x00, 0x08,     //Config Azalia's upstream cycle high priority and other low priority
210         0x00, 0xFF, SB_VLINK_REG(0x51), 0x40, 0x80,     //Disable bypass asynchronous circuit
211         0x00, 0xFF, SB_VLINK_REG(0x52), 0x00, 0x11,     // Set SM Internal Device and HDAC Occupy Timer
212         0x00, 0xFF, SB_VLINK_REG(0x53), 0x00, 0x11,     // Set SM Internal Device and HDAC Promote Timer
213         0x00, 0xFF, SB_VLINK_REG(0x54), 0xFF, 0x02,     //Use SB internal devices's original REQ
214         0x00, 0xFF, SB_VLINK_REG(0x73), 0x10, 0x00,     //RPINOWSC. Enable APIC Cycle Block P2C Write Cycle
215         0x00, 0xFF, SB_VLINK_REG(0x74), 0x00, 0x3C,     //RLCKXP2C, RFSBVK.
216         0x00, 0xFF, SB_VLINK_REG(0xE1), 0x07, 0x00,     //RBLKAPIC, RAZC3
217         0x00, 0xFF, SB_VLINK_REG(0x7C), 0x04, 0x02,     //RNMIFSB, RFSBVK
218         0x00, 0xFF, SB_VLINK_REG(0xE0), 0xF0, 0x90,     //RCCA_NEWCLK, RCCA_CLKON. Use New dynamic clock scheme
219         0x00, 0xFF, SB_VLINK_REG(0xE7), 0xFF, 0x00,     //Let CCA use dynamic clock.
220         //The CCA is also relate to D17F0
221         //    0x00, 0xFF, SB_LPC_REG(0x49), 0x1F, 0x00,       //Disable CCA Test Mode
222         0x00, 0xFF, SB_LPC_REG(0x74), 0xFF, 0x00,       // Let DMA cycles from internal devices directly go to NB // Reserved in 409 by Eric
223         {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // End of Table
224 };
225
226 static const struct VIA_PCI_REG_INIT_TABLE IDEC_INIT[] = {
227
228         // 0x00, 0xFF, SB_IDEC_REG(0x09), 0x00, 0x05, //set to native mode
229         0x00, 0xFF, SB_IDEC_REG(0x04), 0x00, 0x07,
230         //0x00, 0xFF, SB_VLINK_REG(0x7C), 0x00, 0x7F,
231         {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // End of Table
232
233 };
234
235 static const struct VIA_PCI_REG_INIT_TABLE mSbApicInitTable[] = {
236         0x00, 0xFF, SB_LPC_REG(0x4D), 0x04, 0x00,
237         0x00, 0xFF, SB_LPC_REG(0x5B), 0x0E, 0x00,
238         0x00, 0xFF, SB_LPC_REG(0x6C), 0x08, 0x00,
239         0x00, 0xFF, SB_LPC_REG(0x58), 0x00, 0x40,
240         0x00, 0xFF, SB_VLINK_REG(0x74), 0x00, 0x04,
241         //0x00, 0xFF, SB_VLINK_REG(0x7C), 0x00, 0x7F,
242         {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // End of Table
243
244 };
245
246
247
248 void AcpiInit(void)
249 {
250         device_t_raw rawdevice = 0;
251         u8 sbchiprev;
252         rawdevice = PCI_RAWDEV(0, 0x11, 0);
253         // Set the PMIO base io address
254         pci_rawmodify_config16(rawdevice, 0x88, VX800_ACPI_IO_BASE,
255                                0xff80);
256         // Enable PMIO
257         pci_rawmodify_config16(rawdevice, 0x80, 0x8000, 0x8000);
258         // Enable Soft Resume
259         outw(inw(VX800_ACPI_IO_BASE + 0x04) | 0x8000,
260              VX800_ACPI_IO_BASE + 0x04);
261
262         // Get SB Revision
263         sbchiprev = pci_rawread_config8(rawdevice, 0xf6);
264         printk(BIOS_DEBUG, "SB chip revision =%x\n", sbchiprev);
265
266         // Fill Register Table
267         via_pci_inittable(sbchiprev, mSbStage1InitTbl);
268
269         // Close all SMI/Io Traps
270         outb(0x00, VX800_ACPI_IO_BASE + 0x42);
271
272 }
273
274
275 void Stage2NbInit(void)
276 {
277         device_t_raw rawdevice = 0;
278         u8 nbchiprev;
279         u32 subid = 0;
280         rawdevice = PCI_RAWDEV(0, 0, 4);
281         nbchiprev = pci_rawread_config8(rawdevice, 0xf6);
282         printk(BIOS_DEBUG, "NB chip revision =%x\n", nbchiprev);
283
284         via_pci_inittable(nbchiprev, mNbStage2InitTable);
285
286         rawdevice = PCI_RAWDEV(0, 0, 0);
287
288         subid = PCI_DEVICE_ID_VIA_VX855_D0F0 << 16 + PCI_VENDOR_ID_VIA;
289         pci_rawwrite_config32(rawdevice, 0x2C, subid);
290
291         //vx855 NB no pcie bus
292         //vx855 NB no apic
293
294 }
295
296 void IDECSupportOption(u8 sbchiprev)
297 {
298         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, 0, 0x08);
299
300         pci_rawmodify_config8(PCI_RAWDEV(0, 0xf, 0), 0x45, 0x00, 0x80);
301         pci_rawmodify_config8(PCI_RAWDEV(0, 0xf, 0), 0x0A, 0x01, 0xFF);
302         pci_rawmodify_config8(PCI_RAWDEV(0, 0xf, 0), 0x45, 0x80, 0x00);
303         pci_rawmodify_config8(PCI_RAWDEV(0, 0xf, 0), 0x40, 0x02, 0x00);
304
305         pci_rawmodify_config8(PCI_RAWDEV(0, 0xf, 0), 0x09, 0x00, 0x05); //COMPATIBLE MODE
306 //      pci_rawmodify_config8(PCI_RAWDEV(0, 0xf, 0), 0x09, 0x05, 0x05);//native MODE
307
308         via_pci_inittable(sbchiprev, IDEC_INIT);
309 }
310
311 void InitIDEC(u8 sbchiprev)
312 {
313         IDECSupportOption(sbchiprev);
314 }
315
316
317 void InitUHCI(u8 Number, u8 bEnable)
318 {
319         u8 Mask, Value;
320         u16 D16;
321         u8 BaseAddress;
322         u8 BitShift;
323         // USB Device 16
324         // Function : Number
325         //         0      :      0
326         //         1      :      1
327         //         2      :      2
328         // The BitShift is got from Datasheet.
329
330         switch (Number) {
331         case 0:
332                 BaseAddress = 0;
333                 BitShift = 4;
334                 break;
335         case 1:
336                 BaseAddress = 1;
337                 BitShift = 5;
338                 break;
339         case 2:
340         default:
341                 BaseAddress = 2;
342                 BitShift = 2;
343                 break;
344         }
345
346         if (bEnable) {
347                 Mask = 0x1 << BitShift;
348                 Value = 0x0;
349         } else {
350                 Mask = 0x0;
351                 Value = 0x1 << BitShift;
352         }
353         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, Value, Mask);
354
355
356         if (bEnable) {
357                 D16 = 0;
358                 pci_rawwrite_config16(PCI_RAWDEV(0, 0x10, BaseAddress),
359                                       0x20, D16);
360
361                 // Config some Control Register
362                 Mask = 0x00;
363                 Value = 0x12;
364
365                 pci_rawmodify_config8(PCI_RAWDEV(0, 0x10, BaseAddress),
366                                       0x41, Value, Mask);
367                 Mask = 0x00;
368                 Value = 0xEB;
369                 pci_rawmodify_config8(PCI_RAWDEV(0, 0x10, BaseAddress),
370                                       0x4B, Value, Mask);
371         }
372         return;
373 }
374
375 static const struct VIA_PCI_REG_INIT_TABLE mEHCIInitTable[] = {
376         //EHCI
377         0x00, 0xFF, SB_EHCI_REG(0x43), 0x00, 0xC0,
378         0x00, 0xFF, SB_EHCI_REG(0x50), 0x00, 0x80,
379         0x00, 0xFF, SB_EHCI_REG(0x48), 0x20, 0x9E,
380         0x00, 0xFF, SB_EHCI_REG(0x49), 0x10, 0x68,
381         0x00, 0xFF, SB_EHCI_REG(0x4B), 0x00, 0x69,
382         0x00, 0xFF, SB_EHCI_REG(0x4D), 0x00, 0x94,
383         0x00, 0xFF, SB_EHCI_REG(0x52), 0x08, 0x00,
384         0x00, 0xFF, SB_EHCI_REG(0x5A), 0x00, 0x8A,
385         0x00, 0xFF, SB_EHCI_REG(0x5B), 0x00, 0x89,
386         0x00, 0xFF, SB_EHCI_REG(0x5C), 0x00, 0x03,
387         0x00, 0xFF, SB_EHCI_REG(0x5D), 0x00, 0x9A,
388         0x00, 0xFF, SB_EHCI_REG(0x5E), 0x00, 0x00,
389         0x00, 0xFF, SB_EHCI_REG(0x6B), 0x00, 0x00,
390         0x00, 0xFF, SB_EHCI_REG(0x6D), 0x00, 0x00,
391         0x00, 0xFF, SB_EHCI_REG(0x6F), 0xF0, 0x00,
392         0x00, 0xFF, SB_EHCI_REG(0x4E), 0x01, 0x01,
393         0x00, 0xFF, SB_EHCI_REG(0x4F), 0x00, 0x11,
394         {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // End of Table
395
396 };
397
398 void InitEHCI(u8 Number, u8 bEnable)
399 {
400         u8 Mask, Value;
401         u8 EHCIRevision;
402
403         if (bEnable) {
404                 Mask = 0x1 << 1;
405                 Value = 0x0;
406         } else {
407                 Mask = 0x0;
408                 Value = 0x1 << 1;
409         }
410         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, Value, Mask);
411
412
413         if (bEnable) {
414                 // Get Chipset Revision
415                 EHCIRevision =
416                     pci_rawread_config8(PCI_RAWDEV(0, 0x10, 4), 0xF6);
417                 printk(BIOS_DEBUG, "EHCI Revision =%x\n", EHCIRevision);
418                 via_pci_inittable(EHCIRevision, mEHCIInitTable);
419         }
420 }
421
422 #define TRUE  1
423 void InitUSBC(u8 sbchiprev)
424 {
425         InitUHCI(0, TRUE);
426         InitUHCI(1, TRUE);
427         InitUHCI(2, TRUE);
428         InitEHCI(0, TRUE);
429 }
430
431 void WriteSbApicIndexedReg(u8 Idx, u32 Data)
432 {
433         u32 Data32;
434         u32 ApicIdxAdr = VX800SB_APIC_BASE;
435         u32 ApicDataAdr = VX800SB_APIC_BASE + VX800SB_APIC_DATA_OFFSET;
436         *((u8 *) ApicIdxAdr) = Idx;
437         Data32 = (*((u32 *) ApicDataAdr));      //this read is needed when write APIC ID ,dont know why.
438         Data32 = Data;
439         *((u32 *) ApicDataAdr) = Data32;
440 }
441
442 void SbApicMmioRegInit(void)
443 {
444         u32 Offset;
445         WriteSbApicIndexedReg(3, 1);
446         WriteSbApicIndexedReg(0, 4);
447         for (Offset = 0x10; Offset < VX800SB_APIC_ENTRY_NUMBER;
448              Offset += 2) {
449                 WriteSbApicIndexedReg(Offset + 1, 0);
450                 WriteSbApicIndexedReg(Offset, 0x10000);
451         }
452 }
453
454 void SbApicInit(u8 sbchiprev)
455 {
456         via_pci_inittable(sbchiprev, mSbApicInitTable);
457         SbApicMmioRegInit();
458 }
459
460 void SbAcpiInit(void)
461 {
462         u8 Mask, Value;
463         // Enable ACPI
464         Mask = 0x01;
465         Value = 0x01;
466         io_rawmodify_config8(VX800_ACPI_IO_BASE + 0x04, Value, Mask);
467 }
468
469 #define HPET_ENABLE_BIT                 0x80
470 #define R_SB_HPET_CONTROL               0x68
471 #define HPET_BASE_ADDRESS               0xFED0  // 0xFED00000
472 #define R_SB_HPET_ADDRESS               0x69
473
474 void HpetInit(void)
475 {
476         u8 HpetEnable = HPET_ENABLE_BIT;
477         u16 HpetBase = HPET_BASE_ADDRESS;
478         pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), R_SB_HPET_CONTROL,
479                              HpetEnable);
480         pci_rawwrite_config16(PCI_RAWDEV(0, 0x11, 0),
481                               R_SB_HPET_ADDRESS + 1, HpetBase);
482 }
483
484 static const struct VIA_PCI_REG_INIT_TABLE mPMUInitTable[] = {
485         // Power Management
486         0x00, 0xFF, SB_LPC_REG(0x80), 0x00, 0x20,
487         0x00, 0xFF, SB_LPC_REG(0x8C), 0x02, 0x00,
488         0x00, 0xFF, SB_LPC_REG(0x8D), 0x00, 0x18,
489
490         //Miscellaneous Configuration 1
491         0x00, 0xFF, SB_LPC_REG(0x94), 0xF0, 0x28,
492         0x00, 0xFF, SB_LPC_REG(0x95), 0x00, 0xC1,
493         0x00, 0xFF, SB_LPC_REG(0x96), 0xFF, 0x10,
494         0x00, 0xFF, SB_LPC_REG(0x97), 0x00, 0xB2,
495
496         //Voltage Change Function Enable
497         0x00, 0xFF, SB_LPC_REG(0x9F), 0x00, 0x21,
498         //Internal PCIe and NM PLL Control
499         0x00, 0xFF, SB_LPC_REG(0xE2), 0x00, 0xEA,
500
501         0x00, 0xFF, SB_LPC_REG(0xE7), 0x00, 0x80,
502         {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // End of Table
503 };
504
505 void InitPMU(u8 sbchiprev)
506 {
507         u8 Mask, Value;
508         // Set PMU Registers
509         via_pci_inittable(sbchiprev, mPMUInitTable);
510
511
512         // Set SCI IRQ and its level trigger
513         Mask = 0x0F;
514         Value = 0x09;
515         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x82, Value, Mask);
516
517         Mask = 0x02;
518         Value = 0x02;
519         io_rawmodify_config8(0x4d1, Value, Mask);
520 }
521
522 #define R_SB_MULTI_FUNCTION_SELECT_1  0xE4
523 #define R_SB_CX_STATE_BREAK_EVENT_ENABLE_1  0xE6
524 #define PMIO_PROCESSOR_CONTROL  0x26
525 #define R_SB_PCI_ARBITRATION_2      0x76
526 #define R_SB_AUTO_SWITCH_P_STATE        0x8A
527
528 void InitCPUCStatueSupport()
529 {
530         u8 Mask, Value;
531
532         // Config Cx State
533         // Now it is C2 & C4 Up Down Mode
534         Mask = 0xFF;
535         Value = 0x30;
536         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), R_SB_CX_STATE_BREAK_EVENT_ENABLE_1, Value, Mask); //SB_LPC_REG
537
538         Mask = 0xFF;
539         Value = 0x1F;
540         io_rawmodify_config8(VX800_ACPI_IO_BASE + PMIO_PROCESSOR_CONTROL,
541                              Value, Mask);
542
543         Mask = 0x00;
544         Value = 0x80;
545         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 7), R_SB_PCI_ARBITRATION_2, Value, Mask);     //SB_VLINK_REG
546
547         Mask = 0xFF;
548         Value = 0x00;
549         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), R_SB_MULTI_FUNCTION_SELECT_1, Value, Mask);       //SB_VLINK_REG
550
551         Mask = 0xFF;
552         Value = 0x1F;
553         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), R_SB_AUTO_SWITCH_P_STATE, Value, Mask);   //SB_VLINK_REG
554 }
555
556 void InitSBPM(u8 sbchiprev)
557 {
558         InitPMU(sbchiprev);
559         SbAcpiInit();
560         InitCPUCStatueSupport();
561 }
562
563 void Stage2SbInit(void)
564 {
565         device_t_raw rawdevice = 0;
566         u8 sbchiprev;
567
568         rawdevice = PCI_RAWDEV(0, 11, 0);
569         sbchiprev = pci_rawread_config8(rawdevice, 0xf6);
570         printk(BIOS_DEBUG, "SB chip revision =%x\n", sbchiprev);
571
572         //SBBasicInit
573         via_pci_inittable(sbchiprev, mBusControllerInitTable);
574         via_pci_inittable(sbchiprev, mPCI1InitTable);
575         via_pci_inittable(sbchiprev, mCCAInitTable);
576
577
578         InitIDEC(sbchiprev);
579
580         InitUSBC(sbchiprev);
581
582         InitSBPM(sbchiprev);
583
584         SbApicInit(sbchiprev);
585
586         HpetInit();
587
588         //pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, 0x76, 0);//SB_VLINK_REG
589
590 }
591
592
593 void init_VIA_chipset(void)
594 {
595         printk(BIOS_DEBUG, "In: init_VIA_chipset\n");
596         //1.nbstage1 is done in raminit.
597         //2.sbstage1
598         AcpiInit();
599         //3.nbstage2
600         Stage2NbInit();
601
602         //4.sbstage2
603         Stage2SbInit();
604
605         //5.open hdac
606         pci_rawmodify_config32(PCI_RAWDEV(0, 0x11, 7), 0xd1, 0, 0x04);
607         printk(BIOS_DEBUG, "End: init_VIA_chipset\n");
608 }
609
610 /**
611  * @brief Main function of the DRAM part of coreboot.
612  *
613  * Coreboot is divided into Pre-DRAM part and DRAM part.
614  *
615  *
616  * Device Enumeration:
617  *      In the dev_enumerate() phase,
618  */
619
620 void hardwaremain(int boot_complete)
621 {
622         struct lb_memory *lb_mem;
623 #if CONFIG_HAVE_ACPI_RESUME == 1
624         void *wake_vec;
625 #endif
626
627         u16 tmp;
628         tmp = inw(VX800_ACPI_IO_BASE + 0x04);
629         acpi_sleep_type = ((tmp & (7 << 10)) >> 10) == 1 ? 3 : 0;
630
631         u8 y, x;
632         init_VIA_chipset();
633         printk(BIOS_EMERG, "file '%s', line %d\n\n", __FILE__, __LINE__);
634
635 #if 0
636
637         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 4), 0xa3, 0x80);
638         pci_rawwrite_config8(PCI_RAWDEV(0, 17, 7), 0x60, 0x20);
639         pci_rawwrite_config8(PCI_RAWDEV(0, 17, 7), 0xE5,
640                              pci_rawread_config8(PCI_RAWDEV(0, 3, 0),
641                                                  0x88));
642 #endif
643
644         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x51, 0x40, 0x40);        //close CE-ATA (Consumer Electronics-ATA) and NFC
645
646         //pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, 0x0, 0x40);//open USB Device Mode Enable
647         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, 0x40, 0x40);        //close USB Device Mode
648
649         //pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, 0x04, 0x04);//close USB 1.1 UHCI Port 4-5
650         //pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, 0x02, 0x02);//close USB 2.0 ehci
651
652
653         //pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, 0x00, 0x76);//open all usb and usb mode
654         //pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x50, 0x76, 0x76);//close all usb
655
656         printk(BIOS_INFO, "=================SB 50h=%02x \n",
657                     pci_rawread_config8(PCI_RAWDEV(0, 0x11, 0), 0x50));
658
659
660         /* FIXME: Is there a better way to handle this? */
661         init_timer();
662         printk(BIOS_EMERG, "file '%s', line %d\n\n", __FILE__, __LINE__);
663
664         /* Find the devices we don't have hard coded knowledge about. */
665         dev_enumerate();
666         printk(BIOS_EMERG, "file '%s', line %d\n\n", __FILE__, __LINE__);
667 #if 0
668         x = y = 0;
669         printk(BIOS_INFO, "dump ehci3 \n");
670         for (; x < 16; x++) {
671                 y = 0;
672                 for (; y < 16; y++) {
673                         printk(BIOS_INFO, "%02x ",
674                                     pci_rawread_config8(PCI_RAWDEV
675                                                         (0, 0x10, 4),
676                                                         x * 16 + y));
677                 }
678                 printk(BIOS_INFO, "\n");
679         }
680 #endif
681
682         post_code(0x66);
683         /* Now compute and assign the bus resources. */
684         dev_configure();
685         printk(BIOS_EMERG, "file '%s', line %d\n\n", __FILE__, __LINE__);
686 #if 0
687         x = y = 0;
688         printk(BIOS_INFO, "dump ehci3 \n");
689         for (; x < 16; x++) {
690                 y = 0;
691                 for (; y < 16; y++) {
692                         printk(BIOS_INFO, "%02x ",
693                                     pci_rawread_config8(PCI_RAWDEV
694                                                         (0, 0x10, 4),
695                                                         x * 16 + y));
696                 }
697                 printk(BIOS_INFO, "\n");
698         }
699 #endif
700
701         post_code(0x88);
702         /* Now actually enable devices on the bus */
703         dev_enable();
704         printk(BIOS_EMERG, "file '%s', line %d\n\n", __FILE__, __LINE__);
705         /* And of course initialize devices on the bus */
706 #if 0
707         x = y = 0;
708         printk(BIOS_INFO, "dump ehci3 \n");
709         for (; x < 16; x++) {
710                 y = 0;
711                 for (; y < 16; y++) {
712                         printk(BIOS_INFO, "%02x ",
713                                     pci_rawread_config8(PCI_RAWDEV
714                                                         (0, 0x10, 4),
715                                                         x * 16 + y));
716                 }
717                 printk(BIOS_INFO, "\n");
718         }
719 #endif
720
721         dev_initialize();
722         post_code(0x89);
723         printk(BIOS_EMERG, "file '%s', line %d\n\n", __FILE__, __LINE__);
724
725
726 //          pci_rawwrite_config16(PCI_RAWDEV(0, 0xf, 0), 0xBA, 0x0571);
727
728 #if 0
729         x = y = 0;
730         printk(BIOS_INFO, "dump ehci3 \n");
731         for (; x < 16; x++) {
732                 y = 0;
733                 for (; y < 16; y++) {
734                         printk(BIOS_INFO, "%02x ",
735                                     pci_rawread_config8(PCI_RAWDEV
736                                                         (0, 0x10, 4),
737                                                         x * 16 + y));
738                 }
739                 printk(BIOS_INFO, "\n");
740         }
741 #endif
742
743
744 #if 0
745
746         y = pci_rawread_config8(PCI_RAWDEV(0, 0xf, 0), 0x0d);
747         y &= 0x0f;
748         y |= 0x40;
749         pci_rawwrite_config8(PCI_RAWDEV(0, 0xf, 0), 0x0d, y);
750 #endif
751
752 #if 0
753
754
755         static const d0f0pcitable[5] = { 0xD0, 0, 0, 0, 0xFD };
756         static const d0f2pcitable[16 * 7 + 1] = {
757                 0x88, 0xF8, 0xEF, 0x44, 0x7C, 0x24, 0x63, 0x01, 0x00, 0x09,
758                     0x00, 0x00, 0x10, 0xA2, 0x88, 0xCE,
759                 0xFF, 0x0F, 0x00, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00,
760                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
761                 0xCC, 0x66, 0xAA, 0x55, 0x30, 0x38, 0x0C, 0x00, 0x00, 0x00,
762                     0x00, 0x22, 0x00, 0xAA, 0x00, 0x00,
763                 0x44, 0x44, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
764                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
765                 0x0B, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x41, 0x06,
766                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
767                 0x00, 0x88, 0x56, 0x70, 0x77, 0x77, 0x07, 0x77, 0x77, 0x04,
768                     0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
769                 0x77, 0x77, 0x33, 0x33, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
770                     0x77, 0x77, 0x44, 0x44, 0x14, 0x00,
771                 0x75
772         };
773
774         static const d0f4pcitable[16 * 6 + 3] = {
775                 0x30, 0x00, 0x00,
776                 0xFF, 0xFF, 0xCC, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
777                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
778                 0x80, 0xE0, 0xD6, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
779                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
780                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
781                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
782                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
783                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
784                 0x00, 0x01, 0x02, 0x03, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04,
785                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
786                 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x00, 0x00, 0x08, 0xF4,
787                     0x01, 0x01, 0x79, 0x79, 0x0A, 0x00,
788         };
789         static const d0f5pcitable[16 * 10] = {
790                 0x13, 0x0E, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00,
791                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
792                 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
793                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
794                 0x18, 0x9A, 0x00, 0x81, 0x28, 0xC0, 0x00, 0x00, 0x00, 0x00,
795                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
796                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
797                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
798                 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
799                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
800                 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
801                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
802                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
803                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
804                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
805                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
806                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
807                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
808                 0x26, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
809                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
810         };
811
812         static const d0f7pcitable[16 * 9] = {
813                 0x00, 0x2A, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
814                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
815                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
816                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
817                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
818                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
819                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
820                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
821                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
822                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
823                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
824                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
825                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
826                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
827                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
828                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
829                 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x29, 0x00, 0x00, 0x00,
830                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
831         };
832         static const d1f0pcitable[3] = {
833                 0x01, 0x80, 0x40
834         };
835
836         static const dcf0pcitable[96] = {
837                 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
838                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
839                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
840                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
841                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
842                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
843                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
844                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
845                 0x01, 0x00, 0xC2, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
846                     0x40, 0x01, 0x03, 0x01, 0x7E, 0x01,
847                 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9,
848                     0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
849         };
850
851         static const d10f4pcitable[48] = {
852                 0x00, 0x20, 0x43, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x68,
853                     0x00, 0x09, 0x13, 0x94, 0x03, 0x10,
854                 0x80, 0x60, 0x11, 0xBF, 0x00, 0xFF, 0x0F, 0x00, 0x04, 0x0B,
855                     0xCC, 0xCC, 0x00, 0xCC, 0x00, 0x00,
856                 0x20, 0x20, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00,
857                     0x00, 0x00, 0x00, 0x20, 0x00, 0xC0,
858         };
859
860         static const d11f0pcitable[16 * 12] = {
861                 0x44, 0x40, 0xF0, 0x0B, 0x00, 0x00, 0x00, 0x03, 0x00, 0x20,
862                     0x00, 0x00, 0x04, 0x00, 0x08, 0x00,
863                 0xC1, 0x4D, 0x19, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
864                     0x00, 0x51, 0x00, 0x00, 0x00, 0x00,
865                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00,
866                     0xD0, 0xFE, 0x00, 0x00, 0x00, 0x00,
867                 0x06, 0x11, 0x09, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
868                     0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
869                 0x20, 0x84, 0x49, 0x00, 0x88, 0x00, 0x00, 0x00, 0x01, 0x08,
870                     0x1F, 0x00, 0x07, 0x1A, 0x00, 0x00,
871                 0x00, 0x6E, 0xBC, 0x88, 0x28, 0xC1, 0x10, 0x80, 0x00, 0x80,
872                     0x20, 0x88, 0x00, 0x00, 0x00, 0xAD,
873                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
874                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
875                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
876                     0x00, 0x00, 0x10, 0xD0, 0xFE, 0x90,
877                 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
878                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
879                 0x01, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
880                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
881                 0x00, 0x00, 0xE7, 0x03, 0xA0, 0x60, 0x20, 0xC0, 0x00, 0x00,
882                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
883                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
884                     0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
885         };
886
887         static const d11f7pcitable[192] = {
888                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
889                     0x00, 0x00, 0x00, 0x00, 0x80, 0x43,
890                 0x08, 0x80, 0x11, 0x11, 0x02, 0x0F, 0x00, 0x00, 0x00, 0x00,
891                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
892                 0x80, 0x00, 0x00, 0x20, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
893                     0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
894                 0x82, 0xC8, 0xEE, 0x01, 0x0C, 0x0F, 0xD0, 0x48, 0x00, 0x00,
895                     0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
896                 0x07, 0x00, 0x21, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
897                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
898                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
899                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
900                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
901                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
902                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
903                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
904                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
905                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
906                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
907                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
908                 0x93, 0x08, 0x00, 0x5E, 0x00, 0x80, 0x29, 0x00, 0x00, 0x00,
909                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
910                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
911                     0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
912         };
913
914
915 #define OPTION_1 1
916 #define NOOPTION_1 1
917 #ifdef OPTION_1
918         static const OPTION_1_d11f0pcitable[16 * 12] = {
919                 0x44, 0x80, 0xf0, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x20,
920                     0x00, 0x00, 0x04, 0x01, 0x08, 0x00,
921                 0xc0, 0x4d, 0x19, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
922                     0x00, 0x53, 0x00, 0xfe, 0x00, 0x00,
923                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x80, 0x00,
924                     0xd0, 0xfe, 0x00, 0x00, 0xdf, 0x00,
925                 0x06, 0x11, 0x53, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
926                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
927                 0x20, 0x84, 0x4a, 0x00, 0xda, 0x40, 0x00, 0x00, 0x01, 0x40,
928                     0x1f, 0x00, 0x07, 0x18, 0x00, 0x00,
929                 0x00, 0x2e, 0xbc, 0x00, 0x28, 0xc1, 0x10, 0x80, 0x00, 0x80,
930                     0x08, 0x88, 0x00, 0x00, 0x00, 0xad,
931                 0x06, 0x11, 0x53, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
932                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
933                 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x40,
934                     0x00, 0x00, 0x00, 0xd3, 0xfe, 0x53,
935                 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
936                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
937                 0x01, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
938                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
939                 0x00, 0x00, 0xeb, 0x03, 0xa0, 0x60, 0x20, 0x80, 0x00, 0x00,
940                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
941                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
942                     0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
943         };
944 #endif
945
946
947
948         u8 i;
949 /* error form ---- but add the chance to resume
950 for(i=0;i<5;i++){
951                 pci_rawwrite_config8(PCI_RAWDEV(0, 0, 0), i, d0f0pcitable[i+0xcb]);
952         }
953
954
955 */
956
957 /* RO reg
958 for(i=0;i<5;i++){
959                 pci_rawwrite_config8(PCI_RAWDEV(0, 0, 0), i+0xcb, d0f0pcitable[i]);
960         }
961 */
962
963
964 //boot ok, resume still err in linux
965 #if 1
966         for (i = 0; i < 9; i++) {
967                 pci_rawwrite_config8(PCI_RAWDEV(0, 0, 2), i + 0x50,
968                                      d0f2pcitable[i]);
969         }
970         //9 is warm reset reg,   // boot err in coreboot
971         for (i = 10; i < 64; i++) {
972                 pci_rawwrite_config8(PCI_RAWDEV(0, 0, 2), i + 0x50,
973                                      d0f2pcitable[i]);
974         }
975         //0x90 look d0f2 appendixA1 ,   if set this to 09 or 0b, then some ddr2 will crash.
976         for (i = 65; i < 113; i++) {
977                 pci_rawwrite_config8(PCI_RAWDEV(0, 0, 2), i + 0x50,
978                                      d0f2pcitable[i]);
979         }
980 #endif
981 #ifdef OPTION_1
982         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 2), 0x66, 0x09);
983         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 2), 0x70, 0xdd);
984         //  pci_rawwrite_config8(PCI_RAWDEV(0, 0, 2), 0x90, 0x09);
985         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 2), 0x92, 0x40);
986
987 #endif
988
989
990
991 #if 1
992
993
994 //d0f3
995 /*              */
996         //      pci_rawwrite_config8(PCI_RAWDEV(0, 0, 3), 0x86, 0x3b);  setting, my lspci is 0x29
997         //set bit4 cause the ide not be found
998 //              pci_rawwrite_config8(PCI_RAWDEV(0, 0, 3), 0x86, 0x2b);
999         //set bit1 cause the ide not be found
1000
1001 //              pci_rawwrite_config8(PCI_RAWDEV(0, 0, 3), 0x86, 0x29);
1002         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 3), 0x95, 0x05);
1003         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 3), 0x99, 0x12);
1004
1005         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 3), 0xde, 0x00);
1006 #endif
1007
1008 //boot ok,  resume err in coreboot
1009 #if 1
1010         for (i = 0; i < 99; i++) {
1011                 pci_rawwrite_config8(PCI_RAWDEV(0, 0, 4), i + 0x8d,
1012                                      d0f4pcitable[i]);
1013         }
1014 #endif
1015
1016 #ifdef OPTION_1
1017         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 4), 0xe9, 0x90);
1018         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 4), 0xec, 0x0);
1019         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 4), 0xed, 0x0);
1020         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 4), 0xee, 0x0);
1021 #endif
1022
1023
1024 #if 1
1025 //boot ok, resume still err in linux
1026         for (i = 0; i < 160; i++) {
1027                 pci_rawwrite_config8(PCI_RAWDEV(0, 0, 5), i + 0x60,
1028                                      d0f5pcitable[i]);
1029         }
1030         for (i = 0; i < 144; i++) {
1031                 pci_rawwrite_config8(PCI_RAWDEV(0, 0, 7), i + 0x60,
1032                                      d0f7pcitable[i]);
1033         }
1034         for (i = 0; i < 3; i++) {
1035                 pci_rawwrite_config8(PCI_RAWDEV(0, 1, 0), i + 0xb0,
1036                                      d1f0pcitable[i]);
1037         }
1038         for (i = 0; i < 96; i++) {
1039                 pci_rawwrite_config8(PCI_RAWDEV(0, 0xc, 0), i + 0x40,
1040                                      dcf0pcitable[i]);
1041         }
1042 #endif
1043
1044 #ifdef OPTION_1
1045         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 7), 0x61, 0x0);
1046         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 7), 0x63, 0x0);
1047         pci_rawwrite_config8(PCI_RAWDEV(0, 0, 7), 0x76, 0xd0);
1048         pci_rawwrite_config8(PCI_RAWDEV(0, 0xc, 0), 0x88, 0x81);
1049         pci_rawwrite_config8(PCI_RAWDEV(0, 0xc, 0), 0x89, 0x01);
1050         pci_rawwrite_config8(PCI_RAWDEV(0, 0xc, 0), 0x8A, 0x60);
1051 #endif
1052
1053 //d15f0
1054
1055
1056
1057
1058 #if 1
1059
1060         pci_rawwrite_config8(PCI_RAWDEV(0, 0x10, 0), 0x4a, 0xa2);       // no affect.
1061         pci_rawwrite_config8(PCI_RAWDEV(0, 0x10, 1), 0x4a, 0xa2);
1062         pci_rawwrite_config8(PCI_RAWDEV(0, 0x10, 2), 0x4a, 0xa2);
1063
1064 //boot ok, resume still err in linux,  and if disable USB, then all ok
1065 //      for(i=0;i<48;i++){
1066         for (i = 0; i < 44; i++) {
1067                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x10, 4), i + 0x40,
1068                                      d10f4pcitable[i]);
1069         }
1070 #endif
1071
1072 //#ifdef NOOPTION_1
1073 #if 0
1074         pci_rawwrite_config8(PCI_RAWDEV(0, 0x10, 4), 0x6b, 0x01);
1075         pci_rawwrite_config8(PCI_RAWDEV(0, 0x10, 4), 0x6d, 0x00);
1076         pci_rawwrite_config8(PCI_RAWDEV(0, 0x10, 4), 0x6e, 0x08);
1077         pci_rawwrite_config8(PCI_RAWDEV(0, 0x10, 4), 0x6f, 0x80);
1078 #endif
1079
1080
1081
1082 #if 1
1083 //before (11.0)is add, s3 resume has already always dead in first resume(more frequenly), and sleep ok
1084 //      for(i=0;i<192;i++){
1085         for (i = 0; i < 6; i++) {
1086                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1087                                      d11f0pcitable[i]);
1088         }
1089         //6 is uart and dvp vcp,   will have // HAVE no com1 ,and no gui show,textmode ok ,s3 sleep ok, resume fail
1090
1091         //7-18 is my familar part
1092         for (i = 7; i < 18; i++) {      //sleep ok ,resume sleep err 2
1093                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1094                                      d11f0pcitable[i]);
1095         }
1096
1097
1098         for (i = 18; i < 21; i++) {     //sleep ok ,   sleep err 1, resume
1099                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1100                                      d11f0pcitable[i]);
1101         }
1102         //0x55 56 57 irq intA#B#C# linkA#linkB#linkC#
1103         for (i = 24; i < 27; i++) {     //sleep ok , resume sleep err 1  resume  1
1104                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1105                                      d11f0pcitable[i]);
1106         }
1107         //5b port 80h
1108         pci_rawmodify_config8(PCI_RAWDEV(0, 0x11, 0), 0x5b, 0x0, 0x08);
1109         //          i++;
1110         //      pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i+0x40, d11f0pcitable[i]);
1111
1112         for (i = 28; i < 72; i++) {     //sleep ok , resume  sleep err 1 , resume 1ci
1113                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1114                                      d11f0pcitable[i]);
1115         }
1116         //7273ACPI BASE
1117
1118         for (i = 74; i < 112; i++) {    //boot ok, resume still err in linux
1119                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1120                                      d11f0pcitable[i]);
1121         }
1122
1123         //B0B4B5 dvp vcp,  if copy this ,then no uart, no gui(of unbuntu)
1124         // pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), 0xb0, d11f0pcitable[112]);
1125         i = pci_rawread_config8(PCI_RAWDEV(0, 17, 0), 0xB0);
1126         //multiplex with VCP
1127         //    i = i | 0x30;
1128         i = i & 0xf7;
1129         pci_rawwrite_config8(PCI_RAWDEV(0, 17, 0), 0xB0, i);
1130
1131
1132
1133         for (i = 113; i < 114; i++) {   //boot ok, resume still err in linux
1134                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1135                                      d11f0pcitable[i]);
1136         }
1137
1138         for (i = 115; i < 116; i++) {   //boot ok, resume still err in linux
1139                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1140                                      d11f0pcitable[i]);
1141         }
1142
1143
1144         for (i = 118; i < 192; i++) {   //boot ok, resume still err in linux
1145                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1146                                      d11f0pcitable[i]);
1147         }
1148 #endif
1149 #ifdef NOOPTION_1
1150 //      for(i=0;i<192;i++){
1151         for (i = 0; i < 6; i++) {
1152                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1153                                      OPTION_1_d11f0pcitable[i]);
1154         }
1155         //6 is uart and dvp vcp,   will have // HAVE no com1 ,and no gui show,textmode ok ,s3 sleep ok, resume fail
1156
1157         //7-18 is my familar part
1158         for (i = 7; i < 18; i++) {      //   sleep err 2
1159                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1160                                      OPTION_1_d11f0pcitable[i]);
1161         }
1162
1163         for (i = 18; i < 21; i++) {     //sleep ok , resume ???
1164                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1165                                      d11f0pcitable[i]);
1166         }
1167         //0x55 56 57 irq intA#B#C# linkA#linkB#linkC#
1168         for (i = 24; i < 27; i++) {     //sleep ok , resume ???
1169                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1170                                      d11f0pcitable[i]);
1171         }
1172         //5b port 80h
1173         i++;
1174         pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1175                              OPTION_1_d11f0pcitable[i]);
1176
1177         for (i = 28; i < 72; i++) {     //sleep ok , resume???
1178                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1179                                      OPTION_1_d11f0pcitable[i]);
1180         }
1181         //7273ACPI BASE
1182
1183         for (i = 74; i < 112; i++) {    //boot ok, resume still err in linux
1184                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1185                                      OPTION_1_d11f0pcitable[i]);
1186         }
1187
1188         //B0B4B5 dvp vcp,  if copy this ,then no uart, no gui(of unbuntu)
1189         // pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), 0xb0, OPTION_1_d11f0pcitable[112]);
1190         i = pci_rawread_config8(PCI_RAWDEV(0, 17, 0), 0xB0);
1191         //multiplex with VCP
1192         //    i = i | 0x30;
1193         i = i & 0xf7;
1194         pci_rawwrite_config8(PCI_RAWDEV(0, 17, 0), 0xB0, i);
1195
1196
1197
1198         for (i = 113; i < 114; i++) {   //boot ok, resume still err in linux
1199                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1200                                      OPTION_1_d11f0pcitable[i]);
1201         }
1202
1203         for (i = 115; i < 116; i++) {   //boot ok, resume still err in linux
1204                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1205                                      OPTION_1_d11f0pcitable[i]);
1206         }
1207
1208         for (i = 118; i < 192; i++) {   //boot ok, resume still err in linux
1209                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), i + 0x40,
1210                                      OPTION_1_d11f0pcitable[i]);
1211         }
1212 #endif
1213
1214 #if 1
1215         pci_rawwrite_config16(PCI_RAWDEV(0, 0xf, 0), 0xBA, PCI_DEVICE_ID_VIA_VX855_IDE);        //5324
1216         pci_rawwrite_config16(PCI_RAWDEV(0, 0xf, 0), 0xBE,
1217                               PCI_DEVICE_ID_VIA_VX855_IDE);
1218         pci_rawwrite_config16(PCI_RAWDEV(0, 0x11, 0), 0xA0,
1219                               PCI_VENDOR_ID_VIA);
1220         pci_rawwrite_config16(PCI_RAWDEV(0, 0x11, 0), 0xA2, PCI_DEVICE_ID_VIA_VX855_LPC);       //8353
1221         i = pci_rawread_config8(PCI_RAWDEV(0, 0x11, 0), 0x79);
1222         i &= ~0x40;
1223         i |= 0x40;
1224         pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 0), 0x79, i);
1225         pci_rawwrite_config16(PCI_RAWDEV(0, 0x11, 0), 0x72,
1226                               PCI_DEVICE_ID_VIA_VX855_LPC);
1227
1228
1229 //boot ok, resume still err in linux
1230         for (i = 0; i < 192; i++) {
1231                 pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 7), i + 0x40,
1232                                      d11f7pcitable[i]);
1233         }
1234 #endif
1235 #ifdef OPTION_1
1236         pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 7), 0x61, 0x2a);
1237         pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 7), 0x63, 0xa0);
1238         pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 7), 0x64, 0xaa);
1239         pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 7), 0x84, 0x0);
1240         pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 7), 0x88, 0x02);
1241         pci_rawwrite_config8(PCI_RAWDEV(0, 0x11, 7), 0xe6, 0x3f);
1242 #endif
1243
1244         pci_rawwrite_config8(PCI_RAWDEV(0, 0x14, 0), 0x40, 0x20);
1245         pci_rawwrite_config8(PCI_RAWDEV(0, 0x14, 0), 0x41, 0x31);
1246
1247
1248
1249 #ifdef OPTION_1
1250         pci_rawwrite_config8(PCI_RAWDEV(0, 0x14, 0), 0x40, 0x00);
1251 #endif
1252
1253
1254 #endif
1255
1256         u8 i911;
1257         //disable CHB L.L
1258         //set VGA memory selection
1259         i911 = pci_rawread_config8(PCI_RAWDEV(0, 0x1, 0), 0xb0);
1260         i911 &= 0xF8;
1261         //ByteVal |= 0x03;
1262         i911 |= 0x01;
1263         pci_rawwrite_config8(PCI_RAWDEV(0, 0x1, 0), 0xb0, i911);
1264
1265
1266 #if 1
1267         struct device *dev;
1268         printk(BIOS_INFO, "=========zjldump all  devices...\n");
1269         for (dev = all_devices; dev; dev = dev->next) {
1270                 if (dev->path.type == DEVICE_PATH_PCI) {
1271                         printk(BIOS_DEBUG, "%s dump\n", dev_path(dev));
1272                         x = y = 0;
1273                         for (; x < 16; x++) {
1274                                 y = 0;
1275                                 for (; y < 16; y++) {
1276                                         printk(BIOS_INFO, "%02x ",
1277                                                     pci_read_config8(dev,
1278                                                                      x *
1279                                                                      16 +
1280                                                                      y));
1281                                 }
1282                                 printk(BIOS_INFO, "\n");
1283                         }
1284
1285                 }
1286                 printk(BIOS_INFO, "\n");
1287         }
1288 #endif
1289
1290
1291
1292
1293         //pci_rawmodify_config8(PCI_RAWDEV(0, 0x10, 4), 0x04, 0x17, 0x17);//
1294 //      pci_rawmodify_config8(PCI_RAWDEV(0, 0x10, 4), 0x0c, 0x08, 0xff);///
1295
1296
1297
1298 }