Since some people disapprove of white space cleanups mixed in regular commits
[coreboot.git] / src / southbridge / intel / esb6300 / esb6300.c
1 #include <console/console.h>
2 #include <device/device.h>
3 #include <device/pci.h>
4 #include <device/pci_ids.h>
5 #include "esb6300.h"
6
7 void esb6300_enable(device_t dev)
8 {
9         device_t lpc_dev;
10         unsigned index = 0;
11         uint16_t reg_old, reg;
12
13         /* See if we are on the behind the 6300 pci bridge */
14         lpc_dev = dev_find_slot(dev->bus->secondary, PCI_DEVFN(0x1f, 0));
15         if((dev->path.pci.devfn &0xf8)== 0xf8) {
16                 index = dev->path.pci.devfn & 7;
17         }
18         else if((dev->path.pci.devfn &0xf8)== 0xe8) {
19                 index = (dev->path.pci.devfn & 7) +8;
20         }
21         if ((!lpc_dev) || (index >= 16) || ((1<<index)&0x3091)) {
22                 return;
23         }
24         if ((lpc_dev->vendor != PCI_VENDOR_ID_INTEL) ||
25                 (lpc_dev->device != PCI_DEVICE_ID_INTEL_6300ESB_LPC)) {
26                 uint32_t id;
27                 id = pci_read_config32(lpc_dev, PCI_VENDOR_ID);
28                 if (id != (PCI_VENDOR_ID_INTEL |
29                                 (PCI_DEVICE_ID_INTEL_6300ESB_LPC << 16))) {
30                         return;
31                 }
32         }
33
34         reg = reg_old = pci_read_config16(lpc_dev, 0xf2);
35         reg &= ~(1 << index);
36         if (!dev->enabled) {
37                 reg |= (1 << index);
38         }
39         if (reg != reg_old) {
40                 pci_write_config16(lpc_dev, 0xf2, reg);
41         }
42
43 }
44
45 struct chip_operations southbridge_intel_esb6300_ops = {
46         CHIP_NAME("Intel 6300ESB Southbridge")
47         .enable_dev = esb6300_enable,
48 };