Since some people disapprove of white space cleanups mixed in regular commits
[coreboot.git] / src / northbridge / amd / amdk8 / setup_resource_map.c
1 #define RES_DEBUG 0
2
3 static void setup_resource_map_offset(const unsigned int *register_values, int max, unsigned offset_pci_dev, unsigned offset_io_base)
4 {
5         int i;
6 #if RES_DEBUG
7         printk(BIOS_DEBUG, "setting up resource map offset....\n");
8 #endif
9         for(i = 0; i < max; i += 3) {
10                 device_t dev;
11                 unsigned where;
12                 unsigned long reg;
13 #if RES_DEBUG
14                 prink_debug("%08x <- %08x\n", register_values[i] +  offset_pci_dev, register_values[i+2]);
15 #endif
16                 dev = (register_values[i] & ~0xfff) + offset_pci_dev;
17                 where = register_values[i] & 0xfff;
18                 reg = pci_read_config32(dev, where);
19                 reg &= register_values[i+1];
20                 reg |= register_values[i+2] + offset_io_base;
21                 pci_write_config32(dev, where, reg);
22 #if 0
23                 reg = pci_read_config32(register_values[i]);
24                 reg &= register_values[i+1];
25                 reg |= register_values[i+2] & ~register_values[i+1];
26                 pci_write_config32(register_values[i], reg);
27 #endif
28         }
29 #if RES_DEBUG
30         printk(BIOS_DEBUG, "done.\n");
31 #endif
32 }
33
34 #define RES_PCI_IO 0x10
35 #define RES_PORT_IO_8 0x22
36 #define RES_PORT_IO_32 0x20
37 #define RES_MEM_IO 0x40
38
39 static void setup_resource_map_x_offset(const unsigned int *register_values, int max, unsigned offset_pci_dev, unsigned offset_io_base)
40 {
41         int i;
42
43 #if RES_DEBUG
44         printk(BIOS_DEBUG, "setting up resource map ex offset....\n");
45 #endif
46         for(i = 0; i < max; i += 4) {
47 #if RES_DEBUG
48                 printk(BIOS_DEBUG, "%04x: %02x %08x <- & %08x | %08x\n",
49                         i>>2, register_values[i],
50                         register_values[i+1] + ( (register_values[i]==RES_PCI_IO) ? offset_pci_dev : 0),
51                         register_values[i+2],
52                         register_values[i+3] + ( ( (register_values[i] & RES_PORT_IO_32) == RES_PORT_IO_32) ? offset_io_base : 0)
53                         );
54 #endif
55                 switch (register_values[i]) {
56                 case RES_PCI_IO: //PCI
57                         {
58                         device_t dev;
59                         unsigned where;
60                         unsigned long reg;
61                         dev = (register_values[i+1] & ~0xfff) + offset_pci_dev;
62                         where = register_values[i+1] & 0xfff;
63                         reg = pci_read_config32(dev, where);
64                         reg &= register_values[i+2];
65                         reg |= register_values[i+3];
66                         pci_write_config32(dev, where, reg);
67                         }
68                         break;
69                 case RES_PORT_IO_8: // io 8
70                         {
71                         unsigned where;
72                         unsigned reg;
73                         where = register_values[i+1] + offset_io_base;
74                         reg = inb(where);
75                         reg &= register_values[i+2];
76                         reg |= register_values[i+3];
77                         outb(reg, where);
78                         }
79                         break;
80                 case RES_PORT_IO_32:  //io32
81                         {
82                         unsigned where;
83                         unsigned long reg;
84                         where = register_values[i+1] + offset_io_base;
85                         reg = inl(where);
86                         reg &= register_values[i+2];
87                         reg |= register_values[i+3];
88                         outl(reg, where);
89                         }
90                         break;
91 #if 0
92                 case RES_MEM_IO: //mem
93                         {
94                         unsigned where;
95                         unsigned long reg;
96                         where = register_values[i+1];
97                         reg = read32(where);
98                         reg &= register_values[i+2];
99                         reg |= register_values[i+3];
100                         write32( where, reg);
101                         }
102                         break;
103 #endif
104
105                 } // switch
106
107
108         }
109
110 #if RES_DEBUG
111         printk(BIOS_DEBUG, "done.\n");
112 #endif
113 }
114
115 #if defined(CONFIG_SOUTHBRIDGE_NVIDIA_MCP55) || defined(CONFIG_SOUTHBRIDGE_NVIDIA_CK804)
116 static void setup_resource_map_x(const unsigned int *register_values, int max)
117 {
118         int i;
119
120 #if RES_DEBUG
121         printk(BIOS_DEBUG, "setting up resource map ex....\n");
122 #endif
123
124         for(i = 0; i < max; i += 4) {
125 #if RES_DEBUG
126                 printk(BIOS_DEBUG, "%04x: %02x %08x <- & %08x | %08x\n",
127                         i/4, register_values[i],register_values[i+1], register_values[i+2], register_values[i+3]);
128 #endif
129                 switch (register_values[i]) {
130                 case RES_PCI_IO: //PCI
131                         {
132                         device_t dev;
133                         unsigned where;
134                         unsigned long reg;
135                         dev = register_values[i+1] & ~0xfff;
136                         where = register_values[i+1] & 0xfff;
137                         reg = pci_read_config32(dev, where);
138                         reg &= register_values[i+2];
139                         reg |= register_values[i+3];
140                         pci_write_config32(dev, where, reg);
141                         }
142                         break;
143                 case RES_PORT_IO_8: // io 8
144                         {
145                         unsigned where;
146                         unsigned reg;
147                         where = register_values[i+1];
148                         reg = inb(where);
149                         reg &= register_values[i+2];
150                         reg |= register_values[i+3];
151                         outb(reg, where);
152                         }
153                         break;
154                 case RES_PORT_IO_32:  //io32
155                         {
156                         unsigned where;
157                         unsigned long reg;
158                         where = register_values[i+1];
159                         reg = inl(where);
160                         reg &= register_values[i+2];
161                         reg |= register_values[i+3];
162                         outl(reg, where);
163                         }
164                         break;
165 #if 0
166                 case RES_MEM_IO: //mem
167                         {
168                         unsigned where;
169                         unsigned long reg;
170                         where = register_values[i+1];
171                         reg = read32(where);
172                         reg &= register_values[i+2];
173                         reg |= register_values[i+3];
174                         write32( where, reg);
175                         }
176                         break;
177 #endif
178
179                 } // switch
180
181
182         }
183
184 #if RES_DEBUG
185         printk(BIOS_DEBUG, "done.\n");
186 #endif
187 }
188 #endif
189
190 #if 0
191 static void setup_io_resource_map(const unsigned int *register_values, int max)
192 {
193         int i;
194
195         for(i = 0; i < max; i += 3) {
196                 unsigned where;
197                 unsigned long reg;
198
199                 where = register_values[i];
200 #if 0
201                 udelay(2000);
202                 printk(BIOS_DEBUG, "%04x", where);
203 #endif
204
205                 reg = inl(where);
206 #if 0
207                 udelay(2000);
208                 printk(BIOS_DEBUG, "=%08x", reg);
209 #endif
210                 reg &= register_values[i+1];
211                 reg |= register_values[i+2];
212
213 #if 0
214                 udelay(2000);
215                 printk(BIOS_DEBUG, " <-  %08x", reg);
216 #endif
217                 outl(reg, where);
218 #if 0
219                 udelay(2000);
220                 reg = inl(where);
221                 printk(BIOS_DEBUG, " ->  %08x\n", reg);
222 #endif
223         }
224 }
225
226 static void setup_mem_resource_map(const unsigned int *register_values, int max)
227 {
228         int i;
229
230         for(i = 0; i < max; i += 3) {
231                 unsigned where;
232                 unsigned long reg;
233 #if 0
234                 prink(BIOS_DEBUG, "%08x <-  %08x\n",
235                         register_values[i], register_values[i+2]);
236 #endif
237                 where = register_values[i];
238                 reg = read32(where);
239                 reg &= register_values[i+1];
240                 reg |= register_values[i+2];
241                 write32( where, reg);
242 #if 0
243                 reg = read32(where);
244                 prink(BIOS_DEBUG, " RB %08x\n", reg);
245 #endif
246         }
247 }
248 #endif
249