blob: f1c81833516a1c116afbddccf800c19ce44c9c47 [file] [log] [blame]
Yinghai Lu13f1c2a2005-07-08 02:49:49 +00001#include <console/console.h>
2#include <device/device.h>
3#include <device/pci.h>
4#include <device/pci_ids.h>
5#include <device/pci_ops.h>
Stefan Reinauer138be832010-02-27 01:50:21 +00006#include "i82801ex.h"
Yinghai Lu13f1c2a2005-07-08 02:49:49 +00007
8static void pci_init(struct device *dev)
9{
Yinghai Lu13f1c2a2005-07-08 02:49:49 +000010 uint16_t word;
11
12 /* Clear system errors */
13 word = pci_read_config16(dev, 0x06);
14 word |= 0xf900; /* Clear possible errors */
15 pci_write_config16(dev, 0x06, word);
16
Stefan Reinauer966d0e62006-04-06 21:37:10 +000017#if 0
18 /* System error enable */
Stefan Reinauer68f542c2010-03-17 02:48:24 +000019 uint32_t dword;
Stefan Reinauer966d0e62006-04-06 21:37:10 +000020 dword = pci_read_config32(dev, 0x04);
21 dword |= (1<<8); /* SERR# Enable */
22 dword |= (1<<6); /* Parity Error Response */
23 pci_write_config32(dev, 0x04, dword);
Stefan Reinauer14e22772010-04-27 06:56:47 +000024#endif
25
Yinghai Lu13f1c2a2005-07-08 02:49:49 +000026 word = pci_read_config16(dev, 0x1e);
27 word |= 0xf800; /* Clear possible errors */
28 pci_write_config16(dev, 0x1e, word);
29}
30
31static struct device_operations pci_ops = {
32 .read_resources = pci_bus_read_resources,
33 .set_resources = pci_dev_set_resources,
34 .enable_resources = pci_bus_enable_resources,
35 .init = pci_init,
36 .scan_bus = pci_scan_bridge,
37 .ops_pci = 0,
38};
39
Stefan Reinauerf1cf1f72007-10-24 09:08:58 +000040static const struct pci_driver pci_driver __pci_driver = {
Yinghai Lu13f1c2a2005-07-08 02:49:49 +000041 .ops = &pci_ops,
42 .vendor = PCI_VENDOR_ID_INTEL,
43 .device = PCI_DEVICE_ID_INTEL_82801ER_PCI,
44};