remove trailing whitespace
[coreboot.git] / src / northbridge / amd / amdk8 / setup_resource_map.c
1 #include "amdk8.h"
2
3 #define RES_DEBUG 0
4
5 void setup_resource_map_offset(const unsigned int *register_values, int max, unsigned offset_pci_dev, unsigned offset_io_base)
6 {
7         int i;
8 #if RES_DEBUG
9         printk(BIOS_DEBUG, "setting up resource map offset....\n");
10 #endif
11         for(i = 0; i < max; i += 3) {
12                 device_t dev;
13                 unsigned where;
14                 unsigned long reg = 0;
15 #if RES_DEBUG
16                 prink_debug("%08x <- %08x\n", register_values[i] +  offset_pci_dev, register_values[i+2]);
17 #endif
18                 dev = (register_values[i] & ~0xfff) + offset_pci_dev;
19                 where = register_values[i] & 0xfff;
20                 if (register_values[i+1])
21                         reg = pci_read_config32(dev, where);
22                 reg &= register_values[i+1];
23                 reg |= register_values[i+2] + offset_io_base;
24                 pci_write_config32(dev, where, reg);
25 #if 0
26                 reg = pci_read_config32(register_values[i]);
27                 reg &= register_values[i+1];
28                 reg |= register_values[i+2] & ~register_values[i+1];
29                 pci_write_config32(register_values[i], reg);
30 #endif
31         }
32 #if RES_DEBUG
33         printk(BIOS_DEBUG, "done.\n");
34 #endif
35 }
36
37 #define RES_PCI_IO 0x10
38 #define RES_PORT_IO_8 0x22
39 #define RES_PORT_IO_32 0x20
40 #define RES_MEM_IO 0x40
41
42 static void setup_resource_map_x_offset(const unsigned int *register_values, int max, unsigned offset_pci_dev, unsigned offset_io_base)
43 {
44         int i;
45
46 #if RES_DEBUG
47         printk(BIOS_DEBUG, "setting up resource map ex offset....\n");
48 #endif
49         for(i = 0; i < max; i += 4) {
50 #if RES_DEBUG
51                 printk(BIOS_DEBUG, "%04x: %02x %08x <- & %08x | %08x\n",
52                         i>>2, register_values[i],
53                         register_values[i+1] + ( (register_values[i]==RES_PCI_IO) ? offset_pci_dev : 0),
54                         register_values[i+2],
55                         register_values[i+3] + ( ( (register_values[i] & RES_PORT_IO_32) == RES_PORT_IO_32) ? offset_io_base : 0)
56                         );
57 #endif
58                 switch (register_values[i]) {
59                 case RES_PCI_IO: //PCI
60                         {
61                         device_t dev;
62                         unsigned where;
63                         unsigned long reg = 0;
64                         dev = (register_values[i+1] & ~0xfff) + offset_pci_dev;
65                         where = register_values[i+1] & 0xfff;
66                         if (register_values[i+2])
67                                 reg = pci_read_config32(dev, where);
68                         reg &= register_values[i+2];
69                         reg |= register_values[i+3];
70                         pci_write_config32(dev, where, reg);
71                         }
72                         break;
73                 case RES_PORT_IO_8: // io 8
74                         {
75                         unsigned where;
76                         unsigned reg = 0;
77                         where = register_values[i+1] + offset_io_base;
78                         if (register_values[i+2])
79                                 reg = inb(where);
80                         reg &= register_values[i+2];
81                         reg |= register_values[i+3];
82                         outb(reg, where);
83                         }
84                         break;
85                 case RES_PORT_IO_32:  //io32
86                         {
87                         unsigned where;
88                         unsigned long reg = 0;
89                         where = register_values[i+1] + offset_io_base;
90                         if (register_values[i+2])
91                                 reg = inl(where);
92                         reg &= register_values[i+2];
93                         reg |= register_values[i+3];
94                         outl(reg, where);
95                         }
96                         break;
97 #if 0
98                 case RES_MEM_IO: //mem
99                         {
100                         unsigned where;
101                         unsigned long reg;
102                         where = register_values[i+1];
103                         reg = read32(where);
104                         reg &= register_values[i+2];
105                         reg |= register_values[i+3];
106                         write32( where, reg);
107                         }
108                         break;
109 #endif
110
111                 } // switch
112
113
114         }
115
116 #if RES_DEBUG
117         printk(BIOS_DEBUG, "done.\n");
118 #endif
119 }
120
121 static inline void setup_resource_map_x(const unsigned int *register_values, int max)
122 {
123         setup_resource_map_x_offset(register_values, max, 0, 0);
124 }
125
126 #if 0
127 static void setup_io_resource_map(const unsigned int *register_values, int max)
128 {
129         int i;
130
131         for(i = 0; i < max; i += 3) {
132                 unsigned where;
133                 unsigned long reg;
134
135                 where = register_values[i];
136 #if 0
137                 udelay(2000);
138                 printk(BIOS_DEBUG, "%04x", where);
139 #endif
140
141                 reg = inl(where);
142 #if 0
143                 udelay(2000);
144                 printk(BIOS_DEBUG, "=%08x", reg);
145 #endif
146                 reg &= register_values[i+1];
147                 reg |= register_values[i+2];
148
149 #if 0
150                 udelay(2000);
151                 printk(BIOS_DEBUG, " <-  %08x", reg);
152 #endif
153                 outl(reg, where);
154 #if 0
155                 udelay(2000);
156                 reg = inl(where);
157                 printk(BIOS_DEBUG, " ->  %08x\n", reg);
158 #endif
159         }
160 }
161
162 static void setup_mem_resource_map(const unsigned int *register_values, int max)
163 {
164         int i;
165
166         for(i = 0; i < max; i += 3) {
167                 unsigned where;
168                 unsigned long reg;
169 #if 0
170                 prink(BIOS_DEBUG, "%08x <-  %08x\n",
171                         register_values[i], register_values[i+2]);
172 #endif
173                 where = register_values[i];
174                 reg = read32(where);
175                 reg &= register_values[i+1];
176                 reg |= register_values[i+2];
177                 write32( where, reg);
178 #if 0
179                 reg = read32(where);
180                 prink(BIOS_DEBUG, " RB %08x\n", reg);
181 #endif
182         }
183 }
184 #endif
185