2 * This file is part of the coreboot project.
4 * Copyright (C) 2007 Silicon Integrated Systems Corp. (SiS)
5 * Written by Morgan Tsai <my_tsai@sis.com> for SiS.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #include "sis966_smbus.h"
24 #define SMBUS0_IO_BASE 0x8D0
26 static const uint8_t SiS_LPC_init[34][3]={
27 {0x04, 0xF8, 0x07}, //Reg 0x04
28 {0x45, 0x00, 0x00}, //Reg 0x45 //Enable Rom Flash
29 {0x46, 0x00, 0x3D}, //Reg 0x46
30 {0x47, 0x00, 0xDD}, //Reg 0x47
31 {0x48, 0x00, 0x12}, //Reg 0x48
32 {0x64, 0x00, 0xFF}, //Reg 0x64
33 {0x65, 0x00, 0xC1}, //Reg 0x65
34 {0x68, 0x00, 0x89}, //Reg 0x68 //SB.ASM, START POST
35 {0x69, 0x00, 0x80}, //Reg 0x69
36 {0x6B, 0x00, 0x00}, //Reg 0x6B //SBBB.ASM
37 {0x6C, 0xFF, 0x97}, //Reg 0x6C //SBBB.ASM
38 {0x6E, 0x00, 0x00}, //Reg 0x6E //SBBB.ASM But in Early Post sets 0x04.
39 {0x6F, 0xFF, 0x14}, //Reg 0x6F //SBBB.ASM
40 {0x77, 0x00, 0x0E}, //Reg 0x77 //SBOEM.ASM, EARLY POST
41 {0x78, 0x00, 0x20}, //Reg 0x78
42 {0x7B, 0x00, 0x88}, //Reg 0x7B
43 {0x7F, 0x00, 0x40}, //Reg 0x7F //SBOEM.ASM, EARLY POST
44 {0xC1, 0x00, 0xF0}, //Reg 0xC1
45 {0xC2, 0x00, 0x01}, //Reg 0xC2
46 {0xC3, 0x00, 0x00}, //Reg 0xC3 //NBAGPBB.ASM
47 {0xC9, 0x00, 0x80}, //Reg 0xC9
48 {0xCF, 0x00, 0x45}, //Reg 0xCF
49 {0xD0, 0x00, 0x02}, //Reg 0xD0
50 {0xD4, 0x00, 0x44}, //Reg 0xD4
51 {0xD5, 0x00, 0x62}, //Reg 0xD5
52 {0xD6, 0x00, 0x32}, //Reg 0xD6
53 {0xD8, 0x00, 0x45}, //Reg 0xD8
54 {0xDA, 0x00, 0xDA}, //Reg 0xDA
55 {0xDB, 0x00, 0x61}, //Reg 0xDB
56 {0xDC, 0x00, 0xAA}, //Reg 0xDC
57 {0xDD, 0x00, 0xAA}, //Reg 0xDD
58 {0xDE, 0x00, 0xAA}, //Reg 0xDE
59 {0xDF, 0x00, 0xAA}, //Reg 0xDF
60 {0x00, 0x00, 0x00} //End of table
63 static const uint8_t SiS_NBPCIE_init[43][3]={
64 {0x3D, 0x00, 0x00}, //Reg 0x3D
65 {0x1C, 0xFE, 0x01}, //Reg 0x1C
66 {0x1D, 0xFE, 0x01}, //Reg 0x1D
67 {0x24, 0xFE, 0x01}, //Reg 0x24
68 {0x26, 0xFE, 0x01}, //Reg 0x26
69 {0x40, 0xFF, 0x10}, //Reg 0x40
70 {0x43, 0xFF, 0x78}, //Reg 0x43
71 {0x44, 0xFF, 0x02}, //Reg 0x44
72 {0x45, 0xFF, 0x10}, //Reg 0x45
73 {0x48, 0xFF, 0x52}, //Reg 0x48
74 {0x49, 0xFF, 0xE3}, //Reg 0x49
75 {0x5A, 0x00, 0x00}, //Reg 0x4A
76 {0x4B, 0x00, 0x16}, //Reg 0x4B
77 {0x4C, 0x00, 0x80}, //Reg 0x4C
78 {0x4D, 0x00, 0x02}, //Reg 0x4D
79 {0x4E, 0x00, 0x00}, //Reg 0x4E
80 {0x5C, 0x00, 0x52}, //Reg 0x5C
81 {0x5E, 0x00, 0x10}, //Reg 0x5E
82 {0x34, 0x00, 0xD0}, //Reg 0x34
83 {0xD0, 0x00, 0x01}, //Reg 0xD0
84 {0x4F, 0x00, 0x80}, //Reg 0x4F
85 {0xA1, 0x00, 0xF4}, //Reg 0xA1
86 {0xA2, 0x7F, 0x00}, //Reg 0xA2
87 {0xBD, 0x00, 0xA0}, //Reg 0xBD
88 {0xD1, 0xFF, 0x00}, //Reg 0xD1
89 {0xD3, 0xFE, 0x01}, //Reg 0xD3
90 {0xD4, 0x18, 0x20}, //Reg 0xD4
91 {0xD5, 0xF0, 0x00}, //Reg 0xD5
92 {0xDD, 0xFF, 0x00}, //Reg 0xDD
93 {0xDE, 0xEC, 0x10}, //Reg 0xDE
94 {0xDF, 0xFF, 0x00}, //Reg 0xDF
95 {0xE0, 0xF7, 0x00}, //Reg 0xE0
96 {0xE3, 0xEF, 0x10}, //Reg 0xE3
97 {0xE4, 0x7F, 0x80}, //Reg 0xE4
98 {0xE5, 0xFF, 0x00}, //Reg 0xE5
99 {0xE6, 0x06, 0x00}, //Reg 0xE6
100 {0xE7, 0xFF, 0x00}, //Reg 0xE7
101 {0xF5, 0x00, 0x00}, //Reg 0xF5
102 {0xF6, 0x3F, 0x00}, //Reg 0xF6
103 {0xF7, 0xFF, 0x00}, //Reg 0xF7
104 {0xFD, 0xFF, 0x00}, //Reg 0xFD
105 {0x4F, 0x00, 0x00}, //Reg 0x4F
106 {0x00, 0x00, 0x00} //End of table
109 static const uint8_t SiS_ACPI_init[10][3]={
110 {0x1B, 0xBF, 0x40}, //Reg 0x1B
111 {0x84, 0x00, 0x0E}, //Reg 0x84
112 {0x85, 0x00, 0x29}, //Reg 0x85
113 {0x86, 0x00, 0xCB}, //Reg 0x86
114 {0x87, 0x00, 0x55}, //Reg 0x87
115 {0x6B, 0x00, 0x00}, //Reg 0x6B
116 {0x6C, 0x68, 0x97}, //Reg 0x6C
117 {0x6E, 0x00, 0x00}, //Reg 0x6E
118 {0x6F, 0xFF, 0x14}, //Reg 0x6F
119 {0x00, 0x00, 0x00} //End of table
122 static const uint8_t SiS_SBPCIE_init[13][3]={
123 {0x48, 0x00 ,0x07}, //Reg 0x48
124 {0x49, 0x00 ,0x06}, //Reg 0x49
125 {0x4A, 0x00 ,0x0C}, //Reg 0x4A
126 {0x4B, 0x00 ,0x00}, //Reg 0x4B
127 {0x4E, 0x00 ,0x20}, //Reg 0x4E
128 {0x1C, 0x00 ,0xF1}, //Reg 0x1C
129 {0x1D, 0x00 ,0x01}, //Reg 0x1D
130 {0x24, 0x00 ,0x01}, //Reg 0x24
131 {0x26, 0x00 ,0x01}, //Reg 0x26
132 {0xF6, 0x00 ,0x02}, //Reg 0xF6
133 {0xF7, 0x00 ,0xC8}, //Reg 0xF7
134 {0x5B, 0x00 ,0x40}, //Reg 0x5B
135 {0x00, 0x00, 0x00} //End of table
138 static const uint8_t SiS_NB_init[56][3]={
139 {0x04, 0x00 ,0x07}, //Reg 0x04
140 {0x05, 0x00 ,0x00}, //Reg 0x05 // alex
141 {0x0D, 0x00 ,0x20}, //Reg 0x0D
142 {0x2C, 0x00 ,0x39}, //Reg 0x2C
143 {0x2D, 0x00 ,0x10}, //Reg 0x2D
144 {0x2E, 0x00 ,0x61}, //Reg 0x2E
145 {0x2F, 0x00 ,0x07}, //Reg 0x2F
146 {0x34, 0x00 ,0xA0}, //Reg 0x34
147 {0x40, 0x00 ,0x36}, //Reg 0x40
148 {0x42, 0x00 ,0xB9}, //Reg 0x42
149 {0x43, 0x00 ,0x8B}, //Reg 0x43
150 {0x44, 0x00 ,0x05}, //Reg 0x44
151 {0x45, 0x00 ,0xFF}, //Reg 0x45
152 {0x46, 0x00 ,0x90}, //Reg 0x46
153 {0x47, 0x00 ,0xA0}, //Reg 0x47
154 //{0x4C, 0xFF ,0x09}, //Reg 0x4C // SiS307 enable
155 {0x4E, 0x00 ,0x00}, //Reg 0x4E
156 {0x4F, 0x00 ,0x02}, //Reg 0x4F
157 {0x5B, 0x00 ,0x44}, //Reg 0x5B
158 {0x5D, 0x00 ,0x00}, //Reg 0x5D
159 {0x5E, 0x00 ,0x25}, //Reg 0x5E
160 {0x61, 0x00 ,0xB0}, //Reg 0x61
161 {0x65, 0x00 ,0xB0}, //Reg 0x65
162 {0x68, 0x00 ,0x4C}, //Reg 0x68
163 {0x69, 0x00 ,0xD0}, //Reg 0x69
164 {0x6B, 0x00 ,0x07}, //Reg 0x6B
165 {0x6C, 0x00 ,0xDD}, //Reg 0x6C
166 {0x6D, 0x00 ,0xAD}, //Reg 0x6D
167 {0x6E, 0x00 ,0xE8}, //Reg 0x6E
168 {0x6F, 0x00 ,0x4D}, //Reg 0x6F
169 {0x70, 0x00 ,0x00}, //Reg 0x70
170 {0x71, 0x00 ,0x80}, //Reg 0x71
171 {0x72, 0x00 ,0x00}, //Reg 0x72
172 {0x73, 0x00 ,0x00}, //Reg 0x73
173 {0x74, 0x00 ,0x01}, //Reg 0x74
174 {0x75, 0x00 ,0x10}, //Reg 0x75
175 {0x7E, 0x00 ,0x29}, //Reg 0x7E
176 {0x8B, 0x00 ,0x10}, //Reg 0x8B
177 {0x8D, 0x00 ,0x03}, //Reg 0x8D
178 {0xA1, 0x00 ,0xD0}, //Reg 0xA1
179 {0xA2, 0x00 ,0x30}, //Reg 0xA2
180 {0xA4, 0x00 ,0x0B}, //Reg 0xA4
181 {0xA9, 0x00 ,0x02}, //Reg 0xA9
182 {0xB0, 0x00 ,0x30}, //Reg 0xB0
183 {0xB4, 0x00 ,0x30}, //Reg 0xB4
184 {0x90, 0x00 ,0x00}, //Reg 0x90
185 {0x91, 0x00 ,0x00}, //Reg 0x91
186 {0x92, 0x00 ,0x00}, //Reg 0x92
187 {0x93, 0x00 ,0x00}, //Reg 0x93
188 {0x94, 0x00 ,0x00}, //Reg 0x94
189 {0x95, 0x00 ,0x00}, //Reg 0x95
190 {0x96, 0x00 ,0x00}, //Reg 0x96
191 {0x97, 0x00 ,0x00}, //Reg 0x97
192 {0x98, 0x00 ,0x00}, //Reg 0x98
193 {0x99, 0x00 ,0x00}, //Reg 0x99
194 {0x00, 0x00, 0x00} //End of table
197 static const uint8_t SiS_NBAGP_init[34][3]={
198 {0xCF, 0xDF, 0x00}, //HT issue
231 {0x00, 0x00, 0x00} //End of table
234 static const uint8_t SiS_ACPI_2_init[56][3]={
235 {0x00, 0x00, 0xFF}, //Reg 0x00
236 {0x01, 0x00, 0xFF}, //Reg 0x01
237 {0x02, 0x00, 0x00}, //Reg 0x02
238 {0x03, 0x00, 0x00}, //Reg 0x03
239 {0x16, 0x00, 0x00}, //Reg 0x16
240 {0x20, 0x00, 0xFF}, //Reg 0x20
241 {0x21, 0x00, 0xFF}, //Reg 0x21
242 {0x22, 0x00, 0x00}, //Reg 0x22
243 {0x23, 0x00, 0x00}, //Reg 0x23
244 {0x24, 0x00, 0x55}, //Reg 0x24
245 {0x25, 0x00, 0x55}, //Reg 0x25
246 {0x26, 0x00, 0x55}, //Reg 0x26
247 {0x27, 0x00, 0x55}, //Reg 0x27
248 {0x2A, 0x00, 0x40}, //Reg 0x2A
249 {0x2B, 0x00, 0x10}, //Reg 0x2B
250 {0x2E, 0x00, 0xFF}, //Reg 0x2E
251 {0x30, 0x00, 0xFF}, //Reg 0x30
252 {0x31, 0x00, 0xFF}, //Reg 0x31
253 {0x32, 0x00, 0x00}, //Reg 0x32
254 {0x33, 0x00, 0x00}, //Reg 0x33
255 {0x40, 0x00, 0xFF}, //Reg 0x40
256 {0x41, 0x00, 0xFF}, //Reg 0x41
257 {0x42, 0x00, 0x00}, //Reg 0x42
258 {0x43, 0x00, 0x00}, //Reg 0x43
259 {0x4A, 0x00, 0x00}, //Reg 0x4A
260 {0x4E, 0x00, 0x0F}, //Reg 0x4E
261 {0x5A, 0x00, 0x00}, //Reg 0x5A
262 {0x5B, 0x00, 0x00}, //Reg 0x5B
263 {0x62, 0x00, 0x00}, //Reg 0x62
264 {0x63, 0x00, 0x04}, //Reg 0x63
265 {0x68, 0x00, 0xFF}, //Reg 0x68
266 {0x76, 0x00, 0xA0}, //Reg 0x76
267 {0x77, 0x00, 0x22}, //Reg 0x77
268 {0x78, 0xDF, 0x20}, //Reg 0x78
269 {0x7A, 0x00, 0x10}, //Reg 0x7A
270 {0x7C, 0x00, 0x45}, //Reg 0x7C
271 {0x7D, 0x00, 0xB8}, //Reg 0x7D
272 {0x7F, 0x00, 0x00}, //Reg 0x7F
273 {0x80, 0x00, 0x1C}, //Reg 0x80
274 {0x82, 0x00, 0x01}, //Reg 0x82
275 {0x84, 0x00, 0x0E}, //Reg 0x84
276 {0x85, 0x00, 0x29}, //Reg 0x85
277 {0x86, 0x00, 0xCB}, //Reg 0x86
278 {0x87, 0x00, 0x55}, //Reg 0x87
279 {0x88, 0x00, 0x04}, //Reg 0x88
280 {0x96, 0x00, 0x80}, //Reg 0x96
281 {0x99, 0x00, 0x80}, //Reg 0x99
282 {0x9A, 0x00, 0x15}, //Reg 0x9A
283 {0x9D, 0x00, 0x05}, //Reg 0x9D
284 {0x9E, 0x00, 0x00}, //Reg 0x9E
285 {0x9F, 0x00, 0x04}, //Reg 0x9F
286 {0xB0, 0x00, 0x6D}, //Reg 0xB0
287 {0xB1, 0x00, 0x8C}, //Reg 0xB1
288 {0xB9, 0x00, 0xFF}, //Reg 0xB9
289 {0xBA, 0x00, 0x3F}, //Reg 0xBA
290 {0x00, 0x00, 0x00} //End of table
293 static const uint8_t SiS_SiS1183_init[44][3]={
301 {0x91, 0x00, 0x00}, // set mode
316 {0x88, 0x00, 0xDE}, // after set mode
337 {0x00, 0x00, 0x00} //End of table
340 /* In => Share Memory size
347 void Init_Share_Memory(uint8_t ShareSize)
351 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS761), 0);
352 pci_write_config8(dev, 0x4C, (pci_read_config8(dev, 0x4C) & 0x1F) | (ShareSize << 5));
355 /* In: => Aperture size
363 void Init_Aper_Size(uint8_t AperSize)
366 uint16_t SiSAperSizeTable[]={0x0F38, 0x0F30, 0x0F20, 0x0F00, 0x0E00};
368 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_AMD, 0x1103), 0);
369 pci_write_config8(dev, 0x90, AperSize << 1);
371 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS761), 0);
372 pci_write_config16(dev, 0xB4, SiSAperSizeTable[AperSize]);
375 void sis_init_stage1(void)
382 // SiS_Chipset_Initialization
383 // ========================== NB =============================
384 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS761), 0);
386 while(SiS_NB_init[i][0] != 0)
387 { temp8 = pci_read_config8(dev, SiS_NB_init[i][0]);
388 temp8 &= SiS_NB_init[i][1];
389 temp8 |= SiS_NB_init[i][2];
390 pci_write_config8(dev, SiS_NB_init[i][0], temp8);
394 // ========================== LPC =============================
395 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS966_LPC), 0);
397 while(SiS_LPC_init[i][0] != 0)
398 { temp8 = pci_read_config8(dev, SiS_LPC_init[i][0]);
399 temp8 &= SiS_LPC_init[i][1];
400 temp8 |= SiS_LPC_init[i][2];
401 pci_write_config8(dev, SiS_LPC_init[i][0], temp8);
404 // ========================== ACPI =============================
406 while(SiS_ACPI_init[i][0] != 0)
407 { temp8 = inb(0x800 + SiS_ACPI_init[i][0]);
408 temp8 &= SiS_ACPI_init[i][1];
409 temp8 |= SiS_ACPI_init[i][2];
410 outb(temp8, 0x800 + SiS_ACPI_init[i][0]);
413 // ========================== NBPCIE =============================
414 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS761), 0); //Disable Internal GUI enable bit
415 temp8 = pci_read_config8(dev, 0x4C);
416 GUI_En = temp8 & 0x10;
417 pci_write_config8(dev, 0x4C, temp8 & (!0x10));
419 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS761_PCIE), 0);
421 while(SiS_NBPCIE_init[i][0] != 0)
422 { temp8 = pci_read_config8(dev, SiS_NBPCIE_init[i][0]);
423 temp8 &= SiS_NBPCIE_init[i][1];
424 temp8 |= SiS_NBPCIE_init[i][2];
425 pci_write_config8(dev, SiS_NBPCIE_init[i][0], temp8);
428 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS761), 0); //Restore Internal GUI enable bit
429 temp8 = pci_read_config8(dev, 0x4C);
430 pci_write_config8(dev, 0x4C, temp8 | GUI_En);
437 void sis_init_stage2(void)
446 // ========================== NB_AGP =============================
447 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS761), 0); //Enable Internal GUI enable bit
448 pci_write_config8(dev, 0x4C, pci_read_config8(dev, 0x4C) | 0x10);
450 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_AGP), 0);
453 while(SiS_NBAGP_init[i][0] != 0)
455 temp8 = pci_read_config8(dev, SiS_NBAGP_init[i][0]);
456 temp8 &= SiS_NBAGP_init[i][1];
457 temp8 |= SiS_NBAGP_init[i][2];
458 pci_write_config8(dev, SiS_NBAGP_init[i][0], temp8);
468 * => Others: Reserved
476 * => Others: Reserved
479 Init_Share_Memory(0x02); //0x02 : 32M
480 Init_Aper_Size(0x01); //0x1 : 64M
482 // ========================== NB =============================
484 printk_debug("Init NorthBridge sis761 -------->\n");
485 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS761), 0);
486 msr = rdmsr(0xC001001A);
487 printk_debug("Memory Top Bound %lx\n",msr.lo );
489 temp16=(pci_read_config8(dev, 0x4C) & 0xE0) >> 5;
490 temp16=0x0001<<(temp16-1);
493 printk_debug("Integrated VGA Shared memory size=%dM bytes\n", temp16 >> 4);
494 pci_write_config16(dev, 0x8E, (msr.lo >> 16) -temp16*1);
495 pci_write_config8(dev, 0x7F, 0x08); // ACPI Base
496 outb(inb(0x856) | 0x40, 0x856); // Auto-Reset Function
498 // ========================== ACPI =============================
500 printk_debug("Init ACPI -------->\n");
502 { temp8 = inb(0x800 + SiS_ACPI_2_init[i][0]);
503 temp8 &= SiS_ACPI_2_init[i][1];
504 temp8 |= SiS_ACPI_2_init[i][2];
505 outb(temp8, 0x800 + SiS_ACPI_2_init[i][0]);
507 }while(SiS_ACPI_2_init[i][0] != 0);
509 // ========================== Misc =============================
510 printk_debug("Init Misc -------->\n");
511 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS966_LPC), 0);
513 /* R77h Internal PCI Device Enable 1 (Power On Value = 0h)
514 * bit5 : USB Emulation (1=enable)
515 * bit3 : Internal Keyboard Controller Port Access Control enable (1=enable)
517 * bit1 : Mask USB A20M# Event (1:K8, 0:P4/K7)
519 pci_write_config8(dev, 0x77, 0x2E);
521 /* R7Ch Internal PCI Device Enable 2 (Power On Value = 0h)
522 * bit4 : SATA Controller Enable (0=enable)
523 * bit3 : IDE Controller Enable (0=enable)
524 * bit2 : MAC Controller Enable (0=enable)
525 * bit1 : MODEM Controller Enable (1=disable)
526 * bit0 : AC97 Controller Enable (1=disable)
528 pci_write_config8(dev, 0x7C, 0x03);
530 /* R7Eh Enable Azalia (Power On Value = 08h)
531 * bit3 : Azalia Controller Enable (0=enable)
533 pci_write_config8(dev, 0x7E, 0x00); // azalia controller enable
534 temp8=inb(0x878)|0x4; //bit2=1 enable Azalia =0 enable AC97
535 outb(temp8, 0x878); // ACPI select AC97 or HDA controller
536 printk_debug("Audio select %x\n",inb(0x878));
538 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS966_SATA), 0);
541 print_debug("SiS 1183 does not exist !!");
543 pci_write_config8(dev, 0x90, (pci_read_config8(dev, 0x90)&0x3F) | 0x40);
549 static void enable_smbus(void)
553 printk_debug("enable_smbus -------->\n");
555 dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS_SIS966_LPC), 0);
557 /* set smbus iobase && enable ACPI Space*/
558 pci_write_config16(dev, 0x74, 0x0800); // Set ACPI Base
559 temp8=pci_read_config8(dev, 0x40); // Enable ACPI Space
560 pci_write_config8(dev, 0x40, temp8 | 0x80);
561 temp8=pci_read_config8(dev, 0x76); // Enable SMBUS
562 pci_write_config8(dev, 0x76, temp8 | 0x03);
564 printk_debug("enable_smbus <--------\n");
567 static int smbus_read_byte(unsigned device, unsigned address)
569 return do_smbus_read_byte(SMBUS0_IO_BASE, device, address);
571 static int smbus_write_byte(unsigned device, unsigned address, unsigned char val)
573 return do_smbus_write_byte(SMBUS0_IO_BASE, device, address, val);