diff options
Diffstat (limited to 'drivers/char/drm/radeon_cp.c')
-rw-r--r-- | drivers/char/drm/radeon_cp.c | 2480 |
1 files changed, 1244 insertions, 1236 deletions
diff --git a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c index 6dff5e43f713..447bfbe0da8a 100644 --- a/drivers/char/drm/radeon_cp.c +++ b/drivers/char/drm/radeon_cp.c | |||
@@ -36,788 +36,787 @@ | |||
36 | 36 | ||
37 | #define RADEON_FIFO_DEBUG 0 | 37 | #define RADEON_FIFO_DEBUG 0 |
38 | 38 | ||
39 | static int radeon_do_cleanup_cp( drm_device_t *dev ); | 39 | static int radeon_do_cleanup_cp(drm_device_t * dev); |
40 | 40 | ||
41 | /* CP microcode (from ATI) */ | 41 | /* CP microcode (from ATI) */ |
42 | static u32 R200_cp_microcode[][2] = { | 42 | static u32 R200_cp_microcode[][2] = { |
43 | { 0x21007000, 0000000000 }, | 43 | {0x21007000, 0000000000}, |
44 | { 0x20007000, 0000000000 }, | 44 | {0x20007000, 0000000000}, |
45 | { 0x000000ab, 0x00000004 }, | 45 | {0x000000ab, 0x00000004}, |
46 | { 0x000000af, 0x00000004 }, | 46 | {0x000000af, 0x00000004}, |
47 | { 0x66544a49, 0000000000 }, | 47 | {0x66544a49, 0000000000}, |
48 | { 0x49494174, 0000000000 }, | 48 | {0x49494174, 0000000000}, |
49 | { 0x54517d83, 0000000000 }, | 49 | {0x54517d83, 0000000000}, |
50 | { 0x498d8b64, 0000000000 }, | 50 | {0x498d8b64, 0000000000}, |
51 | { 0x49494949, 0000000000 }, | 51 | {0x49494949, 0000000000}, |
52 | { 0x49da493c, 0000000000 }, | 52 | {0x49da493c, 0000000000}, |
53 | { 0x49989898, 0000000000 }, | 53 | {0x49989898, 0000000000}, |
54 | { 0xd34949d5, 0000000000 }, | 54 | {0xd34949d5, 0000000000}, |
55 | { 0x9dc90e11, 0000000000 }, | 55 | {0x9dc90e11, 0000000000}, |
56 | { 0xce9b9b9b, 0000000000 }, | 56 | {0xce9b9b9b, 0000000000}, |
57 | { 0x000f0000, 0x00000016 }, | 57 | {0x000f0000, 0x00000016}, |
58 | { 0x352e232c, 0000000000 }, | 58 | {0x352e232c, 0000000000}, |
59 | { 0x00000013, 0x00000004 }, | 59 | {0x00000013, 0x00000004}, |
60 | { 0x000f0000, 0x00000016 }, | 60 | {0x000f0000, 0x00000016}, |
61 | { 0x352e272c, 0000000000 }, | 61 | {0x352e272c, 0000000000}, |
62 | { 0x000f0001, 0x00000016 }, | 62 | {0x000f0001, 0x00000016}, |
63 | { 0x3239362f, 0000000000 }, | 63 | {0x3239362f, 0000000000}, |
64 | { 0x000077ef, 0x00000002 }, | 64 | {0x000077ef, 0x00000002}, |
65 | { 0x00061000, 0x00000002 }, | 65 | {0x00061000, 0x00000002}, |
66 | { 0x00000020, 0x0000001a }, | 66 | {0x00000020, 0x0000001a}, |
67 | { 0x00004000, 0x0000001e }, | 67 | {0x00004000, 0x0000001e}, |
68 | { 0x00061000, 0x00000002 }, | 68 | {0x00061000, 0x00000002}, |
69 | { 0x00000020, 0x0000001a }, | 69 | {0x00000020, 0x0000001a}, |
70 | { 0x00004000, 0x0000001e }, | 70 | {0x00004000, 0x0000001e}, |
71 | { 0x00061000, 0x00000002 }, | 71 | {0x00061000, 0x00000002}, |
72 | { 0x00000020, 0x0000001a }, | 72 | {0x00000020, 0x0000001a}, |
73 | { 0x00004000, 0x0000001e }, | 73 | {0x00004000, 0x0000001e}, |
74 | { 0x00000016, 0x00000004 }, | 74 | {0x00000016, 0x00000004}, |
75 | { 0x0003802a, 0x00000002 }, | 75 | {0x0003802a, 0x00000002}, |
76 | { 0x040067e0, 0x00000002 }, | 76 | {0x040067e0, 0x00000002}, |
77 | { 0x00000016, 0x00000004 }, | 77 | {0x00000016, 0x00000004}, |
78 | { 0x000077e0, 0x00000002 }, | 78 | {0x000077e0, 0x00000002}, |
79 | { 0x00065000, 0x00000002 }, | 79 | {0x00065000, 0x00000002}, |
80 | { 0x000037e1, 0x00000002 }, | 80 | {0x000037e1, 0x00000002}, |
81 | { 0x040067e1, 0x00000006 }, | 81 | {0x040067e1, 0x00000006}, |
82 | { 0x000077e0, 0x00000002 }, | 82 | {0x000077e0, 0x00000002}, |
83 | { 0x000077e1, 0x00000002 }, | 83 | {0x000077e1, 0x00000002}, |
84 | { 0x000077e1, 0x00000006 }, | 84 | {0x000077e1, 0x00000006}, |
85 | { 0xffffffff, 0000000000 }, | 85 | {0xffffffff, 0000000000}, |
86 | { 0x10000000, 0000000000 }, | 86 | {0x10000000, 0000000000}, |
87 | { 0x0003802a, 0x00000002 }, | 87 | {0x0003802a, 0x00000002}, |
88 | { 0x040067e0, 0x00000006 }, | 88 | {0x040067e0, 0x00000006}, |
89 | { 0x00007675, 0x00000002 }, | 89 | {0x00007675, 0x00000002}, |
90 | { 0x00007676, 0x00000002 }, | 90 | {0x00007676, 0x00000002}, |
91 | { 0x00007677, 0x00000002 }, | 91 | {0x00007677, 0x00000002}, |
92 | { 0x00007678, 0x00000006 }, | 92 | {0x00007678, 0x00000006}, |
93 | { 0x0003802b, 0x00000002 }, | 93 | {0x0003802b, 0x00000002}, |
94 | { 0x04002676, 0x00000002 }, | 94 | {0x04002676, 0x00000002}, |
95 | { 0x00007677, 0x00000002 }, | 95 | {0x00007677, 0x00000002}, |
96 | { 0x00007678, 0x00000006 }, | 96 | {0x00007678, 0x00000006}, |
97 | { 0x0000002e, 0x00000018 }, | 97 | {0x0000002e, 0x00000018}, |
98 | { 0x0000002e, 0x00000018 }, | 98 | {0x0000002e, 0x00000018}, |
99 | { 0000000000, 0x00000006 }, | 99 | {0000000000, 0x00000006}, |
100 | { 0x0000002f, 0x00000018 }, | 100 | {0x0000002f, 0x00000018}, |
101 | { 0x0000002f, 0x00000018 }, | 101 | {0x0000002f, 0x00000018}, |
102 | { 0000000000, 0x00000006 }, | 102 | {0000000000, 0x00000006}, |
103 | { 0x01605000, 0x00000002 }, | 103 | {0x01605000, 0x00000002}, |
104 | { 0x00065000, 0x00000002 }, | 104 | {0x00065000, 0x00000002}, |
105 | { 0x00098000, 0x00000002 }, | 105 | {0x00098000, 0x00000002}, |
106 | { 0x00061000, 0x00000002 }, | 106 | {0x00061000, 0x00000002}, |
107 | { 0x64c0603d, 0x00000004 }, | 107 | {0x64c0603d, 0x00000004}, |
108 | { 0x00080000, 0x00000016 }, | 108 | {0x00080000, 0x00000016}, |
109 | { 0000000000, 0000000000 }, | 109 | {0000000000, 0000000000}, |
110 | { 0x0400251d, 0x00000002 }, | 110 | {0x0400251d, 0x00000002}, |
111 | { 0x00007580, 0x00000002 }, | 111 | {0x00007580, 0x00000002}, |
112 | { 0x00067581, 0x00000002 }, | 112 | {0x00067581, 0x00000002}, |
113 | { 0x04002580, 0x00000002 }, | 113 | {0x04002580, 0x00000002}, |
114 | { 0x00067581, 0x00000002 }, | 114 | {0x00067581, 0x00000002}, |
115 | { 0x00000046, 0x00000004 }, | 115 | {0x00000046, 0x00000004}, |
116 | { 0x00005000, 0000000000 }, | 116 | {0x00005000, 0000000000}, |
117 | { 0x00061000, 0x00000002 }, | 117 | {0x00061000, 0x00000002}, |
118 | { 0x0000750e, 0x00000002 }, | 118 | {0x0000750e, 0x00000002}, |
119 | { 0x00019000, 0x00000002 }, | 119 | {0x00019000, 0x00000002}, |
120 | { 0x00011055, 0x00000014 }, | 120 | {0x00011055, 0x00000014}, |
121 | { 0x00000055, 0x00000012 }, | 121 | {0x00000055, 0x00000012}, |
122 | { 0x0400250f, 0x00000002 }, | 122 | {0x0400250f, 0x00000002}, |
123 | { 0x0000504a, 0x00000004 }, | 123 | {0x0000504a, 0x00000004}, |
124 | { 0x00007565, 0x00000002 }, | 124 | {0x00007565, 0x00000002}, |
125 | { 0x00007566, 0x00000002 }, | 125 | {0x00007566, 0x00000002}, |
126 | { 0x00000051, 0x00000004 }, | 126 | {0x00000051, 0x00000004}, |
127 | { 0x01e655b4, 0x00000002 }, | 127 | {0x01e655b4, 0x00000002}, |
128 | { 0x4401b0dc, 0x00000002 }, | 128 | {0x4401b0dc, 0x00000002}, |
129 | { 0x01c110dc, 0x00000002 }, | 129 | {0x01c110dc, 0x00000002}, |
130 | { 0x2666705d, 0x00000018 }, | 130 | {0x2666705d, 0x00000018}, |
131 | { 0x040c2565, 0x00000002 }, | 131 | {0x040c2565, 0x00000002}, |
132 | { 0x0000005d, 0x00000018 }, | 132 | {0x0000005d, 0x00000018}, |
133 | { 0x04002564, 0x00000002 }, | 133 | {0x04002564, 0x00000002}, |
134 | { 0x00007566, 0x00000002 }, | 134 | {0x00007566, 0x00000002}, |
135 | { 0x00000054, 0x00000004 }, | 135 | {0x00000054, 0x00000004}, |
136 | { 0x00401060, 0x00000008 }, | 136 | {0x00401060, 0x00000008}, |
137 | { 0x00101000, 0x00000002 }, | 137 | {0x00101000, 0x00000002}, |
138 | { 0x000d80ff, 0x00000002 }, | 138 | {0x000d80ff, 0x00000002}, |
139 | { 0x00800063, 0x00000008 }, | 139 | {0x00800063, 0x00000008}, |
140 | { 0x000f9000, 0x00000002 }, | 140 | {0x000f9000, 0x00000002}, |
141 | { 0x000e00ff, 0x00000002 }, | 141 | {0x000e00ff, 0x00000002}, |
142 | { 0000000000, 0x00000006 }, | 142 | {0000000000, 0x00000006}, |
143 | { 0x00000080, 0x00000018 }, | 143 | {0x00000080, 0x00000018}, |
144 | { 0x00000054, 0x00000004 }, | 144 | {0x00000054, 0x00000004}, |
145 | { 0x00007576, 0x00000002 }, | 145 | {0x00007576, 0x00000002}, |
146 | { 0x00065000, 0x00000002 }, | 146 | {0x00065000, 0x00000002}, |
147 | { 0x00009000, 0x00000002 }, | 147 | {0x00009000, 0x00000002}, |
148 | { 0x00041000, 0x00000002 }, | 148 | {0x00041000, 0x00000002}, |
149 | { 0x0c00350e, 0x00000002 }, | 149 | {0x0c00350e, 0x00000002}, |
150 | { 0x00049000, 0x00000002 }, | 150 | {0x00049000, 0x00000002}, |
151 | { 0x00051000, 0x00000002 }, | 151 | {0x00051000, 0x00000002}, |
152 | { 0x01e785f8, 0x00000002 }, | 152 | {0x01e785f8, 0x00000002}, |
153 | { 0x00200000, 0x00000002 }, | 153 | {0x00200000, 0x00000002}, |
154 | { 0x00600073, 0x0000000c }, | 154 | {0x00600073, 0x0000000c}, |
155 | { 0x00007563, 0x00000002 }, | 155 | {0x00007563, 0x00000002}, |
156 | { 0x006075f0, 0x00000021 }, | 156 | {0x006075f0, 0x00000021}, |
157 | { 0x20007068, 0x00000004 }, | 157 | {0x20007068, 0x00000004}, |
158 | { 0x00005068, 0x00000004 }, | 158 | {0x00005068, 0x00000004}, |
159 | { 0x00007576, 0x00000002 }, | 159 | {0x00007576, 0x00000002}, |
160 | { 0x00007577, 0x00000002 }, | 160 | {0x00007577, 0x00000002}, |
161 | { 0x0000750e, 0x00000002 }, | 161 | {0x0000750e, 0x00000002}, |
162 | { 0x0000750f, 0x00000002 }, | 162 | {0x0000750f, 0x00000002}, |
163 | { 0x00a05000, 0x00000002 }, | 163 | {0x00a05000, 0x00000002}, |
164 | { 0x00600076, 0x0000000c }, | 164 | {0x00600076, 0x0000000c}, |
165 | { 0x006075f0, 0x00000021 }, | 165 | {0x006075f0, 0x00000021}, |
166 | { 0x000075f8, 0x00000002 }, | 166 | {0x000075f8, 0x00000002}, |
167 | { 0x00000076, 0x00000004 }, | 167 | {0x00000076, 0x00000004}, |
168 | { 0x000a750e, 0x00000002 }, | 168 | {0x000a750e, 0x00000002}, |
169 | { 0x0020750f, 0x00000002 }, | 169 | {0x0020750f, 0x00000002}, |
170 | { 0x00600079, 0x00000004 }, | 170 | {0x00600079, 0x00000004}, |
171 | { 0x00007570, 0x00000002 }, | 171 | {0x00007570, 0x00000002}, |
172 | { 0x00007571, 0x00000002 }, | 172 | {0x00007571, 0x00000002}, |
173 | { 0x00007572, 0x00000006 }, | 173 | {0x00007572, 0x00000006}, |
174 | { 0x00005000, 0x00000002 }, | 174 | {0x00005000, 0x00000002}, |
175 | { 0x00a05000, 0x00000002 }, | 175 | {0x00a05000, 0x00000002}, |
176 | { 0x00007568, 0x00000002 }, | 176 | {0x00007568, 0x00000002}, |
177 | { 0x00061000, 0x00000002 }, | 177 | {0x00061000, 0x00000002}, |
178 | { 0x00000084, 0x0000000c }, | 178 | {0x00000084, 0x0000000c}, |
179 | { 0x00058000, 0x00000002 }, | 179 | {0x00058000, 0x00000002}, |
180 | { 0x0c607562, 0x00000002 }, | 180 | {0x0c607562, 0x00000002}, |
181 | { 0x00000086, 0x00000004 }, | 181 | {0x00000086, 0x00000004}, |
182 | { 0x00600085, 0x00000004 }, | 182 | {0x00600085, 0x00000004}, |
183 | { 0x400070dd, 0000000000 }, | 183 | {0x400070dd, 0000000000}, |
184 | { 0x000380dd, 0x00000002 }, | 184 | {0x000380dd, 0x00000002}, |
185 | { 0x00000093, 0x0000001c }, | 185 | {0x00000093, 0x0000001c}, |
186 | { 0x00065095, 0x00000018 }, | 186 | {0x00065095, 0x00000018}, |
187 | { 0x040025bb, 0x00000002 }, | 187 | {0x040025bb, 0x00000002}, |
188 | { 0x00061096, 0x00000018 }, | 188 | {0x00061096, 0x00000018}, |
189 | { 0x040075bc, 0000000000 }, | 189 | {0x040075bc, 0000000000}, |
190 | { 0x000075bb, 0x00000002 }, | 190 | {0x000075bb, 0x00000002}, |
191 | { 0x000075bc, 0000000000 }, | 191 | {0x000075bc, 0000000000}, |
192 | { 0x00090000, 0x00000006 }, | 192 | {0x00090000, 0x00000006}, |
193 | { 0x00090000, 0x00000002 }, | 193 | {0x00090000, 0x00000002}, |
194 | { 0x000d8002, 0x00000006 }, | 194 | {0x000d8002, 0x00000006}, |
195 | { 0x00005000, 0x00000002 }, | 195 | {0x00005000, 0x00000002}, |
196 | { 0x00007821, 0x00000002 }, | 196 | {0x00007821, 0x00000002}, |
197 | { 0x00007800, 0000000000 }, | 197 | {0x00007800, 0000000000}, |
198 | { 0x00007821, 0x00000002 }, | 198 | {0x00007821, 0x00000002}, |
199 | { 0x00007800, 0000000000 }, | 199 | {0x00007800, 0000000000}, |
200 | { 0x01665000, 0x00000002 }, | 200 | {0x01665000, 0x00000002}, |
201 | { 0x000a0000, 0x00000002 }, | 201 | {0x000a0000, 0x00000002}, |
202 | { 0x000671cc, 0x00000002 }, | 202 | {0x000671cc, 0x00000002}, |
203 | { 0x0286f1cd, 0x00000002 }, | 203 | {0x0286f1cd, 0x00000002}, |
204 | { 0x000000a3, 0x00000010 }, | 204 | {0x000000a3, 0x00000010}, |
205 | { 0x21007000, 0000000000 }, | 205 | {0x21007000, 0000000000}, |
206 | { 0x000000aa, 0x0000001c }, | 206 | {0x000000aa, 0x0000001c}, |
207 | { 0x00065000, 0x00000002 }, | 207 | {0x00065000, 0x00000002}, |
208 | { 0x000a0000, 0x00000002 }, | 208 | {0x000a0000, 0x00000002}, |
209 | { 0x00061000, 0x00000002 }, | 209 | {0x00061000, 0x00000002}, |
210 | { 0x000b0000, 0x00000002 }, | 210 | {0x000b0000, 0x00000002}, |
211 | { 0x38067000, 0x00000002 }, | 211 | {0x38067000, 0x00000002}, |
212 | { 0x000a00a6, 0x00000004 }, | 212 | {0x000a00a6, 0x00000004}, |
213 | { 0x20007000, 0000000000 }, | 213 | {0x20007000, 0000000000}, |
214 | { 0x01200000, 0x00000002 }, | 214 | {0x01200000, 0x00000002}, |
215 | { 0x20077000, 0x00000002 }, | 215 | {0x20077000, 0x00000002}, |
216 | { 0x01200000, 0x00000002 }, | 216 | {0x01200000, 0x00000002}, |
217 | { 0x20007000, 0000000000 }, | 217 | {0x20007000, 0000000000}, |
218 | { 0x00061000, 0x00000002 }, | 218 | {0x00061000, 0x00000002}, |
219 | { 0x0120751b, 0x00000002 }, | 219 | {0x0120751b, 0x00000002}, |
220 | { 0x8040750a, 0x00000002 }, | 220 | {0x8040750a, 0x00000002}, |
221 | { 0x8040750b, 0x00000002 }, | 221 | {0x8040750b, 0x00000002}, |
222 | { 0x00110000, 0x00000002 }, | 222 | {0x00110000, 0x00000002}, |
223 | { 0x000380dd, 0x00000002 }, | 223 | {0x000380dd, 0x00000002}, |
224 | { 0x000000bd, 0x0000001c }, | 224 | {0x000000bd, 0x0000001c}, |
225 | { 0x00061096, 0x00000018 }, | 225 | {0x00061096, 0x00000018}, |
226 | { 0x844075bd, 0x00000002 }, | 226 | {0x844075bd, 0x00000002}, |
227 | { 0x00061095, 0x00000018 }, | 227 | {0x00061095, 0x00000018}, |
228 | { 0x840075bb, 0x00000002 }, | 228 | {0x840075bb, 0x00000002}, |
229 | { 0x00061096, 0x00000018 }, | 229 | {0x00061096, 0x00000018}, |
230 | { 0x844075bc, 0x00000002 }, | 230 | {0x844075bc, 0x00000002}, |
231 | { 0x000000c0, 0x00000004 }, | 231 | {0x000000c0, 0x00000004}, |
232 | { 0x804075bd, 0x00000002 }, | 232 | {0x804075bd, 0x00000002}, |
233 | { 0x800075bb, 0x00000002 }, | 233 | {0x800075bb, 0x00000002}, |
234 | { 0x804075bc, 0x00000002 }, | 234 | {0x804075bc, 0x00000002}, |
235 | { 0x00108000, 0x00000002 }, | 235 | {0x00108000, 0x00000002}, |
236 | { 0x01400000, 0x00000002 }, | 236 | {0x01400000, 0x00000002}, |
237 | { 0x006000c4, 0x0000000c }, | 237 | {0x006000c4, 0x0000000c}, |
238 | { 0x20c07000, 0x00000020 }, | 238 | {0x20c07000, 0x00000020}, |
239 | { 0x000000c6, 0x00000012 }, | 239 | {0x000000c6, 0x00000012}, |
240 | { 0x00800000, 0x00000006 }, | 240 | {0x00800000, 0x00000006}, |
241 | { 0x0080751d, 0x00000006 }, | 241 | {0x0080751d, 0x00000006}, |
242 | { 0x000025bb, 0x00000002 }, | 242 | {0x000025bb, 0x00000002}, |
243 | { 0x000040c0, 0x00000004 }, | 243 | {0x000040c0, 0x00000004}, |
244 | { 0x0000775c, 0x00000002 }, | 244 | {0x0000775c, 0x00000002}, |
245 | { 0x00a05000, 0x00000002 }, | 245 | {0x00a05000, 0x00000002}, |
246 | { 0x00661000, 0x00000002 }, | 246 | {0x00661000, 0x00000002}, |
247 | { 0x0460275d, 0x00000020 }, | 247 | {0x0460275d, 0x00000020}, |
248 | { 0x00004000, 0000000000 }, | 248 | {0x00004000, 0000000000}, |
249 | { 0x00007999, 0x00000002 }, | 249 | {0x00007999, 0x00000002}, |
250 | { 0x00a05000, 0x00000002 }, | 250 | {0x00a05000, 0x00000002}, |
251 | { 0x00661000, 0x00000002 }, | 251 | {0x00661000, 0x00000002}, |
252 | { 0x0460299b, 0x00000020 }, | 252 | {0x0460299b, 0x00000020}, |
253 | { 0x00004000, 0000000000 }, | 253 | {0x00004000, 0000000000}, |
254 | { 0x01e00830, 0x00000002 }, | 254 | {0x01e00830, 0x00000002}, |
255 | { 0x21007000, 0000000000 }, | 255 | {0x21007000, 0000000000}, |
256 | { 0x00005000, 0x00000002 }, | 256 | {0x00005000, 0x00000002}, |
257 | { 0x00038042, 0x00000002 }, | 257 | {0x00038042, 0x00000002}, |
258 | { 0x040025e0, 0x00000002 }, | 258 | {0x040025e0, 0x00000002}, |
259 | { 0x000075e1, 0000000000 }, | 259 | {0x000075e1, 0000000000}, |
260 | { 0x00000001, 0000000000 }, | 260 | {0x00000001, 0000000000}, |
261 | { 0x000380d9, 0x00000002 }, | 261 | {0x000380d9, 0x00000002}, |
262 | { 0x04007394, 0000000000 }, | 262 | {0x04007394, 0000000000}, |
263 | { 0000000000, 0000000000 }, | 263 | {0000000000, 0000000000}, |
264 | { 0000000000, 0000000000 }, | 264 | {0000000000, 0000000000}, |
265 | { 0000000000, 0000000000 }, | 265 | {0000000000, 0000000000}, |
266 | { 0000000000, 0000000000 }, | 266 | {0000000000, 0000000000}, |
267 | { 0000000000, 0000000000 }, | 267 | {0000000000, 0000000000}, |
268 | { 0000000000, 0000000000 }, | 268 | {0000000000, 0000000000}, |
269 | { 0000000000, 0000000000 }, | 269 | {0000000000, 0000000000}, |
270 | { 0000000000, 0000000000 }, | 270 | {0000000000, 0000000000}, |
271 | { 0000000000, 0000000000 }, | 271 | {0000000000, 0000000000}, |
272 | { 0000000000, 0000000000 }, | 272 | {0000000000, 0000000000}, |
273 | { 0000000000, 0000000000 }, | 273 | {0000000000, 0000000000}, |
274 | { 0000000000, 0000000000 }, | 274 | {0000000000, 0000000000}, |
275 | { 0000000000, 0000000000 }, | 275 | {0000000000, 0000000000}, |
276 | { 0000000000, 0000000000 }, | 276 | {0000000000, 0000000000}, |
277 | { 0000000000, 0000000000 }, | 277 | {0000000000, 0000000000}, |
278 | { 0000000000, 0000000000 }, | 278 | {0000000000, 0000000000}, |
279 | { 0000000000, 0000000000 }, | 279 | {0000000000, 0000000000}, |
280 | { 0000000000, 0000000000 }, | 280 | {0000000000, 0000000000}, |
281 | { 0000000000, 0000000000 }, | 281 | {0000000000, 0000000000}, |
282 | { 0000000000, 0000000000 }, | 282 | {0000000000, 0000000000}, |
283 | { 0000000000, 0000000000 }, | 283 | {0000000000, 0000000000}, |
284 | { 0000000000, 0000000000 }, | 284 | {0000000000, 0000000000}, |
285 | { 0000000000, 0000000000 }, | 285 | {0000000000, 0000000000}, |
286 | { 0000000000, 0000000000 }, | 286 | {0000000000, 0000000000}, |
287 | { 0000000000, 0000000000 }, | 287 | {0000000000, 0000000000}, |
288 | { 0000000000, 0000000000 }, | 288 | {0000000000, 0000000000}, |
289 | { 0000000000, 0000000000 }, | 289 | {0000000000, 0000000000}, |
290 | { 0000000000, 0000000000 }, | 290 | {0000000000, 0000000000}, |
291 | { 0000000000, 0000000000 }, | 291 | {0000000000, 0000000000}, |
292 | { 0000000000, 0000000000 }, | 292 | {0000000000, 0000000000}, |
293 | { 0000000000, 0000000000 }, | 293 | {0000000000, 0000000000}, |
294 | { 0000000000, 0000000000 }, | 294 | {0000000000, 0000000000}, |
295 | { 0000000000, 0000000000 }, | 295 | {0000000000, 0000000000}, |
296 | { 0000000000, 0000000000 }, | 296 | {0000000000, 0000000000}, |
297 | { 0000000000, 0000000000 }, | 297 | {0000000000, 0000000000}, |
298 | { 0000000000, 0000000000 }, | 298 | {0000000000, 0000000000}, |
299 | }; | 299 | }; |
300 | 300 | ||
301 | |||
302 | static u32 radeon_cp_microcode[][2] = { | 301 | static u32 radeon_cp_microcode[][2] = { |
303 | { 0x21007000, 0000000000 }, | 302 | {0x21007000, 0000000000}, |
304 | { 0x20007000, 0000000000 }, | 303 | {0x20007000, 0000000000}, |
305 | { 0x000000b4, 0x00000004 }, | 304 | {0x000000b4, 0x00000004}, |
306 | { 0x000000b8, 0x00000004 }, | 305 | {0x000000b8, 0x00000004}, |
307 | { 0x6f5b4d4c, 0000000000 }, | 306 | {0x6f5b4d4c, 0000000000}, |
308 | { 0x4c4c427f, 0000000000 }, | 307 | {0x4c4c427f, 0000000000}, |
309 | { 0x5b568a92, 0000000000 }, | 308 | {0x5b568a92, 0000000000}, |
310 | { 0x4ca09c6d, 0000000000 }, | 309 | {0x4ca09c6d, 0000000000}, |
311 | { 0xad4c4c4c, 0000000000 }, | 310 | {0xad4c4c4c, 0000000000}, |
312 | { 0x4ce1af3d, 0000000000 }, | 311 | {0x4ce1af3d, 0000000000}, |
313 | { 0xd8afafaf, 0000000000 }, | 312 | {0xd8afafaf, 0000000000}, |
314 | { 0xd64c4cdc, 0000000000 }, | 313 | {0xd64c4cdc, 0000000000}, |
315 | { 0x4cd10d10, 0000000000 }, | 314 | {0x4cd10d10, 0000000000}, |
316 | { 0x000f0000, 0x00000016 }, | 315 | {0x000f0000, 0x00000016}, |
317 | { 0x362f242d, 0000000000 }, | 316 | {0x362f242d, 0000000000}, |
318 | { 0x00000012, 0x00000004 }, | 317 | {0x00000012, 0x00000004}, |
319 | { 0x000f0000, 0x00000016 }, | 318 | {0x000f0000, 0x00000016}, |
320 | { 0x362f282d, 0000000000 }, | 319 | {0x362f282d, 0000000000}, |
321 | { 0x000380e7, 0x00000002 }, | 320 | {0x000380e7, 0x00000002}, |
322 | { 0x04002c97, 0x00000002 }, | 321 | {0x04002c97, 0x00000002}, |
323 | { 0x000f0001, 0x00000016 }, | 322 | {0x000f0001, 0x00000016}, |
324 | { 0x333a3730, 0000000000 }, | 323 | {0x333a3730, 0000000000}, |
325 | { 0x000077ef, 0x00000002 }, | 324 | {0x000077ef, 0x00000002}, |
326 | { 0x00061000, 0x00000002 }, | 325 | {0x00061000, 0x00000002}, |
327 | { 0x00000021, 0x0000001a }, | 326 | {0x00000021, 0x0000001a}, |
328 | { 0x00004000, 0x0000001e }, | 327 | {0x00004000, 0x0000001e}, |
329 | { 0x00061000, 0x00000002 }, | 328 | {0x00061000, 0x00000002}, |
330 | { 0x00000021, 0x0000001a }, | 329 | {0x00000021, 0x0000001a}, |
331 | { 0x00004000, 0x0000001e }, | 330 | {0x00004000, 0x0000001e}, |
332 | { 0x00061000, 0x00000002 }, | 331 | {0x00061000, 0x00000002}, |
333 | { 0x00000021, 0x0000001a }, | 332 | {0x00000021, 0x0000001a}, |
334 | { 0x00004000, 0x0000001e }, | 333 | {0x00004000, 0x0000001e}, |
335 | { 0x00000017, 0x00000004 }, | 334 | {0x00000017, 0x00000004}, |
336 | { 0x0003802b, 0x00000002 }, | 335 | {0x0003802b, 0x00000002}, |
337 | { 0x040067e0, 0x00000002 }, | 336 | {0x040067e0, 0x00000002}, |
338 | { 0x00000017, 0x00000004 }, | 337 | {0x00000017, 0x00000004}, |
339 | { 0x000077e0, 0x00000002 }, | 338 | {0x000077e0, 0x00000002}, |
340 | { 0x00065000, 0x00000002 }, | 339 | {0x00065000, 0x00000002}, |
341 | { 0x000037e1, 0x00000002 }, | 340 | {0x000037e1, 0x00000002}, |
342 | { 0x040067e1, 0x00000006 }, | 341 | {0x040067e1, 0x00000006}, |
343 | { 0x000077e0, 0x00000002 }, | 342 | {0x000077e0, 0x00000002}, |
344 | { 0x000077e1, 0x00000002 }, | 343 | {0x000077e1, 0x00000002}, |
345 | { 0x000077e1, 0x00000006 }, | 344 | {0x000077e1, 0x00000006}, |
346 | { 0xffffffff, 0000000000 }, | 345 | {0xffffffff, 0000000000}, |
347 | { 0x10000000, 0000000000 }, | 346 | {0x10000000, 0000000000}, |
348 | { 0x0003802b, 0x00000002 }, | 347 | {0x0003802b, 0x00000002}, |
349 | { 0x040067e0, 0x00000006 }, | 348 | {0x040067e0, 0x00000006}, |
350 | { 0x00007675, 0x00000002 }, | 349 | {0x00007675, 0x00000002}, |
351 | { 0x00007676, 0x00000002 }, | 350 | {0x00007676, 0x00000002}, |
352 | { 0x00007677, 0x00000002 }, | 351 | {0x00007677, 0x00000002}, |
353 | { 0x00007678, 0x00000006 }, | 352 | {0x00007678, 0x00000006}, |
354 | { 0x0003802c, 0x00000002 }, | 353 | {0x0003802c, 0x00000002}, |
355 | { 0x04002676, 0x00000002 }, | 354 | {0x04002676, 0x00000002}, |
356 | { 0x00007677, 0x00000002 }, | 355 | {0x00007677, 0x00000002}, |
357 | { 0x00007678, 0x00000006 }, | 356 | {0x00007678, 0x00000006}, |
358 | { 0x0000002f, 0x00000018 }, | 357 | {0x0000002f, 0x00000018}, |
359 | { 0x0000002f, 0x00000018 }, | 358 | {0x0000002f, 0x00000018}, |
360 | { 0000000000, 0x00000006 }, | 359 | {0000000000, 0x00000006}, |
361 | { 0x00000030, 0x00000018 }, | 360 | {0x00000030, 0x00000018}, |
362 | { 0x00000030, 0x00000018 }, | 361 | {0x00000030, 0x00000018}, |
363 | { 0000000000, 0x00000006 }, | 362 | {0000000000, 0x00000006}, |
364 | { 0x01605000, 0x00000002 }, | 363 | {0x01605000, 0x00000002}, |
365 | { 0x00065000, 0x00000002 }, | 364 | {0x00065000, 0x00000002}, |
366 | { 0x00098000, 0x00000002 }, | 365 | {0x00098000, 0x00000002}, |
367 | { 0x00061000, 0x00000002 }, | 366 | {0x00061000, 0x00000002}, |
368 | { 0x64c0603e, 0x00000004 }, | 367 | {0x64c0603e, 0x00000004}, |
369 | { 0x000380e6, 0x00000002 }, | 368 | {0x000380e6, 0x00000002}, |
370 | { 0x040025c5, 0x00000002 }, | 369 | {0x040025c5, 0x00000002}, |
371 | { 0x00080000, 0x00000016 }, | 370 | {0x00080000, 0x00000016}, |
372 | { 0000000000, 0000000000 }, | 371 | {0000000000, 0000000000}, |
373 | { 0x0400251d, 0x00000002 }, | 372 | {0x0400251d, 0x00000002}, |
374 | { 0x00007580, 0x00000002 }, | 373 | {0x00007580, 0x00000002}, |
375 | { 0x00067581, 0x00000002 }, | 374 | {0x00067581, 0x00000002}, |
376 | { 0x04002580, 0x00000002 }, | 375 | {0x04002580, 0x00000002}, |
377 | { 0x00067581, 0x00000002 }, | 376 | {0x00067581, 0x00000002}, |
378 | { 0x00000049, 0x00000004 }, | 377 | {0x00000049, 0x00000004}, |
379 | { 0x00005000, 0000000000 }, | 378 | {0x00005000, 0000000000}, |
380 | { 0x000380e6, 0x00000002 }, | 379 | {0x000380e6, 0x00000002}, |
381 | { 0x040025c5, 0x00000002 }, | 380 | {0x040025c5, 0x00000002}, |
382 | { 0x00061000, 0x00000002 }, | 381 | {0x00061000, 0x00000002}, |
383 | { 0x0000750e, 0x00000002 }, | 382 | {0x0000750e, 0x00000002}, |
384 | { 0x00019000, 0x00000002 }, | 383 | {0x00019000, 0x00000002}, |
385 | { 0x00011055, 0x00000014 }, | 384 | {0x00011055, 0x00000014}, |
386 | { 0x00000055, 0x00000012 }, | 385 | {0x00000055, 0x00000012}, |
387 | { 0x0400250f, 0x00000002 }, | 386 | {0x0400250f, 0x00000002}, |
388 | { 0x0000504f, 0x00000004 }, | 387 | {0x0000504f, 0x00000004}, |
389 | { 0x000380e6, 0x00000002 }, | 388 | {0x000380e6, 0x00000002}, |
390 | { 0x040025c5, 0x00000002 }, | 389 | {0x040025c5, 0x00000002}, |
391 | { 0x00007565, 0x00000002 }, | 390 | {0x00007565, 0x00000002}, |
392 | { 0x00007566, 0x00000002 }, | 391 | {0x00007566, 0x00000002}, |
393 | { 0x00000058, 0x00000004 }, | 392 | {0x00000058, 0x00000004}, |
394 | { 0x000380e6, 0x00000002 }, | 393 | {0x000380e6, 0x00000002}, |
395 | { 0x040025c5, 0x00000002 }, | 394 | {0x040025c5, 0x00000002}, |
396 | { 0x01e655b4, 0x00000002 }, | 395 | {0x01e655b4, 0x00000002}, |
397 | { 0x4401b0e4, 0x00000002 }, | 396 | {0x4401b0e4, 0x00000002}, |
398 | { 0x01c110e4, 0x00000002 }, | 397 | {0x01c110e4, 0x00000002}, |
399 | { 0x26667066, 0x00000018 }, | 398 | {0x26667066, 0x00000018}, |
400 | { 0x040c2565, 0x00000002 }, | 399 | {0x040c2565, 0x00000002}, |
401 | { 0x00000066, 0x00000018 }, | 400 | {0x00000066, 0x00000018}, |
402 | { 0x04002564, 0x00000002 }, | 401 | {0x04002564, 0x00000002}, |
403 | { 0x00007566, 0x00000002 }, | 402 | {0x00007566, 0x00000002}, |
404 | { 0x0000005d, 0x00000004 }, | 403 | {0x0000005d, 0x00000004}, |
405 | { 0x00401069, 0x00000008 }, | 404 | {0x00401069, 0x00000008}, |
406 | { 0x00101000, 0x00000002 }, | 405 | {0x00101000, 0x00000002}, |
407 | { 0x000d80ff, 0x00000002 }, | 406 | {0x000d80ff, 0x00000002}, |
408 | { 0x0080006c, 0x00000008 }, | 407 | {0x0080006c, 0x00000008}, |
409 | { 0x000f9000, 0x00000002 }, | 408 | {0x000f9000, 0x00000002}, |
410 | { 0x000e00ff, 0x00000002 }, | 409 | {0x000e00ff, 0x00000002}, |
411 | { 0000000000, 0x00000006 }, | 410 | {0000000000, 0x00000006}, |
412 | { 0x0000008f, 0x00000018 }, | 411 | {0x0000008f, 0x00000018}, |
413 | { 0x0000005b, 0x00000004 }, | 412 | {0x0000005b, 0x00000004}, |
414 | { 0x000380e6, 0x00000002 }, | 413 | {0x000380e6, 0x00000002}, |
415 | { 0x040025c5, 0x00000002 }, | 414 | {0x040025c5, 0x00000002}, |
416 | { 0x00007576, 0x00000002 }, | 415 | {0x00007576, 0x00000002}, |
417 | { 0x00065000, 0x00000002 }, | 416 | {0x00065000, 0x00000002}, |
418 | { 0x00009000, 0x00000002 }, | 417 | {0x00009000, 0x00000002}, |
419 | { 0x00041000, 0x00000002 }, | 418 | {0x00041000, 0x00000002}, |
420 | { 0x0c00350e, 0x00000002 }, | 419 | {0x0c00350e, 0x00000002}, |
421 | { 0x00049000, 0x00000002 }, | 420 | {0x00049000, 0x00000002}, |
422 | { 0x00051000, 0x00000002 }, | 421 | {0x00051000, 0x00000002}, |
423 | { 0x01e785f8, 0x00000002 }, | 422 | {0x01e785f8, 0x00000002}, |
424 | { 0x00200000, 0x00000002 }, | 423 | {0x00200000, 0x00000002}, |
425 | { 0x0060007e, 0x0000000c }, | 424 | {0x0060007e, 0x0000000c}, |
426 | { 0x00007563, 0x00000002 }, | 425 | {0x00007563, 0x00000002}, |
427 | { 0x006075f0, 0x00000021 }, | 426 | {0x006075f0, 0x00000021}, |
428 | { 0x20007073, 0x00000004 }, | 427 | {0x20007073, 0x00000004}, |
429 | { 0x00005073, 0x00000004 }, | 428 | {0x00005073, 0x00000004}, |
430 | { 0x000380e6, 0x00000002 }, | 429 | {0x000380e6, 0x00000002}, |
431 | { 0x040025c5, 0x00000002 }, | 430 | {0x040025c5, 0x00000002}, |
432 | { 0x00007576, 0x00000002 }, | 431 | {0x00007576, 0x00000002}, |
433 | { 0x00007577, 0x00000002 }, | 432 | {0x00007577, 0x00000002}, |
434 | { 0x0000750e, 0x00000002 }, | 433 | {0x0000750e, 0x00000002}, |
435 | { 0x0000750f, 0x00000002 }, | 434 | {0x0000750f, 0x00000002}, |
436 | { 0x00a05000, 0x00000002 }, | 435 | {0x00a05000, 0x00000002}, |
437 | { 0x00600083, 0x0000000c }, | 436 | {0x00600083, 0x0000000c}, |
438 | { 0x006075f0, 0x00000021 }, | 437 | {0x006075f0, 0x00000021}, |
439 | { 0x000075f8, 0x00000002 }, | 438 | {0x000075f8, 0x00000002}, |
440 | { 0x00000083, 0x00000004 }, | 439 | {0x00000083, 0x00000004}, |
441 | { 0x000a750e, 0x00000002 }, | 440 | {0x000a750e, 0x00000002}, |
442 | { 0x000380e6, 0x00000002 }, | 441 | {0x000380e6, 0x00000002}, |
443 | { 0x040025c5, 0x00000002 }, | 442 | {0x040025c5, 0x00000002}, |
444 | { 0x0020750f, 0x00000002 }, | 443 | {0x0020750f, 0x00000002}, |
445 | { 0x00600086, 0x00000004 }, | 444 | {0x00600086, 0x00000004}, |
446 | { 0x00007570, 0x00000002 }, | 445 | {0x00007570, 0x00000002}, |
447 | { 0x00007571, 0x00000002 }, | 446 | {0x00007571, 0x00000002}, |
448 | { 0x00007572, 0x00000006 }, | 447 | {0x00007572, 0x00000006}, |
449 | { 0x000380e6, 0x00000002 }, | 448 | {0x000380e6, 0x00000002}, |
450 | { 0x040025c5, 0x00000002 }, | 449 | {0x040025c5, 0x00000002}, |
451 | { 0x00005000, 0x00000002 }, | 450 | {0x00005000, 0x00000002}, |
452 | { 0x00a05000, 0x00000002 }, | 451 | {0x00a05000, 0x00000002}, |
453 | { 0x00007568, 0x00000002 }, | 452 | {0x00007568, 0x00000002}, |
454 | { 0x00061000, 0x00000002 }, | 453 | {0x00061000, 0x00000002}, |
455 | { 0x00000095, 0x0000000c }, | 454 | {0x00000095, 0x0000000c}, |
456 | { 0x00058000, 0x00000002 }, | 455 | {0x00058000, 0x00000002}, |
457 | { 0x0c607562, 0x00000002 }, | 456 | {0x0c607562, 0x00000002}, |
458 | { 0x00000097, 0x00000004 }, | 457 | {0x00000097, 0x00000004}, |
459 | { 0x000380e6, 0x00000002 }, | 458 | {0x000380e6, 0x00000002}, |
460 | { 0x040025c5, 0x00000002 }, | 459 | {0x040025c5, 0x00000002}, |
461 | { 0x00600096, 0x00000004 }, | 460 | {0x00600096, 0x00000004}, |
462 | { 0x400070e5, 0000000000 }, | 461 | {0x400070e5, 0000000000}, |
463 | { 0x000380e6, 0x00000002 }, | 462 | {0x000380e6, 0x00000002}, |
464 | { 0x040025c5, 0x00000002 }, | 463 | {0x040025c5, 0x00000002}, |
465 | { 0x000380e5, 0x00000002 }, | 464 | {0x000380e5, 0x00000002}, |
466 | { 0x000000a8, 0x0000001c }, | 465 | {0x000000a8, 0x0000001c}, |
467 | { 0x000650aa, 0x00000018 }, | 466 | {0x000650aa, 0x00000018}, |
468 | { 0x040025bb, 0x00000002 }, | 467 | {0x040025bb, 0x00000002}, |
469 | { 0x000610ab, 0x00000018 }, | 468 | {0x000610ab, 0x00000018}, |
470 | { 0x040075bc, 0000000000 }, | 469 | {0x040075bc, 0000000000}, |
471 | { 0x000075bb, 0x00000002 }, | 470 | {0x000075bb, 0x00000002}, |
472 | { 0x000075bc, 0000000000 }, | 471 | {0x000075bc, 0000000000}, |
473 | { 0x00090000, 0x00000006 }, | 472 | {0x00090000, 0x00000006}, |
474 | { 0x00090000, 0x00000002 }, | 473 | {0x00090000, 0x00000002}, |
475 | { 0x000d8002, 0x00000006 }, | 474 | {0x000d8002, 0x00000006}, |
476 | { 0x00007832, 0x00000002 }, | 475 | {0x00007832, 0x00000002}, |
477 | { 0x00005000, 0x00000002 }, | 476 | {0x00005000, 0x00000002}, |
478 | { 0x000380e7, 0x00000002 }, | 477 | {0x000380e7, 0x00000002}, |
479 | { 0x04002c97, 0x00000002 }, | 478 | {0x04002c97, 0x00000002}, |
480 | { 0x00007820, 0x00000002 }, | 479 | {0x00007820, 0x00000002}, |
481 | { 0x00007821, 0x00000002 }, | 480 | {0x00007821, 0x00000002}, |
482 | { 0x00007800, 0000000000 }, | 481 | {0x00007800, 0000000000}, |
483 | { 0x01200000, 0x00000002 }, | 482 | {0x01200000, 0x00000002}, |
484 | { 0x20077000, 0x00000002 }, | 483 | {0x20077000, 0x00000002}, |
485 | { 0x01200000, 0x00000002 }, | 484 | {0x01200000, 0x00000002}, |
486 | { 0x20007000, 0x00000002 }, | 485 | {0x20007000, 0x00000002}, |
487 | { 0x00061000, 0x00000002 }, | 486 | {0x00061000, 0x00000002}, |
488 | { 0x0120751b, 0x00000002 }, | 487 | {0x0120751b, 0x00000002}, |
489 | { 0x8040750a, 0x00000002 }, | 488 | {0x8040750a, 0x00000002}, |
490 | { 0x8040750b, 0x00000002 }, | 489 | {0x8040750b, 0x00000002}, |
491 | { 0x00110000, 0x00000002 }, | 490 | {0x00110000, 0x00000002}, |
492 | { 0x000380e5, 0x00000002 }, | 491 | {0x000380e5, 0x00000002}, |
493 | { 0x000000c6, 0x0000001c }, | 492 | {0x000000c6, 0x0000001c}, |
494 | { 0x000610ab, 0x00000018 }, | 493 | {0x000610ab, 0x00000018}, |
495 | { 0x844075bd, 0x00000002 }, | 494 | {0x844075bd, 0x00000002}, |
496 | { 0x000610aa, 0x00000018 }, | 495 | {0x000610aa, 0x00000018}, |
497 | { 0x840075bb, 0x00000002 }, | 496 | {0x840075bb, 0x00000002}, |
498 | { 0x000610ab, 0x00000018 }, | 497 | {0x000610ab, 0x00000018}, |
499 | { 0x844075bc, 0x00000002 }, | 498 | {0x844075bc, 0x00000002}, |
500 | { 0x000000c9, 0x00000004 }, | 499 | {0x000000c9, 0x00000004}, |
501 | { 0x804075bd, 0x00000002 }, | 500 | {0x804075bd, 0x00000002}, |
502 | { 0x800075bb, 0x00000002 }, | 501 | {0x800075bb, 0x00000002}, |
503 | { 0x804075bc, 0x00000002 }, | 502 | {0x804075bc, 0x00000002}, |
504 | { 0x00108000, 0x00000002 }, | 503 | {0x00108000, 0x00000002}, |
505 | { 0x01400000, 0x00000002 }, | 504 | {0x01400000, 0x00000002}, |
506 | { 0x006000cd, 0x0000000c }, | 505 | {0x006000cd, 0x0000000c}, |
507 | { 0x20c07000, 0x00000020 }, | 506 | {0x20c07000, 0x00000020}, |
508 | { 0x000000cf, 0x00000012 }, | 507 | {0x000000cf, 0x00000012}, |
509 | { 0x00800000, 0x00000006 }, | 508 | {0x00800000, 0x00000006}, |
510 | { 0x0080751d, 0x00000006 }, | 509 | {0x0080751d, 0x00000006}, |
511 | { 0000000000, 0000000000 }, | 510 | {0000000000, 0000000000}, |
512 | { 0x0000775c, 0x00000002 }, | 511 | {0x0000775c, 0x00000002}, |
513 | { 0x00a05000, 0x00000002 }, | 512 | {0x00a05000, 0x00000002}, |
514 | { 0x00661000, 0x00000002 }, | 513 | {0x00661000, 0x00000002}, |
515 | { 0x0460275d, 0x00000020 }, | 514 | {0x0460275d, 0x00000020}, |
516 | { 0x00004000, 0000000000 }, | 515 | {0x00004000, 0000000000}, |
517 | { 0x01e00830, 0x00000002 }, | 516 | {0x01e00830, 0x00000002}, |
518 | { 0x21007000, 0000000000 }, | 517 | {0x21007000, 0000000000}, |
519 | { 0x6464614d, 0000000000 }, | 518 | {0x6464614d, 0000000000}, |
520 | { 0x69687420, 0000000000 }, | 519 | {0x69687420, 0000000000}, |
521 | { 0x00000073, 0000000000 }, | 520 | {0x00000073, 0000000000}, |
522 | { 0000000000, 0000000000 }, | 521 | {0000000000, 0000000000}, |
523 | { 0x00005000, 0x00000002 }, | 522 | {0x00005000, 0x00000002}, |
524 | { 0x000380d0, 0x00000002 }, | 523 | {0x000380d0, 0x00000002}, |
525 | { 0x040025e0, 0x00000002 }, | 524 | {0x040025e0, 0x00000002}, |
526 | { 0x000075e1, 0000000000 }, | 525 | {0x000075e1, 0000000000}, |
527 | { 0x00000001, 0000000000 }, | 526 | {0x00000001, 0000000000}, |
528 | { 0x000380e0, 0x00000002 }, | 527 | {0x000380e0, 0x00000002}, |
529 | { 0x04002394, 0x00000002 }, | 528 | {0x04002394, 0x00000002}, |
530 | { 0x00005000, 0000000000 }, | 529 | {0x00005000, 0000000000}, |
531 | { 0000000000, 0000000000 }, | 530 | {0000000000, 0000000000}, |
532 | { 0000000000, 0000000000 }, | 531 | {0000000000, 0000000000}, |
533 | { 0x00000008, 0000000000 }, | 532 | {0x00000008, 0000000000}, |
534 | { 0x00000004, 0000000000 }, | 533 | {0x00000004, 0000000000}, |
535 | { 0000000000, 0000000000 }, | 534 | {0000000000, 0000000000}, |
536 | { 0000000000, 0000000000 }, | 535 | {0000000000, 0000000000}, |
537 | { 0000000000, 0000000000 }, | 536 | {0000000000, 0000000000}, |
538 | { 0000000000, 0000000000 }, | 537 | {0000000000, 0000000000}, |
539 | { 0000000000, 0000000000 }, | 538 | {0000000000, 0000000000}, |
540 | { 0000000000, 0000000000 }, | 539 | {0000000000, 0000000000}, |
541 | { 0000000000, 0000000000 }, | 540 | {0000000000, 0000000000}, |
542 | { 0000000000, 0000000000 }, | 541 | {0000000000, 0000000000}, |
543 | { 0000000000, 0000000000 }, | 542 | {0000000000, 0000000000}, |
544 | { 0000000000, 0000000000 }, | 543 | {0000000000, 0000000000}, |
545 | { 0000000000, 0000000000 }, | 544 | {0000000000, 0000000000}, |
546 | { 0000000000, 0000000000 }, | 545 | {0000000000, 0000000000}, |
547 | { 0000000000, 0000000000 }, | 546 | {0000000000, 0000000000}, |
548 | { 0000000000, 0000000000 }, | 547 | {0000000000, 0000000000}, |
549 | { 0000000000, 0000000000 }, | 548 | {0000000000, 0000000000}, |
550 | { 0000000000, 0000000000 }, | 549 | {0000000000, 0000000000}, |
551 | { 0000000000, 0000000000 }, | 550 | {0000000000, 0000000000}, |
552 | { 0000000000, 0000000000 }, | 551 | {0000000000, 0000000000}, |
553 | { 0000000000, 0000000000 }, | 552 | {0000000000, 0000000000}, |
554 | { 0000000000, 0000000000 }, | 553 | {0000000000, 0000000000}, |
555 | { 0000000000, 0000000000 }, | 554 | {0000000000, 0000000000}, |
556 | { 0000000000, 0000000000 }, | 555 | {0000000000, 0000000000}, |
557 | { 0000000000, 0000000000 }, | 556 | {0000000000, 0000000000}, |
558 | { 0000000000, 0000000000 }, | 557 | {0000000000, 0000000000}, |
559 | }; | 558 | }; |
560 | 559 | ||
561 | static u32 R300_cp_microcode[][2] = { | 560 | static u32 R300_cp_microcode[][2] = { |
562 | { 0x4200e000, 0000000000 }, | 561 | {0x4200e000, 0000000000}, |
563 | { 0x4000e000, 0000000000 }, | 562 | {0x4000e000, 0000000000}, |
564 | { 0x000000af, 0x00000008 }, | 563 | {0x000000af, 0x00000008}, |
565 | { 0x000000b3, 0x00000008 }, | 564 | {0x000000b3, 0x00000008}, |
566 | { 0x6c5a504f, 0000000000 }, | 565 | {0x6c5a504f, 0000000000}, |
567 | { 0x4f4f497a, 0000000000 }, | 566 | {0x4f4f497a, 0000000000}, |
568 | { 0x5a578288, 0000000000 }, | 567 | {0x5a578288, 0000000000}, |
569 | { 0x4f91906a, 0000000000 }, | 568 | {0x4f91906a, 0000000000}, |
570 | { 0x4f4f4f4f, 0000000000 }, | 569 | {0x4f4f4f4f, 0000000000}, |
571 | { 0x4fe24f44, 0000000000 }, | 570 | {0x4fe24f44, 0000000000}, |
572 | { 0x4f9c9c9c, 0000000000 }, | 571 | {0x4f9c9c9c, 0000000000}, |
573 | { 0xdc4f4fde, 0000000000 }, | 572 | {0xdc4f4fde, 0000000000}, |
574 | { 0xa1cd4f4f, 0000000000 }, | 573 | {0xa1cd4f4f, 0000000000}, |
575 | { 0xd29d9d9d, 0000000000 }, | 574 | {0xd29d9d9d, 0000000000}, |
576 | { 0x4f0f9fd7, 0000000000 }, | 575 | {0x4f0f9fd7, 0000000000}, |
577 | { 0x000ca000, 0x00000004 }, | 576 | {0x000ca000, 0x00000004}, |
578 | { 0x000d0012, 0x00000038 }, | 577 | {0x000d0012, 0x00000038}, |
579 | { 0x0000e8b4, 0x00000004 }, | 578 | {0x0000e8b4, 0x00000004}, |
580 | { 0x000d0014, 0x00000038 }, | 579 | {0x000d0014, 0x00000038}, |
581 | { 0x0000e8b6, 0x00000004 }, | 580 | {0x0000e8b6, 0x00000004}, |
582 | { 0x000d0016, 0x00000038 }, | 581 | {0x000d0016, 0x00000038}, |
583 | { 0x0000e854, 0x00000004 }, | 582 | {0x0000e854, 0x00000004}, |
584 | { 0x000d0018, 0x00000038 }, | 583 | {0x000d0018, 0x00000038}, |
585 | { 0x0000e855, 0x00000004 }, | 584 | {0x0000e855, 0x00000004}, |
586 | { 0x000d001a, 0x00000038 }, | 585 | {0x000d001a, 0x00000038}, |
587 | { 0x0000e856, 0x00000004 }, | 586 | {0x0000e856, 0x00000004}, |
588 | { 0x000d001c, 0x00000038 }, | 587 | {0x000d001c, 0x00000038}, |
589 | { 0x0000e857, 0x00000004 }, | 588 | {0x0000e857, 0x00000004}, |
590 | { 0x000d001e, 0x00000038 }, | 589 | {0x000d001e, 0x00000038}, |
591 | { 0x0000e824, 0x00000004 }, | 590 | {0x0000e824, 0x00000004}, |
592 | { 0x000d0020, 0x00000038 }, | 591 | {0x000d0020, 0x00000038}, |
593 | { 0x0000e825, 0x00000004 }, | 592 | {0x0000e825, 0x00000004}, |
594 | { 0x000d0022, 0x00000038 }, | 593 | {0x000d0022, 0x00000038}, |
595 | { 0x0000e830, 0x00000004 }, | 594 | {0x0000e830, 0x00000004}, |
596 | { 0x000d0024, 0x00000038 }, | 595 | {0x000d0024, 0x00000038}, |
597 | { 0x0000f0c0, 0x00000004 }, | 596 | {0x0000f0c0, 0x00000004}, |
598 | { 0x000d0026, 0x00000038 }, | 597 | {0x000d0026, 0x00000038}, |
599 | { 0x0000f0c1, 0x00000004 }, | 598 | {0x0000f0c1, 0x00000004}, |
600 | { 0x000d0028, 0x00000038 }, | 599 | {0x000d0028, 0x00000038}, |
601 | { 0x0000f041, 0x00000004 }, | 600 | {0x0000f041, 0x00000004}, |
602 | { 0x000d002a, 0x00000038 }, | 601 | {0x000d002a, 0x00000038}, |
603 | { 0x0000f184, 0x00000004 }, | 602 | {0x0000f184, 0x00000004}, |
604 | { 0x000d002c, 0x00000038 }, | 603 | {0x000d002c, 0x00000038}, |
605 | { 0x0000f185, 0x00000004 }, | 604 | {0x0000f185, 0x00000004}, |
606 | { 0x000d002e, 0x00000038 }, | 605 | {0x000d002e, 0x00000038}, |
607 | { 0x0000f186, 0x00000004 }, | 606 | {0x0000f186, 0x00000004}, |
608 | { 0x000d0030, 0x00000038 }, | 607 | {0x000d0030, 0x00000038}, |
609 | { 0x0000f187, 0x00000004 }, | 608 | {0x0000f187, 0x00000004}, |
610 | { 0x000d0032, 0x00000038 }, | 609 | {0x000d0032, 0x00000038}, |
611 | { 0x0000f180, 0x00000004 }, | 610 | {0x0000f180, 0x00000004}, |
612 | { 0x000d0034, 0x00000038 }, | 611 | {0x000d0034, 0x00000038}, |
613 | { 0x0000f393, 0x00000004 }, | 612 | {0x0000f393, 0x00000004}, |
614 | { 0x000d0036, 0x00000038 }, | 613 | {0x000d0036, 0x00000038}, |
615 | { 0x0000f38a, 0x00000004 }, | 614 | {0x0000f38a, 0x00000004}, |
616 | { 0x000d0038, 0x00000038 }, | 615 | {0x000d0038, 0x00000038}, |
617 | { 0x0000f38e, 0x00000004 }, | 616 | {0x0000f38e, 0x00000004}, |
618 | { 0x0000e821, 0x00000004 }, | 617 | {0x0000e821, 0x00000004}, |
619 | { 0x0140a000, 0x00000004 }, | 618 | {0x0140a000, 0x00000004}, |
620 | { 0x00000043, 0x00000018 }, | 619 | {0x00000043, 0x00000018}, |
621 | { 0x00cce800, 0x00000004 }, | 620 | {0x00cce800, 0x00000004}, |
622 | { 0x001b0001, 0x00000004 }, | 621 | {0x001b0001, 0x00000004}, |
623 | { 0x08004800, 0x00000004 }, | 622 | {0x08004800, 0x00000004}, |
624 | { 0x001b0001, 0x00000004 }, | 623 | {0x001b0001, 0x00000004}, |
625 | { 0x08004800, 0x00000004 }, | 624 | {0x08004800, 0x00000004}, |
626 | { 0x001b0001, 0x00000004 }, | 625 | {0x001b0001, 0x00000004}, |
627 | { 0x08004800, 0x00000004 }, | 626 | {0x08004800, 0x00000004}, |
628 | { 0x0000003a, 0x00000008 }, | 627 | {0x0000003a, 0x00000008}, |
629 | { 0x0000a000, 0000000000 }, | 628 | {0x0000a000, 0000000000}, |
630 | { 0x02c0a000, 0x00000004 }, | 629 | {0x02c0a000, 0x00000004}, |
631 | { 0x000ca000, 0x00000004 }, | 630 | {0x000ca000, 0x00000004}, |
632 | { 0x00130000, 0x00000004 }, | 631 | {0x00130000, 0x00000004}, |
633 | { 0x000c2000, 0x00000004 }, | 632 | {0x000c2000, 0x00000004}, |
634 | { 0xc980c045, 0x00000008 }, | 633 | {0xc980c045, 0x00000008}, |
635 | { 0x2000451d, 0x00000004 }, | 634 | {0x2000451d, 0x00000004}, |
636 | { 0x0000e580, 0x00000004 }, | 635 | {0x0000e580, 0x00000004}, |
637 | { 0x000ce581, 0x00000004 }, | 636 | {0x000ce581, 0x00000004}, |
638 | { 0x08004580, 0x00000004 }, | 637 | {0x08004580, 0x00000004}, |
639 | { 0x000ce581, 0x00000004 }, | 638 | {0x000ce581, 0x00000004}, |
640 | { 0x0000004c, 0x00000008 }, | 639 | {0x0000004c, 0x00000008}, |
641 | { 0x0000a000, 0000000000 }, | 640 | {0x0000a000, 0000000000}, |
642 | { 0x000c2000, 0x00000004 }, | 641 | {0x000c2000, 0x00000004}, |
643 | { 0x0000e50e, 0x00000004 }, | 642 | {0x0000e50e, 0x00000004}, |
644 | { 0x00032000, 0x00000004 }, | 643 | {0x00032000, 0x00000004}, |
645 | { 0x00022056, 0x00000028 }, | 644 | {0x00022056, 0x00000028}, |
646 | { 0x00000056, 0x00000024 }, | 645 | {0x00000056, 0x00000024}, |
647 | { 0x0800450f, 0x00000004 }, | 646 | {0x0800450f, 0x00000004}, |
648 | { 0x0000a050, 0x00000008 }, | 647 | {0x0000a050, 0x00000008}, |
649 | { 0x0000e565, 0x00000004 }, | 648 | {0x0000e565, 0x00000004}, |
650 | { 0x0000e566, 0x00000004 }, | 649 | {0x0000e566, 0x00000004}, |
651 | { 0x00000057, 0x00000008 }, | 650 | {0x00000057, 0x00000008}, |
652 | { 0x03cca5b4, 0x00000004 }, | 651 | {0x03cca5b4, 0x00000004}, |
653 | { 0x05432000, 0x00000004 }, | 652 | {0x05432000, 0x00000004}, |
654 | { 0x00022000, 0x00000004 }, | 653 | {0x00022000, 0x00000004}, |
655 | { 0x4ccce063, 0x00000030 }, | 654 | {0x4ccce063, 0x00000030}, |
656 | { 0x08274565, 0x00000004 }, | 655 | {0x08274565, 0x00000004}, |
657 | { 0x00000063, 0x00000030 }, | 656 | {0x00000063, 0x00000030}, |
658 | { 0x08004564, 0x00000004 }, | 657 | {0x08004564, 0x00000004}, |
659 | { 0x0000e566, 0x00000004 }, | 658 | {0x0000e566, 0x00000004}, |
660 | { 0x0000005a, 0x00000008 }, | 659 | {0x0000005a, 0x00000008}, |
661 | { 0x00802066, 0x00000010 }, | 660 | {0x00802066, 0x00000010}, |
662 | { 0x00202000, 0x00000004 }, | 661 | {0x00202000, 0x00000004}, |
663 | { 0x001b00ff, 0x00000004 }, | 662 | {0x001b00ff, 0x00000004}, |
664 | { 0x01000069, 0x00000010 }, | 663 | {0x01000069, 0x00000010}, |
665 | { 0x001f2000, 0x00000004 }, | 664 | {0x001f2000, 0x00000004}, |
666 | { 0x001c00ff, 0x00000004 }, | 665 | {0x001c00ff, 0x00000004}, |
667 | { 0000000000, 0x0000000c }, | 666 | {0000000000, 0x0000000c}, |
668 | { 0x00000085, 0x00000030 }, | 667 | {0x00000085, 0x00000030}, |
669 | { 0x0000005a, 0x00000008 }, | 668 | {0x0000005a, 0x00000008}, |
670 | { 0x0000e576, 0x00000004 }, | 669 | {0x0000e576, 0x00000004}, |
671 | { 0x000ca000, 0x00000004 }, | 670 | {0x000ca000, 0x00000004}, |
672 | { 0x00012000, 0x00000004 }, | 671 | {0x00012000, 0x00000004}, |
673 | { 0x00082000, 0x00000004 }, | 672 | {0x00082000, 0x00000004}, |
674 | { 0x1800650e, 0x00000004 }, | 673 | {0x1800650e, 0x00000004}, |
675 | { 0x00092000, 0x00000004 }, | 674 | {0x00092000, 0x00000004}, |
676 | { 0x000a2000, 0x00000004 }, | 675 | {0x000a2000, 0x00000004}, |
677 | { 0x000f0000, 0x00000004 }, | 676 | {0x000f0000, 0x00000004}, |
678 | { 0x00400000, 0x00000004 }, | 677 | {0x00400000, 0x00000004}, |
679 | { 0x00000079, 0x00000018 }, | 678 | {0x00000079, 0x00000018}, |
680 | { 0x0000e563, 0x00000004 }, | 679 | {0x0000e563, 0x00000004}, |
681 | { 0x00c0e5f9, 0x000000c2 }, | 680 | {0x00c0e5f9, 0x000000c2}, |
682 | { 0x0000006e, 0x00000008 }, | 681 | {0x0000006e, 0x00000008}, |
683 | { 0x0000a06e, 0x00000008 }, | 682 | {0x0000a06e, 0x00000008}, |
684 | { 0x0000e576, 0x00000004 }, | 683 | {0x0000e576, 0x00000004}, |
685 | { 0x0000e577, 0x00000004 }, | 684 | {0x0000e577, 0x00000004}, |
686 | { 0x0000e50e, 0x00000004 }, | 685 | {0x0000e50e, 0x00000004}, |
687 | { 0x0000e50f, 0x00000004 }, | 686 | {0x0000e50f, 0x00000004}, |
688 | { 0x0140a000, 0x00000004 }, | 687 | {0x0140a000, 0x00000004}, |
689 | { 0x0000007c, 0x00000018 }, | 688 | {0x0000007c, 0x00000018}, |
690 | { 0x00c0e5f9, 0x000000c2 }, | 689 | {0x00c0e5f9, 0x000000c2}, |
691 | { 0x0000007c, 0x00000008 }, | 690 | {0x0000007c, 0x00000008}, |
692 | { 0x0014e50e, 0x00000004 }, | 691 | {0x0014e50e, 0x00000004}, |
693 | { 0x0040e50f, 0x00000004 }, | 692 | {0x0040e50f, 0x00000004}, |
694 | { 0x00c0007f, 0x00000008 }, | 693 | {0x00c0007f, 0x00000008}, |
695 | { 0x0000e570, 0x00000004 }, | 694 | {0x0000e570, 0x00000004}, |
696 | { 0x0000e571, 0x00000004 }, | 695 | {0x0000e571, 0x00000004}, |
697 | { 0x0000e572, 0x0000000c }, | 696 | {0x0000e572, 0x0000000c}, |
698 | { 0x0000a000, 0x00000004 }, | 697 | {0x0000a000, 0x00000004}, |
699 | { 0x0140a000, 0x00000004 }, | 698 | {0x0140a000, 0x00000004}, |
700 | { 0x0000e568, 0x00000004 }, | 699 | {0x0000e568, 0x00000004}, |
701 | { 0x000c2000, 0x00000004 }, | 700 | {0x000c2000, 0x00000004}, |
702 | { 0x00000089, 0x00000018 }, | 701 | {0x00000089, 0x00000018}, |
703 | { 0x000b0000, 0x00000004 }, | 702 | {0x000b0000, 0x00000004}, |
704 | { 0x18c0e562, 0x00000004 }, | 703 | {0x18c0e562, 0x00000004}, |
705 | { 0x0000008b, 0x00000008 }, | 704 | {0x0000008b, 0x00000008}, |
706 | { 0x00c0008a, 0x00000008 }, | 705 | {0x00c0008a, 0x00000008}, |
707 | { 0x000700e4, 0x00000004 }, | 706 | {0x000700e4, 0x00000004}, |
708 | { 0x00000097, 0x00000038 }, | 707 | {0x00000097, 0x00000038}, |
709 | { 0x000ca099, 0x00000030 }, | 708 | {0x000ca099, 0x00000030}, |
710 | { 0x080045bb, 0x00000004 }, | 709 | {0x080045bb, 0x00000004}, |
711 | { 0x000c209a, 0x00000030 }, | 710 | {0x000c209a, 0x00000030}, |
712 | { 0x0800e5bc, 0000000000 }, | 711 | {0x0800e5bc, 0000000000}, |
713 | { 0x0000e5bb, 0x00000004 }, | 712 | {0x0000e5bb, 0x00000004}, |
714 | { 0x0000e5bc, 0000000000 }, | 713 | {0x0000e5bc, 0000000000}, |
715 | { 0x00120000, 0x0000000c }, | 714 | {0x00120000, 0x0000000c}, |
716 | { 0x00120000, 0x00000004 }, | 715 | {0x00120000, 0x00000004}, |
717 | { 0x001b0002, 0x0000000c }, | 716 | {0x001b0002, 0x0000000c}, |
718 | { 0x0000a000, 0x00000004 }, | 717 | {0x0000a000, 0x00000004}, |
719 | { 0x0000e821, 0x00000004 }, | 718 | {0x0000e821, 0x00000004}, |
720 | { 0x0000e800, 0000000000 }, | 719 | {0x0000e800, 0000000000}, |
721 | { 0x0000e821, 0x00000004 }, | 720 | {0x0000e821, 0x00000004}, |
722 | { 0x0000e82e, 0000000000 }, | 721 | {0x0000e82e, 0000000000}, |
723 | { 0x02cca000, 0x00000004 }, | 722 | {0x02cca000, 0x00000004}, |
724 | { 0x00140000, 0x00000004 }, | 723 | {0x00140000, 0x00000004}, |
725 | { 0x000ce1cc, 0x00000004 }, | 724 | {0x000ce1cc, 0x00000004}, |
726 | { 0x050de1cd, 0x00000004 }, | 725 | {0x050de1cd, 0x00000004}, |
727 | { 0x000000a7, 0x00000020 }, | 726 | {0x000000a7, 0x00000020}, |
728 | { 0x4200e000, 0000000000 }, | 727 | {0x4200e000, 0000000000}, |
729 | { 0x000000ae, 0x00000038 }, | 728 | {0x000000ae, 0x00000038}, |
730 | { 0x000ca000, 0x00000004 }, | 729 | {0x000ca000, 0x00000004}, |
731 | { 0x00140000, 0x00000004 }, | 730 | {0x00140000, 0x00000004}, |
732 | { 0x000c2000, 0x00000004 }, | 731 | {0x000c2000, 0x00000004}, |
733 | { 0x00160000, 0x00000004 }, | 732 | {0x00160000, 0x00000004}, |
734 | { 0x700ce000, 0x00000004 }, | 733 | {0x700ce000, 0x00000004}, |
735 | { 0x001400aa, 0x00000008 }, | 734 | {0x001400aa, 0x00000008}, |
736 | { 0x4000e000, 0000000000 }, | 735 | {0x4000e000, 0000000000}, |
737 | { 0x02400000, 0x00000004 }, | 736 | {0x02400000, 0x00000004}, |
738 | { 0x400ee000, 0x00000004 }, | 737 | {0x400ee000, 0x00000004}, |
739 | { 0x02400000, 0x00000004 }, | 738 | {0x02400000, 0x00000004}, |
740 | { 0x4000e000, 0000000000 }, | 739 | {0x4000e000, 0000000000}, |
741 | { 0x000c2000, 0x00000004 }, | 740 | {0x000c2000, 0x00000004}, |
742 | { 0x0240e51b, 0x00000004 }, | 741 | {0x0240e51b, 0x00000004}, |
743 | { 0x0080e50a, 0x00000005 }, | 742 | {0x0080e50a, 0x00000005}, |
744 | { 0x0080e50b, 0x00000005 }, | 743 | {0x0080e50b, 0x00000005}, |
745 | { 0x00220000, 0x00000004 }, | 744 | {0x00220000, 0x00000004}, |
746 | { 0x000700e4, 0x00000004 }, | 745 | {0x000700e4, 0x00000004}, |
747 | { 0x000000c1, 0x00000038 }, | 746 | {0x000000c1, 0x00000038}, |
748 | { 0x000c209a, 0x00000030 }, | 747 | {0x000c209a, 0x00000030}, |
749 | { 0x0880e5bd, 0x00000005 }, | 748 | {0x0880e5bd, 0x00000005}, |
750 | { 0x000c2099, 0x00000030 }, | 749 | {0x000c2099, 0x00000030}, |
751 | { 0x0800e5bb, 0x00000005 }, | 750 | {0x0800e5bb, 0x00000005}, |
752 | { 0x000c209a, 0x00000030 }, | 751 | {0x000c209a, 0x00000030}, |
753 | { 0x0880e5bc, 0x00000005 }, | 752 | {0x0880e5bc, 0x00000005}, |
754 | { 0x000000c4, 0x00000008 }, | 753 | {0x000000c4, 0x00000008}, |
755 | { 0x0080e5bd, 0x00000005 }, | 754 | {0x0080e5bd, 0x00000005}, |
756 | { 0x0000e5bb, 0x00000005 }, | 755 | {0x0000e5bb, 0x00000005}, |
757 | { 0x0080e5bc, 0x00000005 }, | 756 | {0x0080e5bc, 0x00000005}, |
758 | { 0x00210000, 0x00000004 }, | 757 | {0x00210000, 0x00000004}, |
759 | { 0x02800000, 0x00000004 }, | 758 | {0x02800000, 0x00000004}, |
760 | { 0x00c000c8, 0x00000018 }, | 759 | {0x00c000c8, 0x00000018}, |
761 | { 0x4180e000, 0x00000040 }, | 760 | {0x4180e000, 0x00000040}, |
762 | { 0x000000ca, 0x00000024 }, | 761 | {0x000000ca, 0x00000024}, |
763 | { 0x01000000, 0x0000000c }, | 762 | {0x01000000, 0x0000000c}, |
764 | { 0x0100e51d, 0x0000000c }, | 763 | {0x0100e51d, 0x0000000c}, |
765 | { 0x000045bb, 0x00000004 }, | 764 | {0x000045bb, 0x00000004}, |
766 | { 0x000080c4, 0x00000008 }, | 765 | {0x000080c4, 0x00000008}, |
767 | { 0x0000f3ce, 0x00000004 }, | 766 | {0x0000f3ce, 0x00000004}, |
768 | { 0x0140a000, 0x00000004 }, | 767 | {0x0140a000, 0x00000004}, |
769 | { 0x00cc2000, 0x00000004 }, | 768 | {0x00cc2000, 0x00000004}, |
770 | { 0x08c053cf, 0x00000040 }, | 769 | {0x08c053cf, 0x00000040}, |
771 | { 0x00008000, 0000000000 }, | 770 | {0x00008000, 0000000000}, |
772 | { 0x0000f3d2, 0x00000004 }, | 771 | {0x0000f3d2, 0x00000004}, |
773 | { 0x0140a000, 0x00000004 }, | 772 | {0x0140a000, 0x00000004}, |
774 | { 0x00cc2000, 0x00000004 }, | 773 | {0x00cc2000, 0x00000004}, |
775 | { 0x08c053d3, 0x00000040 }, | 774 | {0x08c053d3, 0x00000040}, |
776 | { 0x00008000, 0000000000 }, | 775 | {0x00008000, 0000000000}, |
777 | { 0x0000f39d, 0x00000004 }, | 776 | {0x0000f39d, 0x00000004}, |
778 | { 0x0140a000, 0x00000004 }, | 777 | {0x0140a000, 0x00000004}, |
779 | { 0x00cc2000, 0x00000004 }, | 778 | {0x00cc2000, 0x00000004}, |
780 | { 0x08c0539e, 0x00000040 }, | 779 | {0x08c0539e, 0x00000040}, |
781 | { 0x00008000, 0000000000 }, | 780 | {0x00008000, 0000000000}, |
782 | { 0x03c00830, 0x00000004 }, | 781 | {0x03c00830, 0x00000004}, |
783 | { 0x4200e000, 0000000000 }, | 782 | {0x4200e000, 0000000000}, |
784 | { 0x0000a000, 0x00000004 }, | 783 | {0x0000a000, 0x00000004}, |
785 | { 0x200045e0, 0x00000004 }, | 784 | {0x200045e0, 0x00000004}, |
786 | { 0x0000e5e1, 0000000000 }, | 785 | {0x0000e5e1, 0000000000}, |
787 | { 0x00000001, 0000000000 }, | 786 | {0x00000001, 0000000000}, |
788 | { 0x000700e1, 0x00000004 }, | 787 | {0x000700e1, 0x00000004}, |
789 | { 0x0800e394, 0000000000 }, | 788 | {0x0800e394, 0000000000}, |
790 | { 0000000000, 0000000000 }, | 789 | {0000000000, 0000000000}, |
791 | { 0000000000, 0000000000 }, | 790 | {0000000000, 0000000000}, |
792 | { 0000000000, 0000000000 }, | 791 | {0000000000, 0000000000}, |
793 | { 0000000000, 0000000000 }, | 792 | {0000000000, 0000000000}, |
794 | { 0000000000, 0000000000 }, | 793 | {0000000000, 0000000000}, |
795 | { 0000000000, 0000000000 }, | 794 | {0000000000, 0000000000}, |
796 | { 0000000000, 0000000000 }, | 795 | {0000000000, 0000000000}, |
797 | { 0000000000, 0000000000 }, | 796 | {0000000000, 0000000000}, |
798 | { 0000000000, 0000000000 }, | 797 | {0000000000, 0000000000}, |
799 | { 0000000000, 0000000000 }, | 798 | {0000000000, 0000000000}, |
800 | { 0000000000, 0000000000 }, | 799 | {0000000000, 0000000000}, |
801 | { 0000000000, 0000000000 }, | 800 | {0000000000, 0000000000}, |
802 | { 0000000000, 0000000000 }, | 801 | {0000000000, 0000000000}, |
803 | { 0000000000, 0000000000 }, | 802 | {0000000000, 0000000000}, |
804 | { 0000000000, 0000000000 }, | 803 | {0000000000, 0000000000}, |
805 | { 0000000000, 0000000000 }, | 804 | {0000000000, 0000000000}, |
806 | { 0000000000, 0000000000 }, | 805 | {0000000000, 0000000000}, |
807 | { 0000000000, 0000000000 }, | 806 | {0000000000, 0000000000}, |
808 | { 0000000000, 0000000000 }, | 807 | {0000000000, 0000000000}, |
809 | { 0000000000, 0000000000 }, | 808 | {0000000000, 0000000000}, |
810 | { 0000000000, 0000000000 }, | 809 | {0000000000, 0000000000}, |
811 | { 0000000000, 0000000000 }, | 810 | {0000000000, 0000000000}, |
812 | { 0000000000, 0000000000 }, | 811 | {0000000000, 0000000000}, |
813 | { 0000000000, 0000000000 }, | 812 | {0000000000, 0000000000}, |
814 | { 0000000000, 0000000000 }, | 813 | {0000000000, 0000000000}, |
815 | { 0000000000, 0000000000 }, | 814 | {0000000000, 0000000000}, |
816 | { 0000000000, 0000000000 }, | 815 | {0000000000, 0000000000}, |
817 | { 0000000000, 0000000000 }, | 816 | {0000000000, 0000000000}, |
818 | }; | 817 | }; |
819 | 818 | ||
820 | static int RADEON_READ_PLL(drm_device_t *dev, int addr) | 819 | static int RADEON_READ_PLL(drm_device_t * dev, int addr) |
821 | { | 820 | { |
822 | drm_radeon_private_t *dev_priv = dev->dev_private; | 821 | drm_radeon_private_t *dev_priv = dev->dev_private; |
823 | 822 | ||
@@ -825,151 +824,148 @@ static int RADEON_READ_PLL(drm_device_t *dev, int addr) | |||
825 | return RADEON_READ(RADEON_CLOCK_CNTL_DATA); | 824 | return RADEON_READ(RADEON_CLOCK_CNTL_DATA); |
826 | } | 825 | } |
827 | 826 | ||
828 | static int RADEON_READ_PCIE(drm_radeon_private_t *dev_priv, int addr) | 827 | static int RADEON_READ_PCIE(drm_radeon_private_t * dev_priv, int addr) |
829 | { | 828 | { |
830 | RADEON_WRITE8(RADEON_PCIE_INDEX, addr & 0xff); | 829 | RADEON_WRITE8(RADEON_PCIE_INDEX, addr & 0xff); |
831 | return RADEON_READ(RADEON_PCIE_DATA); | 830 | return RADEON_READ(RADEON_PCIE_DATA); |
832 | } | 831 | } |
833 | 832 | ||
834 | #if RADEON_FIFO_DEBUG | 833 | #if RADEON_FIFO_DEBUG |
835 | static void radeon_status( drm_radeon_private_t *dev_priv ) | 834 | static void radeon_status(drm_radeon_private_t * dev_priv) |
836 | { | 835 | { |
837 | printk( "%s:\n", __FUNCTION__ ); | 836 | printk("%s:\n", __FUNCTION__); |
838 | printk( "RBBM_STATUS = 0x%08x\n", | 837 | printk("RBBM_STATUS = 0x%08x\n", |
839 | (unsigned int)RADEON_READ( RADEON_RBBM_STATUS ) ); | 838 | (unsigned int)RADEON_READ(RADEON_RBBM_STATUS)); |
840 | printk( "CP_RB_RTPR = 0x%08x\n", | 839 | printk("CP_RB_RTPR = 0x%08x\n", |
841 | (unsigned int)RADEON_READ( RADEON_CP_RB_RPTR ) ); | 840 | (unsigned int)RADEON_READ(RADEON_CP_RB_RPTR)); |
842 | printk( "CP_RB_WTPR = 0x%08x\n", | 841 | printk("CP_RB_WTPR = 0x%08x\n", |
843 | (unsigned int)RADEON_READ( RADEON_CP_RB_WPTR ) ); | 842 | (unsigned int)RADEON_READ(RADEON_CP_RB_WPTR)); |
844 | printk( "AIC_CNTL = 0x%08x\n", | 843 | printk("AIC_CNTL = 0x%08x\n", |
845 | (unsigned int)RADEON_READ( RADEON_AIC_CNTL ) ); | 844 | (unsigned int)RADEON_READ(RADEON_AIC_CNTL)); |
846 | printk( "AIC_STAT = 0x%08x\n", | 845 | printk("AIC_STAT = 0x%08x\n", |
847 | (unsigned int)RADEON_READ( RADEON_AIC_STAT ) ); | 846 | (unsigned int)RADEON_READ(RADEON_AIC_STAT)); |
848 | printk( "AIC_PT_BASE = 0x%08x\n", | 847 | printk("AIC_PT_BASE = 0x%08x\n", |
849 | (unsigned int)RADEON_READ( RADEON_AIC_PT_BASE ) ); | 848 | (unsigned int)RADEON_READ(RADEON_AIC_PT_BASE)); |
850 | printk( "TLB_ADDR = 0x%08x\n", | 849 | printk("TLB_ADDR = 0x%08x\n", |
851 | (unsigned int)RADEON_READ( RADEON_AIC_TLB_ADDR ) ); | 850 | (unsigned int)RADEON_READ(RADEON_AIC_TLB_ADDR)); |
852 | printk( "TLB_DATA = 0x%08x\n", | 851 | printk("TLB_DATA = 0x%08x\n", |
853 | (unsigned int)RADEON_READ( RADEON_AIC_TLB_DATA ) ); | 852 | (unsigned int)RADEON_READ(RADEON_AIC_TLB_DATA)); |
854 | } | 853 | } |
855 | #endif | 854 | #endif |
856 | 855 | ||
857 | |||
858 | /* ================================================================ | 856 | /* ================================================================ |
859 | * Engine, FIFO control | 857 | * Engine, FIFO control |
860 | */ | 858 | */ |
861 | 859 | ||
862 | static int radeon_do_pixcache_flush( drm_radeon_private_t *dev_priv ) | 860 | static int radeon_do_pixcache_flush(drm_radeon_private_t * dev_priv) |
863 | { | 861 | { |
864 | u32 tmp; | 862 | u32 tmp; |
865 | int i; | 863 | int i; |
866 | 864 | ||
867 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; | 865 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; |
868 | 866 | ||
869 | tmp = RADEON_READ( RADEON_RB2D_DSTCACHE_CTLSTAT ); | 867 | tmp = RADEON_READ(RADEON_RB2D_DSTCACHE_CTLSTAT); |
870 | tmp |= RADEON_RB2D_DC_FLUSH_ALL; | 868 | tmp |= RADEON_RB2D_DC_FLUSH_ALL; |
871 | RADEON_WRITE( RADEON_RB2D_DSTCACHE_CTLSTAT, tmp ); | 869 | RADEON_WRITE(RADEON_RB2D_DSTCACHE_CTLSTAT, tmp); |
872 | 870 | ||
873 | for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { | 871 | for (i = 0; i < dev_priv->usec_timeout; i++) { |
874 | if ( !(RADEON_READ( RADEON_RB2D_DSTCACHE_CTLSTAT ) | 872 | if (!(RADEON_READ(RADEON_RB2D_DSTCACHE_CTLSTAT) |
875 | & RADEON_RB2D_DC_BUSY) ) { | 873 | & RADEON_RB2D_DC_BUSY)) { |
876 | return 0; | 874 | return 0; |
877 | } | 875 | } |
878 | DRM_UDELAY( 1 ); | 876 | DRM_UDELAY(1); |
879 | } | 877 | } |
880 | 878 | ||
881 | #if RADEON_FIFO_DEBUG | 879 | #if RADEON_FIFO_DEBUG |
882 | DRM_ERROR( "failed!\n" ); | 880 | DRM_ERROR("failed!\n"); |
883 | radeon_status( dev_priv ); | 881 | radeon_status(dev_priv); |
884 | #endif | 882 | #endif |
885 | return DRM_ERR(EBUSY); | 883 | return DRM_ERR(EBUSY); |
886 | } | 884 | } |
887 | 885 | ||
888 | static int radeon_do_wait_for_fifo( drm_radeon_private_t *dev_priv, | 886 | static int radeon_do_wait_for_fifo(drm_radeon_private_t * dev_priv, int entries) |
889 | int entries ) | ||
890 | { | 887 | { |
891 | int i; | 888 | int i; |
892 | 889 | ||
893 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; | 890 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; |
894 | 891 | ||
895 | for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { | 892 | for (i = 0; i < dev_priv->usec_timeout; i++) { |
896 | int slots = ( RADEON_READ( RADEON_RBBM_STATUS ) | 893 | int slots = (RADEON_READ(RADEON_RBBM_STATUS) |
897 | & RADEON_RBBM_FIFOCNT_MASK ); | 894 | & RADEON_RBBM_FIFOCNT_MASK); |
898 | if ( slots >= entries ) return 0; | 895 | if (slots >= entries) |
899 | DRM_UDELAY( 1 ); | 896 | return 0; |
897 | DRM_UDELAY(1); | ||
900 | } | 898 | } |
901 | 899 | ||
902 | #if RADEON_FIFO_DEBUG | 900 | #if RADEON_FIFO_DEBUG |
903 | DRM_ERROR( "failed!\n" ); | 901 | DRM_ERROR("failed!\n"); |
904 | radeon_status( dev_priv ); | 902 | radeon_status(dev_priv); |
905 | #endif | 903 | #endif |
906 | return DRM_ERR(EBUSY); | 904 | return DRM_ERR(EBUSY); |
907 | } | 905 | } |
908 | 906 | ||
909 | static int radeon_do_wait_for_idle( drm_radeon_private_t *dev_priv ) | 907 | static int radeon_do_wait_for_idle(drm_radeon_private_t * dev_priv) |
910 | { | 908 | { |
911 | int i, ret; | 909 | int i, ret; |
912 | 910 | ||
913 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; | 911 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; |
914 | 912 | ||
915 | ret = radeon_do_wait_for_fifo( dev_priv, 64 ); | 913 | ret = radeon_do_wait_for_fifo(dev_priv, 64); |
916 | if ( ret ) return ret; | 914 | if (ret) |
915 | return ret; | ||
917 | 916 | ||
918 | for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { | 917 | for (i = 0; i < dev_priv->usec_timeout; i++) { |
919 | if ( !(RADEON_READ( RADEON_RBBM_STATUS ) | 918 | if (!(RADEON_READ(RADEON_RBBM_STATUS) |
920 | & RADEON_RBBM_ACTIVE) ) { | 919 | & RADEON_RBBM_ACTIVE)) { |
921 | radeon_do_pixcache_flush( dev_priv ); | 920 | radeon_do_pixcache_flush(dev_priv); |
922 | return 0; | 921 | return 0; |
923 | } | 922 | } |
924 | DRM_UDELAY( 1 ); | 923 | DRM_UDELAY(1); |
925 | } | 924 | } |
926 | 925 | ||
927 | #if RADEON_FIFO_DEBUG | 926 | #if RADEON_FIFO_DEBUG |
928 | DRM_ERROR( "failed!\n" ); | 927 | DRM_ERROR("failed!\n"); |
929 | radeon_status( dev_priv ); | 928 | radeon_status(dev_priv); |
930 | #endif | 929 | #endif |
931 | return DRM_ERR(EBUSY); | 930 | return DRM_ERR(EBUSY); |
932 | } | 931 | } |
933 | 932 | ||
934 | |||
935 | /* ================================================================ | 933 | /* ================================================================ |
936 | * CP control, initialization | 934 | * CP control, initialization |
937 | */ | 935 | */ |
938 | 936 | ||
939 | /* Load the microcode for the CP */ | 937 | /* Load the microcode for the CP */ |
940 | static void radeon_cp_load_microcode( drm_radeon_private_t *dev_priv ) | 938 | static void radeon_cp_load_microcode(drm_radeon_private_t * dev_priv) |
941 | { | 939 | { |
942 | int i; | 940 | int i; |
943 | DRM_DEBUG( "\n" ); | 941 | DRM_DEBUG("\n"); |
944 | 942 | ||
945 | radeon_do_wait_for_idle( dev_priv ); | 943 | radeon_do_wait_for_idle(dev_priv); |
946 | 944 | ||
947 | RADEON_WRITE( RADEON_CP_ME_RAM_ADDR, 0 ); | 945 | RADEON_WRITE(RADEON_CP_ME_RAM_ADDR, 0); |
948 | 946 | ||
949 | if (dev_priv->microcode_version==UCODE_R200) { | 947 | if (dev_priv->microcode_version == UCODE_R200) { |
950 | DRM_INFO("Loading R200 Microcode\n"); | 948 | DRM_INFO("Loading R200 Microcode\n"); |
951 | for ( i = 0 ; i < 256 ; i++ ) | 949 | for (i = 0; i < 256; i++) { |
952 | { | 950 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAH, |
953 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAH, | 951 | R200_cp_microcode[i][1]); |
954 | R200_cp_microcode[i][1] ); | 952 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAL, |
955 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAL, | 953 | R200_cp_microcode[i][0]); |
956 | R200_cp_microcode[i][0] ); | ||
957 | } | 954 | } |
958 | } else if (dev_priv->microcode_version==UCODE_R300) { | 955 | } else if (dev_priv->microcode_version == UCODE_R300) { |
959 | DRM_INFO("Loading R300 Microcode\n"); | 956 | DRM_INFO("Loading R300 Microcode\n"); |
960 | for ( i = 0 ; i < 256 ; i++ ) | 957 | for (i = 0; i < 256; i++) { |
961 | { | 958 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAH, |
962 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAH, | 959 | R300_cp_microcode[i][1]); |
963 | R300_cp_microcode[i][1] ); | 960 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAL, |
964 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAL, | 961 | R300_cp_microcode[i][0]); |
965 | R300_cp_microcode[i][0] ); | ||
966 | } | 962 | } |
967 | } else { | 963 | } else { |
968 | for ( i = 0 ; i < 256 ; i++ ) { | 964 | for (i = 0; i < 256; i++) { |
969 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAH, | 965 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAH, |
970 | radeon_cp_microcode[i][1] ); | 966 | radeon_cp_microcode[i][1]); |
971 | RADEON_WRITE( RADEON_CP_ME_RAM_DATAL, | 967 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAL, |
972 | radeon_cp_microcode[i][0] ); | 968 | radeon_cp_microcode[i][0]); |
973 | } | 969 | } |
974 | } | 970 | } |
975 | } | 971 | } |
@@ -978,25 +974,25 @@ static void radeon_cp_load_microcode( drm_radeon_private_t *dev_priv ) | |||
978 | * prior to a wait for idle, as it informs the engine that the command | 974 | * prior to a wait for idle, as it informs the engine that the command |
979 | * stream is ending. | 975 | * stream is ending. |
980 | */ | 976 | */ |
981 | static void radeon_do_cp_flush( drm_radeon_private_t *dev_priv ) | 977 | static void radeon_do_cp_flush(drm_radeon_private_t * dev_priv) |
982 | { | 978 | { |
983 | DRM_DEBUG( "\n" ); | 979 | DRM_DEBUG("\n"); |
984 | #if 0 | 980 | #if 0 |
985 | u32 tmp; | 981 | u32 tmp; |
986 | 982 | ||
987 | tmp = RADEON_READ( RADEON_CP_RB_WPTR ) | (1 << 31); | 983 | tmp = RADEON_READ(RADEON_CP_RB_WPTR) | (1 << 31); |
988 | RADEON_WRITE( RADEON_CP_RB_WPTR, tmp ); | 984 | RADEON_WRITE(RADEON_CP_RB_WPTR, tmp); |
989 | #endif | 985 | #endif |
990 | } | 986 | } |
991 | 987 | ||
992 | /* Wait for the CP to go idle. | 988 | /* Wait for the CP to go idle. |
993 | */ | 989 | */ |
994 | int radeon_do_cp_idle( drm_radeon_private_t *dev_priv ) | 990 | int radeon_do_cp_idle(drm_radeon_private_t * dev_priv) |
995 | { | 991 | { |
996 | RING_LOCALS; | 992 | RING_LOCALS; |
997 | DRM_DEBUG( "\n" ); | 993 | DRM_DEBUG("\n"); |
998 | 994 | ||
999 | BEGIN_RING( 6 ); | 995 | BEGIN_RING(6); |
1000 | 996 | ||
1001 | RADEON_PURGE_CACHE(); | 997 | RADEON_PURGE_CACHE(); |
1002 | RADEON_PURGE_ZCACHE(); | 998 | RADEON_PURGE_ZCACHE(); |
@@ -1005,23 +1001,23 @@ int radeon_do_cp_idle( drm_radeon_private_t *dev_priv ) | |||
1005 | ADVANCE_RING(); | 1001 | ADVANCE_RING(); |
1006 | COMMIT_RING(); | 1002 | COMMIT_RING(); |
1007 | 1003 | ||
1008 | return radeon_do_wait_for_idle( dev_priv ); | 1004 | return radeon_do_wait_for_idle(dev_priv); |
1009 | } | 1005 | } |
1010 | 1006 | ||
1011 | /* Start the Command Processor. | 1007 | /* Start the Command Processor. |
1012 | */ | 1008 | */ |
1013 | static void radeon_do_cp_start( drm_radeon_private_t *dev_priv ) | 1009 | static void radeon_do_cp_start(drm_radeon_private_t * dev_priv) |
1014 | { | 1010 | { |
1015 | RING_LOCALS; | 1011 | RING_LOCALS; |
1016 | DRM_DEBUG( "\n" ); | 1012 | DRM_DEBUG("\n"); |
1017 | 1013 | ||
1018 | radeon_do_wait_for_idle( dev_priv ); | 1014 | radeon_do_wait_for_idle(dev_priv); |
1019 | 1015 | ||
1020 | RADEON_WRITE( RADEON_CP_CSQ_CNTL, dev_priv->cp_mode ); | 1016 | RADEON_WRITE(RADEON_CP_CSQ_CNTL, dev_priv->cp_mode); |
1021 | 1017 | ||
1022 | dev_priv->cp_running = 1; | 1018 | dev_priv->cp_running = 1; |
1023 | 1019 | ||
1024 | BEGIN_RING( 6 ); | 1020 | BEGIN_RING(6); |
1025 | 1021 | ||
1026 | RADEON_PURGE_CACHE(); | 1022 | RADEON_PURGE_CACHE(); |
1027 | RADEON_PURGE_ZCACHE(); | 1023 | RADEON_PURGE_ZCACHE(); |
@@ -1035,14 +1031,14 @@ static void radeon_do_cp_start( drm_radeon_private_t *dev_priv ) | |||
1035 | * commands, so you must wait for the CP command stream to complete | 1031 | * commands, so you must wait for the CP command stream to complete |
1036 | * before calling this routine. | 1032 | * before calling this routine. |
1037 | */ | 1033 | */ |
1038 | static void radeon_do_cp_reset( drm_radeon_private_t *dev_priv ) | 1034 | static void radeon_do_cp_reset(drm_radeon_private_t * dev_priv) |
1039 | { | 1035 | { |
1040 | u32 cur_read_ptr; | 1036 | u32 cur_read_ptr; |
1041 | DRM_DEBUG( "\n" ); | 1037 | DRM_DEBUG("\n"); |
1042 | 1038 | ||
1043 | cur_read_ptr = RADEON_READ( RADEON_CP_RB_RPTR ); | 1039 | cur_read_ptr = RADEON_READ(RADEON_CP_RB_RPTR); |
1044 | RADEON_WRITE( RADEON_CP_RB_WPTR, cur_read_ptr ); | 1040 | RADEON_WRITE(RADEON_CP_RB_WPTR, cur_read_ptr); |
1045 | SET_RING_HEAD( dev_priv, cur_read_ptr ); | 1041 | SET_RING_HEAD(dev_priv, cur_read_ptr); |
1046 | dev_priv->ring.tail = cur_read_ptr; | 1042 | dev_priv->ring.tail = cur_read_ptr; |
1047 | } | 1043 | } |
1048 | 1044 | ||
@@ -1050,120 +1046,116 @@ static void radeon_do_cp_reset( drm_radeon_private_t *dev_priv ) | |||
1050 | * commands, so you must flush the command stream and wait for the CP | 1046 | * commands, so you must flush the command stream and wait for the CP |
1051 | * to go idle before calling this routine. | 1047 | * to go idle before calling this routine. |
1052 | */ | 1048 | */ |
1053 | static void radeon_do_cp_stop( drm_radeon_private_t *dev_priv ) | 1049 | static void radeon_do_cp_stop(drm_radeon_private_t * dev_priv) |
1054 | { | 1050 | { |
1055 | DRM_DEBUG( "\n" ); | 1051 | DRM_DEBUG("\n"); |
1056 | 1052 | ||
1057 | RADEON_WRITE( RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS ); | 1053 | RADEON_WRITE(RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS); |
1058 | 1054 | ||
1059 | dev_priv->cp_running = 0; | 1055 | dev_priv->cp_running = 0; |
1060 | } | 1056 | } |
1061 | 1057 | ||
1062 | /* Reset the engine. This will stop the CP if it is running. | 1058 | /* Reset the engine. This will stop the CP if it is running. |
1063 | */ | 1059 | */ |
1064 | static int radeon_do_engine_reset( drm_device_t *dev ) | 1060 | static int radeon_do_engine_reset(drm_device_t * dev) |
1065 | { | 1061 | { |
1066 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1062 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1067 | u32 clock_cntl_index, mclk_cntl, rbbm_soft_reset; | 1063 | u32 clock_cntl_index, mclk_cntl, rbbm_soft_reset; |
1068 | DRM_DEBUG( "\n" ); | 1064 | DRM_DEBUG("\n"); |
1069 | |||
1070 | radeon_do_pixcache_flush( dev_priv ); | ||
1071 | |||
1072 | clock_cntl_index = RADEON_READ( RADEON_CLOCK_CNTL_INDEX ); | ||
1073 | mclk_cntl = RADEON_READ_PLL( dev, RADEON_MCLK_CNTL ); | ||
1074 | |||
1075 | RADEON_WRITE_PLL( RADEON_MCLK_CNTL, ( mclk_cntl | | ||
1076 | RADEON_FORCEON_MCLKA | | ||
1077 | RADEON_FORCEON_MCLKB | | ||
1078 | RADEON_FORCEON_YCLKA | | ||
1079 | RADEON_FORCEON_YCLKB | | ||
1080 | RADEON_FORCEON_MC | | ||
1081 | RADEON_FORCEON_AIC ) ); | ||
1082 | |||
1083 | rbbm_soft_reset = RADEON_READ( RADEON_RBBM_SOFT_RESET ); | ||
1084 | 1065 | ||
1085 | RADEON_WRITE( RADEON_RBBM_SOFT_RESET, ( rbbm_soft_reset | | 1066 | radeon_do_pixcache_flush(dev_priv); |
1086 | RADEON_SOFT_RESET_CP | | 1067 | |
1068 | clock_cntl_index = RADEON_READ(RADEON_CLOCK_CNTL_INDEX); | ||
1069 | mclk_cntl = RADEON_READ_PLL(dev, RADEON_MCLK_CNTL); | ||
1070 | |||
1071 | RADEON_WRITE_PLL(RADEON_MCLK_CNTL, (mclk_cntl | | ||
1072 | RADEON_FORCEON_MCLKA | | ||
1073 | RADEON_FORCEON_MCLKB | | ||
1074 | RADEON_FORCEON_YCLKA | | ||
1075 | RADEON_FORCEON_YCLKB | | ||
1076 | RADEON_FORCEON_MC | | ||
1077 | RADEON_FORCEON_AIC)); | ||
1078 | |||
1079 | rbbm_soft_reset = RADEON_READ(RADEON_RBBM_SOFT_RESET); | ||
1080 | |||
1081 | RADEON_WRITE(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset | | ||
1082 | RADEON_SOFT_RESET_CP | | ||
1083 | RADEON_SOFT_RESET_HI | | ||
1084 | RADEON_SOFT_RESET_SE | | ||
1085 | RADEON_SOFT_RESET_RE | | ||
1086 | RADEON_SOFT_RESET_PP | | ||
1087 | RADEON_SOFT_RESET_E2 | | ||
1088 | RADEON_SOFT_RESET_RB)); | ||
1089 | RADEON_READ(RADEON_RBBM_SOFT_RESET); | ||
1090 | RADEON_WRITE(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset & | ||
1091 | ~(RADEON_SOFT_RESET_CP | | ||
1087 | RADEON_SOFT_RESET_HI | | 1092 | RADEON_SOFT_RESET_HI | |
1088 | RADEON_SOFT_RESET_SE | | 1093 | RADEON_SOFT_RESET_SE | |
1089 | RADEON_SOFT_RESET_RE | | 1094 | RADEON_SOFT_RESET_RE | |
1090 | RADEON_SOFT_RESET_PP | | 1095 | RADEON_SOFT_RESET_PP | |
1091 | RADEON_SOFT_RESET_E2 | | 1096 | RADEON_SOFT_RESET_E2 | |
1092 | RADEON_SOFT_RESET_RB ) ); | 1097 | RADEON_SOFT_RESET_RB))); |
1093 | RADEON_READ( RADEON_RBBM_SOFT_RESET ); | 1098 | RADEON_READ(RADEON_RBBM_SOFT_RESET); |
1094 | RADEON_WRITE( RADEON_RBBM_SOFT_RESET, ( rbbm_soft_reset & | 1099 | |
1095 | ~( RADEON_SOFT_RESET_CP | | 1100 | RADEON_WRITE_PLL(RADEON_MCLK_CNTL, mclk_cntl); |
1096 | RADEON_SOFT_RESET_HI | | 1101 | RADEON_WRITE(RADEON_CLOCK_CNTL_INDEX, clock_cntl_index); |
1097 | RADEON_SOFT_RESET_SE | | 1102 | RADEON_WRITE(RADEON_RBBM_SOFT_RESET, rbbm_soft_reset); |
1098 | RADEON_SOFT_RESET_RE | | ||
1099 | RADEON_SOFT_RESET_PP | | ||
1100 | RADEON_SOFT_RESET_E2 | | ||
1101 | RADEON_SOFT_RESET_RB ) ) ); | ||
1102 | RADEON_READ( RADEON_RBBM_SOFT_RESET ); | ||
1103 | |||
1104 | |||
1105 | RADEON_WRITE_PLL( RADEON_MCLK_CNTL, mclk_cntl ); | ||
1106 | RADEON_WRITE( RADEON_CLOCK_CNTL_INDEX, clock_cntl_index ); | ||
1107 | RADEON_WRITE( RADEON_RBBM_SOFT_RESET, rbbm_soft_reset ); | ||
1108 | 1103 | ||
1109 | /* Reset the CP ring */ | 1104 | /* Reset the CP ring */ |
1110 | radeon_do_cp_reset( dev_priv ); | 1105 | radeon_do_cp_reset(dev_priv); |
1111 | 1106 | ||
1112 | /* The CP is no longer running after an engine reset */ | 1107 | /* The CP is no longer running after an engine reset */ |
1113 | dev_priv->cp_running = 0; | 1108 | dev_priv->cp_running = 0; |
1114 | 1109 | ||
1115 | /* Reset any pending vertex, indirect buffers */ | 1110 | /* Reset any pending vertex, indirect buffers */ |
1116 | radeon_freelist_reset( dev ); | 1111 | radeon_freelist_reset(dev); |
1117 | 1112 | ||
1118 | return 0; | 1113 | return 0; |
1119 | } | 1114 | } |
1120 | 1115 | ||
1121 | static void radeon_cp_init_ring_buffer( drm_device_t *dev, | 1116 | static void radeon_cp_init_ring_buffer(drm_device_t * dev, |
1122 | drm_radeon_private_t *dev_priv ) | 1117 | drm_radeon_private_t * dev_priv) |
1123 | { | 1118 | { |
1124 | u32 ring_start, cur_read_ptr; | 1119 | u32 ring_start, cur_read_ptr; |
1125 | u32 tmp; | 1120 | u32 tmp; |
1126 | 1121 | ||
1127 | /* Initialize the memory controller */ | 1122 | /* Initialize the memory controller */ |
1128 | RADEON_WRITE( RADEON_MC_FB_LOCATION, | 1123 | RADEON_WRITE(RADEON_MC_FB_LOCATION, |
1129 | ( ( dev_priv->gart_vm_start - 1 ) & 0xffff0000 ) | 1124 | ((dev_priv->gart_vm_start - 1) & 0xffff0000) |
1130 | | ( dev_priv->fb_location >> 16 ) ); | 1125 | | (dev_priv->fb_location >> 16)); |
1131 | 1126 | ||
1132 | #if __OS_HAS_AGP | 1127 | #if __OS_HAS_AGP |
1133 | if ( !dev_priv->is_pci ) { | 1128 | if (!dev_priv->is_pci) { |
1134 | RADEON_WRITE( RADEON_MC_AGP_LOCATION, | 1129 | RADEON_WRITE(RADEON_MC_AGP_LOCATION, |
1135 | (((dev_priv->gart_vm_start - 1 + | 1130 | (((dev_priv->gart_vm_start - 1 + |
1136 | dev_priv->gart_size) & 0xffff0000) | | 1131 | dev_priv->gart_size) & 0xffff0000) | |
1137 | (dev_priv->gart_vm_start >> 16)) ); | 1132 | (dev_priv->gart_vm_start >> 16))); |
1138 | 1133 | ||
1139 | ring_start = (dev_priv->cp_ring->offset | 1134 | ring_start = (dev_priv->cp_ring->offset |
1140 | - dev->agp->base | 1135 | - dev->agp->base + dev_priv->gart_vm_start); |
1141 | + dev_priv->gart_vm_start); | 1136 | } else |
1142 | } else | ||
1143 | #endif | 1137 | #endif |
1144 | ring_start = (dev_priv->cp_ring->offset | 1138 | ring_start = (dev_priv->cp_ring->offset |
1145 | - dev->sg->handle | 1139 | - dev->sg->handle + dev_priv->gart_vm_start); |
1146 | + dev_priv->gart_vm_start); | ||
1147 | 1140 | ||
1148 | RADEON_WRITE( RADEON_CP_RB_BASE, ring_start ); | 1141 | RADEON_WRITE(RADEON_CP_RB_BASE, ring_start); |
1149 | 1142 | ||
1150 | /* Set the write pointer delay */ | 1143 | /* Set the write pointer delay */ |
1151 | RADEON_WRITE( RADEON_CP_RB_WPTR_DELAY, 0 ); | 1144 | RADEON_WRITE(RADEON_CP_RB_WPTR_DELAY, 0); |
1152 | 1145 | ||
1153 | /* Initialize the ring buffer's read and write pointers */ | 1146 | /* Initialize the ring buffer's read and write pointers */ |
1154 | cur_read_ptr = RADEON_READ( RADEON_CP_RB_RPTR ); | 1147 | cur_read_ptr = RADEON_READ(RADEON_CP_RB_RPTR); |
1155 | RADEON_WRITE( RADEON_CP_RB_WPTR, cur_read_ptr ); | 1148 | RADEON_WRITE(RADEON_CP_RB_WPTR, cur_read_ptr); |
1156 | SET_RING_HEAD( dev_priv, cur_read_ptr ); | 1149 | SET_RING_HEAD(dev_priv, cur_read_ptr); |
1157 | dev_priv->ring.tail = cur_read_ptr; | 1150 | dev_priv->ring.tail = cur_read_ptr; |
1158 | 1151 | ||
1159 | #if __OS_HAS_AGP | 1152 | #if __OS_HAS_AGP |
1160 | if ( !dev_priv->is_pci ) { | 1153 | if (!dev_priv->is_pci) { |
1161 | /* set RADEON_AGP_BASE here instead of relying on X from user space */ | 1154 | /* set RADEON_AGP_BASE here instead of relying on X from user space */ |
1162 | RADEON_WRITE(RADEON_AGP_BASE, (unsigned int)dev->agp->base); | 1155 | RADEON_WRITE(RADEON_AGP_BASE, (unsigned int)dev->agp->base); |
1163 | RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, | 1156 | RADEON_WRITE(RADEON_CP_RB_RPTR_ADDR, |
1164 | dev_priv->ring_rptr->offset | 1157 | dev_priv->ring_rptr->offset |
1165 | - dev->agp->base | 1158 | - dev->agp->base + dev_priv->gart_vm_start); |
1166 | + dev_priv->gart_vm_start); | ||
1167 | } else | 1159 | } else |
1168 | #endif | 1160 | #endif |
1169 | { | 1161 | { |
@@ -1173,11 +1165,10 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, | |||
1173 | tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle; | 1165 | tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle; |
1174 | page_ofs = tmp_ofs >> PAGE_SHIFT; | 1166 | page_ofs = tmp_ofs >> PAGE_SHIFT; |
1175 | 1167 | ||
1176 | RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, | 1168 | RADEON_WRITE(RADEON_CP_RB_RPTR_ADDR, entry->busaddr[page_ofs]); |
1177 | entry->busaddr[page_ofs]); | 1169 | DRM_DEBUG("ring rptr: offset=0x%08lx handle=0x%08lx\n", |
1178 | DRM_DEBUG( "ring rptr: offset=0x%08lx handle=0x%08lx\n", | 1170 | (unsigned long)entry->busaddr[page_ofs], |
1179 | (unsigned long) entry->busaddr[page_ofs], | 1171 | entry->handle + tmp_ofs); |
1180 | entry->handle + tmp_ofs ); | ||
1181 | } | 1172 | } |
1182 | 1173 | ||
1183 | /* Initialize the scratch register pointer. This will cause | 1174 | /* Initialize the scratch register pointer. This will cause |
@@ -1187,64 +1178,64 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, | |||
1187 | * We simply put this behind the ring read pointer, this works | 1178 | * We simply put this behind the ring read pointer, this works |
1188 | * with PCI GART as well as (whatever kind of) AGP GART | 1179 | * with PCI GART as well as (whatever kind of) AGP GART |
1189 | */ | 1180 | */ |
1190 | RADEON_WRITE( RADEON_SCRATCH_ADDR, RADEON_READ( RADEON_CP_RB_RPTR_ADDR ) | 1181 | RADEON_WRITE(RADEON_SCRATCH_ADDR, RADEON_READ(RADEON_CP_RB_RPTR_ADDR) |
1191 | + RADEON_SCRATCH_REG_OFFSET ); | 1182 | + RADEON_SCRATCH_REG_OFFSET); |
1192 | 1183 | ||
1193 | dev_priv->scratch = ((__volatile__ u32 *) | 1184 | dev_priv->scratch = ((__volatile__ u32 *) |
1194 | dev_priv->ring_rptr->handle + | 1185 | dev_priv->ring_rptr->handle + |
1195 | (RADEON_SCRATCH_REG_OFFSET / sizeof(u32))); | 1186 | (RADEON_SCRATCH_REG_OFFSET / sizeof(u32))); |
1196 | 1187 | ||
1197 | RADEON_WRITE( RADEON_SCRATCH_UMSK, 0x7 ); | 1188 | RADEON_WRITE(RADEON_SCRATCH_UMSK, 0x7); |
1198 | 1189 | ||
1199 | /* Writeback doesn't seem to work everywhere, test it first */ | 1190 | /* Writeback doesn't seem to work everywhere, test it first */ |
1200 | DRM_WRITE32( dev_priv->ring_rptr, RADEON_SCRATCHOFF(1), 0 ); | 1191 | DRM_WRITE32(dev_priv->ring_rptr, RADEON_SCRATCHOFF(1), 0); |
1201 | RADEON_WRITE( RADEON_SCRATCH_REG1, 0xdeadbeef ); | 1192 | RADEON_WRITE(RADEON_SCRATCH_REG1, 0xdeadbeef); |
1202 | 1193 | ||
1203 | for ( tmp = 0 ; tmp < dev_priv->usec_timeout ; tmp++ ) { | 1194 | for (tmp = 0; tmp < dev_priv->usec_timeout; tmp++) { |
1204 | if ( DRM_READ32( dev_priv->ring_rptr, RADEON_SCRATCHOFF(1) ) == 0xdeadbeef ) | 1195 | if (DRM_READ32(dev_priv->ring_rptr, RADEON_SCRATCHOFF(1)) == |
1196 | 0xdeadbeef) | ||
1205 | break; | 1197 | break; |
1206 | DRM_UDELAY( 1 ); | 1198 | DRM_UDELAY(1); |
1207 | } | 1199 | } |
1208 | 1200 | ||
1209 | if ( tmp < dev_priv->usec_timeout ) { | 1201 | if (tmp < dev_priv->usec_timeout) { |
1210 | dev_priv->writeback_works = 1; | 1202 | dev_priv->writeback_works = 1; |
1211 | DRM_DEBUG( "writeback test succeeded, tmp=%d\n", tmp ); | 1203 | DRM_DEBUG("writeback test succeeded, tmp=%d\n", tmp); |
1212 | } else { | 1204 | } else { |
1213 | dev_priv->writeback_works = 0; | 1205 | dev_priv->writeback_works = 0; |
1214 | DRM_DEBUG( "writeback test failed\n" ); | 1206 | DRM_DEBUG("writeback test failed\n"); |
1215 | } | 1207 | } |
1216 | 1208 | ||
1217 | dev_priv->sarea_priv->last_frame = dev_priv->scratch[0] = 0; | 1209 | dev_priv->sarea_priv->last_frame = dev_priv->scratch[0] = 0; |
1218 | RADEON_WRITE( RADEON_LAST_FRAME_REG, | 1210 | RADEON_WRITE(RADEON_LAST_FRAME_REG, dev_priv->sarea_priv->last_frame); |
1219 | dev_priv->sarea_priv->last_frame ); | ||
1220 | 1211 | ||
1221 | dev_priv->sarea_priv->last_dispatch = dev_priv->scratch[1] = 0; | 1212 | dev_priv->sarea_priv->last_dispatch = dev_priv->scratch[1] = 0; |
1222 | RADEON_WRITE( RADEON_LAST_DISPATCH_REG, | 1213 | RADEON_WRITE(RADEON_LAST_DISPATCH_REG, |
1223 | dev_priv->sarea_priv->last_dispatch ); | 1214 | dev_priv->sarea_priv->last_dispatch); |
1224 | 1215 | ||
1225 | dev_priv->sarea_priv->last_clear = dev_priv->scratch[2] = 0; | 1216 | dev_priv->sarea_priv->last_clear = dev_priv->scratch[2] = 0; |
1226 | RADEON_WRITE( RADEON_LAST_CLEAR_REG, | 1217 | RADEON_WRITE(RADEON_LAST_CLEAR_REG, dev_priv->sarea_priv->last_clear); |
1227 | dev_priv->sarea_priv->last_clear ); | ||
1228 | 1218 | ||
1229 | /* Set ring buffer size */ | 1219 | /* Set ring buffer size */ |
1230 | #ifdef __BIG_ENDIAN | 1220 | #ifdef __BIG_ENDIAN |
1231 | RADEON_WRITE( RADEON_CP_RB_CNTL, dev_priv->ring.size_l2qw | RADEON_BUF_SWAP_32BIT ); | 1221 | RADEON_WRITE(RADEON_CP_RB_CNTL, |
1222 | dev_priv->ring.size_l2qw | RADEON_BUF_SWAP_32BIT); | ||
1232 | #else | 1223 | #else |
1233 | RADEON_WRITE( RADEON_CP_RB_CNTL, dev_priv->ring.size_l2qw ); | 1224 | RADEON_WRITE(RADEON_CP_RB_CNTL, dev_priv->ring.size_l2qw); |
1234 | #endif | 1225 | #endif |
1235 | 1226 | ||
1236 | radeon_do_wait_for_idle( dev_priv ); | 1227 | radeon_do_wait_for_idle(dev_priv); |
1237 | 1228 | ||
1238 | /* Turn on bus mastering */ | 1229 | /* Turn on bus mastering */ |
1239 | tmp = RADEON_READ( RADEON_BUS_CNTL ) & ~RADEON_BUS_MASTER_DIS; | 1230 | tmp = RADEON_READ(RADEON_BUS_CNTL) & ~RADEON_BUS_MASTER_DIS; |
1240 | RADEON_WRITE( RADEON_BUS_CNTL, tmp ); | 1231 | RADEON_WRITE(RADEON_BUS_CNTL, tmp); |
1241 | 1232 | ||
1242 | /* Sync everything up */ | 1233 | /* Sync everything up */ |
1243 | RADEON_WRITE( RADEON_ISYNC_CNTL, | 1234 | RADEON_WRITE(RADEON_ISYNC_CNTL, |
1244 | (RADEON_ISYNC_ANY2D_IDLE3D | | 1235 | (RADEON_ISYNC_ANY2D_IDLE3D | |
1245 | RADEON_ISYNC_ANY3D_IDLE2D | | 1236 | RADEON_ISYNC_ANY3D_IDLE2D | |
1246 | RADEON_ISYNC_WAIT_IDLEGUI | | 1237 | RADEON_ISYNC_WAIT_IDLEGUI | |
1247 | RADEON_ISYNC_CPSCRATCH_IDLEGUI) ); | 1238 | RADEON_ISYNC_CPSCRATCH_IDLEGUI)); |
1248 | } | 1239 | } |
1249 | 1240 | ||
1250 | /* Enable or disable PCI-E GART on the chip */ | 1241 | /* Enable or disable PCI-E GART on the chip */ |
@@ -1254,35 +1245,42 @@ static void radeon_set_pciegart(drm_radeon_private_t * dev_priv, int on) | |||
1254 | if (on) { | 1245 | if (on) { |
1255 | 1246 | ||
1256 | DRM_DEBUG("programming pcie %08X %08lX %08X\n", | 1247 | DRM_DEBUG("programming pcie %08X %08lX %08X\n", |
1257 | dev_priv->gart_vm_start, (long)dev_priv->gart_info.bus_addr, | 1248 | dev_priv->gart_vm_start, |
1249 | (long)dev_priv->gart_info.bus_addr, | ||
1258 | dev_priv->gart_size); | 1250 | dev_priv->gart_size); |
1259 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_DISCARD_RD_ADDR_LO, dev_priv->gart_vm_start); | 1251 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_DISCARD_RD_ADDR_LO, |
1260 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_BASE, dev_priv->gart_info.bus_addr); | 1252 | dev_priv->gart_vm_start); |
1261 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_START_LO, dev_priv->gart_vm_start); | 1253 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_BASE, |
1262 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_END_LO, dev_priv->gart_vm_start | 1254 | dev_priv->gart_info.bus_addr); |
1263 | + dev_priv->gart_size - 1); | 1255 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_START_LO, |
1264 | 1256 | dev_priv->gart_vm_start); | |
1257 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_END_LO, | ||
1258 | dev_priv->gart_vm_start + | ||
1259 | dev_priv->gart_size - 1); | ||
1260 | |||
1265 | RADEON_WRITE(RADEON_MC_AGP_LOCATION, 0xffffffc0); /* ?? */ | 1261 | RADEON_WRITE(RADEON_MC_AGP_LOCATION, 0xffffffc0); /* ?? */ |
1266 | 1262 | ||
1267 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_CNTL, RADEON_PCIE_TX_GART_EN); | 1263 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_CNTL, |
1264 | RADEON_PCIE_TX_GART_EN); | ||
1268 | } else { | 1265 | } else { |
1269 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_CNTL, tmp & ~RADEON_PCIE_TX_GART_EN); | 1266 | RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_CNTL, |
1267 | tmp & ~RADEON_PCIE_TX_GART_EN); | ||
1270 | } | 1268 | } |
1271 | } | 1269 | } |
1272 | 1270 | ||
1273 | /* Enable or disable PCI GART on the chip */ | 1271 | /* Enable or disable PCI GART on the chip */ |
1274 | static void radeon_set_pcigart( drm_radeon_private_t *dev_priv, int on ) | 1272 | static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on) |
1275 | { | 1273 | { |
1276 | u32 tmp = RADEON_READ( RADEON_AIC_CNTL ); | 1274 | u32 tmp = RADEON_READ(RADEON_AIC_CNTL); |
1277 | 1275 | ||
1278 | if (dev_priv->flags & CHIP_IS_PCIE) | 1276 | if (dev_priv->flags & CHIP_IS_PCIE) { |
1279 | { | ||
1280 | radeon_set_pciegart(dev_priv, on); | 1277 | radeon_set_pciegart(dev_priv, on); |
1281 | return; | 1278 | return; |
1282 | } | 1279 | } |
1283 | 1280 | ||
1284 | if ( on ) { | 1281 | if (on) { |
1285 | RADEON_WRITE( RADEON_AIC_CNTL, tmp | RADEON_PCIGART_TRANSLATE_EN ); | 1282 | RADEON_WRITE(RADEON_AIC_CNTL, |
1283 | tmp | RADEON_PCIGART_TRANSLATE_EN); | ||
1286 | 1284 | ||
1287 | /* set PCI GART page-table base address | 1285 | /* set PCI GART page-table base address |
1288 | */ | 1286 | */ |
@@ -1290,53 +1288,54 @@ static void radeon_set_pcigart( drm_radeon_private_t *dev_priv, int on ) | |||
1290 | 1288 | ||
1291 | /* set address range for PCI address translate | 1289 | /* set address range for PCI address translate |
1292 | */ | 1290 | */ |
1293 | RADEON_WRITE( RADEON_AIC_LO_ADDR, dev_priv->gart_vm_start ); | 1291 | RADEON_WRITE(RADEON_AIC_LO_ADDR, dev_priv->gart_vm_start); |
1294 | RADEON_WRITE( RADEON_AIC_HI_ADDR, dev_priv->gart_vm_start | 1292 | RADEON_WRITE(RADEON_AIC_HI_ADDR, dev_priv->gart_vm_start |
1295 | + dev_priv->gart_size - 1); | 1293 | + dev_priv->gart_size - 1); |
1296 | 1294 | ||
1297 | /* Turn off AGP aperture -- is this required for PCI GART? | 1295 | /* Turn off AGP aperture -- is this required for PCI GART? |
1298 | */ | 1296 | */ |
1299 | RADEON_WRITE( RADEON_MC_AGP_LOCATION, 0xffffffc0 ); /* ?? */ | 1297 | RADEON_WRITE(RADEON_MC_AGP_LOCATION, 0xffffffc0); /* ?? */ |
1300 | RADEON_WRITE( RADEON_AGP_COMMAND, 0 ); /* clear AGP_COMMAND */ | 1298 | RADEON_WRITE(RADEON_AGP_COMMAND, 0); /* clear AGP_COMMAND */ |
1301 | } else { | 1299 | } else { |
1302 | RADEON_WRITE( RADEON_AIC_CNTL, tmp & ~RADEON_PCIGART_TRANSLATE_EN ); | 1300 | RADEON_WRITE(RADEON_AIC_CNTL, |
1301 | tmp & ~RADEON_PCIGART_TRANSLATE_EN); | ||
1303 | } | 1302 | } |
1304 | } | 1303 | } |
1305 | 1304 | ||
1306 | static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | 1305 | static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init) |
1307 | { | 1306 | { |
1308 | drm_radeon_private_t *dev_priv = dev->dev_private;; | 1307 | drm_radeon_private_t *dev_priv = dev->dev_private;; |
1309 | DRM_DEBUG( "\n" ); | 1308 | DRM_DEBUG("\n"); |
1310 | 1309 | ||
1311 | dev_priv->is_pci = init->is_pci; | 1310 | dev_priv->is_pci = init->is_pci; |
1312 | 1311 | ||
1313 | if ( dev_priv->is_pci && !dev->sg ) { | 1312 | if (dev_priv->is_pci && !dev->sg) { |
1314 | DRM_ERROR( "PCI GART memory not allocated!\n" ); | 1313 | DRM_ERROR("PCI GART memory not allocated!\n"); |
1315 | dev->dev_private = (void *)dev_priv; | 1314 | dev->dev_private = (void *)dev_priv; |
1316 | radeon_do_cleanup_cp(dev); | 1315 | radeon_do_cleanup_cp(dev); |
1317 | return DRM_ERR(EINVAL); | 1316 | return DRM_ERR(EINVAL); |
1318 | } | 1317 | } |
1319 | 1318 | ||
1320 | dev_priv->usec_timeout = init->usec_timeout; | 1319 | dev_priv->usec_timeout = init->usec_timeout; |
1321 | if ( dev_priv->usec_timeout < 1 || | 1320 | if (dev_priv->usec_timeout < 1 || |
1322 | dev_priv->usec_timeout > RADEON_MAX_USEC_TIMEOUT ) { | 1321 | dev_priv->usec_timeout > RADEON_MAX_USEC_TIMEOUT) { |
1323 | DRM_DEBUG( "TIMEOUT problem!\n" ); | 1322 | DRM_DEBUG("TIMEOUT problem!\n"); |
1324 | dev->dev_private = (void *)dev_priv; | 1323 | dev->dev_private = (void *)dev_priv; |
1325 | radeon_do_cleanup_cp(dev); | 1324 | radeon_do_cleanup_cp(dev); |
1326 | return DRM_ERR(EINVAL); | 1325 | return DRM_ERR(EINVAL); |
1327 | } | 1326 | } |
1328 | 1327 | ||
1329 | switch(init->func) { | 1328 | switch (init->func) { |
1330 | case RADEON_INIT_R200_CP: | 1329 | case RADEON_INIT_R200_CP: |
1331 | dev_priv->microcode_version=UCODE_R200; | 1330 | dev_priv->microcode_version = UCODE_R200; |
1332 | break; | 1331 | break; |
1333 | case RADEON_INIT_R300_CP: | 1332 | case RADEON_INIT_R300_CP: |
1334 | dev_priv->microcode_version=UCODE_R300; | 1333 | dev_priv->microcode_version = UCODE_R300; |
1335 | break; | 1334 | break; |
1336 | default: | 1335 | default: |
1337 | dev_priv->microcode_version=UCODE_R100; | 1336 | dev_priv->microcode_version = UCODE_R100; |
1338 | } | 1337 | } |
1339 | 1338 | ||
1340 | dev_priv->do_boxes = 0; | 1339 | dev_priv->do_boxes = 0; |
1341 | dev_priv->cp_mode = init->cp_mode; | 1340 | dev_priv->cp_mode = init->cp_mode; |
1342 | 1341 | ||
@@ -1344,15 +1343,15 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1344 | * but the ring can be in either AGP or PCI space for the ring | 1343 | * but the ring can be in either AGP or PCI space for the ring |
1345 | * read pointer. | 1344 | * read pointer. |
1346 | */ | 1345 | */ |
1347 | if ( ( init->cp_mode != RADEON_CSQ_PRIBM_INDDIS ) && | 1346 | if ((init->cp_mode != RADEON_CSQ_PRIBM_INDDIS) && |
1348 | ( init->cp_mode != RADEON_CSQ_PRIBM_INDBM ) ) { | 1347 | (init->cp_mode != RADEON_CSQ_PRIBM_INDBM)) { |
1349 | DRM_DEBUG( "BAD cp_mode (%x)!\n", init->cp_mode ); | 1348 | DRM_DEBUG("BAD cp_mode (%x)!\n", init->cp_mode); |
1350 | dev->dev_private = (void *)dev_priv; | 1349 | dev->dev_private = (void *)dev_priv; |
1351 | radeon_do_cleanup_cp(dev); | 1350 | radeon_do_cleanup_cp(dev); |
1352 | return DRM_ERR(EINVAL); | 1351 | return DRM_ERR(EINVAL); |
1353 | } | 1352 | } |
1354 | 1353 | ||
1355 | switch ( init->fb_bpp ) { | 1354 | switch (init->fb_bpp) { |
1356 | case 16: | 1355 | case 16: |
1357 | dev_priv->color_fmt = RADEON_COLOR_FORMAT_RGB565; | 1356 | dev_priv->color_fmt = RADEON_COLOR_FORMAT_RGB565; |
1358 | break; | 1357 | break; |
@@ -1361,12 +1360,12 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1361 | dev_priv->color_fmt = RADEON_COLOR_FORMAT_ARGB8888; | 1360 | dev_priv->color_fmt = RADEON_COLOR_FORMAT_ARGB8888; |
1362 | break; | 1361 | break; |
1363 | } | 1362 | } |
1364 | dev_priv->front_offset = init->front_offset; | 1363 | dev_priv->front_offset = init->front_offset; |
1365 | dev_priv->front_pitch = init->front_pitch; | 1364 | dev_priv->front_pitch = init->front_pitch; |
1366 | dev_priv->back_offset = init->back_offset; | 1365 | dev_priv->back_offset = init->back_offset; |
1367 | dev_priv->back_pitch = init->back_pitch; | 1366 | dev_priv->back_pitch = init->back_pitch; |
1368 | 1367 | ||
1369 | switch ( init->depth_bpp ) { | 1368 | switch (init->depth_bpp) { |
1370 | case 16: | 1369 | case 16: |
1371 | dev_priv->depth_fmt = RADEON_DEPTH_FORMAT_16BIT_INT_Z; | 1370 | dev_priv->depth_fmt = RADEON_DEPTH_FORMAT_16BIT_INT_Z; |
1372 | break; | 1371 | break; |
@@ -1375,8 +1374,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1375 | dev_priv->depth_fmt = RADEON_DEPTH_FORMAT_24BIT_INT_Z; | 1374 | dev_priv->depth_fmt = RADEON_DEPTH_FORMAT_24BIT_INT_Z; |
1376 | break; | 1375 | break; |
1377 | } | 1376 | } |
1378 | dev_priv->depth_offset = init->depth_offset; | 1377 | dev_priv->depth_offset = init->depth_offset; |
1379 | dev_priv->depth_pitch = init->depth_pitch; | 1378 | dev_priv->depth_pitch = init->depth_pitch; |
1380 | 1379 | ||
1381 | /* Hardware state for depth clears. Remove this if/when we no | 1380 | /* Hardware state for depth clears. Remove this if/when we no |
1382 | * longer clear the depth buffer with a 3D rectangle. Hard-code | 1381 | * longer clear the depth buffer with a 3D rectangle. Hard-code |
@@ -1385,16 +1384,16 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1385 | */ | 1384 | */ |
1386 | dev_priv->depth_clear.rb3d_cntl = (RADEON_PLANE_MASK_ENABLE | | 1385 | dev_priv->depth_clear.rb3d_cntl = (RADEON_PLANE_MASK_ENABLE | |
1387 | (dev_priv->color_fmt << 10) | | 1386 | (dev_priv->color_fmt << 10) | |
1388 | (dev_priv->microcode_version == UCODE_R100 ? RADEON_ZBLOCK16 : 0)); | 1387 | (dev_priv->microcode_version == |
1388 | UCODE_R100 ? RADEON_ZBLOCK16 : 0)); | ||
1389 | 1389 | ||
1390 | dev_priv->depth_clear.rb3d_zstencilcntl = | 1390 | dev_priv->depth_clear.rb3d_zstencilcntl = |
1391 | (dev_priv->depth_fmt | | 1391 | (dev_priv->depth_fmt | |
1392 | RADEON_Z_TEST_ALWAYS | | 1392 | RADEON_Z_TEST_ALWAYS | |
1393 | RADEON_STENCIL_TEST_ALWAYS | | 1393 | RADEON_STENCIL_TEST_ALWAYS | |
1394 | RADEON_STENCIL_S_FAIL_REPLACE | | 1394 | RADEON_STENCIL_S_FAIL_REPLACE | |
1395 | RADEON_STENCIL_ZPASS_REPLACE | | 1395 | RADEON_STENCIL_ZPASS_REPLACE | |
1396 | RADEON_STENCIL_ZFAIL_REPLACE | | 1396 | RADEON_STENCIL_ZFAIL_REPLACE | RADEON_Z_WRITE_ENABLE); |
1397 | RADEON_Z_WRITE_ENABLE); | ||
1398 | 1397 | ||
1399 | dev_priv->depth_clear.se_cntl = (RADEON_FFACE_CULL_CW | | 1398 | dev_priv->depth_clear.se_cntl = (RADEON_FFACE_CULL_CW | |
1400 | RADEON_BFACE_SOLID | | 1399 | RADEON_BFACE_SOLID | |
@@ -1416,8 +1415,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1416 | dev_priv->ring_rptr_offset = init->ring_rptr_offset; | 1415 | dev_priv->ring_rptr_offset = init->ring_rptr_offset; |
1417 | dev_priv->buffers_offset = init->buffers_offset; | 1416 | dev_priv->buffers_offset = init->buffers_offset; |
1418 | dev_priv->gart_textures_offset = init->gart_textures_offset; | 1417 | dev_priv->gart_textures_offset = init->gart_textures_offset; |
1419 | 1418 | ||
1420 | if(!dev_priv->sarea) { | 1419 | if (!dev_priv->sarea) { |
1421 | DRM_ERROR("could not find sarea!\n"); | 1420 | DRM_ERROR("could not find sarea!\n"); |
1422 | dev->dev_private = (void *)dev_priv; | 1421 | dev->dev_private = (void *)dev_priv; |
1423 | radeon_do_cleanup_cp(dev); | 1422 | radeon_do_cleanup_cp(dev); |
@@ -1425,21 +1424,21 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1425 | } | 1424 | } |
1426 | 1425 | ||
1427 | dev_priv->mmio = drm_core_findmap(dev, init->mmio_offset); | 1426 | dev_priv->mmio = drm_core_findmap(dev, init->mmio_offset); |
1428 | if(!dev_priv->mmio) { | 1427 | if (!dev_priv->mmio) { |
1429 | DRM_ERROR("could not find mmio region!\n"); | 1428 | DRM_ERROR("could not find mmio region!\n"); |
1430 | dev->dev_private = (void *)dev_priv; | 1429 | dev->dev_private = (void *)dev_priv; |
1431 | radeon_do_cleanup_cp(dev); | 1430 | radeon_do_cleanup_cp(dev); |
1432 | return DRM_ERR(EINVAL); | 1431 | return DRM_ERR(EINVAL); |
1433 | } | 1432 | } |
1434 | dev_priv->cp_ring = drm_core_findmap(dev, init->ring_offset); | 1433 | dev_priv->cp_ring = drm_core_findmap(dev, init->ring_offset); |
1435 | if(!dev_priv->cp_ring) { | 1434 | if (!dev_priv->cp_ring) { |
1436 | DRM_ERROR("could not find cp ring region!\n"); | 1435 | DRM_ERROR("could not find cp ring region!\n"); |
1437 | dev->dev_private = (void *)dev_priv; | 1436 | dev->dev_private = (void *)dev_priv; |
1438 | radeon_do_cleanup_cp(dev); | 1437 | radeon_do_cleanup_cp(dev); |
1439 | return DRM_ERR(EINVAL); | 1438 | return DRM_ERR(EINVAL); |
1440 | } | 1439 | } |
1441 | dev_priv->ring_rptr = drm_core_findmap(dev, init->ring_rptr_offset); | 1440 | dev_priv->ring_rptr = drm_core_findmap(dev, init->ring_rptr_offset); |
1442 | if(!dev_priv->ring_rptr) { | 1441 | if (!dev_priv->ring_rptr) { |
1443 | DRM_ERROR("could not find ring read pointer!\n"); | 1442 | DRM_ERROR("could not find ring read pointer!\n"); |
1444 | dev->dev_private = (void *)dev_priv; | 1443 | dev->dev_private = (void *)dev_priv; |
1445 | radeon_do_cleanup_cp(dev); | 1444 | radeon_do_cleanup_cp(dev); |
@@ -1447,16 +1446,17 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1447 | } | 1446 | } |
1448 | dev->agp_buffer_token = init->buffers_offset; | 1447 | dev->agp_buffer_token = init->buffers_offset; |
1449 | dev->agp_buffer_map = drm_core_findmap(dev, init->buffers_offset); | 1448 | dev->agp_buffer_map = drm_core_findmap(dev, init->buffers_offset); |
1450 | if(!dev->agp_buffer_map) { | 1449 | if (!dev->agp_buffer_map) { |
1451 | DRM_ERROR("could not find dma buffer region!\n"); | 1450 | DRM_ERROR("could not find dma buffer region!\n"); |
1452 | dev->dev_private = (void *)dev_priv; | 1451 | dev->dev_private = (void *)dev_priv; |
1453 | radeon_do_cleanup_cp(dev); | 1452 | radeon_do_cleanup_cp(dev); |
1454 | return DRM_ERR(EINVAL); | 1453 | return DRM_ERR(EINVAL); |
1455 | } | 1454 | } |
1456 | 1455 | ||
1457 | if ( init->gart_textures_offset ) { | 1456 | if (init->gart_textures_offset) { |
1458 | dev_priv->gart_textures = drm_core_findmap(dev, init->gart_textures_offset); | 1457 | dev_priv->gart_textures = |
1459 | if ( !dev_priv->gart_textures ) { | 1458 | drm_core_findmap(dev, init->gart_textures_offset); |
1459 | if (!dev_priv->gart_textures) { | ||
1460 | DRM_ERROR("could not find GART texture region!\n"); | 1460 | DRM_ERROR("could not find GART texture region!\n"); |
1461 | dev->dev_private = (void *)dev_priv; | 1461 | dev->dev_private = (void *)dev_priv; |
1462 | radeon_do_cleanup_cp(dev); | 1462 | radeon_do_cleanup_cp(dev); |
@@ -1465,17 +1465,17 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1465 | } | 1465 | } |
1466 | 1466 | ||
1467 | dev_priv->sarea_priv = | 1467 | dev_priv->sarea_priv = |
1468 | (drm_radeon_sarea_t *)((u8 *)dev_priv->sarea->handle + | 1468 | (drm_radeon_sarea_t *) ((u8 *) dev_priv->sarea->handle + |
1469 | init->sarea_priv_offset); | 1469 | init->sarea_priv_offset); |
1470 | 1470 | ||
1471 | #if __OS_HAS_AGP | 1471 | #if __OS_HAS_AGP |
1472 | if ( !dev_priv->is_pci ) { | 1472 | if (!dev_priv->is_pci) { |
1473 | drm_core_ioremap( dev_priv->cp_ring, dev ); | 1473 | drm_core_ioremap(dev_priv->cp_ring, dev); |
1474 | drm_core_ioremap( dev_priv->ring_rptr, dev ); | 1474 | drm_core_ioremap(dev_priv->ring_rptr, dev); |
1475 | drm_core_ioremap( dev->agp_buffer_map, dev ); | 1475 | drm_core_ioremap(dev->agp_buffer_map, dev); |
1476 | if(!dev_priv->cp_ring->handle || | 1476 | if (!dev_priv->cp_ring->handle || |
1477 | !dev_priv->ring_rptr->handle || | 1477 | !dev_priv->ring_rptr->handle || |
1478 | !dev->agp_buffer_map->handle) { | 1478 | !dev->agp_buffer_map->handle) { |
1479 | DRM_ERROR("could not find ioremap agp regions!\n"); | 1479 | DRM_ERROR("could not find ioremap agp regions!\n"); |
1480 | dev->dev_private = (void *)dev_priv; | 1480 | dev->dev_private = (void *)dev_priv; |
1481 | radeon_do_cleanup_cp(dev); | 1481 | radeon_do_cleanup_cp(dev); |
@@ -1484,140 +1484,146 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1484 | } else | 1484 | } else |
1485 | #endif | 1485 | #endif |
1486 | { | 1486 | { |
1487 | dev_priv->cp_ring->handle = | 1487 | dev_priv->cp_ring->handle = (void *)dev_priv->cp_ring->offset; |
1488 | (void *)dev_priv->cp_ring->offset; | ||
1489 | dev_priv->ring_rptr->handle = | 1488 | dev_priv->ring_rptr->handle = |
1490 | (void *)dev_priv->ring_rptr->offset; | 1489 | (void *)dev_priv->ring_rptr->offset; |
1491 | dev->agp_buffer_map->handle = (void *)dev->agp_buffer_map->offset; | 1490 | dev->agp_buffer_map->handle = |
1492 | 1491 | (void *)dev->agp_buffer_map->offset; | |
1493 | DRM_DEBUG( "dev_priv->cp_ring->handle %p\n", | 1492 | |
1494 | dev_priv->cp_ring->handle ); | 1493 | DRM_DEBUG("dev_priv->cp_ring->handle %p\n", |
1495 | DRM_DEBUG( "dev_priv->ring_rptr->handle %p\n", | 1494 | dev_priv->cp_ring->handle); |
1496 | dev_priv->ring_rptr->handle ); | 1495 | DRM_DEBUG("dev_priv->ring_rptr->handle %p\n", |
1497 | DRM_DEBUG( "dev->agp_buffer_map->handle %p\n", | 1496 | dev_priv->ring_rptr->handle); |
1498 | dev->agp_buffer_map->handle ); | 1497 | DRM_DEBUG("dev->agp_buffer_map->handle %p\n", |
1498 | dev->agp_buffer_map->handle); | ||
1499 | } | 1499 | } |
1500 | 1500 | ||
1501 | dev_priv->fb_location = ( RADEON_READ( RADEON_MC_FB_LOCATION ) | 1501 | dev_priv->fb_location = (RADEON_READ(RADEON_MC_FB_LOCATION) |
1502 | & 0xffff ) << 16; | 1502 | & 0xffff) << 16; |
1503 | 1503 | ||
1504 | dev_priv->front_pitch_offset = (((dev_priv->front_pitch/64) << 22) | | 1504 | dev_priv->front_pitch_offset = (((dev_priv->front_pitch / 64) << 22) | |
1505 | ( ( dev_priv->front_offset | 1505 | ((dev_priv->front_offset |
1506 | + dev_priv->fb_location ) >> 10 ) ); | 1506 | + dev_priv->fb_location) >> 10)); |
1507 | 1507 | ||
1508 | dev_priv->back_pitch_offset = (((dev_priv->back_pitch/64) << 22) | | 1508 | dev_priv->back_pitch_offset = (((dev_priv->back_pitch / 64) << 22) | |
1509 | ( ( dev_priv->back_offset | 1509 | ((dev_priv->back_offset |
1510 | + dev_priv->fb_location ) >> 10 ) ); | 1510 | + dev_priv->fb_location) >> 10)); |
1511 | |||
1512 | dev_priv->depth_pitch_offset = (((dev_priv->depth_pitch/64) << 22) | | ||
1513 | ( ( dev_priv->depth_offset | ||
1514 | + dev_priv->fb_location ) >> 10 ) ); | ||
1515 | 1511 | ||
1512 | dev_priv->depth_pitch_offset = (((dev_priv->depth_pitch / 64) << 22) | | ||
1513 | ((dev_priv->depth_offset | ||
1514 | + dev_priv->fb_location) >> 10)); | ||
1516 | 1515 | ||
1517 | dev_priv->gart_size = init->gart_size; | 1516 | dev_priv->gart_size = init->gart_size; |
1518 | dev_priv->gart_vm_start = dev_priv->fb_location | 1517 | dev_priv->gart_vm_start = dev_priv->fb_location |
1519 | + RADEON_READ( RADEON_CONFIG_APER_SIZE ); | 1518 | + RADEON_READ(RADEON_CONFIG_APER_SIZE); |
1520 | 1519 | ||
1521 | #if __OS_HAS_AGP | 1520 | #if __OS_HAS_AGP |
1522 | if ( !dev_priv->is_pci ) | 1521 | if (!dev_priv->is_pci) |
1523 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset | 1522 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset |
1524 | - dev->agp->base | 1523 | - dev->agp->base |
1525 | + dev_priv->gart_vm_start); | 1524 | + dev_priv->gart_vm_start); |
1526 | else | 1525 | else |
1527 | #endif | 1526 | #endif |
1528 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset | 1527 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset |
1529 | - dev->sg->handle | 1528 | - dev->sg->handle |
1530 | + dev_priv->gart_vm_start); | 1529 | + dev_priv->gart_vm_start); |
1531 | 1530 | ||
1532 | DRM_DEBUG( "dev_priv->gart_size %d\n", | 1531 | DRM_DEBUG("dev_priv->gart_size %d\n", dev_priv->gart_size); |
1533 | dev_priv->gart_size ); | 1532 | DRM_DEBUG("dev_priv->gart_vm_start 0x%x\n", dev_priv->gart_vm_start); |
1534 | DRM_DEBUG( "dev_priv->gart_vm_start 0x%x\n", | 1533 | DRM_DEBUG("dev_priv->gart_buffers_offset 0x%lx\n", |
1535 | dev_priv->gart_vm_start ); | 1534 | dev_priv->gart_buffers_offset); |
1536 | DRM_DEBUG( "dev_priv->gart_buffers_offset 0x%lx\n", | 1535 | |
1537 | dev_priv->gart_buffers_offset ); | 1536 | dev_priv->ring.start = (u32 *) dev_priv->cp_ring->handle; |
1538 | 1537 | dev_priv->ring.end = ((u32 *) dev_priv->cp_ring->handle | |
1539 | dev_priv->ring.start = (u32 *)dev_priv->cp_ring->handle; | ||
1540 | dev_priv->ring.end = ((u32 *)dev_priv->cp_ring->handle | ||
1541 | + init->ring_size / sizeof(u32)); | 1538 | + init->ring_size / sizeof(u32)); |
1542 | dev_priv->ring.size = init->ring_size; | 1539 | dev_priv->ring.size = init->ring_size; |
1543 | dev_priv->ring.size_l2qw = drm_order( init->ring_size / 8 ); | 1540 | dev_priv->ring.size_l2qw = drm_order(init->ring_size / 8); |
1544 | 1541 | ||
1545 | dev_priv->ring.tail_mask = | 1542 | dev_priv->ring.tail_mask = (dev_priv->ring.size / sizeof(u32)) - 1; |
1546 | (dev_priv->ring.size / sizeof(u32)) - 1; | ||
1547 | 1543 | ||
1548 | dev_priv->ring.high_mark = RADEON_RING_HIGH_MARK; | 1544 | dev_priv->ring.high_mark = RADEON_RING_HIGH_MARK; |
1549 | 1545 | ||
1550 | #if __OS_HAS_AGP | 1546 | #if __OS_HAS_AGP |
1551 | if ( !dev_priv->is_pci ) { | 1547 | if (!dev_priv->is_pci) { |
1552 | /* Turn off PCI GART */ | 1548 | /* Turn off PCI GART */ |
1553 | radeon_set_pcigart( dev_priv, 0 ); | 1549 | radeon_set_pcigart(dev_priv, 0); |
1554 | } else | 1550 | } else |
1555 | #endif | 1551 | #endif |
1556 | { | 1552 | { |
1557 | /* if we have an offset set from userspace */ | 1553 | /* if we have an offset set from userspace */ |
1558 | if (dev_priv->pcigart_offset) { | 1554 | if (dev_priv->pcigart_offset) { |
1559 | dev_priv->gart_info.bus_addr = dev_priv->pcigart_offset + dev_priv->fb_location; | 1555 | dev_priv->gart_info.bus_addr = |
1560 | dev_priv->gart_info.addr = (unsigned long)drm_ioremap(dev_priv->gart_info.bus_addr, RADEON_PCIGART_TABLE_SIZE, dev); | 1556 | dev_priv->pcigart_offset + dev_priv->fb_location; |
1561 | 1557 | dev_priv->gart_info.addr = | |
1562 | dev_priv->gart_info.is_pcie = !!(dev_priv->flags & CHIP_IS_PCIE); | 1558 | (unsigned long)drm_ioremap(dev_priv->gart_info. |
1563 | dev_priv->gart_info.gart_table_location = DRM_ATI_GART_FB; | 1559 | bus_addr, |
1564 | 1560 | RADEON_PCIGART_TABLE_SIZE, | |
1565 | DRM_DEBUG("Setting phys_pci_gart to %08lX %08lX\n", dev_priv->gart_info.addr, dev_priv->pcigart_offset); | 1561 | dev); |
1566 | } | 1562 | |
1567 | else { | 1563 | dev_priv->gart_info.is_pcie = |
1568 | dev_priv->gart_info.gart_table_location = DRM_ATI_GART_MAIN; | 1564 | !!(dev_priv->flags & CHIP_IS_PCIE); |
1569 | dev_priv->gart_info.addr = dev_priv->gart_info.bus_addr= 0; | 1565 | dev_priv->gart_info.gart_table_location = |
1570 | if (dev_priv->flags & CHIP_IS_PCIE) | 1566 | DRM_ATI_GART_FB; |
1571 | { | 1567 | |
1572 | DRM_ERROR("Cannot use PCI Express without GART in FB memory\n"); | 1568 | DRM_DEBUG("Setting phys_pci_gart to %08lX %08lX\n", |
1569 | dev_priv->gart_info.addr, | ||
1570 | dev_priv->pcigart_offset); | ||
1571 | } else { | ||
1572 | dev_priv->gart_info.gart_table_location = | ||
1573 | DRM_ATI_GART_MAIN; | ||
1574 | dev_priv->gart_info.addr = | ||
1575 | dev_priv->gart_info.bus_addr = 0; | ||
1576 | if (dev_priv->flags & CHIP_IS_PCIE) { | ||
1577 | DRM_ERROR | ||
1578 | ("Cannot use PCI Express without GART in FB memory\n"); | ||
1573 | radeon_do_cleanup_cp(dev); | 1579 | radeon_do_cleanup_cp(dev); |
1574 | return DRM_ERR(EINVAL); | 1580 | return DRM_ERR(EINVAL); |
1575 | } | 1581 | } |
1576 | } | 1582 | } |
1577 | 1583 | ||
1578 | if (!drm_ati_pcigart_init(dev, &dev_priv->gart_info)) { | 1584 | if (!drm_ati_pcigart_init(dev, &dev_priv->gart_info)) { |
1579 | DRM_ERROR( "failed to init PCI GART!\n" ); | 1585 | DRM_ERROR("failed to init PCI GART!\n"); |
1580 | dev->dev_private = (void *)dev_priv; | 1586 | dev->dev_private = (void *)dev_priv; |
1581 | radeon_do_cleanup_cp(dev); | 1587 | radeon_do_cleanup_cp(dev); |
1582 | return DRM_ERR(ENOMEM); | 1588 | return DRM_ERR(ENOMEM); |
1583 | } | 1589 | } |
1584 | 1590 | ||
1585 | /* Turn on PCI GART */ | 1591 | /* Turn on PCI GART */ |
1586 | radeon_set_pcigart( dev_priv, 1 ); | 1592 | radeon_set_pcigart(dev_priv, 1); |
1587 | } | 1593 | } |
1588 | 1594 | ||
1589 | radeon_cp_load_microcode( dev_priv ); | 1595 | radeon_cp_load_microcode(dev_priv); |
1590 | radeon_cp_init_ring_buffer( dev, dev_priv ); | 1596 | radeon_cp_init_ring_buffer(dev, dev_priv); |
1591 | 1597 | ||
1592 | dev_priv->last_buf = 0; | 1598 | dev_priv->last_buf = 0; |
1593 | 1599 | ||
1594 | dev->dev_private = (void *)dev_priv; | 1600 | dev->dev_private = (void *)dev_priv; |
1595 | 1601 | ||
1596 | radeon_do_engine_reset( dev ); | 1602 | radeon_do_engine_reset(dev); |
1597 | 1603 | ||
1598 | return 0; | 1604 | return 0; |
1599 | } | 1605 | } |
1600 | 1606 | ||
1601 | static int radeon_do_cleanup_cp( drm_device_t *dev ) | 1607 | static int radeon_do_cleanup_cp(drm_device_t * dev) |
1602 | { | 1608 | { |
1603 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1609 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1604 | DRM_DEBUG( "\n" ); | 1610 | DRM_DEBUG("\n"); |
1605 | 1611 | ||
1606 | /* Make sure interrupts are disabled here because the uninstall ioctl | 1612 | /* Make sure interrupts are disabled here because the uninstall ioctl |
1607 | * may not have been called from userspace and after dev_private | 1613 | * may not have been called from userspace and after dev_private |
1608 | * is freed, it's too late. | 1614 | * is freed, it's too late. |
1609 | */ | 1615 | */ |
1610 | if ( dev->irq_enabled ) drm_irq_uninstall(dev); | 1616 | if (dev->irq_enabled) |
1617 | drm_irq_uninstall(dev); | ||
1611 | 1618 | ||
1612 | #if __OS_HAS_AGP | 1619 | #if __OS_HAS_AGP |
1613 | if ( !dev_priv->is_pci ) { | 1620 | if (!dev_priv->is_pci) { |
1614 | if ( dev_priv->cp_ring != NULL ) | 1621 | if (dev_priv->cp_ring != NULL) |
1615 | drm_core_ioremapfree( dev_priv->cp_ring, dev ); | 1622 | drm_core_ioremapfree(dev_priv->cp_ring, dev); |
1616 | if ( dev_priv->ring_rptr != NULL ) | 1623 | if (dev_priv->ring_rptr != NULL) |
1617 | drm_core_ioremapfree( dev_priv->ring_rptr, dev ); | 1624 | drm_core_ioremapfree(dev_priv->ring_rptr, dev); |
1618 | if ( dev->agp_buffer_map != NULL ) | 1625 | if (dev->agp_buffer_map != NULL) { |
1619 | { | 1626 | drm_core_ioremapfree(dev->agp_buffer_map, dev); |
1620 | drm_core_ioremapfree( dev->agp_buffer_map, dev ); | ||
1621 | dev->agp_buffer_map = NULL; | 1627 | dev->agp_buffer_map = NULL; |
1622 | } | 1628 | } |
1623 | } else | 1629 | } else |
@@ -1626,103 +1632,103 @@ static int radeon_do_cleanup_cp( drm_device_t *dev ) | |||
1626 | if (dev_priv->gart_info.bus_addr) | 1632 | if (dev_priv->gart_info.bus_addr) |
1627 | if (!drm_ati_pcigart_cleanup(dev, &dev_priv->gart_info)) | 1633 | if (!drm_ati_pcigart_cleanup(dev, &dev_priv->gart_info)) |
1628 | DRM_ERROR("failed to cleanup PCI GART!\n"); | 1634 | DRM_ERROR("failed to cleanup PCI GART!\n"); |
1629 | 1635 | ||
1630 | if (dev_priv->gart_info.gart_table_location == DRM_ATI_GART_FB) | 1636 | if (dev_priv->gart_info.gart_table_location == DRM_ATI_GART_FB) { |
1631 | { | 1637 | drm_ioremapfree((void *)dev_priv->gart_info.addr, |
1632 | drm_ioremapfree((void *)dev_priv->gart_info.addr, RADEON_PCIGART_TABLE_SIZE, dev); | 1638 | RADEON_PCIGART_TABLE_SIZE, dev); |
1633 | dev_priv->gart_info.addr = 0; | 1639 | dev_priv->gart_info.addr = 0; |
1634 | } | 1640 | } |
1635 | } | 1641 | } |
1636 | 1642 | ||
1637 | /* only clear to the start of flags */ | 1643 | /* only clear to the start of flags */ |
1638 | memset(dev_priv, 0, offsetof(drm_radeon_private_t, flags)); | 1644 | memset(dev_priv, 0, offsetof(drm_radeon_private_t, flags)); |
1639 | 1645 | ||
1640 | return 0; | 1646 | return 0; |
1641 | } | 1647 | } |
1642 | 1648 | ||
1643 | /* This code will reinit the Radeon CP hardware after a resume from disc. | 1649 | /* This code will reinit the Radeon CP hardware after a resume from disc. |
1644 | * AFAIK, it would be very difficult to pickle the state at suspend time, so | 1650 | * AFAIK, it would be very difficult to pickle the state at suspend time, so |
1645 | * here we make sure that all Radeon hardware initialisation is re-done without | 1651 | * here we make sure that all Radeon hardware initialisation is re-done without |
1646 | * affecting running applications. | 1652 | * affecting running applications. |
1647 | * | 1653 | * |
1648 | * Charl P. Botha <http://cpbotha.net> | 1654 | * Charl P. Botha <http://cpbotha.net> |
1649 | */ | 1655 | */ |
1650 | static int radeon_do_resume_cp( drm_device_t *dev ) | 1656 | static int radeon_do_resume_cp(drm_device_t * dev) |
1651 | { | 1657 | { |
1652 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1658 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1653 | 1659 | ||
1654 | if ( !dev_priv ) { | 1660 | if (!dev_priv) { |
1655 | DRM_ERROR( "Called with no initialization\n" ); | 1661 | DRM_ERROR("Called with no initialization\n"); |
1656 | return DRM_ERR( EINVAL ); | 1662 | return DRM_ERR(EINVAL); |
1657 | } | 1663 | } |
1658 | 1664 | ||
1659 | DRM_DEBUG("Starting radeon_do_resume_cp()\n"); | 1665 | DRM_DEBUG("Starting radeon_do_resume_cp()\n"); |
1660 | 1666 | ||
1661 | #if __OS_HAS_AGP | 1667 | #if __OS_HAS_AGP |
1662 | if ( !dev_priv->is_pci ) { | 1668 | if (!dev_priv->is_pci) { |
1663 | /* Turn off PCI GART */ | 1669 | /* Turn off PCI GART */ |
1664 | radeon_set_pcigart( dev_priv, 0 ); | 1670 | radeon_set_pcigart(dev_priv, 0); |
1665 | } else | 1671 | } else |
1666 | #endif | 1672 | #endif |
1667 | { | 1673 | { |
1668 | /* Turn on PCI GART */ | 1674 | /* Turn on PCI GART */ |
1669 | radeon_set_pcigart( dev_priv, 1 ); | 1675 | radeon_set_pcigart(dev_priv, 1); |
1670 | } | 1676 | } |
1671 | 1677 | ||
1672 | radeon_cp_load_microcode( dev_priv ); | 1678 | radeon_cp_load_microcode(dev_priv); |
1673 | radeon_cp_init_ring_buffer( dev, dev_priv ); | 1679 | radeon_cp_init_ring_buffer(dev, dev_priv); |
1674 | 1680 | ||
1675 | radeon_do_engine_reset( dev ); | 1681 | radeon_do_engine_reset(dev); |
1676 | 1682 | ||
1677 | DRM_DEBUG("radeon_do_resume_cp() complete\n"); | 1683 | DRM_DEBUG("radeon_do_resume_cp() complete\n"); |
1678 | 1684 | ||
1679 | return 0; | 1685 | return 0; |
1680 | } | 1686 | } |
1681 | 1687 | ||
1682 | 1688 | int radeon_cp_init(DRM_IOCTL_ARGS) | |
1683 | int radeon_cp_init( DRM_IOCTL_ARGS ) | ||
1684 | { | 1689 | { |
1685 | DRM_DEVICE; | 1690 | DRM_DEVICE; |
1686 | drm_radeon_init_t init; | 1691 | drm_radeon_init_t init; |
1687 | 1692 | ||
1688 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1693 | LOCK_TEST_WITH_RETURN(dev, filp); |
1689 | 1694 | ||
1690 | DRM_COPY_FROM_USER_IOCTL( init, (drm_radeon_init_t __user *)data, sizeof(init) ); | 1695 | DRM_COPY_FROM_USER_IOCTL(init, (drm_radeon_init_t __user *) data, |
1696 | sizeof(init)); | ||
1691 | 1697 | ||
1692 | if(init.func == RADEON_INIT_R300_CP) | 1698 | if (init.func == RADEON_INIT_R300_CP) |
1693 | r300_init_reg_flags(); | 1699 | r300_init_reg_flags(); |
1694 | 1700 | ||
1695 | switch ( init.func ) { | 1701 | switch (init.func) { |
1696 | case RADEON_INIT_CP: | 1702 | case RADEON_INIT_CP: |
1697 | case RADEON_INIT_R200_CP: | 1703 | case RADEON_INIT_R200_CP: |
1698 | case RADEON_INIT_R300_CP: | 1704 | case RADEON_INIT_R300_CP: |
1699 | return radeon_do_init_cp( dev, &init ); | 1705 | return radeon_do_init_cp(dev, &init); |
1700 | case RADEON_CLEANUP_CP: | 1706 | case RADEON_CLEANUP_CP: |
1701 | return radeon_do_cleanup_cp( dev ); | 1707 | return radeon_do_cleanup_cp(dev); |
1702 | } | 1708 | } |
1703 | 1709 | ||
1704 | return DRM_ERR(EINVAL); | 1710 | return DRM_ERR(EINVAL); |
1705 | } | 1711 | } |
1706 | 1712 | ||
1707 | int radeon_cp_start( DRM_IOCTL_ARGS ) | 1713 | int radeon_cp_start(DRM_IOCTL_ARGS) |
1708 | { | 1714 | { |
1709 | DRM_DEVICE; | 1715 | DRM_DEVICE; |
1710 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1716 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1711 | DRM_DEBUG( "\n" ); | 1717 | DRM_DEBUG("\n"); |
1712 | 1718 | ||
1713 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1719 | LOCK_TEST_WITH_RETURN(dev, filp); |
1714 | 1720 | ||
1715 | if ( dev_priv->cp_running ) { | 1721 | if (dev_priv->cp_running) { |
1716 | DRM_DEBUG( "%s while CP running\n", __FUNCTION__ ); | 1722 | DRM_DEBUG("%s while CP running\n", __FUNCTION__); |
1717 | return 0; | 1723 | return 0; |
1718 | } | 1724 | } |
1719 | if ( dev_priv->cp_mode == RADEON_CSQ_PRIDIS_INDDIS ) { | 1725 | if (dev_priv->cp_mode == RADEON_CSQ_PRIDIS_INDDIS) { |
1720 | DRM_DEBUG( "%s called with bogus CP mode (%d)\n", | 1726 | DRM_DEBUG("%s called with bogus CP mode (%d)\n", |
1721 | __FUNCTION__, dev_priv->cp_mode ); | 1727 | __FUNCTION__, dev_priv->cp_mode); |
1722 | return 0; | 1728 | return 0; |
1723 | } | 1729 | } |
1724 | 1730 | ||
1725 | radeon_do_cp_start( dev_priv ); | 1731 | radeon_do_cp_start(dev_priv); |
1726 | 1732 | ||
1727 | return 0; | 1733 | return 0; |
1728 | } | 1734 | } |
@@ -1730,17 +1736,18 @@ int radeon_cp_start( DRM_IOCTL_ARGS ) | |||
1730 | /* Stop the CP. The engine must have been idled before calling this | 1736 | /* Stop the CP. The engine must have been idled before calling this |
1731 | * routine. | 1737 | * routine. |
1732 | */ | 1738 | */ |
1733 | int radeon_cp_stop( DRM_IOCTL_ARGS ) | 1739 | int radeon_cp_stop(DRM_IOCTL_ARGS) |
1734 | { | 1740 | { |
1735 | DRM_DEVICE; | 1741 | DRM_DEVICE; |
1736 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1742 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1737 | drm_radeon_cp_stop_t stop; | 1743 | drm_radeon_cp_stop_t stop; |
1738 | int ret; | 1744 | int ret; |
1739 | DRM_DEBUG( "\n" ); | 1745 | DRM_DEBUG("\n"); |
1740 | 1746 | ||
1741 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1747 | LOCK_TEST_WITH_RETURN(dev, filp); |
1742 | 1748 | ||
1743 | DRM_COPY_FROM_USER_IOCTL( stop, (drm_radeon_cp_stop_t __user *)data, sizeof(stop) ); | 1749 | DRM_COPY_FROM_USER_IOCTL(stop, (drm_radeon_cp_stop_t __user *) data, |
1750 | sizeof(stop)); | ||
1744 | 1751 | ||
1745 | if (!dev_priv->cp_running) | 1752 | if (!dev_priv->cp_running) |
1746 | return 0; | 1753 | return 0; |
@@ -1748,32 +1755,32 @@ int radeon_cp_stop( DRM_IOCTL_ARGS ) | |||
1748 | /* Flush any pending CP commands. This ensures any outstanding | 1755 | /* Flush any pending CP commands. This ensures any outstanding |
1749 | * commands are exectuted by the engine before we turn it off. | 1756 | * commands are exectuted by the engine before we turn it off. |
1750 | */ | 1757 | */ |
1751 | if ( stop.flush ) { | 1758 | if (stop.flush) { |
1752 | radeon_do_cp_flush( dev_priv ); | 1759 | radeon_do_cp_flush(dev_priv); |
1753 | } | 1760 | } |
1754 | 1761 | ||
1755 | /* If we fail to make the engine go idle, we return an error | 1762 | /* If we fail to make the engine go idle, we return an error |
1756 | * code so that the DRM ioctl wrapper can try again. | 1763 | * code so that the DRM ioctl wrapper can try again. |
1757 | */ | 1764 | */ |
1758 | if ( stop.idle ) { | 1765 | if (stop.idle) { |
1759 | ret = radeon_do_cp_idle( dev_priv ); | 1766 | ret = radeon_do_cp_idle(dev_priv); |
1760 | if ( ret ) return ret; | 1767 | if (ret) |
1768 | return ret; | ||
1761 | } | 1769 | } |
1762 | 1770 | ||
1763 | /* Finally, we can turn off the CP. If the engine isn't idle, | 1771 | /* Finally, we can turn off the CP. If the engine isn't idle, |
1764 | * we will get some dropped triangles as they won't be fully | 1772 | * we will get some dropped triangles as they won't be fully |
1765 | * rendered before the CP is shut down. | 1773 | * rendered before the CP is shut down. |
1766 | */ | 1774 | */ |
1767 | radeon_do_cp_stop( dev_priv ); | 1775 | radeon_do_cp_stop(dev_priv); |
1768 | 1776 | ||
1769 | /* Reset the engine */ | 1777 | /* Reset the engine */ |
1770 | radeon_do_engine_reset( dev ); | 1778 | radeon_do_engine_reset(dev); |
1771 | 1779 | ||
1772 | return 0; | 1780 | return 0; |
1773 | } | 1781 | } |
1774 | 1782 | ||
1775 | 1783 | void radeon_do_release(drm_device_t * dev) | |
1776 | void radeon_do_release( drm_device_t *dev ) | ||
1777 | { | 1784 | { |
1778 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1785 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1779 | int i, ret; | 1786 | int i, ret; |
@@ -1781,7 +1788,7 @@ void radeon_do_release( drm_device_t *dev ) | |||
1781 | if (dev_priv) { | 1788 | if (dev_priv) { |
1782 | if (dev_priv->cp_running) { | 1789 | if (dev_priv->cp_running) { |
1783 | /* Stop the cp */ | 1790 | /* Stop the cp */ |
1784 | while ((ret = radeon_do_cp_idle( dev_priv )) != 0) { | 1791 | while ((ret = radeon_do_cp_idle(dev_priv)) != 0) { |
1785 | DRM_DEBUG("radeon_do_cp_idle %d\n", ret); | 1792 | DRM_DEBUG("radeon_do_cp_idle %d\n", ret); |
1786 | #ifdef __linux__ | 1793 | #ifdef __linux__ |
1787 | schedule(); | 1794 | schedule(); |
@@ -1789,47 +1796,49 @@ void radeon_do_release( drm_device_t *dev ) | |||
1789 | tsleep(&ret, PZERO, "rdnrel", 1); | 1796 | tsleep(&ret, PZERO, "rdnrel", 1); |
1790 | #endif | 1797 | #endif |
1791 | } | 1798 | } |
1792 | radeon_do_cp_stop( dev_priv ); | 1799 | radeon_do_cp_stop(dev_priv); |
1793 | radeon_do_engine_reset( dev ); | 1800 | radeon_do_engine_reset(dev); |
1794 | } | 1801 | } |
1795 | 1802 | ||
1796 | /* Disable *all* interrupts */ | 1803 | /* Disable *all* interrupts */ |
1797 | if (dev_priv->mmio) /* remove this after permanent addmaps */ | 1804 | if (dev_priv->mmio) /* remove this after permanent addmaps */ |
1798 | RADEON_WRITE( RADEON_GEN_INT_CNTL, 0 ); | 1805 | RADEON_WRITE(RADEON_GEN_INT_CNTL, 0); |
1799 | 1806 | ||
1800 | if (dev_priv->mmio) {/* remove all surfaces */ | 1807 | if (dev_priv->mmio) { /* remove all surfaces */ |
1801 | for (i = 0; i < RADEON_MAX_SURFACES; i++) { | 1808 | for (i = 0; i < RADEON_MAX_SURFACES; i++) { |
1802 | RADEON_WRITE(RADEON_SURFACE0_INFO + 16*i, 0); | 1809 | RADEON_WRITE(RADEON_SURFACE0_INFO + 16 * i, 0); |
1803 | RADEON_WRITE(RADEON_SURFACE0_LOWER_BOUND + 16*i, 0); | 1810 | RADEON_WRITE(RADEON_SURFACE0_LOWER_BOUND + |
1804 | RADEON_WRITE(RADEON_SURFACE0_UPPER_BOUND + 16*i, 0); | 1811 | 16 * i, 0); |
1812 | RADEON_WRITE(RADEON_SURFACE0_UPPER_BOUND + | ||
1813 | 16 * i, 0); | ||
1805 | } | 1814 | } |
1806 | } | 1815 | } |
1807 | 1816 | ||
1808 | /* Free memory heap structures */ | 1817 | /* Free memory heap structures */ |
1809 | radeon_mem_takedown( &(dev_priv->gart_heap) ); | 1818 | radeon_mem_takedown(&(dev_priv->gart_heap)); |
1810 | radeon_mem_takedown( &(dev_priv->fb_heap) ); | 1819 | radeon_mem_takedown(&(dev_priv->fb_heap)); |
1811 | 1820 | ||
1812 | /* deallocate kernel resources */ | 1821 | /* deallocate kernel resources */ |
1813 | radeon_do_cleanup_cp( dev ); | 1822 | radeon_do_cleanup_cp(dev); |
1814 | } | 1823 | } |
1815 | } | 1824 | } |
1816 | 1825 | ||
1817 | /* Just reset the CP ring. Called as part of an X Server engine reset. | 1826 | /* Just reset the CP ring. Called as part of an X Server engine reset. |
1818 | */ | 1827 | */ |
1819 | int radeon_cp_reset( DRM_IOCTL_ARGS ) | 1828 | int radeon_cp_reset(DRM_IOCTL_ARGS) |
1820 | { | 1829 | { |
1821 | DRM_DEVICE; | 1830 | DRM_DEVICE; |
1822 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1831 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1823 | DRM_DEBUG( "\n" ); | 1832 | DRM_DEBUG("\n"); |
1824 | 1833 | ||
1825 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1834 | LOCK_TEST_WITH_RETURN(dev, filp); |
1826 | 1835 | ||
1827 | if ( !dev_priv ) { | 1836 | if (!dev_priv) { |
1828 | DRM_DEBUG( "%s called before init done\n", __FUNCTION__ ); | 1837 | DRM_DEBUG("%s called before init done\n", __FUNCTION__); |
1829 | return DRM_ERR(EINVAL); | 1838 | return DRM_ERR(EINVAL); |
1830 | } | 1839 | } |
1831 | 1840 | ||
1832 | radeon_do_cp_reset( dev_priv ); | 1841 | radeon_do_cp_reset(dev_priv); |
1833 | 1842 | ||
1834 | /* The CP is no longer running after an engine reset */ | 1843 | /* The CP is no longer running after an engine reset */ |
1835 | dev_priv->cp_running = 0; | 1844 | dev_priv->cp_running = 0; |
@@ -1837,50 +1846,47 @@ int radeon_cp_reset( DRM_IOCTL_ARGS ) | |||
1837 | return 0; | 1846 | return 0; |
1838 | } | 1847 | } |
1839 | 1848 | ||
1840 | int radeon_cp_idle( DRM_IOCTL_ARGS ) | 1849 | int radeon_cp_idle(DRM_IOCTL_ARGS) |
1841 | { | 1850 | { |
1842 | DRM_DEVICE; | 1851 | DRM_DEVICE; |
1843 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1852 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1844 | DRM_DEBUG( "\n" ); | 1853 | DRM_DEBUG("\n"); |
1845 | 1854 | ||
1846 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1855 | LOCK_TEST_WITH_RETURN(dev, filp); |
1847 | 1856 | ||
1848 | return radeon_do_cp_idle( dev_priv ); | 1857 | return radeon_do_cp_idle(dev_priv); |
1849 | } | 1858 | } |
1850 | 1859 | ||
1851 | /* Added by Charl P. Botha to call radeon_do_resume_cp(). | 1860 | /* Added by Charl P. Botha to call radeon_do_resume_cp(). |
1852 | */ | 1861 | */ |
1853 | int radeon_cp_resume( DRM_IOCTL_ARGS ) | 1862 | int radeon_cp_resume(DRM_IOCTL_ARGS) |
1854 | { | 1863 | { |
1855 | DRM_DEVICE; | 1864 | DRM_DEVICE; |
1856 | 1865 | ||
1857 | return radeon_do_resume_cp(dev); | 1866 | return radeon_do_resume_cp(dev); |
1858 | } | 1867 | } |
1859 | 1868 | ||
1860 | 1869 | int radeon_engine_reset(DRM_IOCTL_ARGS) | |
1861 | int radeon_engine_reset( DRM_IOCTL_ARGS ) | ||
1862 | { | 1870 | { |
1863 | DRM_DEVICE; | 1871 | DRM_DEVICE; |
1864 | DRM_DEBUG( "\n" ); | 1872 | DRM_DEBUG("\n"); |
1865 | 1873 | ||
1866 | LOCK_TEST_WITH_RETURN( dev, filp ); | 1874 | LOCK_TEST_WITH_RETURN(dev, filp); |
1867 | 1875 | ||
1868 | return radeon_do_engine_reset( dev ); | 1876 | return radeon_do_engine_reset(dev); |
1869 | } | 1877 | } |
1870 | 1878 | ||
1871 | |||
1872 | /* ================================================================ | 1879 | /* ================================================================ |
1873 | * Fullscreen mode | 1880 | * Fullscreen mode |
1874 | */ | 1881 | */ |
1875 | 1882 | ||
1876 | /* KW: Deprecated to say the least: | 1883 | /* KW: Deprecated to say the least: |
1877 | */ | 1884 | */ |
1878 | int radeon_fullscreen( DRM_IOCTL_ARGS ) | 1885 | int radeon_fullscreen(DRM_IOCTL_ARGS) |
1879 | { | 1886 | { |
1880 | return 0; | 1887 | return 0; |
1881 | } | 1888 | } |
1882 | 1889 | ||
1883 | |||
1884 | /* ================================================================ | 1890 | /* ================================================================ |
1885 | * Freelist management | 1891 | * Freelist management |
1886 | */ | 1892 | */ |
@@ -1889,20 +1895,20 @@ int radeon_fullscreen( DRM_IOCTL_ARGS ) | |||
1889 | * bufs until freelist code is used. Note this hides a problem with | 1895 | * bufs until freelist code is used. Note this hides a problem with |
1890 | * the scratch register * (used to keep track of last buffer | 1896 | * the scratch register * (used to keep track of last buffer |
1891 | * completed) being written to before * the last buffer has actually | 1897 | * completed) being written to before * the last buffer has actually |
1892 | * completed rendering. | 1898 | * completed rendering. |
1893 | * | 1899 | * |
1894 | * KW: It's also a good way to find free buffers quickly. | 1900 | * KW: It's also a good way to find free buffers quickly. |
1895 | * | 1901 | * |
1896 | * KW: Ideally this loop wouldn't exist, and freelist_get wouldn't | 1902 | * KW: Ideally this loop wouldn't exist, and freelist_get wouldn't |
1897 | * sleep. However, bugs in older versions of radeon_accel.c mean that | 1903 | * sleep. However, bugs in older versions of radeon_accel.c mean that |
1898 | * we essentially have to do this, else old clients will break. | 1904 | * we essentially have to do this, else old clients will break. |
1899 | * | 1905 | * |
1900 | * However, it does leave open a potential deadlock where all the | 1906 | * However, it does leave open a potential deadlock where all the |
1901 | * buffers are held by other clients, which can't release them because | 1907 | * buffers are held by other clients, which can't release them because |
1902 | * they can't get the lock. | 1908 | * they can't get the lock. |
1903 | */ | 1909 | */ |
1904 | 1910 | ||
1905 | drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | 1911 | drm_buf_t *radeon_freelist_get(drm_device_t * dev) |
1906 | { | 1912 | { |
1907 | drm_device_dma_t *dma = dev->dma; | 1913 | drm_device_dma_t *dma = dev->dma; |
1908 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1914 | drm_radeon_private_t *dev_priv = dev->dev_private; |
@@ -1911,19 +1917,19 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | |||
1911 | int i, t; | 1917 | int i, t; |
1912 | int start; | 1918 | int start; |
1913 | 1919 | ||
1914 | if ( ++dev_priv->last_buf >= dma->buf_count ) | 1920 | if (++dev_priv->last_buf >= dma->buf_count) |
1915 | dev_priv->last_buf = 0; | 1921 | dev_priv->last_buf = 0; |
1916 | 1922 | ||
1917 | start = dev_priv->last_buf; | 1923 | start = dev_priv->last_buf; |
1918 | 1924 | ||
1919 | for ( t = 0 ; t < dev_priv->usec_timeout ; t++ ) { | 1925 | for (t = 0; t < dev_priv->usec_timeout; t++) { |
1920 | u32 done_age = GET_SCRATCH( 1 ); | 1926 | u32 done_age = GET_SCRATCH(1); |
1921 | DRM_DEBUG("done_age = %d\n",done_age); | 1927 | DRM_DEBUG("done_age = %d\n", done_age); |
1922 | for ( i = start ; i < dma->buf_count ; i++ ) { | 1928 | for (i = start; i < dma->buf_count; i++) { |
1923 | buf = dma->buflist[i]; | 1929 | buf = dma->buflist[i]; |
1924 | buf_priv = buf->dev_private; | 1930 | buf_priv = buf->dev_private; |
1925 | if ( buf->filp == 0 || (buf->pending && | 1931 | if (buf->filp == 0 || (buf->pending && |
1926 | buf_priv->age <= done_age) ) { | 1932 | buf_priv->age <= done_age)) { |
1927 | dev_priv->stats.requested_bufs++; | 1933 | dev_priv->stats.requested_bufs++; |
1928 | buf->pending = 0; | 1934 | buf->pending = 0; |
1929 | return buf; | 1935 | return buf; |
@@ -1932,16 +1938,17 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | |||
1932 | } | 1938 | } |
1933 | 1939 | ||
1934 | if (t) { | 1940 | if (t) { |
1935 | DRM_UDELAY( 1 ); | 1941 | DRM_UDELAY(1); |
1936 | dev_priv->stats.freelist_loops++; | 1942 | dev_priv->stats.freelist_loops++; |
1937 | } | 1943 | } |
1938 | } | 1944 | } |
1939 | 1945 | ||
1940 | DRM_DEBUG( "returning NULL!\n" ); | 1946 | DRM_DEBUG("returning NULL!\n"); |
1941 | return NULL; | 1947 | return NULL; |
1942 | } | 1948 | } |
1949 | |||
1943 | #if 0 | 1950 | #if 0 |
1944 | drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | 1951 | drm_buf_t *radeon_freelist_get(drm_device_t * dev) |
1945 | { | 1952 | { |
1946 | drm_device_dma_t *dma = dev->dma; | 1953 | drm_device_dma_t *dma = dev->dma; |
1947 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1954 | drm_radeon_private_t *dev_priv = dev->dev_private; |
@@ -1951,18 +1958,18 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | |||
1951 | int start; | 1958 | int start; |
1952 | u32 done_age = DRM_READ32(dev_priv->ring_rptr, RADEON_SCRATCHOFF(1)); | 1959 | u32 done_age = DRM_READ32(dev_priv->ring_rptr, RADEON_SCRATCHOFF(1)); |
1953 | 1960 | ||
1954 | if ( ++dev_priv->last_buf >= dma->buf_count ) | 1961 | if (++dev_priv->last_buf >= dma->buf_count) |
1955 | dev_priv->last_buf = 0; | 1962 | dev_priv->last_buf = 0; |
1956 | 1963 | ||
1957 | start = dev_priv->last_buf; | 1964 | start = dev_priv->last_buf; |
1958 | dev_priv->stats.freelist_loops++; | 1965 | dev_priv->stats.freelist_loops++; |
1959 | 1966 | ||
1960 | for ( t = 0 ; t < 2 ; t++ ) { | 1967 | for (t = 0; t < 2; t++) { |
1961 | for ( i = start ; i < dma->buf_count ; i++ ) { | 1968 | for (i = start; i < dma->buf_count; i++) { |
1962 | buf = dma->buflist[i]; | 1969 | buf = dma->buflist[i]; |
1963 | buf_priv = buf->dev_private; | 1970 | buf_priv = buf->dev_private; |
1964 | if ( buf->filp == 0 || (buf->pending && | 1971 | if (buf->filp == 0 || (buf->pending && |
1965 | buf_priv->age <= done_age) ) { | 1972 | buf_priv->age <= done_age)) { |
1966 | dev_priv->stats.requested_bufs++; | 1973 | dev_priv->stats.requested_bufs++; |
1967 | buf->pending = 0; | 1974 | buf->pending = 0; |
1968 | return buf; | 1975 | return buf; |
@@ -1975,73 +1982,74 @@ drm_buf_t *radeon_freelist_get( drm_device_t *dev ) | |||
1975 | } | 1982 | } |
1976 | #endif | 1983 | #endif |
1977 | 1984 | ||
1978 | void radeon_freelist_reset( drm_device_t *dev ) | 1985 | void radeon_freelist_reset(drm_device_t * dev) |
1979 | { | 1986 | { |
1980 | drm_device_dma_t *dma = dev->dma; | 1987 | drm_device_dma_t *dma = dev->dma; |
1981 | drm_radeon_private_t *dev_priv = dev->dev_private; | 1988 | drm_radeon_private_t *dev_priv = dev->dev_private; |
1982 | int i; | 1989 | int i; |
1983 | 1990 | ||
1984 | dev_priv->last_buf = 0; | 1991 | dev_priv->last_buf = 0; |
1985 | for ( i = 0 ; i < dma->buf_count ; i++ ) { | 1992 | for (i = 0; i < dma->buf_count; i++) { |
1986 | drm_buf_t *buf = dma->buflist[i]; | 1993 | drm_buf_t *buf = dma->buflist[i]; |
1987 | drm_radeon_buf_priv_t *buf_priv = buf->dev_private; | 1994 | drm_radeon_buf_priv_t *buf_priv = buf->dev_private; |
1988 | buf_priv->age = 0; | 1995 | buf_priv->age = 0; |
1989 | } | 1996 | } |
1990 | } | 1997 | } |
1991 | 1998 | ||
1992 | |||
1993 | /* ================================================================ | 1999 | /* ================================================================ |
1994 | * CP command submission | 2000 | * CP command submission |
1995 | */ | 2001 | */ |
1996 | 2002 | ||
1997 | int radeon_wait_ring( drm_radeon_private_t *dev_priv, int n ) | 2003 | int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n) |
1998 | { | 2004 | { |
1999 | drm_radeon_ring_buffer_t *ring = &dev_priv->ring; | 2005 | drm_radeon_ring_buffer_t *ring = &dev_priv->ring; |
2000 | int i; | 2006 | int i; |
2001 | u32 last_head = GET_RING_HEAD( dev_priv ); | 2007 | u32 last_head = GET_RING_HEAD(dev_priv); |
2002 | 2008 | ||
2003 | for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { | 2009 | for (i = 0; i < dev_priv->usec_timeout; i++) { |
2004 | u32 head = GET_RING_HEAD( dev_priv ); | 2010 | u32 head = GET_RING_HEAD(dev_priv); |
2005 | 2011 | ||
2006 | ring->space = (head - ring->tail) * sizeof(u32); | 2012 | ring->space = (head - ring->tail) * sizeof(u32); |
2007 | if ( ring->space <= 0 ) | 2013 | if (ring->space <= 0) |
2008 | ring->space += ring->size; | 2014 | ring->space += ring->size; |
2009 | if ( ring->space > n ) | 2015 | if (ring->space > n) |
2010 | return 0; | 2016 | return 0; |
2011 | 2017 | ||
2012 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; | 2018 | dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE; |
2013 | 2019 | ||
2014 | if (head != last_head) | 2020 | if (head != last_head) |
2015 | i = 0; | 2021 | i = 0; |
2016 | last_head = head; | 2022 | last_head = head; |
2017 | 2023 | ||
2018 | DRM_UDELAY( 1 ); | 2024 | DRM_UDELAY(1); |
2019 | } | 2025 | } |
2020 | 2026 | ||
2021 | /* FIXME: This return value is ignored in the BEGIN_RING macro! */ | 2027 | /* FIXME: This return value is ignored in the BEGIN_RING macro! */ |
2022 | #if RADEON_FIFO_DEBUG | 2028 | #if RADEON_FIFO_DEBUG |
2023 | radeon_status( dev_priv ); | 2029 | radeon_status(dev_priv); |
2024 | DRM_ERROR( "failed!\n" ); | 2030 | DRM_ERROR("failed!\n"); |
2025 | #endif | 2031 | #endif |
2026 | return DRM_ERR(EBUSY); | 2032 | return DRM_ERR(EBUSY); |
2027 | } | 2033 | } |
2028 | 2034 | ||
2029 | static int radeon_cp_get_buffers( DRMFILE filp, drm_device_t *dev, drm_dma_t *d ) | 2035 | static int radeon_cp_get_buffers(DRMFILE filp, drm_device_t * dev, |
2036 | drm_dma_t * d) | ||
2030 | { | 2037 | { |
2031 | int i; | 2038 | int i; |
2032 | drm_buf_t *buf; | 2039 | drm_buf_t *buf; |
2033 | 2040 | ||
2034 | for ( i = d->granted_count ; i < d->request_count ; i++ ) { | 2041 | for (i = d->granted_count; i < d->request_count; i++) { |
2035 | buf = radeon_freelist_get( dev ); | 2042 | buf = radeon_freelist_get(dev); |
2036 | if ( !buf ) return DRM_ERR(EBUSY); /* NOTE: broken client */ | 2043 | if (!buf) |
2044 | return DRM_ERR(EBUSY); /* NOTE: broken client */ | ||
2037 | 2045 | ||
2038 | buf->filp = filp; | 2046 | buf->filp = filp; |
2039 | 2047 | ||
2040 | if ( DRM_COPY_TO_USER( &d->request_indices[i], &buf->idx, | 2048 | if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx, |
2041 | sizeof(buf->idx) ) ) | 2049 | sizeof(buf->idx))) |
2042 | return DRM_ERR(EFAULT); | 2050 | return DRM_ERR(EFAULT); |
2043 | if ( DRM_COPY_TO_USER( &d->request_sizes[i], &buf->total, | 2051 | if (DRM_COPY_TO_USER(&d->request_sizes[i], &buf->total, |
2044 | sizeof(buf->total) ) ) | 2052 | sizeof(buf->total))) |
2045 | return DRM_ERR(EFAULT); | 2053 | return DRM_ERR(EFAULT); |
2046 | 2054 | ||
2047 | d->granted_count++; | 2055 | d->granted_count++; |
@@ -2049,7 +2057,7 @@ static int radeon_cp_get_buffers( DRMFILE filp, drm_device_t *dev, drm_dma_t *d | |||
2049 | return 0; | 2057 | return 0; |
2050 | } | 2058 | } |
2051 | 2059 | ||
2052 | int radeon_cp_buffers( DRM_IOCTL_ARGS ) | 2060 | int radeon_cp_buffers(DRM_IOCTL_ARGS) |
2053 | { | 2061 | { |
2054 | DRM_DEVICE; | 2062 | DRM_DEVICE; |
2055 | drm_device_dma_t *dma = dev->dma; | 2063 | drm_device_dma_t *dma = dev->dma; |
@@ -2057,33 +2065,33 @@ int radeon_cp_buffers( DRM_IOCTL_ARGS ) | |||
2057 | drm_dma_t __user *argp = (void __user *)data; | 2065 | drm_dma_t __user *argp = (void __user *)data; |
2058 | drm_dma_t d; | 2066 | drm_dma_t d; |
2059 | 2067 | ||
2060 | LOCK_TEST_WITH_RETURN( dev, filp ); | 2068 | LOCK_TEST_WITH_RETURN(dev, filp); |
2061 | 2069 | ||
2062 | DRM_COPY_FROM_USER_IOCTL( d, argp, sizeof(d) ); | 2070 | DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d)); |
2063 | 2071 | ||
2064 | /* Please don't send us buffers. | 2072 | /* Please don't send us buffers. |
2065 | */ | 2073 | */ |
2066 | if ( d.send_count != 0 ) { | 2074 | if (d.send_count != 0) { |
2067 | DRM_ERROR( "Process %d trying to send %d buffers via drmDMA\n", | 2075 | DRM_ERROR("Process %d trying to send %d buffers via drmDMA\n", |
2068 | DRM_CURRENTPID, d.send_count ); | 2076 | DRM_CURRENTPID, d.send_count); |
2069 | return DRM_ERR(EINVAL); | 2077 | return DRM_ERR(EINVAL); |
2070 | } | 2078 | } |
2071 | 2079 | ||
2072 | /* We'll send you buffers. | 2080 | /* We'll send you buffers. |
2073 | */ | 2081 | */ |
2074 | if ( d.request_count < 0 || d.request_count > dma->buf_count ) { | 2082 | if (d.request_count < 0 || d.request_count > dma->buf_count) { |
2075 | DRM_ERROR( "Process %d trying to get %d buffers (of %d max)\n", | 2083 | DRM_ERROR("Process %d trying to get %d buffers (of %d max)\n", |
2076 | DRM_CURRENTPID, d.request_count, dma->buf_count ); | 2084 | DRM_CURRENTPID, d.request_count, dma->buf_count); |
2077 | return DRM_ERR(EINVAL); | 2085 | return DRM_ERR(EINVAL); |
2078 | } | 2086 | } |
2079 | 2087 | ||
2080 | d.granted_count = 0; | 2088 | d.granted_count = 0; |
2081 | 2089 | ||
2082 | if ( d.request_count ) { | 2090 | if (d.request_count) { |
2083 | ret = radeon_cp_get_buffers( filp, dev, &d ); | 2091 | ret = radeon_cp_get_buffers(filp, dev, &d); |
2084 | } | 2092 | } |
2085 | 2093 | ||
2086 | DRM_COPY_TO_USER_IOCTL( argp, d, sizeof(d) ); | 2094 | DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d)); |
2087 | 2095 | ||
2088 | return ret; | 2096 | return ret; |
2089 | } | 2097 | } |
@@ -2110,13 +2118,13 @@ int radeon_driver_preinit(struct drm_device *dev, unsigned long flags) | |||
2110 | dev_priv->flags |= CHIP_HAS_HIERZ; | 2118 | dev_priv->flags |= CHIP_HAS_HIERZ; |
2111 | break; | 2119 | break; |
2112 | default: | 2120 | default: |
2113 | /* all other chips have no hierarchical z buffer */ | 2121 | /* all other chips have no hierarchical z buffer */ |
2114 | break; | 2122 | break; |
2115 | } | 2123 | } |
2116 | 2124 | ||
2117 | if (drm_device_is_agp(dev)) | 2125 | if (drm_device_is_agp(dev)) |
2118 | dev_priv->flags |= CHIP_IS_AGP; | 2126 | dev_priv->flags |= CHIP_IS_AGP; |
2119 | 2127 | ||
2120 | if (drm_device_is_pcie(dev)) | 2128 | if (drm_device_is_pcie(dev)) |
2121 | dev_priv->flags |= CHIP_IS_PCIE; | 2129 | dev_priv->flags |= CHIP_IS_PCIE; |
2122 | 2130 | ||