b09b70899d621a95e68e2624aecd6e5ffa6eb5d6
[coreboot.git] / src / mainboard / supermicro / x6dhr_ig / reset.c
1 #include <arch/io.h>
2 #include <device/pci_def.h>
3 #include <device/pci_ids.h>
4 #ifndef __ROMCC__
5 #include <device/device.h>
6 #include <device/pci.h>
7 #include <device/pci_ops.h>
8 #define PCI_ID(VENDOR_ID, DEVICE_ID) \
9         ((((DEVICE_ID) & 0xFFFF) << 16) | ((VENDOR_ID) & 0xFFFF))
10 #define PCI_DEV_INVALID 0
11
12 static inline device_t pci_locate_device(unsigned pci_id, device_t from)
13 {
14         return dev_find_device(pci_id >> 16, pci_id & 0xffff, from);
15 }
16 #endif
17
18 void soft_reset(void)
19 {
20         outb(0x04, 0xcf9);
21 }
22 void hard_reset(void)
23 {
24         outb(0x02, 0xcf9);
25         outb(0x06, 0xcf9);
26 }
27 void full_reset(void)
28 {
29         device_t dev;
30         /* Enable power on after power fail... */
31         dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801ER_LPC), 0);
32         if (dev != PCI_DEV_INVALID) {
33                 unsigned byte;
34                 byte = pci_read_config8(dev, 0xa4);
35                 byte &= 0xfe;
36                 pci_write_config8(dev, 0xa4, byte);
37                 
38         }
39         outb(0x0e, 0xcf9);
40 }
41
42