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