Move MMCONF resource into the domain for fam10 for the resource allocator.
[coreboot.git] / src / southbridge / amd / amd8111 / amd8111_early_ctrl.c
1 #include "amd8111.h"
2 #include <reset.h>
3
4 /* by yhlu 2005.10 */
5 static unsigned get_sbdn(unsigned bus)
6 {
7         device_t dev;
8
9         /* Find the device.
10          * There can only be one 8111 on a hypertransport chain/bus.
11          */
12         dev = pci_locate_device_on_bus(
13                 PCI_ID(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_PCI),
14                 bus);
15
16         return (dev>>15) & 0x1f;
17
18 }
19
20 static void enable_cf9_x(unsigned sbbusn, unsigned sbdn)
21 {
22         device_t dev;
23         uint8_t byte;
24
25         dev = PCI_DEV(sbbusn, sbdn+1, 3); //ACPI
26         /* enable cf9 */
27         byte = pci_read_config8(dev, 0x41);
28         byte |= (1<<6) | (1<<5);
29         pci_write_config8(dev, 0x41, byte);
30 }
31
32 static void enable_cf9(void)
33 {
34         unsigned sblk = get_sblk();
35         unsigned sbbusn = get_sbbusn(sblk);
36         unsigned sbdn = get_sbdn(sbbusn);
37
38         enable_cf9_x(sbbusn, sbdn);
39 }
40
41 void hard_reset(void)
42 {
43         set_bios_reset();
44         /* reset */
45         enable_cf9();
46         outb(0x0e, 0x0cf9); // make sure cf9 is enabled
47 }
48
49 void enable_fid_change_on_sb(unsigned sbbusn, unsigned sbdn)
50 {
51         device_t dev;
52
53         dev = PCI_DEV(sbbusn, sbdn+1, 3); // ACPI
54
55         pci_write_config8(dev, 0x74, 4);
56
57         /* set VFSMAF ( VID/FID System Management Action Field) to 2 */
58         pci_write_config32(dev, 0x70, 2<<12);
59
60 }
61
62 static void soft_reset_x(unsigned sbbusn, unsigned sbdn)
63 {
64         device_t dev;
65
66         dev = PCI_DEV(sbbusn, sbdn+1, 0); //ISA
67
68         /* Reset */
69         set_bios_reset();
70         pci_write_config8(dev, 0x47, 1);
71
72 }
73
74 void soft_reset(void)
75 {
76
77         unsigned sblk = get_sblk();
78         unsigned sbbusn = get_sbbusn(sblk);
79         unsigned sbdn = get_sbdn(sbbusn);
80
81         return soft_reset_x(sbbusn, sbdn);
82
83 }