OSDN Git Service

25ee5c77e23b2b4491806742a8c6d289a1114d9f
[android-x86/external-libdrm.git] / shared-core / nv40_graph.c
1 /*
2  * Copyright (C) 2007 Ben Skeggs.
3  * All Rights Reserved.
4  *
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:
12  *
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.
16  *
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.
24  *
25  */
26
27 #include "drmP.h"
28 #include "drm.h"
29 #include "nouveau_drv.h"
30
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
35  */
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)
44
45 /*TODO: deciper what each offset in the context represents. The below
46  *      contexts are taken from dumps just after the 3D object is
47  *      created.
48  */
49 static void
50 nv40_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
51 {
52         struct drm_nouveau_private *dev_priv = dev->dev_private;
53         int i;
54
55         /* Always has the "instance address" of itself at offset 0 */
56         INSTANCE_WR(ctx, 0x00000/4, ctx->im_pramin->start);
57         /* unknown */
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);
135         /* unknown */
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);
188 }
189
190 static void
191 nv43_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
192 {
193         struct drm_nouveau_private *dev_priv = dev->dev_private;
194         int i;
195         
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);
304 };
305
306 static void
307 nv46_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
308 {
309         struct drm_nouveau_private *dev_priv = dev->dev_private;
310         int i;
311
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);
455 }
456
457 static void
458 nv49_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
459 {
460         struct drm_nouveau_private *dev_priv = dev->dev_private;
461         int i;
462
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);
678 }
679
680 static void
681 nv4a_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
682 {
683         struct drm_nouveau_private *dev_priv = dev->dev_private;
684         int i;
685
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);
795 }
796
797 static void
798 nv4b_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
799 {
800         struct drm_nouveau_private *dev_priv = dev->dev_private;
801         int i;
802
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);
1010 }
1011
1012 static void
1013 nv4c_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
1014 {
1015         struct drm_nouveau_private *dev_priv = dev->dev_private;
1016         int i;
1017
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);
1117 }
1118
1119 static void
1120 nv4e_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
1121 {
1122         struct drm_nouveau_private *dev_priv = dev->dev_private;
1123         int i;
1124
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);
1224 }
1225
1226 int
1227 nv40_graph_create_context(struct nouveau_channel *chan)
1228 {
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;
1233         int ret;
1234
1235         switch (dev_priv->chipset) {
1236         case 0x40:
1237                 ctx_size = NV40_GRCTX_SIZE;
1238                 ctx_init = nv40_graph_context_init;
1239                 break;
1240         case 0x43:
1241                 ctx_size = NV43_GRCTX_SIZE;
1242                 ctx_init = nv43_graph_context_init;
1243                 break;
1244         case 0x46:
1245                 ctx_size = NV46_GRCTX_SIZE;
1246                 ctx_init = nv46_graph_context_init;
1247                 break;
1248         case 0x49:
1249                 ctx_size = NV49_GRCTX_SIZE;
1250                 ctx_init = nv49_graph_context_init;
1251                 break;
1252         case 0x44:
1253         case 0x4a:
1254                 ctx_size = NV4A_GRCTX_SIZE;
1255                 ctx_init = nv4a_graph_context_init;
1256                 break;
1257         case 0x4b:
1258                 ctx_size = NV4B_GRCTX_SIZE;
1259                 ctx_init = nv4b_graph_context_init;
1260                 break;
1261         case 0x4c:
1262                 ctx_size = NV4C_GRCTX_SIZE;
1263                 ctx_init = nv4c_graph_context_init;
1264                 break;
1265         case 0x4e:
1266                 ctx_size = NV4E_GRCTX_SIZE;
1267                 ctx_init = nv4e_graph_context_init;
1268                 break;
1269         default:
1270                 ctx_size = NV40_GRCTX_SIZE;
1271                 ctx_init = nv40_graph_context_init;
1272                 break;
1273         }
1274
1275         if ((ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, ctx_size, 16,
1276                                           NVOBJ_FLAG_ZERO_ALLOC,
1277                                           &chan->ramin_grctx)))
1278                 return ret;
1279
1280         /* Initialise default context values */
1281         ctx_init(dev, chan->ramin_grctx->gpuobj);
1282
1283         return 0;
1284 }
1285
1286 void
1287 nv40_graph_destroy_context(struct nouveau_channel *chan)
1288 {
1289         nouveau_gpuobj_ref_del(chan->dev, &chan->ramin_grctx);
1290 }
1291
1292 static int
1293 nv40_graph_transfer_context(struct drm_device *dev, uint32_t inst, int save)
1294 {
1295         struct drm_nouveau_private *dev_priv = dev->dev_private;
1296         uint32_t old_cp, tv = 1000;
1297         int i;
1298
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);
1305
1306         for (i = 0; i < tv; i++) {
1307                 if (NV_READ(NV40_PGRAPH_CTXCTL_030C) == 0)
1308                         break;
1309         }
1310         NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, old_cp);
1311
1312         if (i == tv) {
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));
1320                 return -EBUSY;
1321         }
1322
1323         return 0;
1324 }
1325
1326 /* Save current context (from PGRAPH) into the channel's context
1327  *XXX: fails sometimes, not sure why..
1328  */
1329 int
1330 nv40_graph_save_context(struct nouveau_channel *chan)
1331 {
1332         struct drm_device *dev = chan->dev;
1333         uint32_t inst;
1334
1335         if (!chan->ramin_grctx)
1336                 return -EINVAL;
1337         inst = chan->ramin_grctx->instance >> 4;
1338
1339         return nv40_graph_transfer_context(dev, inst, 1);
1340 }
1341
1342 /* Restore the context for a specific channel into PGRAPH
1343  * XXX: fails sometimes.. not sure why
1344  */
1345 int
1346 nv40_graph_load_context(struct nouveau_channel *chan)
1347 {
1348         struct drm_device *dev = chan->dev;
1349         struct drm_nouveau_private *dev_priv = dev->dev_private;
1350         uint32_t inst;
1351         int ret;
1352
1353         if (!chan->ramin_grctx)
1354                 return -EINVAL;
1355         inst = chan->ramin_grctx->instance >> 4;
1356
1357         ret = nv40_graph_transfer_context(dev, inst, 0);
1358         if (ret)
1359                 return ret;
1360
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
1364          * set it here too.
1365          */
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
1373          */
1374         NV_WRITE(NV40_PFIFO_GRCTX_INSTANCE, inst);
1375         return 0;
1376 }
1377
1378 /* Some voodoo that makes context switching work without the binary driver
1379  * initialising the card first.
1380  *
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
1386  * registers.
1387  *
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
1392  *       chip.
1393  *
1394  * mmio-trace dumps from other nv4x/g7x/c5x cards very welcome :)
1395  */
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,
1425         ~0
1426 };
1427
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,
1458         ~0
1459 };
1460
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
1492 };
1493
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
1523 };
1524
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
1555 };
1556
1557
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
1589 };
1590
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
1620 };
1621
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,
1652         ~0
1653 };
1654
1655 /*
1656  * G70          0x47
1657  * G71          0x49
1658  * NV45         0x48
1659  * G72[M]       0x46
1660  * G73          0x4b
1661  * C51_G7X      0x4c
1662  * C51          0x4e
1663  */
1664 int
1665 nv40_graph_init(struct drm_device *dev)
1666 {
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;
1671         int i, j;
1672
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);
1677
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;
1688         default:
1689                 DRM_ERROR("Unknown ctx_voodoo for chipset 0x%02x\n",
1690                                 dev_priv->chipset);
1691                 ctx_voodoo = NULL;
1692                 break;
1693         }
1694
1695         /* Load the context voodoo onto the card */
1696         if (ctx_voodoo) {
1697                 DRM_DEBUG("Loading context-switch voodoo\n");
1698                 i = 0;
1699
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]);
1703                         i++;
1704                 }
1705         }       
1706
1707         /* No context present currently */
1708         NV_WRITE(NV40_PGRAPH_CTXCTL_CUR, 0x00000000);
1709
1710         NV_WRITE(NV03_PGRAPH_INTR   , 0xFFFFFFFF);
1711         NV_WRITE(NV40_PGRAPH_INTR_EN, 0xFFFFFFFF);
1712
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);
1719
1720         NV_WRITE(NV10_PGRAPH_CTX_CONTROL, 0x10010100);
1721         NV_WRITE(NV10_PGRAPH_STATE      , 0xFFFFFFFF);
1722         NV_WRITE(NV04_PGRAPH_FIFO       , 0x00000001);
1723
1724         j = NV_READ(0x1540) & 0xff;
1725         if (j) {
1726                 for (i=0; !(j&1); j>>=1, i++);
1727                 NV_WRITE(0x405000, i);
1728         }
1729
1730         if (dev_priv->chipset == 0x40) {
1731                 NV_WRITE(0x4009b0, 0x83280fff);
1732                 NV_WRITE(0x4009b4, 0x000000a0);
1733         } else {
1734                 NV_WRITE(0x400820, 0x83280eff);
1735                 NV_WRITE(0x400824, 0x000000a0);
1736         }
1737
1738         switch (dev_priv->chipset) {
1739         case 0x40:
1740         case 0x45:
1741                 NV_WRITE(0x4009b8, 0x0078e366);
1742                 NV_WRITE(0x4009bc, 0x0000014c);
1743                 break;
1744         case 0x41:
1745         case 0x42: /* pciid also 0x00Cx */
1746 //      case 0x0120: //XXX (pciid)
1747                 NV_WRITE(0x400828, 0x007596ff);
1748                 NV_WRITE(0x40082c, 0x00000108);
1749                 break;
1750         case 0x43:
1751                 NV_WRITE(0x400828, 0x0072cb77);
1752                 NV_WRITE(0x40082c, 0x00000108);
1753                 break;
1754         case 0x44:
1755         case 0x46: /* G72 */
1756         case 0x4a:
1757         case 0x4c: /* G7x-based C51 */
1758         case 0x4e:
1759                 NV_WRITE(0x400860, 0);
1760                 NV_WRITE(0x400864, 0);
1761                 break;
1762         case 0x47: /* G70 */
1763         case 0x49: /* G71 */
1764         case 0x4b: /* G73 */
1765                 NV_WRITE(0x400828, 0x07830610);
1766                 NV_WRITE(0x40082c, 0x0000016A);
1767                 break;
1768         default:
1769                 break;
1770         }
1771
1772         NV_WRITE(0x400b38, 0x2ffff800);
1773         NV_WRITE(0x400b3c, 0x00006000);
1774
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);
1791                 }
1792                 break;
1793         case 0x44:
1794         case 0x4a:
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);
1805                 }
1806                 break;
1807         case 0x46:
1808         case 0x47:
1809         case 0x49:
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);
1824                 }
1825                 break;
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);
1840                 }
1841                 break;
1842         }
1843
1844         /* begin RAM config */
1845         vramsz = drm_get_resource_len(dev, 0) - 1;
1846         switch (dev_priv->chipset) {
1847         case 0x40:
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);
1856                 break;
1857         default:
1858                 switch (dev_priv->chipset) {
1859                 case 0x46:
1860                 case 0x47:
1861                 case 0x49:
1862                 case 0x4b:
1863                         NV_WRITE(0x400DF0, NV_READ(NV04_PFB_CFG0));
1864                         NV_WRITE(0x400DF4, NV_READ(NV04_PFB_CFG1));
1865                         break;
1866                 default:
1867                         NV_WRITE(0x4009F0, NV_READ(NV04_PFB_CFG0));
1868                         NV_WRITE(0x4009F4, NV_READ(NV04_PFB_CFG1));
1869                         break;
1870                 }
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);
1877                 break;
1878         }
1879
1880         /* per-context state, doesn't belong here */
1881         NV_WRITE(0x400B20, 0x00000000);
1882         NV_WRITE(0x400B04, 0xFFFFFFFF);
1883
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);
1888
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);
1893
1894         return 0;
1895 }
1896
1897 void nv40_graph_takedown(struct drm_device *dev)
1898 {
1899 }
1900