2 * Copyright (C) 2007 Ben Skeggs.
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
13 * The above copyright notice and this permission notice (including the
14 * next paragraph) shall be included in all copies or substantial
15 * portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 #include "nouveau_drv.h"
31 /* The sizes are taken from the difference between the start of two
32 * grctx addresses while running the nvidia driver. Probably slightly
33 * larger than they actually are, because of other objects being created
34 * between the contexts
36 #define NV40_GRCTX_SIZE (175*1024)
37 #define NV43_GRCTX_SIZE (70*1024)
38 #define NV46_GRCTX_SIZE (70*1024) /* probably ~64KiB */
39 #define NV49_GRCTX_SIZE (164640)
40 #define NV4A_GRCTX_SIZE (64*1024)
41 #define NV4B_GRCTX_SIZE (164640)
42 #define NV4C_GRCTX_SIZE (25*1024)
43 #define NV4E_GRCTX_SIZE (25*1024)
45 /*TODO: deciper what each offset in the context represents. The below
46 * contexts are taken from dumps just after the 3D object is
50 nv40_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
52 struct drm_nouveau_private *dev_priv = dev->dev_private;
55 /* Always has the "instance address" of itself at offset 0 */
56 INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
58 INSTANCE_WR(ctx, 0x00024/4, 0x0000ffff);
59 INSTANCE_WR(ctx, 0x00028/4, 0x0000ffff);
60 INSTANCE_WR(ctx, 0x00030/4, 0x00000001);
61 INSTANCE_WR(ctx, 0x0011c/4, 0x20010001);
62 INSTANCE_WR(ctx, 0x00120/4, 0x0f73ef00);
63 INSTANCE_WR(ctx, 0x00128/4, 0x02008821);
64 INSTANCE_WR(ctx, 0x0016c/4, 0x00000040);
65 INSTANCE_WR(ctx, 0x00170/4, 0x00000040);
66 INSTANCE_WR(ctx, 0x00174/4, 0x00000040);
67 INSTANCE_WR(ctx, 0x0017c/4, 0x80000000);
68 INSTANCE_WR(ctx, 0x00180/4, 0x80000000);
69 INSTANCE_WR(ctx, 0x00184/4, 0x80000000);
70 INSTANCE_WR(ctx, 0x00188/4, 0x80000000);
71 INSTANCE_WR(ctx, 0x0018c/4, 0x80000000);
72 INSTANCE_WR(ctx, 0x0019c/4, 0x00000040);
73 INSTANCE_WR(ctx, 0x001a0/4, 0x80000000);
74 INSTANCE_WR(ctx, 0x001b0/4, 0x80000000);
75 INSTANCE_WR(ctx, 0x001c0/4, 0x80000000);
76 INSTANCE_WR(ctx, 0x001d0/4, 0x0b0b0b0c);
77 INSTANCE_WR(ctx, 0x00340/4, 0x00040000);
78 INSTANCE_WR(ctx, 0x00350/4, 0x55555555);
79 INSTANCE_WR(ctx, 0x00354/4, 0x55555555);
80 INSTANCE_WR(ctx, 0x00358/4, 0x55555555);
81 INSTANCE_WR(ctx, 0x0035c/4, 0x55555555);
82 INSTANCE_WR(ctx, 0x00388/4, 0x00000008);
83 INSTANCE_WR(ctx, 0x0039c/4, 0x00000010);
84 INSTANCE_WR(ctx, 0x00480/4, 0x00000100);
85 INSTANCE_WR(ctx, 0x00494/4, 0x00000111);
86 INSTANCE_WR(ctx, 0x00498/4, 0x00080060);
87 INSTANCE_WR(ctx, 0x004b4/4, 0x00000080);
88 INSTANCE_WR(ctx, 0x004b8/4, 0xffff0000);
89 INSTANCE_WR(ctx, 0x004bc/4, 0x00000001);
90 INSTANCE_WR(ctx, 0x004d0/4, 0x46400000);
91 INSTANCE_WR(ctx, 0x004ec/4, 0xffff0000);
92 INSTANCE_WR(ctx, 0x004f8/4, 0x0fff0000);
93 INSTANCE_WR(ctx, 0x004fc/4, 0x0fff0000);
94 INSTANCE_WR(ctx, 0x00504/4, 0x00011100);
95 for (i=0x00520; i<=0x0055c; i+=4)
96 INSTANCE_WR(ctx, i/4, 0x07ff0000);
97 INSTANCE_WR(ctx, 0x00568/4, 0x4b7fffff);
98 INSTANCE_WR(ctx, 0x00594/4, 0x30201000);
99 INSTANCE_WR(ctx, 0x00598/4, 0x70605040);
100 INSTANCE_WR(ctx, 0x0059c/4, 0xb8a89888);
101 INSTANCE_WR(ctx, 0x005a0/4, 0xf8e8d8c8);
102 INSTANCE_WR(ctx, 0x005b4/4, 0x40100000);
103 INSTANCE_WR(ctx, 0x005cc/4, 0x00000004);
104 INSTANCE_WR(ctx, 0x005d8/4, 0x0000ffff);
105 INSTANCE_WR(ctx, 0x0060c/4, 0x435185d6);
106 INSTANCE_WR(ctx, 0x00610/4, 0x2155b699);
107 INSTANCE_WR(ctx, 0x00614/4, 0xfedcba98);
108 INSTANCE_WR(ctx, 0x00618/4, 0x00000098);
109 INSTANCE_WR(ctx, 0x00628/4, 0xffffffff);
110 INSTANCE_WR(ctx, 0x0062c/4, 0x00ff7000);
111 INSTANCE_WR(ctx, 0x00630/4, 0x0000ffff);
112 INSTANCE_WR(ctx, 0x00640/4, 0x00ff0000);
113 INSTANCE_WR(ctx, 0x0067c/4, 0x00ffff00);
114 /* 0x680-0x6BC - NV30_TCL_PRIMITIVE_3D_TX_ADDRESS_UNIT(0-15) */
115 /* 0x6C0-0x6FC - NV30_TCL_PRIMITIVE_3D_TX_FORMAT_UNIT(0-15) */
116 for (i=0x006C0; i<=0x006fc; i+=4)
117 INSTANCE_WR(ctx, i/4, 0x00018488);
118 /* 0x700-0x73C - NV30_TCL_PRIMITIVE_3D_TX_WRAP_UNIT(0-15) */
119 for (i=0x00700; i<=0x0073c; i+=4)
120 INSTANCE_WR(ctx, i/4, 0x00028202);
121 /* 0x740-0x77C - NV30_TCL_PRIMITIVE_3D_TX_ENABLE_UNIT(0-15) */
122 /* 0x780-0x7BC - NV30_TCL_PRIMITIVE_3D_TX_SWIZZLE_UNIT(0-15) */
123 for (i=0x00780; i<=0x007bc; i+=4)
124 INSTANCE_WR(ctx, i/4, 0x0000aae4);
125 /* 0x7C0-0x7FC - NV30_TCL_PRIMITIVE_3D_TX_FILTER_UNIT(0-15) */
126 for (i=0x007c0; i<=0x007fc; i+=4)
127 INSTANCE_WR(ctx, i/4, 0x01012000);
128 /* 0x800-0x83C - NV30_TCL_PRIMITIVE_3D_TX_XY_DIM_UNIT(0-15) */
129 for (i=0x00800; i<=0x0083c; i+=4)
130 INSTANCE_WR(ctx, i/4, 0x00080008);
131 /* 0x840-0x87C - NV30_TCL_PRIMITIVE_3D_TX_UNK07_UNIT(0-15) */
132 /* 0x880-0x8BC - NV30_TCL_PRIMITIVE_3D_TX_DEPTH_UNIT(0-15) */
133 for (i=0x00880; i<=0x008bc; i+=4)
134 INSTANCE_WR(ctx, i/4, 0x00100008);
136 for (i=0x00910; i<=0x0091c; i+=4)
137 INSTANCE_WR(ctx, i/4, 0x0001bc80);
138 for (i=0x00920; i<=0x0092c; i+=4)
139 INSTANCE_WR(ctx, i/4, 0x00000202);
140 for (i=0x00940; i<=0x0094c; i+=4)
141 INSTANCE_WR(ctx, i/4, 0x00000008);
142 for (i=0x00960; i<=0x0096c; i+=4)
143 INSTANCE_WR(ctx, i/4, 0x00080008);
144 INSTANCE_WR(ctx, 0x00980/4, 0x00000002);
145 INSTANCE_WR(ctx, 0x009b4/4, 0x00000001);
146 INSTANCE_WR(ctx, 0x009c0/4, 0x3e020200);
147 INSTANCE_WR(ctx, 0x009c4/4, 0x00ffffff);
148 INSTANCE_WR(ctx, 0x009c8/4, 0x60103f00);
149 INSTANCE_WR(ctx, 0x009d4/4, 0x00020000);
150 INSTANCE_WR(ctx, 0x00a08/4, 0x00008100);
151 INSTANCE_WR(ctx, 0x00aac/4, 0x00000001);
152 INSTANCE_WR(ctx, 0x00af0/4, 0x00000001);
153 INSTANCE_WR(ctx, 0x00af8/4, 0x80800001);
154 INSTANCE_WR(ctx, 0x00bcc/4, 0x00000005);
155 INSTANCE_WR(ctx, 0x00bf8/4, 0x00005555);
156 INSTANCE_WR(ctx, 0x00bfc/4, 0x00005555);
157 INSTANCE_WR(ctx, 0x00c00/4, 0x00005555);
158 INSTANCE_WR(ctx, 0x00c04/4, 0x00005555);
159 INSTANCE_WR(ctx, 0x00c08/4, 0x00005555);
160 INSTANCE_WR(ctx, 0x00c0c/4, 0x00005555);
161 INSTANCE_WR(ctx, 0x00c44/4, 0x00000001);
162 for (i=0x03008; i<=0x03080; i+=8)
163 INSTANCE_WR(ctx, i/4, 0x3f800000);
164 for (i=0x05288; i<=0x08570; i+=24)
165 INSTANCE_WR(ctx, i/4, 0x00000001);
166 for (i=0x08628; i<=0x08e18; i+=16)
167 INSTANCE_WR(ctx, i/4, 0x3f800000);
168 for (i=0x0bd28; i<=0x0f010; i+=24)
169 INSTANCE_WR(ctx, i/4, 0x00000001);
170 for (i=0x0f0c8; i<=0x0f8b8; i+=16)
171 INSTANCE_WR(ctx, i/4, 0x3f800000);
172 for (i=0x127c8; i<=0x15ab0; i+=24)
173 INSTANCE_WR(ctx, i/4, 0x00000001);
174 for (i=0x15b68; i<=0x16358; i+=16)
175 INSTANCE_WR(ctx, i/4, 0x3f800000);
176 for (i=0x19268; i<=0x1c550; i+=24)
177 INSTANCE_WR(ctx, i/4, 0x00000001);
178 for (i=0x1c608; i<=0x1cdf8; i+=16)
179 INSTANCE_WR(ctx, i/4, 0x3f800000);
180 for (i=0x1fd08; i<=0x22ff0; i+=24)
181 INSTANCE_WR(ctx, i/4, 0x00000001);
182 for (i=0x230a8; i<=0x23898; i+=16)
183 INSTANCE_WR(ctx, i/4, 0x3f800000);
184 for (i=0x267a8; i<=0x29a90; i+=24)
185 INSTANCE_WR(ctx, i/4, 0x00000001);
186 for (i=0x29b48; i<=0x2a338; i+=16)
187 INSTANCE_WR(ctx, i/4, 0x3f800000);
191 nv43_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
193 struct drm_nouveau_private *dev_priv = dev->dev_private;
196 INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
197 INSTANCE_WR(ctx, 0x00024/4, 0x0000ffff);
198 INSTANCE_WR(ctx, 0x00028/4, 0x0000ffff);
199 INSTANCE_WR(ctx, 0x00030/4, 0x00000001);
200 INSTANCE_WR(ctx, 0x0011c/4, 0x20010001);
201 INSTANCE_WR(ctx, 0x00120/4, 0x0f73ef00);
202 INSTANCE_WR(ctx, 0x00128/4, 0x02008821);
203 INSTANCE_WR(ctx, 0x00178/4, 0x00000040);
204 INSTANCE_WR(ctx, 0x0017c/4, 0x00000040);
205 INSTANCE_WR(ctx, 0x00180/4, 0x00000040);
206 INSTANCE_WR(ctx, 0x00188/4, 0x00000040);
207 INSTANCE_WR(ctx, 0x00194/4, 0x80000000);
208 INSTANCE_WR(ctx, 0x00198/4, 0x80000000);
209 INSTANCE_WR(ctx, 0x0019c/4, 0x80000000);
210 INSTANCE_WR(ctx, 0x001a0/4, 0x80000000);
211 INSTANCE_WR(ctx, 0x001a4/4, 0x80000000);
212 INSTANCE_WR(ctx, 0x001a8/4, 0x80000000);
213 INSTANCE_WR(ctx, 0x001ac/4, 0x80000000);
214 INSTANCE_WR(ctx, 0x001b0/4, 0x80000000);
215 INSTANCE_WR(ctx, 0x001d0/4, 0x0b0b0b0c);
216 INSTANCE_WR(ctx, 0x00340/4, 0x00040000);
217 INSTANCE_WR(ctx, 0x00350/4, 0x55555555);
218 INSTANCE_WR(ctx, 0x00354/4, 0x55555555);
219 INSTANCE_WR(ctx, 0x00358/4, 0x55555555);
220 INSTANCE_WR(ctx, 0x0035c/4, 0x55555555);
221 INSTANCE_WR(ctx, 0x00388/4, 0x00000008);
222 INSTANCE_WR(ctx, 0x0039c/4, 0x00001010);
223 INSTANCE_WR(ctx, 0x003cc/4, 0x00000111);
224 INSTANCE_WR(ctx, 0x003d0/4, 0x00080060);
225 INSTANCE_WR(ctx, 0x003ec/4, 0x00000080);
226 INSTANCE_WR(ctx, 0x003f0/4, 0xffff0000);
227 INSTANCE_WR(ctx, 0x003f4/4, 0x00000001);
228 INSTANCE_WR(ctx, 0x00408/4, 0x46400000);
229 INSTANCE_WR(ctx, 0x00418/4, 0xffff0000);
230 INSTANCE_WR(ctx, 0x00424/4, 0x0fff0000);
231 INSTANCE_WR(ctx, 0x00428/4, 0x0fff0000);
232 INSTANCE_WR(ctx, 0x00430/4, 0x00011100);
233 for (i=0x0044c; i<=0x00488; i+=4)
234 INSTANCE_WR(ctx, i/4, 0x07ff0000);
235 INSTANCE_WR(ctx, 0x00494/4, 0x4b7fffff);
236 INSTANCE_WR(ctx, 0x004bc/4, 0x30201000);
237 INSTANCE_WR(ctx, 0x004c0/4, 0x70605040);
238 INSTANCE_WR(ctx, 0x004c4/4, 0xb8a89888);
239 INSTANCE_WR(ctx, 0x004c8/4, 0xf8e8d8c8);
240 INSTANCE_WR(ctx, 0x004dc/4, 0x40100000);
241 INSTANCE_WR(ctx, 0x004f8/4, 0x0000ffff);
242 INSTANCE_WR(ctx, 0x0052c/4, 0x435185d6);
243 INSTANCE_WR(ctx, 0x00530/4, 0x2155b699);
244 INSTANCE_WR(ctx, 0x00534/4, 0xfedcba98);
245 INSTANCE_WR(ctx, 0x00538/4, 0x00000098);
246 INSTANCE_WR(ctx, 0x00548/4, 0xffffffff);
247 INSTANCE_WR(ctx, 0x0054c/4, 0x00ff7000);
248 INSTANCE_WR(ctx, 0x00550/4, 0x0000ffff);
249 INSTANCE_WR(ctx, 0x00560/4, 0x00ff0000);
250 INSTANCE_WR(ctx, 0x00598/4, 0x00ffff00);
251 for (i=0x005dc; i<=0x00618; i+=4)
252 INSTANCE_WR(ctx, i/4, 0x00018488);
253 for (i=0x0061c; i<=0x00658; i+=4)
254 INSTANCE_WR(ctx, i/4, 0x00028202);
255 for (i=0x0069c; i<=0x006d8; i+=4)
256 INSTANCE_WR(ctx, i/4, 0x0000aae4);
257 for (i=0x006dc; i<=0x00718; i+=4)
258 INSTANCE_WR(ctx, i/4, 0x01012000);
259 for (i=0x0071c; i<=0x00758; i+=4)
260 INSTANCE_WR(ctx, i/4, 0x00080008);
261 for (i=0x0079c; i<=0x007d8; i+=4)
262 INSTANCE_WR(ctx, i/4, 0x00100008);
263 for (i=0x0082c; i<=0x00838; i+=4)
264 INSTANCE_WR(ctx, i/4, 0x0001bc80);
265 for (i=0x0083c; i<=0x00848; i+=4)
266 INSTANCE_WR(ctx, i/4, 0x00000202);
267 for (i=0x0085c; i<=0x00868; i+=4)
268 INSTANCE_WR(ctx, i/4, 0x00000008);
269 for (i=0x0087c; i<=0x00888; i+=4)
270 INSTANCE_WR(ctx, i/4, 0x00080008);
271 INSTANCE_WR(ctx, 0x0089c/4, 0x00000002);
272 INSTANCE_WR(ctx, 0x008d0/4, 0x00000021);
273 INSTANCE_WR(ctx, 0x008d4/4, 0x030c30c3);
274 INSTANCE_WR(ctx, 0x008e0/4, 0x3e020200);
275 INSTANCE_WR(ctx, 0x008e4/4, 0x00ffffff);
276 INSTANCE_WR(ctx, 0x008e8/4, 0x0c103f00);
277 INSTANCE_WR(ctx, 0x008f4/4, 0x00020000);
278 INSTANCE_WR(ctx, 0x0092c/4, 0x00008100);
279 INSTANCE_WR(ctx, 0x009b8/4, 0x00000001);
280 INSTANCE_WR(ctx, 0x009fc/4, 0x00001001);
281 INSTANCE_WR(ctx, 0x00a04/4, 0x00000003);
282 INSTANCE_WR(ctx, 0x00a08/4, 0x00888001);
283 INSTANCE_WR(ctx, 0x00a8c/4, 0x00000005);
284 INSTANCE_WR(ctx, 0x00a98/4, 0x0000ffff);
285 INSTANCE_WR(ctx, 0x00ab4/4, 0x00005555);
286 INSTANCE_WR(ctx, 0x00ab8/4, 0x00005555);
287 INSTANCE_WR(ctx, 0x00abc/4, 0x00005555);
288 INSTANCE_WR(ctx, 0x00ac0/4, 0x00000001);
289 INSTANCE_WR(ctx, 0x00af8/4, 0x00000001);
290 for (i=0x02ec0; i<=0x02f38; i+=8)
291 INSTANCE_WR(ctx, i/4, 0x3f800000);
292 for (i=0x04c80; i<=0x06e70; i+=24)
293 INSTANCE_WR(ctx, i/4, 0x00000001);
294 for (i=0x06e80; i<=0x07270; i+=16)
295 INSTANCE_WR(ctx, i/4, 0x3f800000);
296 for (i=0x096c0; i<=0x0b8b0; i+=24)
297 INSTANCE_WR(ctx, i/4, 0x00000001);
298 for (i=0x0b8c0; i<=0x0bcb0; i+=16)
299 INSTANCE_WR(ctx, i/4, 0x3f800000);
300 for (i=0x0e100; i<=0x102f0; i+=24)
301 INSTANCE_WR(ctx, i/4, 0x00000001);
302 for (i=0x10300; i<=0x106f0; i+=16)
303 INSTANCE_WR(ctx, i/4, 0x3f800000);
307 nv46_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
309 struct drm_nouveau_private *dev_priv = dev->dev_private;
312 INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
313 INSTANCE_WR(ctx, 0x00040/4, 0x0000ffff);
314 INSTANCE_WR(ctx, 0x00044/4, 0x0000ffff);
315 INSTANCE_WR(ctx, 0x0004c/4, 0x00000001);
316 INSTANCE_WR(ctx, 0x00138/4, 0x20010001);
317 INSTANCE_WR(ctx, 0x0013c/4, 0x0f73ef00);
318 INSTANCE_WR(ctx, 0x00144/4, 0x02008821);
319 INSTANCE_WR(ctx, 0x00174/4, 0x00000001);
320 INSTANCE_WR(ctx, 0x00178/4, 0x00000001);
321 INSTANCE_WR(ctx, 0x0017c/4, 0x00000001);
322 INSTANCE_WR(ctx, 0x00180/4, 0x00000001);
323 INSTANCE_WR(ctx, 0x00184/4, 0x00000001);
324 INSTANCE_WR(ctx, 0x00188/4, 0x00000001);
325 INSTANCE_WR(ctx, 0x0018c/4, 0x00000001);
326 INSTANCE_WR(ctx, 0x00190/4, 0x00000001);
327 INSTANCE_WR(ctx, 0x00194/4, 0x00000040);
328 INSTANCE_WR(ctx, 0x00198/4, 0x00000040);
329 INSTANCE_WR(ctx, 0x0019c/4, 0x00000040);
330 INSTANCE_WR(ctx, 0x001a4/4, 0x00000040);
331 INSTANCE_WR(ctx, 0x001ec/4, 0x0b0b0b0c);
332 INSTANCE_WR(ctx, 0x0035c/4, 0x00040000);
333 INSTANCE_WR(ctx, 0x0036c/4, 0x55555555);
334 INSTANCE_WR(ctx, 0x00370/4, 0x55555555);
335 INSTANCE_WR(ctx, 0x00374/4, 0x55555555);
336 INSTANCE_WR(ctx, 0x00378/4, 0x55555555);
337 INSTANCE_WR(ctx, 0x003a4/4, 0x00000008);
338 INSTANCE_WR(ctx, 0x003b8/4, 0x00003010);
339 INSTANCE_WR(ctx, 0x003dc/4, 0x00000111);
340 INSTANCE_WR(ctx, 0x003e0/4, 0x00000111);
341 INSTANCE_WR(ctx, 0x003e4/4, 0x00000111);
342 INSTANCE_WR(ctx, 0x003e8/4, 0x00000111);
343 INSTANCE_WR(ctx, 0x003ec/4, 0x00000111);
344 INSTANCE_WR(ctx, 0x003f0/4, 0x00000111);
345 INSTANCE_WR(ctx, 0x003f4/4, 0x00000111);
346 INSTANCE_WR(ctx, 0x003f8/4, 0x00000111);
347 INSTANCE_WR(ctx, 0x003fc/4, 0x00000111);
348 INSTANCE_WR(ctx, 0x00400/4, 0x00000111);
349 INSTANCE_WR(ctx, 0x00404/4, 0x00000111);
350 INSTANCE_WR(ctx, 0x00408/4, 0x00000111);
351 INSTANCE_WR(ctx, 0x0040c/4, 0x00000111);
352 INSTANCE_WR(ctx, 0x00410/4, 0x00000111);
353 INSTANCE_WR(ctx, 0x00414/4, 0x00000111);
354 INSTANCE_WR(ctx, 0x00418/4, 0x00000111);
355 INSTANCE_WR(ctx, 0x004b0/4, 0x00000111);
356 INSTANCE_WR(ctx, 0x004b4/4, 0x00080060);
357 INSTANCE_WR(ctx, 0x004d0/4, 0x00000080);
358 INSTANCE_WR(ctx, 0x004d4/4, 0xffff0000);
359 INSTANCE_WR(ctx, 0x004d8/4, 0x00000001);
360 INSTANCE_WR(ctx, 0x004ec/4, 0x46400000);
361 INSTANCE_WR(ctx, 0x004fc/4, 0xffff0000);
362 INSTANCE_WR(ctx, 0x00500/4, 0x88888888);
363 INSTANCE_WR(ctx, 0x00504/4, 0x88888888);
364 INSTANCE_WR(ctx, 0x00508/4, 0x88888888);
365 INSTANCE_WR(ctx, 0x0050c/4, 0x88888888);
366 INSTANCE_WR(ctx, 0x00510/4, 0x88888888);
367 INSTANCE_WR(ctx, 0x00514/4, 0x88888888);
368 INSTANCE_WR(ctx, 0x00518/4, 0x88888888);
369 INSTANCE_WR(ctx, 0x0051c/4, 0x88888888);
370 INSTANCE_WR(ctx, 0x00520/4, 0x88888888);
371 INSTANCE_WR(ctx, 0x00524/4, 0x88888888);
372 INSTANCE_WR(ctx, 0x00528/4, 0x88888888);
373 INSTANCE_WR(ctx, 0x0052c/4, 0x88888888);
374 INSTANCE_WR(ctx, 0x00530/4, 0x88888888);
375 INSTANCE_WR(ctx, 0x00534/4, 0x88888888);
376 INSTANCE_WR(ctx, 0x00538/4, 0x88888888);
377 INSTANCE_WR(ctx, 0x0053c/4, 0x88888888);
378 INSTANCE_WR(ctx, 0x00550/4, 0x0fff0000);
379 INSTANCE_WR(ctx, 0x00554/4, 0x0fff0000);
380 INSTANCE_WR(ctx, 0x0055c/4, 0x00011100);
381 for (i=0x00578; i<0x005b4; i+=4)
382 INSTANCE_WR(ctx, i/4, 0x07ff0000);
383 INSTANCE_WR(ctx, 0x005c0/4, 0x4b7fffff);
384 INSTANCE_WR(ctx, 0x005e8/4, 0x30201000);
385 INSTANCE_WR(ctx, 0x005ec/4, 0x70605040);
386 INSTANCE_WR(ctx, 0x005f0/4, 0xb8a89888);
387 INSTANCE_WR(ctx, 0x005f4/4, 0xf8e8d8c8);
388 INSTANCE_WR(ctx, 0x00608/4, 0x40100000);
389 INSTANCE_WR(ctx, 0x00624/4, 0x0000ffff);
390 INSTANCE_WR(ctx, 0x00658/4, 0x435185d6);
391 INSTANCE_WR(ctx, 0x0065c/4, 0x2155b699);
392 INSTANCE_WR(ctx, 0x00660/4, 0xfedcba98);
393 INSTANCE_WR(ctx, 0x00664/4, 0x00000098);
394 INSTANCE_WR(ctx, 0x00674/4, 0xffffffff);
395 INSTANCE_WR(ctx, 0x00678/4, 0x00ff7000);
396 INSTANCE_WR(ctx, 0x0067c/4, 0x0000ffff);
397 INSTANCE_WR(ctx, 0x0068c/4, 0x00ff0000);
398 INSTANCE_WR(ctx, 0x006c8/4, 0x00ffff00);
399 for (i=0x0070c; i<=0x00748; i+=4)
400 INSTANCE_WR(ctx, i/4, 0x00018488);
401 for (i=0x0074c; i<=0x00788; i+=4)
402 INSTANCE_WR(ctx, i/4, 0x00028202);
403 for (i=0x007cc; i<=0x00808; i+=4)
404 INSTANCE_WR(ctx, i/4, 0x0000aae4);
405 for (i=0x0080c; i<=0x00848; i+=4)
406 INSTANCE_WR(ctx, i/4, 0x01012000);
407 for (i=0x0084c; i<=0x00888; i+=4)
408 INSTANCE_WR(ctx, i/4, 0x00080008);
409 for (i=0x008cc; i<=0x00908; i+=4)
410 INSTANCE_WR(ctx, i/4, 0x00100008);
411 for (i=0x0095c; i<=0x00968; i+=4)
412 INSTANCE_WR(ctx, i/4, 0x0001bc80);
413 for (i=0x0096c; i<=0x00978; i+=4)
414 INSTANCE_WR(ctx, i/4, 0x00000202);
415 for (i=0x0098c; i<=0x00998; i+=4)
416 INSTANCE_WR(ctx, i/4, 0x00000008);
417 for (i=0x009ac; i<=0x009b8; i+=4)
418 INSTANCE_WR(ctx, i/4, 0x00080008);
419 INSTANCE_WR(ctx, 0x009cc/4, 0x00000002);
420 INSTANCE_WR(ctx, 0x00a00/4, 0x00000421);
421 INSTANCE_WR(ctx, 0x00a04/4, 0x030c30c3);
422 INSTANCE_WR(ctx, 0x00a08/4, 0x00011001);
423 INSTANCE_WR(ctx, 0x00a14/4, 0x3e020200);
424 INSTANCE_WR(ctx, 0x00a18/4, 0x00ffffff);
425 INSTANCE_WR(ctx, 0x00a1c/4, 0x0c103f00);
426 INSTANCE_WR(ctx, 0x00a28/4, 0x00040000);
427 INSTANCE_WR(ctx, 0x00a60/4, 0x00008100);
428 INSTANCE_WR(ctx, 0x00aec/4, 0x00000001);
429 INSTANCE_WR(ctx, 0x00b30/4, 0x00001001);
430 INSTANCE_WR(ctx, 0x00b38/4, 0x00000003);
431 INSTANCE_WR(ctx, 0x00b3c/4, 0x00888001);
432 INSTANCE_WR(ctx, 0x00bc0/4, 0x00000005);
433 INSTANCE_WR(ctx, 0x00bcc/4, 0x0000ffff);
434 INSTANCE_WR(ctx, 0x00be8/4, 0x00005555);
435 INSTANCE_WR(ctx, 0x00bec/4, 0x00005555);
436 INSTANCE_WR(ctx, 0x00bf0/4, 0x00005555);
437 INSTANCE_WR(ctx, 0x00bf4/4, 0x00000001);
438 INSTANCE_WR(ctx, 0x00c2c/4, 0x00000001);
439 INSTANCE_WR(ctx, 0x00c30/4, 0x08e00001);
440 INSTANCE_WR(ctx, 0x00c34/4, 0x000e3000);
441 for (i=0x017f8; i<=0x01870; i+=8)
442 INSTANCE_WR(ctx, i/4, 0x3f800000);
443 for (i=0x035b8; i<=0x057a8; i+=24)
444 INSTANCE_WR(ctx, i/4, 0x00000001);
445 for (i=0x057b8; i<=0x05ba8; i+=16)
446 INSTANCE_WR(ctx, i/4, 0x3f800000);
447 for (i=0x07f38; i<=0x0a128; i+=24)
448 INSTANCE_WR(ctx, i/4, 0x00000001);
449 for (i=0x0a138; i<=0x0a528; i+=16)
450 INSTANCE_WR(ctx, i/4, 0x3f800000);
451 for (i=0x0c8b8; i<=0x0eaa8; i+=24)
452 INSTANCE_WR(ctx, i/4, 0x00000001);
453 for (i=0x0eab8; i<=0x0eea8; i+=16)
454 INSTANCE_WR(ctx, i/4, 0x3f800000);
458 nv49_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
460 struct drm_nouveau_private *dev_priv = dev->dev_private;
463 INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
464 INSTANCE_WR(ctx, 0x00004/4, 0x0000c040);
465 INSTANCE_WR(ctx, 0x00008/4, 0x0000c040);
466 INSTANCE_WR(ctx, 0x0000c/4, 0x0000c040);
467 INSTANCE_WR(ctx, 0x00010/4, 0x0000c040);
468 INSTANCE_WR(ctx, 0x00014/4, 0x0000c040);
469 INSTANCE_WR(ctx, 0x00018/4, 0x0000c040);
470 INSTANCE_WR(ctx, 0x0001c/4, 0x0000c040);
471 INSTANCE_WR(ctx, 0x00020/4, 0x0000c040);
472 INSTANCE_WR(ctx, 0x000c4/4, 0x0000ffff);
473 INSTANCE_WR(ctx, 0x000c8/4, 0x0000ffff);
474 INSTANCE_WR(ctx, 0x000d0/4, 0x00000001);
475 INSTANCE_WR(ctx, 0x001bc/4, 0x20010001);
476 INSTANCE_WR(ctx, 0x001c0/4, 0x0f73ef00);
477 INSTANCE_WR(ctx, 0x001c8/4, 0x02008821);
478 INSTANCE_WR(ctx, 0x00218/4, 0x00000040);
479 INSTANCE_WR(ctx, 0x0021c/4, 0x00000040);
480 INSTANCE_WR(ctx, 0x00220/4, 0x00000040);
481 INSTANCE_WR(ctx, 0x00228/4, 0x00000040);
482 INSTANCE_WR(ctx, 0x00234/4, 0x80000000);
483 INSTANCE_WR(ctx, 0x00238/4, 0x80000000);
484 INSTANCE_WR(ctx, 0x0023c/4, 0x80000000);
485 INSTANCE_WR(ctx, 0x00240/4, 0x80000000);
486 INSTANCE_WR(ctx, 0x00244/4, 0x80000000);
487 INSTANCE_WR(ctx, 0x00248/4, 0x80000000);
488 INSTANCE_WR(ctx, 0x0024c/4, 0x80000000);
489 INSTANCE_WR(ctx, 0x00250/4, 0x80000000);
490 INSTANCE_WR(ctx, 0x00270/4, 0x0b0b0b0c);
491 INSTANCE_WR(ctx, 0x003e0/4, 0x00040000);
492 INSTANCE_WR(ctx, 0x003f0/4, 0x55555555);
493 INSTANCE_WR(ctx, 0x003f4/4, 0x55555555);
494 INSTANCE_WR(ctx, 0x003f8/4, 0x55555555);
495 INSTANCE_WR(ctx, 0x003fc/4, 0x55555555);
496 INSTANCE_WR(ctx, 0x00428/4, 0x00000008);
497 INSTANCE_WR(ctx, 0x0043c/4, 0x00001010);
498 INSTANCE_WR(ctx, 0x00460/4, 0x00000111);
499 INSTANCE_WR(ctx, 0x00464/4, 0x00000111);
500 INSTANCE_WR(ctx, 0x00468/4, 0x00000111);
501 INSTANCE_WR(ctx, 0x0046c/4, 0x00000111);
502 INSTANCE_WR(ctx, 0x00470/4, 0x00000111);
503 INSTANCE_WR(ctx, 0x00474/4, 0x00000111);
504 INSTANCE_WR(ctx, 0x00478/4, 0x00000111);
505 INSTANCE_WR(ctx, 0x0047c/4, 0x00000111);
506 INSTANCE_WR(ctx, 0x00480/4, 0x00000111);
507 INSTANCE_WR(ctx, 0x00484/4, 0x00000111);
508 INSTANCE_WR(ctx, 0x00488/4, 0x00000111);
509 INSTANCE_WR(ctx, 0x0048c/4, 0x00000111);
510 INSTANCE_WR(ctx, 0x00490/4, 0x00000111);
511 INSTANCE_WR(ctx, 0x00494/4, 0x00000111);
512 INSTANCE_WR(ctx, 0x00498/4, 0x00000111);
513 INSTANCE_WR(ctx, 0x0049c/4, 0x00000111);
514 INSTANCE_WR(ctx, 0x004f4/4, 0x00000111);
515 INSTANCE_WR(ctx, 0x004f8/4, 0x00080060);
516 INSTANCE_WR(ctx, 0x00514/4, 0x00000080);
517 INSTANCE_WR(ctx, 0x00518/4, 0xffff0000);
518 INSTANCE_WR(ctx, 0x0051c/4, 0x00000001);
519 INSTANCE_WR(ctx, 0x00530/4, 0x46400000);
520 INSTANCE_WR(ctx, 0x00540/4, 0xffff0000);
521 INSTANCE_WR(ctx, 0x00544/4, 0x88888888);
522 INSTANCE_WR(ctx, 0x00548/4, 0x88888888);
523 INSTANCE_WR(ctx, 0x0054c/4, 0x88888888);
524 INSTANCE_WR(ctx, 0x00550/4, 0x88888888);
525 INSTANCE_WR(ctx, 0x00554/4, 0x88888888);
526 INSTANCE_WR(ctx, 0x00558/4, 0x88888888);
527 INSTANCE_WR(ctx, 0x0055c/4, 0x88888888);
528 INSTANCE_WR(ctx, 0x00560/4, 0x88888888);
529 INSTANCE_WR(ctx, 0x00564/4, 0x88888888);
530 INSTANCE_WR(ctx, 0x00568/4, 0x88888888);
531 INSTANCE_WR(ctx, 0x0056c/4, 0x88888888);
532 INSTANCE_WR(ctx, 0x00570/4, 0x88888888);
533 INSTANCE_WR(ctx, 0x00574/4, 0x88888888);
534 INSTANCE_WR(ctx, 0x00578/4, 0x88888888);
535 INSTANCE_WR(ctx, 0x0057c/4, 0x88888888);
536 INSTANCE_WR(ctx, 0x00580/4, 0x88888888);
537 INSTANCE_WR(ctx, 0x00594/4, 0x0fff0000);
538 INSTANCE_WR(ctx, 0x00598/4, 0x0fff0000);
539 INSTANCE_WR(ctx, 0x005a0/4, 0x00011100);
540 INSTANCE_WR(ctx, 0x005bc/4, 0x07ff0000);
541 INSTANCE_WR(ctx, 0x005c0/4, 0x07ff0000);
542 INSTANCE_WR(ctx, 0x005c4/4, 0x07ff0000);
543 INSTANCE_WR(ctx, 0x005c8/4, 0x07ff0000);
544 INSTANCE_WR(ctx, 0x005cc/4, 0x07ff0000);
545 INSTANCE_WR(ctx, 0x005d0/4, 0x07ff0000);
546 INSTANCE_WR(ctx, 0x005d4/4, 0x07ff0000);
547 INSTANCE_WR(ctx, 0x005d8/4, 0x07ff0000);
548 INSTANCE_WR(ctx, 0x005dc/4, 0x07ff0000);
549 INSTANCE_WR(ctx, 0x005e0/4, 0x07ff0000);
550 INSTANCE_WR(ctx, 0x005e4/4, 0x07ff0000);
551 INSTANCE_WR(ctx, 0x005e8/4, 0x07ff0000);
552 INSTANCE_WR(ctx, 0x005ec/4, 0x07ff0000);
553 INSTANCE_WR(ctx, 0x005f0/4, 0x07ff0000);
554 INSTANCE_WR(ctx, 0x005f4/4, 0x07ff0000);
555 INSTANCE_WR(ctx, 0x005f8/4, 0x07ff0000);
556 INSTANCE_WR(ctx, 0x00604/4, 0x4b7fffff);
557 INSTANCE_WR(ctx, 0x0062c/4, 0x30201000);
558 INSTANCE_WR(ctx, 0x00630/4, 0x70605040);
559 INSTANCE_WR(ctx, 0x00634/4, 0xb8a89888);
560 INSTANCE_WR(ctx, 0x00638/4, 0xf8e8d8c8);
561 INSTANCE_WR(ctx, 0x0064c/4, 0x40100000);
562 INSTANCE_WR(ctx, 0x00668/4, 0x0000ffff);
563 INSTANCE_WR(ctx, 0x0069c/4, 0x435185d6);
564 INSTANCE_WR(ctx, 0x006a0/4, 0x2155b699);
565 INSTANCE_WR(ctx, 0x006a4/4, 0xfedcba98);
566 INSTANCE_WR(ctx, 0x006a8/4, 0x00000098);
567 INSTANCE_WR(ctx, 0x006b8/4, 0xffffffff);
568 INSTANCE_WR(ctx, 0x006bc/4, 0x00ff7000);
569 INSTANCE_WR(ctx, 0x006c0/4, 0x0000ffff);
570 INSTANCE_WR(ctx, 0x006d0/4, 0x00ff0000);
571 INSTANCE_WR(ctx, 0x0070c/4, 0x00ffff00);
572 for (i=0x00750; i<=0x0078c; i+=4)
573 INSTANCE_WR(ctx, i/4, 0x00018488);
574 for (i=0x00790; i<=0x007cc; i+=4)
575 INSTANCE_WR(ctx, i/4, 0x00028202);
576 for (i=0x00810; i<=0x0084c; i+=4)
577 INSTANCE_WR(ctx, i/4, 0x0000aae4);
578 for (i=0x00850; i<=0x0088c; i+=4)
579 INSTANCE_WR(ctx, i/4, 0x01012000);
580 for (i=0x00890; i<=0x008cc; i+=4)
581 INSTANCE_WR(ctx, i/4, 0x00080008);
582 for (i=0x00910; i<=0x0094c; i+=4)
583 INSTANCE_WR(ctx, i/4, 0x00100008);
584 for (i=0x009a0; i<=0x009ac; i+=4)
585 INSTANCE_WR(ctx, i/4, 0x0001bc80);
586 for (i=0x009b0; i<=0x009bc; i+=4)
587 INSTANCE_WR(ctx, i/4, 0x00000202);
588 for (i=0x009d0; i<=0x009dc; i+=4)
589 INSTANCE_WR(ctx, i/4, 0x00000008);
590 for (i=0x009f0; i<=0x009fc; i+=4)
591 INSTANCE_WR(ctx, i/4, 0x00080008);
592 INSTANCE_WR(ctx, 0x00a10/4, 0x00000002);
593 INSTANCE_WR(ctx, 0x00a44/4, 0x00000421);
594 INSTANCE_WR(ctx, 0x00a48/4, 0x030c30c3);
595 INSTANCE_WR(ctx, 0x00a54/4, 0x3e020200);
596 INSTANCE_WR(ctx, 0x00a58/4, 0x00ffffff);
597 INSTANCE_WR(ctx, 0x00a5c/4, 0x20103f00);
598 INSTANCE_WR(ctx, 0x00a68/4, 0x00040000);
599 INSTANCE_WR(ctx, 0x00aa0/4, 0x00008100);
600 INSTANCE_WR(ctx, 0x00b2c/4, 0x00000001);
601 INSTANCE_WR(ctx, 0x00b70/4, 0x00001001);
602 INSTANCE_WR(ctx, 0x00b7c/4, 0x00000003);
603 INSTANCE_WR(ctx, 0x00b80/4, 0x00888001);
604 INSTANCE_WR(ctx, 0x00bb0/4, 0xffffffff);
605 INSTANCE_WR(ctx, 0x00bb4/4, 0xffffffff);
606 INSTANCE_WR(ctx, 0x00bb8/4, 0xffffffff);
607 INSTANCE_WR(ctx, 0x00bbc/4, 0xffffffff);
608 INSTANCE_WR(ctx, 0x00bc0/4, 0xffffffff);
609 INSTANCE_WR(ctx, 0x00bc4/4, 0xffffffff);
610 INSTANCE_WR(ctx, 0x00bc8/4, 0xffffffff);
611 INSTANCE_WR(ctx, 0x00bcc/4, 0xffffffff);
612 INSTANCE_WR(ctx, 0x00bd0/4, 0xffffffff);
613 INSTANCE_WR(ctx, 0x00bd4/4, 0xffffffff);
614 INSTANCE_WR(ctx, 0x00bd8/4, 0xffffffff);
615 INSTANCE_WR(ctx, 0x00bdc/4, 0xffffffff);
616 INSTANCE_WR(ctx, 0x00be0/4, 0xffffffff);
617 INSTANCE_WR(ctx, 0x00be4/4, 0xffffffff);
618 INSTANCE_WR(ctx, 0x00be8/4, 0xffffffff);
619 INSTANCE_WR(ctx, 0x00bec/4, 0xffffffff);
620 INSTANCE_WR(ctx, 0x00bf0/4, 0xffffffff);
621 INSTANCE_WR(ctx, 0x00bf4/4, 0xffffffff);
622 INSTANCE_WR(ctx, 0x00bf8/4, 0xffffffff);
623 INSTANCE_WR(ctx, 0x00bfc/4, 0xffffffff);
624 INSTANCE_WR(ctx, 0x00c00/4, 0xffffffff);
625 INSTANCE_WR(ctx, 0x00c04/4, 0xffffffff);
626 INSTANCE_WR(ctx, 0x00c08/4, 0xffffffff);
627 INSTANCE_WR(ctx, 0x00c0c/4, 0xffffffff);
628 INSTANCE_WR(ctx, 0x00c10/4, 0xffffffff);
629 INSTANCE_WR(ctx, 0x00c14/4, 0xffffffff);
630 INSTANCE_WR(ctx, 0x00c18/4, 0xffffffff);
631 INSTANCE_WR(ctx, 0x00c1c/4, 0xffffffff);
632 INSTANCE_WR(ctx, 0x00c20/4, 0xffffffff);
633 INSTANCE_WR(ctx, 0x00c24/4, 0xffffffff);
634 INSTANCE_WR(ctx, 0x00c28/4, 0xffffffff);
635 INSTANCE_WR(ctx, 0x00c2c/4, 0xffffffff);
636 INSTANCE_WR(ctx, 0x00c54/4, 0x00000005);
637 INSTANCE_WR(ctx, 0x00c60/4, 0x0000ffff);
638 INSTANCE_WR(ctx, 0x00c7c/4, 0x00005555);
639 INSTANCE_WR(ctx, 0x00c80/4, 0x00005555);
640 INSTANCE_WR(ctx, 0x00c84/4, 0x00005555);
641 INSTANCE_WR(ctx, 0x00c88/4, 0x00005555);
642 INSTANCE_WR(ctx, 0x00c8c/4, 0x00005555);
643 INSTANCE_WR(ctx, 0x00c90/4, 0x00005555);
644 INSTANCE_WR(ctx, 0x00c94/4, 0x00005555);
645 INSTANCE_WR(ctx, 0x00c98/4, 0x00005555);
646 INSTANCE_WR(ctx, 0x00c9c/4, 0x00000001);
647 INSTANCE_WR(ctx, 0x00cd4/4, 0x00000001);
648 INSTANCE_WR(ctx, 0x00cd8/4, 0x08e00001);
649 INSTANCE_WR(ctx, 0x00cdc/4, 0x000e3000);
650 for(i=0x030a0; i<=0x03118; i+=8)
651 INSTANCE_WR(ctx, i/4, 0x3f800000);
652 for(i=0x098a0; i<=0x0ba90; i+=24)
653 INSTANCE_WR(ctx, i/4, 0x00000001);
654 for(i=0x0baa0; i<=0x0be90; i+=16)
655 INSTANCE_WR(ctx, i/4, 0x3f800000);
656 for(i=0x0e2e0; i<=0x0fff0; i+=24)
657 INSTANCE_WR(ctx, i/4, 0x00000001);
658 for(i=0x10008; i<=0x104d0; i+=24)
659 INSTANCE_WR(ctx, i/4, 0x00000001);
660 for(i=0x104e0; i<=0x108d0; i+=16)
661 INSTANCE_WR(ctx, i/4, 0x3f800000);
662 for(i=0x12d20; i<=0x14f10; i+=24)
663 INSTANCE_WR(ctx, i/4, 0x00000001);
664 for(i=0x14f20; i<=0x15310; i+=16)
665 INSTANCE_WR(ctx, i/4, 0x3f800000);
666 for(i=0x17760; i<=0x19950; i+=24)
667 INSTANCE_WR(ctx, i/4, 0x00000001);
668 for(i=0x19960; i<=0x19d50; i+=16)
669 INSTANCE_WR(ctx, i/4, 0x3f800000);
670 for(i=0x1c1a0; i<=0x1e390; i+=24)
671 INSTANCE_WR(ctx, i/4, 0x00000001);
672 for(i=0x1e3a0; i<=0x1e790; i+=16)
673 INSTANCE_WR(ctx, i/4, 0x3f800000);
674 for(i=0x20be0; i<=0x22dd0; i+=24)
675 INSTANCE_WR(ctx, i/4, 0x00000001);
676 for(i=0x22de0; i<=0x231d0; i+=16)
677 INSTANCE_WR(ctx, i/4, 0x3f800000);
681 nv4a_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
683 struct drm_nouveau_private *dev_priv = dev->dev_private;
686 INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
687 INSTANCE_WR(ctx, 0x00024/4, 0x0000ffff);
688 INSTANCE_WR(ctx, 0x00028/4, 0x0000ffff);
689 INSTANCE_WR(ctx, 0x00030/4, 0x00000001);
690 INSTANCE_WR(ctx, 0x0011c/4, 0x20010001);
691 INSTANCE_WR(ctx, 0x00120/4, 0x0f73ef00);
692 INSTANCE_WR(ctx, 0x00128/4, 0x02008821);
693 INSTANCE_WR(ctx, 0x00158/4, 0x00000001);
694 INSTANCE_WR(ctx, 0x0015c/4, 0x00000001);
695 INSTANCE_WR(ctx, 0x00160/4, 0x00000001);
696 INSTANCE_WR(ctx, 0x00164/4, 0x00000001);
697 INSTANCE_WR(ctx, 0x00168/4, 0x00000001);
698 INSTANCE_WR(ctx, 0x0016c/4, 0x00000001);
699 INSTANCE_WR(ctx, 0x00170/4, 0x00000001);
700 INSTANCE_WR(ctx, 0x00174/4, 0x00000001);
701 INSTANCE_WR(ctx, 0x00178/4, 0x00000040);
702 INSTANCE_WR(ctx, 0x0017c/4, 0x00000040);
703 INSTANCE_WR(ctx, 0x00180/4, 0x00000040);
704 INSTANCE_WR(ctx, 0x00188/4, 0x00000040);
705 INSTANCE_WR(ctx, 0x001d0/4, 0x0b0b0b0c);
706 INSTANCE_WR(ctx, 0x00340/4, 0x00040000);
707 INSTANCE_WR(ctx, 0x00350/4, 0x55555555);
708 INSTANCE_WR(ctx, 0x00354/4, 0x55555555);
709 INSTANCE_WR(ctx, 0x00358/4, 0x55555555);
710 INSTANCE_WR(ctx, 0x0035c/4, 0x55555555);
711 INSTANCE_WR(ctx, 0x00388/4, 0x00000008);
712 INSTANCE_WR(ctx, 0x0039c/4, 0x00003010);
713 INSTANCE_WR(ctx, 0x003cc/4, 0x00000111);
714 INSTANCE_WR(ctx, 0x003d0/4, 0x00080060);
715 INSTANCE_WR(ctx, 0x003ec/4, 0x00000080);
716 INSTANCE_WR(ctx, 0x003f0/4, 0xffff0000);
717 INSTANCE_WR(ctx, 0x003f4/4, 0x00000001);
718 INSTANCE_WR(ctx, 0x00408/4, 0x46400000);
719 INSTANCE_WR(ctx, 0x00418/4, 0xffff0000);
720 INSTANCE_WR(ctx, 0x00424/4, 0x0fff0000);
721 INSTANCE_WR(ctx, 0x00428/4, 0x0fff0000);
722 INSTANCE_WR(ctx, 0x00430/4, 0x00011100);
723 for (i=0x0044c; i<=0x00488; i+=4)
724 INSTANCE_WR(ctx, i/4, 0x07ff0000);
725 INSTANCE_WR(ctx, 0x00494/4, 0x4b7fffff);
726 INSTANCE_WR(ctx, 0x004bc/4, 0x30201000);
727 INSTANCE_WR(ctx, 0x004c0/4, 0x70605040);
728 INSTANCE_WR(ctx, 0x004c4/4, 0xb8a89888);
729 INSTANCE_WR(ctx, 0x004c8/4, 0xf8e8d8c8);
730 INSTANCE_WR(ctx, 0x004dc/4, 0x40100000);
731 INSTANCE_WR(ctx, 0x004f8/4, 0x0000ffff);
732 INSTANCE_WR(ctx, 0x0052c/4, 0x435185d6);
733 INSTANCE_WR(ctx, 0x00530/4, 0x2155b699);
734 INSTANCE_WR(ctx, 0x00534/4, 0xfedcba98);
735 INSTANCE_WR(ctx, 0x00538/4, 0x00000098);
736 INSTANCE_WR(ctx, 0x00548/4, 0xffffffff);
737 INSTANCE_WR(ctx, 0x0054c/4, 0x00ff7000);
738 INSTANCE_WR(ctx, 0x00550/4, 0x0000ffff);
739 INSTANCE_WR(ctx, 0x0055c/4, 0x00ff0000);
740 INSTANCE_WR(ctx, 0x00594/4, 0x00ffff00);
741 for (i=0x005d8; i<=0x00614; i+=4)
742 INSTANCE_WR(ctx, i/4, 0x00018488);
743 for (i=0x00618; i<=0x00654; i+=4)
744 INSTANCE_WR(ctx, i/4, 0x00028202);
745 for (i=0x00698; i<=0x006d4; i+=4)
746 INSTANCE_WR(ctx, i/4, 0x0000aae4);
747 for (i=0x006d8; i<=0x00714; i+=4)
748 INSTANCE_WR(ctx, i/4, 0x01012000);
749 for (i=0x00718; i<=0x00754; i+=4)
750 INSTANCE_WR(ctx, i/4, 0x00080008);
751 for (i=0x00798; i<=0x007d4; i+=4)
752 INSTANCE_WR(ctx, i/4, 0x00100008);
753 for (i=0x00828; i<=0x00834; i+=4)
754 INSTANCE_WR(ctx, i/4, 0x0001bc80);
755 for (i=0x00838; i<=0x00844; i+=4)
756 INSTANCE_WR(ctx, i/4, 0x00000202);
757 for (i=0x00858; i<=0x00864; i+=4)
758 INSTANCE_WR(ctx, i/4, 0x00000008);
759 for (i=0x00878; i<=0x00884; i+=4)
760 INSTANCE_WR(ctx, i/4, 0x00080008);
761 INSTANCE_WR(ctx, 0x00898/4, 0x00000002);
762 INSTANCE_WR(ctx, 0x008cc/4, 0x00000021);
763 INSTANCE_WR(ctx, 0x008d0/4, 0x030c30c3);
764 INSTANCE_WR(ctx, 0x008d4/4, 0x00011001);
765 INSTANCE_WR(ctx, 0x008e0/4, 0x3e020200);
766 INSTANCE_WR(ctx, 0x008e4/4, 0x00ffffff);
767 INSTANCE_WR(ctx, 0x008e8/4, 0x0c103f00);
768 INSTANCE_WR(ctx, 0x008f4/4, 0x00040000);
769 INSTANCE_WR(ctx, 0x0092c/4, 0x00008100);
770 INSTANCE_WR(ctx, 0x009b8/4, 0x00000001);
771 INSTANCE_WR(ctx, 0x009fc/4, 0x00001001);
772 INSTANCE_WR(ctx, 0x00a04/4, 0x00000003);
773 INSTANCE_WR(ctx, 0x00a08/4, 0x00888001);
774 INSTANCE_WR(ctx, 0x00a8c/4, 0x00000005);
775 INSTANCE_WR(ctx, 0x00a98/4, 0x0000ffff);
776 INSTANCE_WR(ctx, 0x00ab4/4, 0x00005555);
777 INSTANCE_WR(ctx, 0x00ab8/4, 0x00005555);
778 INSTANCE_WR(ctx, 0x00abc/4, 0x00005555);
779 INSTANCE_WR(ctx, 0x00ac0/4, 0x00000001);
780 INSTANCE_WR(ctx, 0x00af8/4, 0x00000001);
781 for (i=0x016c0; i<=0x01738; i+=8)
782 INSTANCE_WR(ctx, i/4, 0x3f800000);
783 for (i=0x03840; i<=0x05670; i+=24)
784 INSTANCE_WR(ctx, i/4, 0x00000001);
785 for (i=0x05680; i<=0x05a70; i+=16)
786 INSTANCE_WR(ctx, i/4, 0x3f800000);
787 for (i=0x07e00; i<=0x09ff0; i+=24)
788 INSTANCE_WR(ctx, i/4, 0x00000001);
789 for (i=0x0a000; i<=0x0a3f0; i+=16)
790 INSTANCE_WR(ctx, i/4, 0x3f800000);
791 for (i=0x0c780; i<=0x0e970; i+=24)
792 INSTANCE_WR(ctx, i/4, 0x00000001);
793 for (i=0x0e980; i<=0x0ed70; i+=16)
794 INSTANCE_WR(ctx, i/4, 0x3f800000);
798 nv4b_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
800 struct drm_nouveau_private *dev_priv = dev->dev_private;
803 INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
804 INSTANCE_WR(ctx, 0x00004/4, 0x0000c040);
805 INSTANCE_WR(ctx, 0x00008/4, 0x0000c040);
806 INSTANCE_WR(ctx, 0x0000c/4, 0x0000c040);
807 INSTANCE_WR(ctx, 0x00010/4, 0x0000c040);
808 INSTANCE_WR(ctx, 0x00014/4, 0x0000c040);
809 INSTANCE_WR(ctx, 0x00018/4, 0x0000c040);
810 INSTANCE_WR(ctx, 0x0001c/4, 0x0000c040);
811 INSTANCE_WR(ctx, 0x00020/4, 0x0000c040);
812 INSTANCE_WR(ctx, 0x000c4/4, 0x0000ffff);
813 INSTANCE_WR(ctx, 0x000c8/4, 0x0000ffff);
814 INSTANCE_WR(ctx, 0x000d0/4, 0x00000001);
815 INSTANCE_WR(ctx, 0x001bc/4, 0x20010001);
816 INSTANCE_WR(ctx, 0x001c0/4, 0x0f73ef00);
817 INSTANCE_WR(ctx, 0x001c8/4, 0x02008821);
818 INSTANCE_WR(ctx, 0x00218/4, 0x00000040);
819 INSTANCE_WR(ctx, 0x0021c/4, 0x00000040);
820 INSTANCE_WR(ctx, 0x00220/4, 0x00000040);
821 INSTANCE_WR(ctx, 0x00228/4, 0x00000040);
822 INSTANCE_WR(ctx, 0x00234/4, 0x80000000);
823 INSTANCE_WR(ctx, 0x00238/4, 0x80000000);
824 INSTANCE_WR(ctx, 0x0023c/4, 0x80000000);
825 INSTANCE_WR(ctx, 0x00240/4, 0x80000000);
826 INSTANCE_WR(ctx, 0x00244/4, 0x80000000);
827 INSTANCE_WR(ctx, 0x00248/4, 0x80000000);
828 INSTANCE_WR(ctx, 0x0024c/4, 0x80000000);
829 INSTANCE_WR(ctx, 0x00250/4, 0x80000000);
830 INSTANCE_WR(ctx, 0x00270/4, 0x0b0b0b0c);
831 INSTANCE_WR(ctx, 0x003e0/4, 0x00040000);
832 INSTANCE_WR(ctx, 0x003f0/4, 0x55555555);
833 INSTANCE_WR(ctx, 0x003f4/4, 0x55555555);
834 INSTANCE_WR(ctx, 0x003f8/4, 0x55555555);
835 INSTANCE_WR(ctx, 0x003fc/4, 0x55555555);
836 INSTANCE_WR(ctx, 0x00428/4, 0x00000008);
837 INSTANCE_WR(ctx, 0x0043c/4, 0x00001010);
838 INSTANCE_WR(ctx, 0x00460/4, 0x00000111);
839 INSTANCE_WR(ctx, 0x00464/4, 0x00000111);
840 INSTANCE_WR(ctx, 0x00468/4, 0x00000111);
841 INSTANCE_WR(ctx, 0x0046c/4, 0x00000111);
842 INSTANCE_WR(ctx, 0x00470/4, 0x00000111);
843 INSTANCE_WR(ctx, 0x00474/4, 0x00000111);
844 INSTANCE_WR(ctx, 0x00478/4, 0x00000111);
845 INSTANCE_WR(ctx, 0x0047c/4, 0x00000111);
846 INSTANCE_WR(ctx, 0x00480/4, 0x00000111);
847 INSTANCE_WR(ctx, 0x00484/4, 0x00000111);
848 INSTANCE_WR(ctx, 0x00488/4, 0x00000111);
849 INSTANCE_WR(ctx, 0x0048c/4, 0x00000111);
850 INSTANCE_WR(ctx, 0x00490/4, 0x00000111);
851 INSTANCE_WR(ctx, 0x00494/4, 0x00000111);
852 INSTANCE_WR(ctx, 0x00498/4, 0x00000111);
853 INSTANCE_WR(ctx, 0x0049c/4, 0x00000111);
854 INSTANCE_WR(ctx, 0x004f4/4, 0x00000111);
855 INSTANCE_WR(ctx, 0x004f8/4, 0x00080060);
856 INSTANCE_WR(ctx, 0x00514/4, 0x00000080);
857 INSTANCE_WR(ctx, 0x00518/4, 0xffff0000);
858 INSTANCE_WR(ctx, 0x0051c/4, 0x00000001);
859 INSTANCE_WR(ctx, 0x00530/4, 0x46400000);
860 INSTANCE_WR(ctx, 0x00540/4, 0xffff0000);
861 INSTANCE_WR(ctx, 0x00544/4, 0x88888888);
862 INSTANCE_WR(ctx, 0x00548/4, 0x88888888);
863 INSTANCE_WR(ctx, 0x0054c/4, 0x88888888);
864 INSTANCE_WR(ctx, 0x00550/4, 0x88888888);
865 INSTANCE_WR(ctx, 0x00554/4, 0x88888888);
866 INSTANCE_WR(ctx, 0x00558/4, 0x88888888);
867 INSTANCE_WR(ctx, 0x0055c/4, 0x88888888);
868 INSTANCE_WR(ctx, 0x00560/4, 0x88888888);
869 INSTANCE_WR(ctx, 0x00564/4, 0x88888888);
870 INSTANCE_WR(ctx, 0x00568/4, 0x88888888);
871 INSTANCE_WR(ctx, 0x0056c/4, 0x88888888);
872 INSTANCE_WR(ctx, 0x00570/4, 0x88888888);
873 INSTANCE_WR(ctx, 0x00574/4, 0x88888888);
874 INSTANCE_WR(ctx, 0x00578/4, 0x88888888);
875 INSTANCE_WR(ctx, 0x0057c/4, 0x88888888);
876 INSTANCE_WR(ctx, 0x00580/4, 0x88888888);
877 INSTANCE_WR(ctx, 0x00594/4, 0x0fff0000);
878 INSTANCE_WR(ctx, 0x00598/4, 0x0fff0000);
879 INSTANCE_WR(ctx, 0x005a0/4, 0x00011100);
880 INSTANCE_WR(ctx, 0x005bc/4, 0x07ff0000);
881 INSTANCE_WR(ctx, 0x005c0/4, 0x07ff0000);
882 INSTANCE_WR(ctx, 0x005c4/4, 0x07ff0000);
883 INSTANCE_WR(ctx, 0x005c8/4, 0x07ff0000);
884 INSTANCE_WR(ctx, 0x005cc/4, 0x07ff0000);
885 INSTANCE_WR(ctx, 0x005d0/4, 0x07ff0000);
886 INSTANCE_WR(ctx, 0x005d4/4, 0x07ff0000);
887 INSTANCE_WR(ctx, 0x005d8/4, 0x07ff0000);
888 INSTANCE_WR(ctx, 0x005dc/4, 0x07ff0000);
889 INSTANCE_WR(ctx, 0x005e0/4, 0x07ff0000);
890 INSTANCE_WR(ctx, 0x005e4/4, 0x07ff0000);
891 INSTANCE_WR(ctx, 0x005e8/4, 0x07ff0000);
892 INSTANCE_WR(ctx, 0x005ec/4, 0x07ff0000);
893 INSTANCE_WR(ctx, 0x005f0/4, 0x07ff0000);
894 INSTANCE_WR(ctx, 0x005f4/4, 0x07ff0000);
895 INSTANCE_WR(ctx, 0x005f8/4, 0x07ff0000);
896 INSTANCE_WR(ctx, 0x00604/4, 0x4b7fffff);
897 INSTANCE_WR(ctx, 0x0062c/4, 0x30201000);
898 INSTANCE_WR(ctx, 0x00630/4, 0x70605040);
899 INSTANCE_WR(ctx, 0x00634/4, 0xb8a89888);
900 INSTANCE_WR(ctx, 0x00638/4, 0xf8e8d8c8);
901 INSTANCE_WR(ctx, 0x0064c/4, 0x40100000);
902 INSTANCE_WR(ctx, 0x00668/4, 0x0000ffff);
903 INSTANCE_WR(ctx, 0x0069c/4, 0x435185d6);
904 INSTANCE_WR(ctx, 0x006a0/4, 0x2155b699);
905 INSTANCE_WR(ctx, 0x006a4/4, 0xfedcba98);
906 INSTANCE_WR(ctx, 0x006a8/4, 0x00000098);
907 INSTANCE_WR(ctx, 0x006b8/4, 0xffffffff);
908 INSTANCE_WR(ctx, 0x006bc/4, 0x00ff7000);
909 INSTANCE_WR(ctx, 0x006c0/4, 0x0000ffff);
910 INSTANCE_WR(ctx, 0x006d0/4, 0x00ff0000);
911 INSTANCE_WR(ctx, 0x0070c/4, 0x00ffff00);
912 for (i=0x00750; i<=0x0078c; i+=4)
913 INSTANCE_WR(ctx, i/4, 0x00018488);
914 for (i=0x00790; i<=0x007cc; i+=4)
915 INSTANCE_WR(ctx, i/4, 0x00028202);
916 for (i=0x00810; i<=0x0084c; i+=4)
917 INSTANCE_WR(ctx, i/4, 0x0000aae4);
918 for (i=0x00850; i<=0x0088c; i+=4)
919 INSTANCE_WR(ctx, i/4, 0x01012000);
920 for (i=0x00890; i<=0x008cc; i+=4)
921 INSTANCE_WR(ctx, i/4, 0x00080008);
922 for (i=0x00910; i<=0x0094c; i+=4)
923 INSTANCE_WR(ctx, i/4, 0x00100008);
924 for (i=0x009a0; i<=0x009ac; i+=4)
925 INSTANCE_WR(ctx, i/4, 0x0001bc80);
926 for (i=0x009b0; i<=0x009bc; i+=4)
927 INSTANCE_WR(ctx, i/4, 0x00000202);
928 for (i=0x009d0; i<=0x009dc; i+=4)
929 INSTANCE_WR(ctx, i/4, 0x00000008);
930 for (i=0x009f0; i<=0x009fc; i+=4)
931 INSTANCE_WR(ctx, i/4, 0x00080008);
932 INSTANCE_WR(ctx, 0x00a10/4, 0x00000002);
933 INSTANCE_WR(ctx, 0x00a44/4, 0x00000421);
934 INSTANCE_WR(ctx, 0x00a48/4, 0x030c30c3);
935 INSTANCE_WR(ctx, 0x00a54/4, 0x3e020200);
936 INSTANCE_WR(ctx, 0x00a58/4, 0x00ffffff);
937 INSTANCE_WR(ctx, 0x00a5c/4, 0x20103f00);
938 INSTANCE_WR(ctx, 0x00a68/4, 0x00040000);
939 INSTANCE_WR(ctx, 0x00aa0/4, 0x00008100);
940 INSTANCE_WR(ctx, 0x00b2c/4, 0x00000001);
941 INSTANCE_WR(ctx, 0x00b70/4, 0x00001001);
942 INSTANCE_WR(ctx, 0x00b7c/4, 0x00000003);
943 INSTANCE_WR(ctx, 0x00b80/4, 0x00888001);
944 INSTANCE_WR(ctx, 0x00bb0/4, 0xffffffff);
945 INSTANCE_WR(ctx, 0x00bb4/4, 0xffffffff);
946 INSTANCE_WR(ctx, 0x00bb8/4, 0xffffffff);
947 INSTANCE_WR(ctx, 0x00bbc/4, 0xffffffff);
948 INSTANCE_WR(ctx, 0x00bc0/4, 0xffffffff);
949 INSTANCE_WR(ctx, 0x00bc4/4, 0xffffffff);
950 INSTANCE_WR(ctx, 0x00bc8/4, 0xffffffff);
951 INSTANCE_WR(ctx, 0x00bcc/4, 0xffffffff);
952 INSTANCE_WR(ctx, 0x00bd0/4, 0xffffffff);
953 INSTANCE_WR(ctx, 0x00bd4/4, 0xffffffff);
954 INSTANCE_WR(ctx, 0x00bd8/4, 0xffffffff);
955 INSTANCE_WR(ctx, 0x00bdc/4, 0xffffffff);
956 INSTANCE_WR(ctx, 0x00be0/4, 0xffffffff);
957 INSTANCE_WR(ctx, 0x00be4/4, 0xffffffff);
958 INSTANCE_WR(ctx, 0x00be8/4, 0xffffffff);
959 INSTANCE_WR(ctx, 0x00bec/4, 0xffffffff);
960 INSTANCE_WR(ctx, 0x00bf0/4, 0xffffffff);
961 INSTANCE_WR(ctx, 0x00bf4/4, 0xffffffff);
962 INSTANCE_WR(ctx, 0x00bf8/4, 0xffffffff);
963 INSTANCE_WR(ctx, 0x00bfc/4, 0xffffffff);
964 INSTANCE_WR(ctx, 0x00c00/4, 0xffffffff);
965 INSTANCE_WR(ctx, 0x00c04/4, 0xffffffff);
966 INSTANCE_WR(ctx, 0x00c08/4, 0xffffffff);
967 INSTANCE_WR(ctx, 0x00c0c/4, 0xffffffff);
968 INSTANCE_WR(ctx, 0x00c10/4, 0xffffffff);
969 INSTANCE_WR(ctx, 0x00c14/4, 0xffffffff);
970 INSTANCE_WR(ctx, 0x00c18/4, 0xffffffff);
971 INSTANCE_WR(ctx, 0x00c1c/4, 0xffffffff);
972 INSTANCE_WR(ctx, 0x00c20/4, 0xffffffff);
973 INSTANCE_WR(ctx, 0x00c24/4, 0xffffffff);
974 INSTANCE_WR(ctx, 0x00c28/4, 0xffffffff);
975 INSTANCE_WR(ctx, 0x00c2c/4, 0xffffffff);
976 INSTANCE_WR(ctx, 0x00c54/4, 0x00000005);
977 INSTANCE_WR(ctx, 0x00c60/4, 0x0000ffff);
978 INSTANCE_WR(ctx, 0x00c7c/4, 0x00005555);
979 INSTANCE_WR(ctx, 0x00c80/4, 0x00005555);
980 INSTANCE_WR(ctx, 0x00c84/4, 0x00005555);
981 INSTANCE_WR(ctx, 0x00c88/4, 0x00005555);
982 INSTANCE_WR(ctx, 0x00c8c/4, 0x00005555);
983 INSTANCE_WR(ctx, 0x00c90/4, 0x00005555);
984 INSTANCE_WR(ctx, 0x00c94/4, 0x00005555);
985 INSTANCE_WR(ctx, 0x00c98/4, 0x00005555);
986 INSTANCE_WR(ctx, 0x00c9c/4, 0x00000001);
987 INSTANCE_WR(ctx, 0x00cd4/4, 0x00000001);
988 INSTANCE_WR(ctx, 0x00cd8/4, 0x08e00001);
989 INSTANCE_WR(ctx, 0x00cdc/4, 0x000e3000);
990 for(i=0x030a0; i<=0x03118; i+=8)
991 INSTANCE_WR(ctx, i/4, 0x3f800000);
992 for(i=0x098a0; i<=0x0ba90; i+=24)
993 INSTANCE_WR(ctx, i/4, 0x00000001);
994 for(i=0x0baa0; i<=0x0be90; i+=16)
995 INSTANCE_WR(ctx, i/4, 0x3f800000);
996 for(i=0x0e2e0; i<=0x0fff0; i+=24)
997 INSTANCE_WR(ctx, i/4, 0x00000001);
998 for(i=0x10008; i<=0x104d0; i+=24)
999 INSTANCE_WR(ctx, i/4, 0x00000001);
1000 for(i=0x104e0; i<=0x108d0; i+=16)
1001 INSTANCE_WR(ctx, i/4, 0x3f800000);
1002 for(i=0x12d20; i<=0x14f10; i+=24)
1003 INSTANCE_WR(ctx, i/4, 0x00000001);
1004 for(i=0x14f20; i<=0x15310; i+=16)
1005 INSTANCE_WR(ctx, i/4, 0x3f800000);
1006 for(i=0x17760; i<=0x19950; i+=24)
1007 INSTANCE_WR(ctx, i/4, 0x00000001);
1008 for(i=0x19960; i<=0x19d50; i+=16)
1009 INSTANCE_WR(ctx, i/4, 0x3f800000);
1013 nv4c_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
1015 struct drm_nouveau_private *dev_priv = dev->dev_private;
1018 INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
1019 INSTANCE_WR(ctx, 0x00024/4, 0x0000ffff);
1020 INSTANCE_WR(ctx, 0x00028/4, 0x0000ffff);
1021 INSTANCE_WR(ctx, 0x00030/4, 0x00000001);
1022 INSTANCE_WR(ctx, 0x0011c/4, 0x20010001);
1023 INSTANCE_WR(ctx, 0x00120/4, 0x0f73ef00);
1024 INSTANCE_WR(ctx, 0x00128/4, 0x02008821);
1025 INSTANCE_WR(ctx, 0x00158/4, 0x00000001);
1026 INSTANCE_WR(ctx, 0x0015c/4, 0x00000001);
1027 INSTANCE_WR(ctx, 0x00160/4, 0x00000001);
1028 INSTANCE_WR(ctx, 0x00164/4, 0x00000001);
1029 INSTANCE_WR(ctx, 0x00168/4, 0x00000001);
1030 INSTANCE_WR(ctx, 0x0016c/4, 0x00000001);
1031 INSTANCE_WR(ctx, 0x00170/4, 0x00000001);
1032 INSTANCE_WR(ctx, 0x00174/4, 0x00000001);
1033 INSTANCE_WR(ctx, 0x00178/4, 0x00000040);
1034 INSTANCE_WR(ctx, 0x0017c/4, 0x00000040);
1035 INSTANCE_WR(ctx, 0x00180/4, 0x00000040);
1036 INSTANCE_WR(ctx, 0x00188/4, 0x00000040);
1037 INSTANCE_WR(ctx, 0x001d0/4, 0x0b0b0b0c);
1038 INSTANCE_WR(ctx, 0x00340/4, 0x00040000);
1039 INSTANCE_WR(ctx, 0x00350/4, 0x55555555);
1040 INSTANCE_WR(ctx, 0x00354/4, 0x55555555);
1041 INSTANCE_WR(ctx, 0x00358/4, 0x55555555);
1042 INSTANCE_WR(ctx, 0x0035c/4, 0x55555555);
1043 INSTANCE_WR(ctx, 0x00388/4, 0x00000008);
1044 INSTANCE_WR(ctx, 0x0039c/4, 0x00001010);
1045 INSTANCE_WR(ctx, 0x003d0/4, 0x00000111);
1046 INSTANCE_WR(ctx, 0x003d4/4, 0x00080060);
1047 INSTANCE_WR(ctx, 0x003f0/4, 0x00000080);
1048 INSTANCE_WR(ctx, 0x003f4/4, 0xffff0000);
1049 INSTANCE_WR(ctx, 0x003f8/4, 0x00000001);
1050 INSTANCE_WR(ctx, 0x0040c/4, 0x46400000);
1051 INSTANCE_WR(ctx, 0x0041c/4, 0xffff0000);
1052 INSTANCE_WR(ctx, 0x00428/4, 0x0fff0000);
1053 INSTANCE_WR(ctx, 0x0042c/4, 0x0fff0000);
1054 INSTANCE_WR(ctx, 0x00434/4, 0x00011100);
1055 for (i=0x00450; i<0x0048c; i+=4)
1056 INSTANCE_WR(ctx, i/4, 0x07ff0000);
1057 INSTANCE_WR(ctx, 0x00498/4, 0x4b7fffff);
1058 INSTANCE_WR(ctx, 0x004c0/4, 0x30201000);
1059 INSTANCE_WR(ctx, 0x004c4/4, 0x70605040);
1060 INSTANCE_WR(ctx, 0x004c8/4, 0xb8a89888);
1061 INSTANCE_WR(ctx, 0x004cc/4, 0xf8e8d8c8);
1062 INSTANCE_WR(ctx, 0x004e0/4, 0x40100000);
1063 INSTANCE_WR(ctx, 0x004fc/4, 0x0000ffff);
1064 INSTANCE_WR(ctx, 0x00530/4, 0x435185d6);
1065 INSTANCE_WR(ctx, 0x00534/4, 0x2155b699);
1066 INSTANCE_WR(ctx, 0x00538/4, 0xfedcba98);
1067 INSTANCE_WR(ctx, 0x0053c/4, 0x00000098);
1068 INSTANCE_WR(ctx, 0x0054c/4, 0xffffffff);
1069 INSTANCE_WR(ctx, 0x00550/4, 0x00ff7000);
1070 INSTANCE_WR(ctx, 0x00554/4, 0x0000ffff);
1071 INSTANCE_WR(ctx, 0x00564/4, 0x00ff0000);
1072 INSTANCE_WR(ctx, 0x0059c/4, 0x00ffff00);
1073 for (i=0x005e0; i<=0x0061c; i+=4)
1074 INSTANCE_WR(ctx, i/4, 0x00018488);
1075 for (i=0x00620; i<=0x0065c; i+=4)
1076 INSTANCE_WR(ctx, i/4, 0x00028202);
1077 for (i=0x006a0; i<=0x006dc; i+=4)
1078 INSTANCE_WR(ctx, i/4, 0x0000aae4);
1079 for (i=0x006e0; i<=0x0071c; i+=4)
1080 INSTANCE_WR(ctx, i/4, 0x01012000);
1081 for (i=0x00720; i<=0x0075c; i+=4)
1082 INSTANCE_WR(ctx, i/4, 0x00080008);
1083 for (i=0x007a0; i<=0x007dc; i+=4)
1084 INSTANCE_WR(ctx, i/4, 0x00100008);
1085 for (i=0x00830; i<=0x0083c; i+=4)
1086 INSTANCE_WR(ctx, i/4, 0x0001bc80);
1087 for (i=0x00840; i<=0x0084c; i+=4)
1088 INSTANCE_WR(ctx, i/4, 0x00000202);
1089 for (i=0x00860; i<=0x0086c; i+=4)
1090 INSTANCE_WR(ctx, i/4, 0x00000008);
1091 for (i=0x00880; i<=0x0088c; i+=4)
1092 INSTANCE_WR(ctx, i/4, 0x00080008);
1093 INSTANCE_WR(ctx, 0x008a0/4, 0x00000002);
1094 INSTANCE_WR(ctx, 0x008d4/4, 0x00000020);
1095 INSTANCE_WR(ctx, 0x008d8/4, 0x030c30c3);
1096 INSTANCE_WR(ctx, 0x008dc/4, 0x00011001);
1097 INSTANCE_WR(ctx, 0x008e8/4, 0x3e020200);
1098 INSTANCE_WR(ctx, 0x008ec/4, 0x00ffffff);
1099 INSTANCE_WR(ctx, 0x008f0/4, 0x0c103f00);
1100 INSTANCE_WR(ctx, 0x008fc/4, 0x00040000);
1101 INSTANCE_WR(ctx, 0x00934/4, 0x00008100);
1102 INSTANCE_WR(ctx, 0x009c0/4, 0x00000001);
1103 INSTANCE_WR(ctx, 0x00a04/4, 0x00001001);
1104 INSTANCE_WR(ctx, 0x00a0c/4, 0x00000003);
1105 INSTANCE_WR(ctx, 0x00a10/4, 0x00888001);
1106 INSTANCE_WR(ctx, 0x00a74/4, 0x00000005);
1107 INSTANCE_WR(ctx, 0x00a80/4, 0x0000ffff);
1108 INSTANCE_WR(ctx, 0x00a9c/4, 0x00005555);
1109 INSTANCE_WR(ctx, 0x00aa0/4, 0x00000001);
1110 INSTANCE_WR(ctx, 0x00ad8/4, 0x00000001);
1111 for (i=0x016a0; i<0x01718; i+=8)
1112 INSTANCE_WR(ctx, i/4, 0x3f800000);
1113 for (i=0x03460; i<0x05650; i+=24)
1114 INSTANCE_WR(ctx, i/4, 0x00000001);
1115 for (i=0x05660; i<0x05a50; i+=16)
1116 INSTANCE_WR(ctx, i/4, 0x3f800000);
1120 nv4e_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
1122 struct drm_nouveau_private *dev_priv = dev->dev_private;
1125 INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
1126 INSTANCE_WR(ctx, 0x00024/4, 0x0000ffff);
1127 INSTANCE_WR(ctx, 0x00028/4, 0x0000ffff);
1128 INSTANCE_WR(ctx, 0x00030/4, 0x00000001);
1129 INSTANCE_WR(ctx, 0x0011c/4, 0x20010001);
1130 INSTANCE_WR(ctx, 0x00120/4, 0x0f73ef00);
1131 INSTANCE_WR(ctx, 0x00128/4, 0x02008821);
1132 INSTANCE_WR(ctx, 0x00158/4, 0x00000001);
1133 INSTANCE_WR(ctx, 0x0015c/4, 0x00000001);
1134 INSTANCE_WR(ctx, 0x00160/4, 0x00000001);
1135 INSTANCE_WR(ctx, 0x00164/4, 0x00000001);
1136 INSTANCE_WR(ctx, 0x00168/4, 0x00000001);
1137 INSTANCE_WR(ctx, 0x0016c/4, 0x00000001);
1138 INSTANCE_WR(ctx, 0x00170/4, 0x00000001);
1139 INSTANCE_WR(ctx, 0x00174/4, 0x00000001);
1140 INSTANCE_WR(ctx, 0x00178/4, 0x00000040);
1141 INSTANCE_WR(ctx, 0x0017c/4, 0x00000040);
1142 INSTANCE_WR(ctx, 0x00180/4, 0x00000040);
1143 INSTANCE_WR(ctx, 0x00188/4, 0x00000040);
1144 INSTANCE_WR(ctx, 0x001d0/4, 0x0b0b0b0c);
1145 INSTANCE_WR(ctx, 0x00340/4, 0x00040000);
1146 INSTANCE_WR(ctx, 0x00350/4, 0x55555555);
1147 INSTANCE_WR(ctx, 0x00354/4, 0x55555555);
1148 INSTANCE_WR(ctx, 0x00358/4, 0x55555555);
1149 INSTANCE_WR(ctx, 0x0035c/4, 0x55555555);
1150 INSTANCE_WR(ctx, 0x00388/4, 0x00000008);
1151 INSTANCE_WR(ctx, 0x0039c/4, 0x00001010);
1152 INSTANCE_WR(ctx, 0x003cc/4, 0x00000111);
1153 INSTANCE_WR(ctx, 0x003d0/4, 0x00080060);
1154 INSTANCE_WR(ctx, 0x003ec/4, 0x00000080);
1155 INSTANCE_WR(ctx, 0x003f0/4, 0xffff0000);
1156 INSTANCE_WR(ctx, 0x003f4/4, 0x00000001);
1157 INSTANCE_WR(ctx, 0x00408/4, 0x46400000);
1158 INSTANCE_WR(ctx, 0x00418/4, 0xffff0000);
1159 INSTANCE_WR(ctx, 0x00424/4, 0x0fff0000);
1160 INSTANCE_WR(ctx, 0x00428/4, 0x0fff0000);
1161 INSTANCE_WR(ctx, 0x00430/4, 0x00011100);
1162 for (i=0x0044c; i<=0x00488; i+=4)
1163 INSTANCE_WR(ctx, i/4, 0x07ff0000);
1164 INSTANCE_WR(ctx, 0x00494/4, 0x4b7fffff);
1165 INSTANCE_WR(ctx, 0x004bc/4, 0x30201000);
1166 INSTANCE_WR(ctx, 0x004c0/4, 0x70605040);
1167 INSTANCE_WR(ctx, 0x004c4/4, 0xb8a89888);
1168 INSTANCE_WR(ctx, 0x004c8/4, 0xf8e8d8c8);
1169 INSTANCE_WR(ctx, 0x004dc/4, 0x40100000);
1170 INSTANCE_WR(ctx, 0x004f8/4, 0x0000ffff);
1171 INSTANCE_WR(ctx, 0x0052c/4, 0x435185d6);
1172 INSTANCE_WR(ctx, 0x00530/4, 0x2155b699);
1173 INSTANCE_WR(ctx, 0x00534/4, 0xfedcba98);
1174 INSTANCE_WR(ctx, 0x00538/4, 0x00000098);
1175 INSTANCE_WR(ctx, 0x00548/4, 0xffffffff);
1176 INSTANCE_WR(ctx, 0x0054c/4, 0x00ff7000);
1177 INSTANCE_WR(ctx, 0x00550/4, 0x0000ffff);
1178 INSTANCE_WR(ctx, 0x0055c/4, 0x00ff0000);
1179 INSTANCE_WR(ctx, 0x00594/4, 0x00ffff00);
1180 for (i=0x005d8; i<=0x00614; i+=4)
1181 INSTANCE_WR(ctx, i/4, 0x00018488);
1182 for (i=0x00618; i<=0x00654; i+=4)
1183 INSTANCE_WR(ctx, i/4, 0x00028202);
1184 for (i=0x00698; i<=0x006d4; i+=4)
1185 INSTANCE_WR(ctx, i/4, 0x0000aae4);
1186 for (i=0x006d8; i<=0x00714; i+=4)
1187 INSTANCE_WR(ctx, i/4, 0x01012000);
1188 for (i=0x00718; i<=0x00754; i+=4)
1189 INSTANCE_WR(ctx, i/4, 0x00080008);
1190 for (i=0x00798; i<=0x007d4; i+=4)
1191 INSTANCE_WR(ctx, i/4, 0x00100008);
1192 for (i=0x00828; i<=0x00834; i+=4)
1193 INSTANCE_WR(ctx, i/4, 0x0001bc80);
1194 for (i=0x00838; i<=0x00844; i+=4)
1195 INSTANCE_WR(ctx, i/4, 0x00000202);
1196 for (i=0x00858; i<=0x00864; i+=4)
1197 INSTANCE_WR(ctx, i/4, 0x00000008);
1198 for (i=0x00878; i<=0x00884; i+=4)
1199 INSTANCE_WR(ctx, i/4, 0x00080008);
1200 INSTANCE_WR(ctx, 0x00898/4, 0x00000002);
1201 INSTANCE_WR(ctx, 0x008cc/4, 0x00000020);
1202 INSTANCE_WR(ctx, 0x008d0/4, 0x030c30c3);
1203 INSTANCE_WR(ctx, 0x008d4/4, 0x00011001);
1204 INSTANCE_WR(ctx, 0x008e0/4, 0x3e020200);
1205 INSTANCE_WR(ctx, 0x008e4/4, 0x00ffffff);
1206 INSTANCE_WR(ctx, 0x008e8/4, 0x0c103f00);
1207 INSTANCE_WR(ctx, 0x008f4/4, 0x00040000);
1208 INSTANCE_WR(ctx, 0x0092c/4, 0x00008100);
1209 INSTANCE_WR(ctx, 0x009b8/4, 0x00000001);
1210 INSTANCE_WR(ctx, 0x009fc/4, 0x00001001);
1211 INSTANCE_WR(ctx, 0x00a04/4, 0x00000003);
1212 INSTANCE_WR(ctx, 0x00a08/4, 0x00888001);
1213 INSTANCE_WR(ctx, 0x00a6c/4, 0x00000005);
1214 INSTANCE_WR(ctx, 0x00a78/4, 0x0000ffff);
1215 INSTANCE_WR(ctx, 0x00a94/4, 0x00005555);
1216 INSTANCE_WR(ctx, 0x00a98/4, 0x00000001);
1217 INSTANCE_WR(ctx, 0x00aa4/4, 0x00000001);
1218 for (i=0x01668; i<=0x016e0; i+=8)
1219 INSTANCE_WR(ctx, i/4, 0x3f800000);
1220 for (i=0x03428; i<=0x05618; i+=24)
1221 INSTANCE_WR(ctx, i/4, 0x00000001);
1222 for (i=0x05628; i<=0x05a18; i+=16)
1223 INSTANCE_WR(ctx, i/4, 0x3f800000);
1227 nv40_graph_create_context(struct nouveau_channel *chan)
1229 struct drm_device *dev = chan->dev;
1230 struct drm_nouveau_private *dev_priv = dev->dev_private;
1231 void (*ctx_init)(struct drm_device *, struct nouveau_gpuobj *);
1232 unsigned int ctx_size;
1235 switch (dev_priv->chipset) {
1237 ctx_size = NV40_GRCTX_SIZE;
1238 ctx_init = nv40_graph_context_init;
1241 ctx_size = NV43_GRCTX_SIZE;
1242 ctx_init = nv43_graph_context_init;
1245 ctx_size = NV46_GRCTX_SIZE;
1246 ctx_init = nv46_graph_context_init;
1249 ctx_size = NV49_GRCTX_SIZE;
1250 ctx_init = nv49_graph_context_init;
1254 ctx_size = NV4A_GRCTX_SIZE;
1255 ctx_init = nv4a_graph_context_init;
1258 ctx_size = NV4B_GRCTX_SIZE;
1259 ctx_init = nv4b_graph_context_init;
1262 ctx_size = NV4C_GRCTX_SIZE;
1263 ctx_init = nv4c_graph_context_init;
1266 ctx_size = NV4E_GRCTX_SIZE;
1267 ctx_init = nv4e_graph_context_init;
1270 ctx_size = NV40_GRCTX_SIZE;
1271 ctx_init = nv40_graph_context_init;
1275 if ((ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, ctx_size, 16,
1276 NVOBJ_FLAG_ZERO_ALLOC,
1277 &chan->ramin_grctx)))
1280 /* Initialise default context values */
1281 ctx_init(dev, chan->ramin_grctx->gpuobj);
1287 nv40_graph_destroy_context(struct nouveau_channel *chan)
1289 nouveau_gpuobj_ref_del(chan->dev, &chan->ramin_grctx);
1293 nv40_graph_transfer_context(struct drm_device *dev, uint32_t inst, int save)
1295 struct drm_nouveau_private *dev_priv = dev->dev_private;
1296 uint32_t old_cp, tv = 1000;
1299 old_cp = NV_READ(NV20_PGRAPH_CHANNEL_CTX_POINTER);
1300 NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst);
1301 NV_WRITE(NV40_PGRAPH_CTXCTL_0310,
1302 save ? NV40_PGRAPH_CTXCTL_0310_XFER_SAVE :
1303 NV40_PGRAPH_CTXCTL_0310_XFER_LOAD);
1304 NV_WRITE(NV40_PGRAPH_CTXCTL_0304, NV40_PGRAPH_CTXCTL_0304_XFER_CTX);
1306 for (i = 0; i < tv; i++) {
1307 if (NV_READ(NV40_PGRAPH_CTXCTL_030C) == 0)
1310 NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, old_cp);
1313 uint32_t ucstat = NV_READ(NV40_PGRAPH_CTXCTL_UCODE_STAT);
1314 DRM_ERROR("Failed: Instance=0x%08x Save=%d\n", inst, save);
1315 DRM_ERROR("IP: 0x%02x, Opcode: 0x%08x\n",
1316 ucstat >> NV40_PGRAPH_CTXCTL_UCODE_STAT_IP_SHIFT,
1317 ucstat & NV40_PGRAPH_CTXCTL_UCODE_STAT_OP_MASK);
1318 DRM_ERROR("0x40030C = 0x%08x\n",
1319 NV_READ(NV40_PGRAPH_CTXCTL_030C));
1326 /* Save current context (from PGRAPH) into the channel's context
1327 *XXX: fails sometimes, not sure why..
1330 nv40_graph_save_context(struct nouveau_channel *chan)
1332 struct drm_device *dev = chan->dev;
1335 if (!chan->ramin_grctx)
1337 inst = chan->ramin_grctx->instance >> 4;
1339 return nv40_graph_transfer_context(dev, inst, 1);
1342 /* Restore the context for a specific channel into PGRAPH
1343 * XXX: fails sometimes.. not sure why
1346 nv40_graph_load_context(struct nouveau_channel *chan)
1348 struct drm_device *dev = chan->dev;
1349 struct drm_nouveau_private *dev_priv = dev->dev_private;
1353 if (!chan->ramin_grctx)
1355 inst = chan->ramin_grctx->instance >> 4;
1357 ret = nv40_graph_transfer_context(dev, inst, 0);
1361 /* 0x40032C, no idea of it's exact function. Could simply be a
1362 * record of the currently active PGRAPH context. It's currently
1363 * unknown as to what bit 24 does. The nv ddx has it set, so we will
1366 NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, inst);
1367 NV_WRITE(NV40_PGRAPH_CTXCTL_CUR,
1368 (inst & NV40_PGRAPH_CTXCTL_CUR_INST_MASK) |
1369 NV40_PGRAPH_CTXCTL_CUR_LOADED);
1370 /* 0x32E0 records the instance address of the active FIFO's PGRAPH
1371 * context. If at any time this doesn't match 0x40032C, you will
1372 * recieve PGRAPH_INTR_CONTEXT_SWITCH
1374 NV_WRITE(NV40_PFIFO_GRCTX_INSTANCE, inst);
1378 /* Some voodoo that makes context switching work without the binary driver
1379 * initialising the card first.
1381 * It is possible to effect how the context is saved from PGRAPH into a block
1382 * of instance memory by altering the values in these tables. This may mean
1383 * that the context layout of each chipset is slightly different (at least
1384 * NV40 and C51 are different). It would also be possible for chipsets to
1385 * have an identical context layout, but pull the data from different PGRAPH
1388 * TODO: decode the meaning of the magic values, may provide clues about the
1389 * differences between the various NV40 chipsets.
1390 * TODO: one we have a better idea of how each chipset differs, perhaps think
1391 * about unifying these instead of providing a separate table for each
1394 * mmio-trace dumps from other nv4x/g7x/c5x cards very welcome :)
1396 static uint32_t nv40_ctx_voodoo[] = {
1397 0x00400889, 0x00200000, 0x0060000a, 0x00200000, 0x00300000, 0x00800001,
1398 0x00700009, 0x0060000e, 0x00400d64, 0x00400d05, 0x00408f65, 0x00409406,
1399 0x0040a268, 0x00200000, 0x0060000a, 0x00700000, 0x00106000, 0x00700080,
1400 0x004014e6, 0x007000a0, 0x00401a84, 0x00700082, 0x00600001, 0x00500061,
1401 0x00600002, 0x00401b68, 0x00500060, 0x00200001, 0x0060000a, 0x0011814d,
1402 0x00110158, 0x00105401, 0x0020003a, 0x00100051, 0x001040c5, 0x0010c1c4,
1403 0x001041c9, 0x0010c1dc, 0x00110205, 0x0011420a, 0x00114210, 0x00110216,
1404 0x0012421b, 0x00120270, 0x001242c0, 0x00200040, 0x00100280, 0x00128100,
1405 0x00128120, 0x00128143, 0x0011415f, 0x0010815c, 0x0010c140, 0x00104029,
1406 0x00110400, 0x00104d10, 0x00500060, 0x00403b87, 0x0060000d, 0x004076e6,
1407 0x002000f0, 0x0060000a, 0x00200045, 0x00100620, 0x00108668, 0x0011466b,
1408 0x00120682, 0x0011068b, 0x00168691, 0x0010c6ae, 0x001206b4, 0x0020002a,
1409 0x001006c4, 0x001246f0, 0x002000c0, 0x00100700, 0x0010c3d7, 0x001043e1,
1410 0x00500060, 0x00405600, 0x00405684, 0x00600003, 0x00500067, 0x00600008,
1411 0x00500060, 0x00700082, 0x0020026c, 0x0060000a, 0x00104800, 0x00104901,
1412 0x00120920, 0x00200035, 0x00100940, 0x00148a00, 0x00104a14, 0x00200038,
1413 0x00100b00, 0x00138d00, 0x00104e00, 0x0012d600, 0x00105c00, 0x00104f06,
1414 0x0020031a, 0x0060000a, 0x00300000, 0x00200680, 0x00406c00, 0x00200684,
1415 0x00800001, 0x00200b62, 0x0060000a, 0x0020a0b0, 0x0040728a, 0x00201b68,
1416 0x00800041, 0x00407684, 0x00203e60, 0x00800002, 0x00408700, 0x00600006,
1417 0x00700003, 0x004080e6, 0x00700080, 0x0020031a, 0x0060000a, 0x00200004,
1418 0x00800001, 0x00700000, 0x00200000, 0x0060000a, 0x00106002, 0x0040a284,
1419 0x00700002, 0x00600004, 0x0040a268, 0x00700000, 0x00200000, 0x0060000a,
1420 0x00106002, 0x00700080, 0x00400a84, 0x00700002, 0x00400a68, 0x00500060,
1421 0x00600007, 0x00409388, 0x0060000f, 0x00000000, 0x00500060, 0x00200000,
1422 0x0060000a, 0x00700000, 0x00106001, 0x00700083, 0x00910880, 0x00901ffe,
1423 0x00940400, 0x00200020, 0x0060000b, 0x00500069, 0x0060000c, 0x00401b68,
1424 0x0040a406, 0x0040a505, 0x00600009, 0x00700005, 0x00700006, 0x0060000e,
1428 static uint32_t nv43_ctx_voodoo[] = {
1429 0x00400889, 0x00200000, 0x0060000a, 0x00200000, 0x00300000, 0x00800001,
1430 0x00700009, 0x0060000e, 0x00400d64, 0x00400d05, 0x00409565, 0x00409a06,
1431 0x0040a868, 0x00200000, 0x0060000a, 0x00700000, 0x00106000, 0x00700080,
1432 0x004014e6, 0x007000a0, 0x00401a84, 0x00700082, 0x00600001, 0x00500061,
1433 0x00600002, 0x00401b68, 0x00500060, 0x00200001, 0x0060000a, 0x0011814d,
1434 0x00110158, 0x00105401, 0x0020003a, 0x00100051, 0x001040c5, 0x0010c1c4,
1435 0x001041c9, 0x0010c1dc, 0x00150210, 0x0012c225, 0x00108238, 0x0010823e,
1436 0x001242c0, 0x00200040, 0x00100280, 0x00128100, 0x00128120, 0x00128143,
1437 0x0011415f, 0x0010815c, 0x0010c140, 0x00104029, 0x00110400, 0x00104d10,
1438 0x001046ec, 0x00500060, 0x00403a87, 0x0060000d, 0x00407ce6, 0x002000f1,
1439 0x0060000a, 0x00148653, 0x00104668, 0x0010c66d, 0x00120682, 0x0011068b,
1440 0x00168691, 0x001046ae, 0x001046b0, 0x001206b4, 0x001046c4, 0x001146c6,
1441 0x00200020, 0x001006cc, 0x001046ed, 0x001246f0, 0x002000c0, 0x00100700,
1442 0x0010c3d7, 0x001043e1, 0x00500060, 0x00405800, 0x00405884, 0x00600003,
1443 0x00500067, 0x00600008, 0x00500060, 0x00700082, 0x00200233, 0x0060000a,
1444 0x00104800, 0x00108901, 0x00124920, 0x0020001f, 0x00100940, 0x00140965,
1445 0x00148a00, 0x00108a14, 0x00160b00, 0x00134b2c, 0x0010cd00, 0x0010cd04,
1446 0x0010cd08, 0x00104d80, 0x00104e00, 0x0012d600, 0x00105c00, 0x00104f06,
1447 0x002002c8, 0x0060000a, 0x00300000, 0x00200680, 0x00407200, 0x00200684,
1448 0x00800001, 0x00200b10, 0x0060000a, 0x00203870, 0x0040788a, 0x00201350,
1449 0x00800041, 0x00407c84, 0x00201560, 0x00800002, 0x00408d00, 0x00600006,
1450 0x00700003, 0x004086e6, 0x00700080, 0x002002c8, 0x0060000a, 0x00200004,
1451 0x00800001, 0x00700000, 0x00200000, 0x0060000a, 0x00106002, 0x0040a884,
1452 0x00700002, 0x00600004, 0x0040a868, 0x00700000, 0x00200000, 0x0060000a,
1453 0x00106002, 0x00700080, 0x00400a84, 0x00700002, 0x00400a68, 0x00500060,
1454 0x00600007, 0x00409988, 0x0060000f, 0x00000000, 0x00500060, 0x00200000,
1455 0x0060000a, 0x00700000, 0x00106001, 0x00700083, 0x00910880, 0x00901ffe,
1456 0x00940400, 0x00200020, 0x0060000b, 0x00500069, 0x0060000c, 0x00401b68,
1457 0x0040aa06, 0x0040ab05, 0x00600009, 0x00700005, 0x00700006, 0x0060000e,
1461 static uint32_t nv44_ctx_voodoo[] = {
1462 0x00400889, 0x00200000, 0x0060000a, 0x00200000, 0x00300000, 0x00800001,
1463 0x00700009, 0x0060000e, 0x00400d64, 0x00400d05, 0x00409a65, 0x00409f06,
1464 0x0040ac68, 0x0040248f, 0x00200001, 0x0060000a, 0x00700080, 0x00104042,
1465 0x001041c6, 0x00104040, 0x00200001, 0x0060000a, 0x00700000, 0x001040c5,
1466 0x00402320, 0x00402321, 0x00402322, 0x00402324, 0x00402326, 0x0040232b,
1467 0x001040c5, 0x00402328, 0x001040c5, 0x00402320, 0x00402468, 0x0060000d,
1468 0x00200000, 0x0060000a, 0x00700000, 0x00106000, 0x00700080, 0x00402be6,
1469 0x007000a0, 0x00500060, 0x00200001, 0x0060000a, 0x0011814d, 0x00110158,
1470 0x00105401, 0x0020003a, 0x00100051, 0x001040c5, 0x0010c1c4, 0x001041c9,
1471 0x0010c1dc, 0x00150210, 0x0012c225, 0x00108238, 0x0010823e, 0x001242c0,
1472 0x00200040, 0x00100280, 0x00128100, 0x00128120, 0x00128143, 0x0011415f,
1473 0x0010815c, 0x0010c140, 0x00104029, 0x00110400, 0x00104d10, 0x001046ec,
1474 0x00500060, 0x00404b87, 0x0060000d, 0x004084e6, 0x002000f1, 0x0060000a,
1475 0x00148653, 0x00104668, 0x0010c66d, 0x00120682, 0x0011068b, 0x00168691,
1476 0x001046ae, 0x001046b0, 0x001206b4, 0x001046c4, 0x001146c6, 0x001646cc,
1477 0x001186e6, 0x001046ed, 0x001246f0, 0x002000c0, 0x00100700, 0x0010c3d7,
1478 0x001043e1, 0x00500060, 0x00200232, 0x0060000a, 0x00104800, 0x00108901,
1479 0x00104910, 0x00124920, 0x0020001f, 0x00100940, 0x00140965, 0x00148a00,
1480 0x00108a14, 0x00160b00, 0x00134b2c, 0x0010cd00, 0x0010cd04, 0x0010cd08,
1481 0x00104d80, 0x00104e00, 0x0012d600, 0x00105c00, 0x00104f06, 0x002002c8,
1482 0x0060000a, 0x00300000, 0x00200080, 0x00407d00, 0x00200084, 0x00800001,
1483 0x00200510, 0x0060000a, 0x002037e0, 0x0040838a, 0x00201320, 0x00800029,
1484 0x00409400, 0x00600006, 0x004090e6, 0x00700080, 0x0020007a, 0x0060000a,
1485 0x00104280, 0x002002c8, 0x0060000a, 0x00200004, 0x00800001, 0x00700000,
1486 0x00200000, 0x0060000a, 0x00106002, 0x0040ac68, 0x00700000, 0x00200000,
1487 0x0060000a, 0x00106002, 0x00700080, 0x00400a68, 0x00500060, 0x00600007,
1488 0x00409e88, 0x0060000f, 0x00000000, 0x00500060, 0x00200000, 0x0060000a,
1489 0x00700000, 0x00106001, 0x00910880, 0x00901ffe, 0x01940000, 0x00200020,
1490 0x0060000b, 0x00500069, 0x0060000c, 0x00402c68, 0x0040ae06, 0x0040af05,
1491 0x00600009, 0x00700005, 0x00700006, 0x0060000e, ~0
1494 static uint32_t nv46_ctx_voodoo[] = {
1495 0x00400889, 0x00200000, 0x0060000a, 0x00200000, 0x00300000, 0x00800001,
1496 0x00700009, 0x0060000e, 0x00400d64, 0x00400d05, 0x00408f65, 0x00409306,
1497 0x0040a068, 0x0040198f, 0x00200001, 0x0060000a, 0x00700080, 0x00104042,
1498 0x00200001, 0x0060000a, 0x00700000, 0x001040c5, 0x00401826, 0x00401968,
1499 0x0060000d, 0x00200000, 0x0060000a, 0x00700000, 0x00106000, 0x00700080,
1500 0x004020e6, 0x007000a0, 0x00500060, 0x00200008, 0x0060000a, 0x0011814d,
1501 0x00110158, 0x00105401, 0x0020003a, 0x00100051, 0x001040c5, 0x0010c1c4,
1502 0x001041c9, 0x0010c1dc, 0x00150210, 0x0012c225, 0x00108238, 0x0010823e,
1503 0x001242c0, 0x00200040, 0x00100280, 0x00128100, 0x00128120, 0x00128143,
1504 0x0011415f, 0x0010815c, 0x0010c140, 0x00104029, 0x00110400, 0x00104d10,
1505 0x00500060, 0x00403f87, 0x0060000d, 0x004079e6, 0x002000f7, 0x0060000a,
1506 0x00200045, 0x00100620, 0x00104668, 0x0017466d, 0x0011068b, 0x00168691,
1507 0x001046ae, 0x001046b0, 0x001206b4, 0x001046c4, 0x001146c6, 0x00200022,
1508 0x001006cc, 0x001246f0, 0x002000c0, 0x00100700, 0x0010c3d7, 0x001043e1,
1509 0x00500060, 0x0020027f, 0x0060000a, 0x00104800, 0x00108901, 0x00104910,
1510 0x00124920, 0x0020001f, 0x00100940, 0x00140965, 0x00148a00, 0x00108a14,
1511 0x00160b00, 0x00134b2c, 0x0010cd00, 0x0010cd04, 0x0010cd08, 0x00104d80,
1512 0x00104e00, 0x0012d600, 0x00105c00, 0x00104f06, 0x00105406, 0x00105709,
1513 0x00200316, 0x0060000a, 0x00300000, 0x00200080, 0x00407200, 0x00200084,
1514 0x00800001, 0x0020055e, 0x0060000a, 0x002037e0, 0x0040788a, 0x00201320,
1515 0x00800029, 0x00408900, 0x00600006, 0x004085e6, 0x00700080, 0x00200081,
1516 0x0060000a, 0x00104280, 0x00200316, 0x0060000a, 0x00200004, 0x00800001,
1517 0x00700000, 0x00200000, 0x0060000a, 0x00106002, 0x0040a068, 0x00700000,
1518 0x00200000, 0x0060000a, 0x00106002, 0x00700080, 0x00400a68, 0x00500060,
1519 0x00600007, 0x00409388, 0x0060000f, 0x00500060, 0x00200000, 0x0060000a,
1520 0x00700000, 0x00106001, 0x00910880, 0x00901ffe, 0x01940000, 0x00200020,
1521 0x0060000b, 0x00500069, 0x0060000c, 0x00402168, 0x0040a206, 0x0040a305,
1522 0x00600009, 0x00700005, 0x00700006, 0x0060000e, ~0
1525 //this is used for nv49 and nv4b
1526 static uint32_t nv49_4b_ctx_voodoo[] ={
1527 0x00400564, 0x00400505, 0x00408165, 0x00408206, 0x00409e68, 0x00200020,
1528 0x0060000a, 0x00700080, 0x00104042, 0x00200020, 0x0060000a, 0x00700000,
1529 0x001040c5, 0x00400f26, 0x00401068, 0x0060000d, 0x0070008f, 0x0070000e,
1530 0x00408d68, 0x004015e6, 0x007000a0, 0x00700080, 0x0040180f, 0x00700000,
1531 0x00200029, 0x0060000a, 0x0011814d, 0x00110158, 0x00105401, 0x0020003a,
1532 0x00100051, 0x001040c5, 0x0010c1c4, 0x001041c9, 0x0010c1dc, 0x00150210,
1533 0x0012c225, 0x00108238, 0x0010823e, 0x001242c0, 0x00200040, 0x00100280,
1534 0x00128100, 0x00128120, 0x00128143, 0x0011415f, 0x0010815c, 0x0010c140,
1535 0x00104029, 0x00110400, 0x00104d12, 0x00500060, 0x004071e6, 0x00200118,
1536 0x0060000a, 0x00200020, 0x00100620, 0x00154650, 0x00104668, 0x0017466d,
1537 0x0011068b, 0x00168691, 0x001046ae, 0x001046b0, 0x001206b4, 0x001046c4,
1538 0x001146c6, 0x00200022, 0x001006cc, 0x001246f0, 0x002000c0, 0x00100700,
1539 0x0010c3d7, 0x001043e1, 0x00500060, 0x00200290, 0x0060000a, 0x00104800,
1540 0x00108901, 0x00124920, 0x0020001f, 0x00100940, 0x00140965, 0x00144a00,
1541 0x00104a19, 0x0010ca1c, 0x00110b00, 0x00200028, 0x00100b08, 0x00134c2e,
1542 0x0010cd00, 0x0010cd04, 0x00120d08, 0x00104d80, 0x00104e00, 0x0012d600,
1543 0x00105c00, 0x00104f06, 0x00105406, 0x00105709, 0x00200340, 0x0060000a,
1544 0x00300000, 0x00200680, 0x00406a0f, 0x00200684, 0x00800001, 0x00200b88,
1545 0x0060000a, 0x00209540, 0x0040708a, 0x00201350, 0x00800041, 0x00407c0f,
1546 0x00600006, 0x00407ce6, 0x00700080, 0x002000a2, 0x0060000a, 0x00104280,
1547 0x00200340, 0x0060000a, 0x00200004, 0x00800001, 0x0070008e, 0x00408d68,
1548 0x0040020f, 0x00600006, 0x00409e68, 0x00600007, 0x0070000f, 0x0070000e,
1549 0x00408d68, 0x0091a880, 0x00901ffe, 0x10940000, 0x00200020, 0x0060000b,
1550 0x00500069, 0x0060000c, 0x00401568, 0x00700000, 0x00200001, 0x0040910e,
1551 0x00200021, 0x0060000a, 0x00409b0d, 0x00104a40, 0x00104a50, 0x00104a60,
1552 0x00104a70, 0x00104a80, 0x00104a90, 0x00104aa0, 0x00104ab0, 0x00407e0e,
1553 0x0040130f, 0x00408568, 0x0040a006, 0x0040a105, 0x00600009, 0x00700005,
1554 0x00700006, 0x0060000e, ~0
1558 static uint32_t nv4a_ctx_voodoo[] = {
1559 0x00400889, 0x00200000, 0x0060000a, 0x00200000, 0x00300000, 0x00800001,
1560 0x00700009, 0x0060000e, 0x00400d64, 0x00400d05, 0x00409965, 0x00409e06,
1561 0x0040ac68, 0x00200000, 0x0060000a, 0x00700000, 0x00106000, 0x00700080,
1562 0x004014e6, 0x007000a0, 0x00401a84, 0x00700082, 0x00600001, 0x00500061,
1563 0x00600002, 0x00401b68, 0x00500060, 0x00200001, 0x0060000a, 0x0011814d,
1564 0x00110158, 0x00105401, 0x0020003a, 0x00100051, 0x001040c5, 0x0010c1c4,
1565 0x001041c9, 0x0010c1dc, 0x00150210, 0x0012c225, 0x00108238, 0x0010823e,
1566 0x001242c0, 0x00200040, 0x00100280, 0x00128100, 0x00128120, 0x00128143,
1567 0x0011415f, 0x0010815c, 0x0010c140, 0x00104029, 0x00110400, 0x00104d10,
1568 0x001046ec, 0x00500060, 0x00403a87, 0x0060000d, 0x00407de6, 0x002000f1,
1569 0x0060000a, 0x00148653, 0x00104668, 0x0010c66d, 0x00120682, 0x0011068b,
1570 0x00168691, 0x001046ae, 0x001046b0, 0x001206b4, 0x001046c4, 0x001146c6,
1571 0x001646cc, 0x001186e6, 0x001046ed, 0x001246f0, 0x002000c0, 0x00100700,
1572 0x0010c3d7, 0x001043e1, 0x00500060, 0x00405800, 0x00405884, 0x00600003,
1573 0x00500067, 0x00600008, 0x00500060, 0x00700082, 0x00200232, 0x0060000a,
1574 0x00104800, 0x00108901, 0x00104910, 0x00124920, 0x0020001f, 0x00100940,
1575 0x00140965, 0x00148a00, 0x00108a14, 0x00160b00, 0x00134b2c, 0x0010cd00,
1576 0x0010cd04, 0x0010cd08, 0x00104d80, 0x00104e00, 0x0012d600, 0x00105c00,
1577 0x00104f06, 0x002002c8, 0x0060000a, 0x00300000, 0x00200080, 0x00407300,
1578 0x00200084, 0x00800001, 0x00200510, 0x0060000a, 0x002037e0, 0x0040798a,
1579 0x00201320, 0x00800029, 0x00407d84, 0x00201560, 0x00800002, 0x00409100,
1580 0x00600006, 0x00700003, 0x00408ae6, 0x00700080, 0x0020007a, 0x0060000a,
1581 0x00104280, 0x002002c8, 0x0060000a, 0x00200004, 0x00800001, 0x00700000,
1582 0x00200000, 0x0060000a, 0x00106002, 0x0040ac84, 0x00700002, 0x00600004,
1583 0x0040ac68, 0x00700000, 0x00200000, 0x0060000a, 0x00106002, 0x00700080,
1584 0x00400a84, 0x00700002, 0x00400a68, 0x00500060, 0x00600007, 0x00409d88,
1585 0x0060000f, 0x00000000, 0x00500060, 0x00200000, 0x0060000a, 0x00700000,
1586 0x00106001, 0x00700083, 0x00910880, 0x00901ffe, 0x01940000, 0x00200020,
1587 0x0060000b, 0x00500069, 0x0060000c, 0x00401b68, 0x0040ae06, 0x0040af05,
1588 0x00600009, 0x00700005, 0x00700006, 0x0060000e, ~0
1591 static uint32_t nv4c_ctx_voodoo[] = {
1592 0x00400889, 0x00200000, 0x0060000a, 0x00200000, 0x00300000, 0x00800001,
1593 0x00700009, 0x0060000e, 0x00400d64, 0x00400d05, 0x00409065, 0x00409406,
1594 0x0040a168, 0x0040198f, 0x00200001, 0x0060000a, 0x00700080, 0x00104042,
1595 0x00200001, 0x0060000a, 0x00700000, 0x001040c5, 0x00401826, 0x00401968,
1596 0x0060000d, 0x00200000, 0x0060000a, 0x00700000, 0x00106000, 0x00700080,
1597 0x004020e6, 0x007000a0, 0x00500060, 0x00200001, 0x0060000a, 0x0011814d,
1598 0x00110158, 0x00105401, 0x0020003a, 0x00100051, 0x001040c5, 0x0010c1c4,
1599 0x001041c9, 0x0010c1dc, 0x00150210, 0x0012c225, 0x00108238, 0x0010823e,
1600 0x001242c0, 0x00200040, 0x00100280, 0x00128100, 0x00128120, 0x00128143,
1601 0x0011415f, 0x0010815c, 0x0010c140, 0x00104029, 0x00110400, 0x00104d10,
1602 0x0010427e, 0x001046ec, 0x00500060, 0x00404187, 0x0060000d, 0x00407ae6,
1603 0x002000f2, 0x0060000a, 0x00148653, 0x00104668, 0x0010c66d, 0x00120682,
1604 0x0011068b, 0x00168691, 0x001046ae, 0x001046b0, 0x001206b4, 0x001046c4,
1605 0x001146c6, 0x00200020, 0x001006cc, 0x001046ed, 0x001246f0, 0x002000c0,
1606 0x00100700, 0x0010c3d7, 0x001043e1, 0x00500060, 0x00200234, 0x0060000a,
1607 0x00104800, 0x00108901, 0x00104910, 0x00124920, 0x0020001f, 0x00100940,
1608 0x00140965, 0x00148a00, 0x00108a14, 0x00140b00, 0x00134b2c, 0x0010cd00,
1609 0x0010cd04, 0x00104d08, 0x00104d80, 0x00104e00, 0x0012d600, 0x00105c00,
1610 0x00104f06, 0x002002c0, 0x0060000a, 0x00300000, 0x00200080, 0x00407300,
1611 0x00200084, 0x00800001, 0x00200508, 0x0060000a, 0x00201320, 0x0040798a,
1612 0xfffffaf8, 0x00800029, 0x00408a00, 0x00600006, 0x004086e6, 0x00700080,
1613 0x0020007a, 0x0060000a, 0x00104280, 0x002002c0, 0x0060000a, 0x00200004,
1614 0x00800001, 0x00700000, 0x00200000, 0x0060000a, 0x00106002, 0x0040a168,
1615 0x00700000, 0x00200000, 0x0060000a, 0x00106002, 0x00700080, 0x00400a68,
1616 0x00500060, 0x00600007, 0x00409488, 0x0060000f, 0x00500060, 0x00200000,
1617 0x0060000a, 0x00700000, 0x00106001, 0x00910880, 0x00901ffe, 0x01940000,
1618 0x00200020, 0x0060000b, 0x00500069, 0x0060000c, 0x00402168, 0x0040a306,
1619 0x0040a405, 0x00600009, 0x00700005, 0x00700006, 0x0060000e, ~0
1622 static uint32_t nv4e_ctx_voodoo[] = {
1623 0x00400889, 0x00200000, 0x0060000a, 0x00200000, 0x00300000, 0x00800001,
1624 0x00700009, 0x0060000e, 0x00400d64, 0x00400d05, 0x00409565, 0x00409a06,
1625 0x0040a868, 0x00200000, 0x0060000a, 0x00700000, 0x00106000, 0x00700080,
1626 0x004014e6, 0x007000a0, 0x00401a84, 0x00700082, 0x00600001, 0x00500061,
1627 0x00600002, 0x00401b68, 0x00500060, 0x00200001, 0x0060000a, 0x0011814d,
1628 0x00110158, 0x00105401, 0x0020003a, 0x00100051, 0x001040c5, 0x0010c1c4,
1629 0x001041c9, 0x0010c1dc, 0x00150210, 0x0012c225, 0x00108238, 0x0010823e,
1630 0x001242c0, 0x00200040, 0x00100280, 0x00128100, 0x00128120, 0x00128143,
1631 0x0011415f, 0x0010815c, 0x0010c140, 0x00104029, 0x00110400, 0x00104d10,
1632 0x001046ec, 0x00500060, 0x00403a87, 0x0060000d, 0x00407ce6, 0x002000f1,
1633 0x0060000a, 0x00148653, 0x00104668, 0x0010c66d, 0x00120682, 0x0011068b,
1634 0x00168691, 0x001046ae, 0x001046b0, 0x001206b4, 0x001046c4, 0x001146c6,
1635 0x001646cc, 0x001186e6, 0x001046ed, 0x001246f0, 0x002000c0, 0x00100700,
1636 0x0010c3d7, 0x001043e1, 0x00500060, 0x00405800, 0x00405884, 0x00600003,
1637 0x00500067, 0x00600008, 0x00500060, 0x00700082, 0x00200232, 0x0060000a,
1638 0x00104800, 0x00108901, 0x00104910, 0x00124920, 0x0020001f, 0x00100940,
1639 0x00140965, 0x00148a00, 0x00108a14, 0x00140b00, 0x00134b2c, 0x0010cd00,
1640 0x0010cd04, 0x00104d08, 0x00104d80, 0x00104e00, 0x00105c00, 0x00104f06,
1641 0x002002b2, 0x0060000a, 0x00300000, 0x00200080, 0x00407200, 0x00200084,
1642 0x00800001, 0x002004fa, 0x0060000a, 0x00201320, 0x0040788a, 0xfffffb06,
1643 0x00800029, 0x00407c84, 0x00200b20, 0x00800002, 0x00408d00, 0x00600006,
1644 0x00700003, 0x004086e6, 0x00700080, 0x002002b2, 0x0060000a, 0x00200004,
1645 0x00800001, 0x00700000, 0x00200000, 0x0060000a, 0x00106002, 0x0040a884,
1646 0x00700002, 0x00600004, 0x0040a868, 0x00700000, 0x00200000, 0x0060000a,
1647 0x00106002, 0x00700080, 0x00400a84, 0x00700002, 0x00400a68, 0x00500060,
1648 0x00600007, 0x00409988, 0x0060000f, 0x00000000, 0x00500060, 0x00200000,
1649 0x0060000a, 0x00700000, 0x00106001, 0x00700083, 0x00910880, 0x00901ffe,
1650 0x01940000, 0x00200020, 0x0060000b, 0x00500069, 0x0060000c, 0x00401b68,
1651 0x0040aa06, 0x0040ab05, 0x00600009, 0x00700005, 0x00700006, 0x0060000e,
1665 nv40_graph_init(struct drm_device *dev)
1667 struct drm_nouveau_private *dev_priv =
1668 (struct drm_nouveau_private *)dev->dev_private;
1669 uint32_t *ctx_voodoo;
1670 uint32_t vramsz, tmp;
1673 NV_WRITE(NV03_PMC_ENABLE, NV_READ(NV03_PMC_ENABLE) &
1674 ~NV_PMC_ENABLE_PGRAPH);
1675 NV_WRITE(NV03_PMC_ENABLE, NV_READ(NV03_PMC_ENABLE) |
1676 NV_PMC_ENABLE_PGRAPH);
1678 switch (dev_priv->chipset) {
1679 case 0x40: ctx_voodoo = nv40_ctx_voodoo; break;
1680 case 0x43: ctx_voodoo = nv43_ctx_voodoo; break;
1681 case 0x44: ctx_voodoo = nv44_ctx_voodoo; break;
1682 case 0x46: ctx_voodoo = nv46_ctx_voodoo; break;
1683 case 0x49: ctx_voodoo = nv49_4b_ctx_voodoo; break;
1684 case 0x4a: ctx_voodoo = nv4a_ctx_voodoo; break;
1685 case 0x4b: ctx_voodoo = nv49_4b_ctx_voodoo; break;
1686 case 0x4c: ctx_voodoo = nv4c_ctx_voodoo; break;
1687 case 0x4e: ctx_voodoo = nv4e_ctx_voodoo; break;
1689 DRM_ERROR("Unknown ctx_voodoo for chipset 0x%02x\n",
1695 /* Load the context voodoo onto the card */
1697 DRM_DEBUG("Loading context-switch voodoo\n");
1700 NV_WRITE(NV40_PGRAPH_CTXCTL_UCODE_INDEX, 0);
1701 while (ctx_voodoo[i] != ~0) {
1702 NV_WRITE(NV40_PGRAPH_CTXCTL_UCODE_DATA, ctx_voodoo[i]);
1707 /* No context present currently */
1708 NV_WRITE(NV40_PGRAPH_CTXCTL_CUR, 0x00000000);
1710 NV_WRITE(NV03_PGRAPH_INTR , 0xFFFFFFFF);
1711 NV_WRITE(NV40_PGRAPH_INTR_EN, 0xFFFFFFFF);
1713 NV_WRITE(NV04_PGRAPH_DEBUG_0, 0xFFFFFFFF);
1714 NV_WRITE(NV04_PGRAPH_DEBUG_0, 0x00000000);
1715 NV_WRITE(NV04_PGRAPH_DEBUG_1, 0x401287c0);
1716 NV_WRITE(NV04_PGRAPH_DEBUG_3, 0xe0de8055);
1717 NV_WRITE(NV10_PGRAPH_DEBUG_4, 0x00008000);
1718 NV_WRITE(NV04_PGRAPH_LIMIT_VIOL_PIX, 0x00be3c5f);
1720 NV_WRITE(NV10_PGRAPH_CTX_CONTROL, 0x10010100);
1721 NV_WRITE(NV10_PGRAPH_STATE , 0xFFFFFFFF);
1722 NV_WRITE(NV04_PGRAPH_FIFO , 0x00000001);
1724 j = NV_READ(0x1540) & 0xff;
1726 for (i=0; !(j&1); j>>=1, i++);
1727 NV_WRITE(0x405000, i);
1730 if (dev_priv->chipset == 0x40) {
1731 NV_WRITE(0x4009b0, 0x83280fff);
1732 NV_WRITE(0x4009b4, 0x000000a0);
1734 NV_WRITE(0x400820, 0x83280eff);
1735 NV_WRITE(0x400824, 0x000000a0);
1738 switch (dev_priv->chipset) {
1741 NV_WRITE(0x4009b8, 0x0078e366);
1742 NV_WRITE(0x4009bc, 0x0000014c);
1745 case 0x42: /* pciid also 0x00Cx */
1746 // case 0x0120: //XXX (pciid)
1747 NV_WRITE(0x400828, 0x007596ff);
1748 NV_WRITE(0x40082c, 0x00000108);
1751 NV_WRITE(0x400828, 0x0072cb77);
1752 NV_WRITE(0x40082c, 0x00000108);
1755 case 0x46: /* G72 */
1757 case 0x4c: /* G7x-based C51 */
1759 NV_WRITE(0x400860, 0);
1760 NV_WRITE(0x400864, 0);
1762 case 0x47: /* G70 */
1763 case 0x49: /* G71 */
1764 case 0x4b: /* G73 */
1765 NV_WRITE(0x400828, 0x07830610);
1766 NV_WRITE(0x40082c, 0x0000016A);
1772 NV_WRITE(0x400b38, 0x2ffff800);
1773 NV_WRITE(0x400b3c, 0x00006000);
1775 /* copy tile info from PFB */
1776 switch (dev_priv->chipset) {
1777 case 0x40: /* vanilla NV40 */
1778 for (i=0; i<NV10_PFB_TILE__SIZE; i++) {
1779 tmp = NV_READ(NV10_PFB_TILE(i));
1780 NV_WRITE(NV40_PGRAPH_TILE0(i), tmp);
1781 NV_WRITE(NV40_PGRAPH_TILE1(i), tmp);
1782 tmp = NV_READ(NV10_PFB_TLIMIT(i));
1783 NV_WRITE(NV40_PGRAPH_TLIMIT0(i), tmp);
1784 NV_WRITE(NV40_PGRAPH_TLIMIT1(i), tmp);
1785 tmp = NV_READ(NV10_PFB_TSIZE(i));
1786 NV_WRITE(NV40_PGRAPH_TSIZE0(i), tmp);
1787 NV_WRITE(NV40_PGRAPH_TSIZE1(i), tmp);
1788 tmp = NV_READ(NV10_PFB_TSTATUS(i));
1789 NV_WRITE(NV40_PGRAPH_TSTATUS0(i), tmp);
1790 NV_WRITE(NV40_PGRAPH_TSTATUS1(i), tmp);
1795 case 0x4e: /* NV44-based cores don't have 0x406900? */
1796 for (i=0; i<NV40_PFB_TILE__SIZE_0; i++) {
1797 tmp = NV_READ(NV40_PFB_TILE(i));
1798 NV_WRITE(NV40_PGRAPH_TILE0(i), tmp);
1799 tmp = NV_READ(NV40_PFB_TLIMIT(i));
1800 NV_WRITE(NV40_PGRAPH_TLIMIT0(i), tmp);
1801 tmp = NV_READ(NV40_PFB_TSIZE(i));
1802 NV_WRITE(NV40_PGRAPH_TSIZE0(i), tmp);
1803 tmp = NV_READ(NV40_PFB_TSTATUS(i));
1804 NV_WRITE(NV40_PGRAPH_TSTATUS0(i), tmp);
1810 case 0x4b: /* G7X-based cores */
1811 for (i=0; i<NV40_PFB_TILE__SIZE_1; i++) {
1812 tmp = NV_READ(NV40_PFB_TILE(i));
1813 NV_WRITE(NV47_PGRAPH_TILE0(i), tmp);
1814 NV_WRITE(NV40_PGRAPH_TILE1(i), tmp);
1815 tmp = NV_READ(NV40_PFB_TLIMIT(i));
1816 NV_WRITE(NV47_PGRAPH_TLIMIT0(i), tmp);
1817 NV_WRITE(NV40_PGRAPH_TLIMIT1(i), tmp);
1818 tmp = NV_READ(NV40_PFB_TSIZE(i));
1819 NV_WRITE(NV47_PGRAPH_TSIZE0(i), tmp);
1820 NV_WRITE(NV40_PGRAPH_TSIZE1(i), tmp);
1821 tmp = NV_READ(NV40_PFB_TSTATUS(i));
1822 NV_WRITE(NV47_PGRAPH_TSTATUS0(i), tmp);
1823 NV_WRITE(NV40_PGRAPH_TSTATUS1(i), tmp);
1826 default: /* everything else */
1827 for (i=0; i<NV40_PFB_TILE__SIZE_0; i++) {
1828 tmp = NV_READ(NV40_PFB_TILE(i));
1829 NV_WRITE(NV40_PGRAPH_TILE0(i), tmp);
1830 NV_WRITE(NV40_PGRAPH_TILE1(i), tmp);
1831 tmp = NV_READ(NV40_PFB_TLIMIT(i));
1832 NV_WRITE(NV40_PGRAPH_TLIMIT0(i), tmp);
1833 NV_WRITE(NV40_PGRAPH_TLIMIT1(i), tmp);
1834 tmp = NV_READ(NV40_PFB_TSIZE(i));
1835 NV_WRITE(NV40_PGRAPH_TSIZE0(i), tmp);
1836 NV_WRITE(NV40_PGRAPH_TSIZE1(i), tmp);
1837 tmp = NV_READ(NV40_PFB_TSTATUS(i));
1838 NV_WRITE(NV40_PGRAPH_TSTATUS0(i), tmp);
1839 NV_WRITE(NV40_PGRAPH_TSTATUS1(i), tmp);
1844 /* begin RAM config */
1845 vramsz = drm_get_resource_len(dev, 0) - 1;
1846 switch (dev_priv->chipset) {
1848 NV_WRITE(0x4009A4, NV_READ(NV04_PFB_CFG0));
1849 NV_WRITE(0x4009A8, NV_READ(NV04_PFB_CFG1));
1850 NV_WRITE(0x4069A4, NV_READ(NV04_PFB_CFG0));
1851 NV_WRITE(0x4069A8, NV_READ(NV04_PFB_CFG1));
1852 NV_WRITE(0x400820, 0);
1853 NV_WRITE(0x400824, 0);
1854 NV_WRITE(0x400864, vramsz);
1855 NV_WRITE(0x400868, vramsz);
1858 switch (dev_priv->chipset) {
1863 NV_WRITE(0x400DF0, NV_READ(NV04_PFB_CFG0));
1864 NV_WRITE(0x400DF4, NV_READ(NV04_PFB_CFG1));
1867 NV_WRITE(0x4009F0, NV_READ(NV04_PFB_CFG0));
1868 NV_WRITE(0x4009F4, NV_READ(NV04_PFB_CFG1));
1871 NV_WRITE(0x4069F0, NV_READ(NV04_PFB_CFG0));
1872 NV_WRITE(0x4069F4, NV_READ(NV04_PFB_CFG1));
1873 NV_WRITE(0x400840, 0);
1874 NV_WRITE(0x400844, 0);
1875 NV_WRITE(0x4008A0, vramsz);
1876 NV_WRITE(0x4008A4, vramsz);
1880 /* per-context state, doesn't belong here */
1881 NV_WRITE(0x400B20, 0x00000000);
1882 NV_WRITE(0x400B04, 0xFFFFFFFF);
1884 tmp = NV_READ(NV10_PGRAPH_SURFACE) & 0x0007ff00;
1885 NV_WRITE(NV10_PGRAPH_SURFACE, tmp);
1886 tmp = NV_READ(NV10_PGRAPH_SURFACE) | 0x00020100;
1887 NV_WRITE(NV10_PGRAPH_SURFACE, tmp);
1889 NV_WRITE(NV03_PGRAPH_ABS_UCLIP_XMIN, 0);
1890 NV_WRITE(NV03_PGRAPH_ABS_UCLIP_YMIN, 0);
1891 NV_WRITE(NV03_PGRAPH_ABS_UCLIP_XMAX, 0x7fff);
1892 NV_WRITE(NV03_PGRAPH_ABS_UCLIP_YMAX, 0x7fff);
1897 void nv40_graph_takedown(struct drm_device *dev)