579d9fec7015a6344d05d2156838b687164c4629
[coreboot.git] / src / northbridge / amd / amdk8 / amdk8_f_pci.c
1 #ifndef AMDK8_F_PCI_C
2
3 #define AMDK8_F_PCI_C
4 /* bit [10,8] are dev func, bit[1,0] are dev index */
5 static uint32_t pci_read_config32_index(device_t dev, uint32_t index_reg, uint32_t index)
6 {
7         uint32_t dword;
8
9         pci_write_config32(dev, index_reg, index);
10
11         dword = pci_read_config32(dev, index_reg+0x4);
12
13         return dword;
14 }
15
16 static void pci_write_config32_index(device_t dev, uint32_t index_reg, uint32_t index, uint32_t data)
17 {
18
19         pci_write_config32(dev, index_reg, index);
20
21         pci_write_config32(dev, index_reg + 0x4, data);
22
23 }
24
25 static uint32_t pci_read_config32_index_wait(device_t dev, uint32_t index_reg, uint32_t index)
26 {
27
28         uint32_t dword;
29
30         index &= ~(1<<30);
31         pci_write_config32(dev, index_reg, index);
32
33         do {
34                 dword = pci_read_config32(dev, index_reg);
35         } while (!(dword & (1<<31)));
36
37         dword = pci_read_config32(dev, index_reg+0x4);
38
39         return dword;
40 }
41
42 static void pci_write_config32_index_wait(device_t dev, uint32_t index_reg, uint32_t index, uint32_t data)
43 {
44
45         uint32_t dword;
46
47         pci_write_config32(dev, index_reg + 0x4, data);
48
49         index |= (1<<30);
50         pci_write_config32(dev, index_reg, index);
51         do {
52                 dword = pci_read_config32(dev, index_reg);
53         } while (!(dword & (1<<31)));
54
55 }
56
57 #endif