1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#define CP_FLAG_CLEAR 0
24#define CP_FLAG_SET 1
25#define CP_FLAG_SWAP_DIRECTION ((0 * 32) + 0)
26#define CP_FLAG_SWAP_DIRECTION_LOAD 0
27#define CP_FLAG_SWAP_DIRECTION_SAVE 1
28#define CP_FLAG_UNK01 ((0 * 32) + 1)
29#define CP_FLAG_UNK01_CLEAR 0
30#define CP_FLAG_UNK01_SET 1
31#define CP_FLAG_UNK03 ((0 * 32) + 3)
32#define CP_FLAG_UNK03_CLEAR 0
33#define CP_FLAG_UNK03_SET 1
34#define CP_FLAG_USER_SAVE ((0 * 32) + 5)
35#define CP_FLAG_USER_SAVE_NOT_PENDING 0
36#define CP_FLAG_USER_SAVE_PENDING 1
37#define CP_FLAG_USER_LOAD ((0 * 32) + 6)
38#define CP_FLAG_USER_LOAD_NOT_PENDING 0
39#define CP_FLAG_USER_LOAD_PENDING 1
40#define CP_FLAG_UNK0B ((0 * 32) + 0xb)
41#define CP_FLAG_UNK0B_CLEAR 0
42#define CP_FLAG_UNK0B_SET 1
43#define CP_FLAG_XFER_SWITCH ((0 * 32) + 0xe)
44#define CP_FLAG_XFER_SWITCH_DISABLE 0
45#define CP_FLAG_XFER_SWITCH_ENABLE 1
46#define CP_FLAG_STATE ((0 * 32) + 0x1c)
47#define CP_FLAG_STATE_STOPPED 0
48#define CP_FLAG_STATE_RUNNING 1
49#define CP_FLAG_UNK1D ((0 * 32) + 0x1d)
50#define CP_FLAG_UNK1D_CLEAR 0
51#define CP_FLAG_UNK1D_SET 1
52#define CP_FLAG_UNK20 ((1 * 32) + 0)
53#define CP_FLAG_UNK20_CLEAR 0
54#define CP_FLAG_UNK20_SET 1
55#define CP_FLAG_STATUS ((2 * 32) + 0)
56#define CP_FLAG_STATUS_BUSY 0
57#define CP_FLAG_STATUS_IDLE 1
58#define CP_FLAG_AUTO_SAVE ((2 * 32) + 4)
59#define CP_FLAG_AUTO_SAVE_NOT_PENDING 0
60#define CP_FLAG_AUTO_SAVE_PENDING 1
61#define CP_FLAG_AUTO_LOAD ((2 * 32) + 5)
62#define CP_FLAG_AUTO_LOAD_NOT_PENDING 0
63#define CP_FLAG_AUTO_LOAD_PENDING 1
64#define CP_FLAG_NEWCTX ((2 * 32) + 10)
65#define CP_FLAG_NEWCTX_BUSY 0
66#define CP_FLAG_NEWCTX_DONE 1
67#define CP_FLAG_XFER ((2 * 32) + 11)
68#define CP_FLAG_XFER_IDLE 0
69#define CP_FLAG_XFER_BUSY 1
70#define CP_FLAG_ALWAYS ((2 * 32) + 13)
71#define CP_FLAG_ALWAYS_FALSE 0
72#define CP_FLAG_ALWAYS_TRUE 1
73#define CP_FLAG_INTR ((2 * 32) + 15)
74#define CP_FLAG_INTR_NOT_PENDING 0
75#define CP_FLAG_INTR_PENDING 1
76
77#define CP_CTX 0x00100000
78#define CP_CTX_COUNT 0x000f0000
79#define CP_CTX_COUNT_SHIFT 16
80#define CP_CTX_REG 0x00003fff
81#define CP_LOAD_SR 0x00200000
82#define CP_LOAD_SR_VALUE 0x000fffff
83#define CP_BRA 0x00400000
84#define CP_BRA_IP 0x0001ff00
85#define CP_BRA_IP_SHIFT 8
86#define CP_BRA_IF_CLEAR 0x00000080
87#define CP_BRA_FLAG 0x0000007f
88#define CP_WAIT 0x00500000
89#define CP_WAIT_SET 0x00000080
90#define CP_WAIT_FLAG 0x0000007f
91#define CP_SET 0x00700000
92#define CP_SET_1 0x00000080
93#define CP_SET_FLAG 0x0000007f
94#define CP_NEWCTX 0x00600004
95#define CP_NEXT_TO_SWAP 0x00600005
96#define CP_SET_CONTEXT_POINTER 0x00600006
97#define CP_SET_XFER_POINTER 0x00600007
98#define CP_ENABLE 0x00600009
99#define CP_END 0x0060000c
100#define CP_NEXT_TO_CURRENT 0x0060000d
101#define CP_DISABLE1 0x0090ffff
102#define CP_DISABLE2 0x0091ffff
103#define CP_XFER_1 0x008000ff
104#define CP_XFER_2 0x008800ff
105#define CP_SEEK_1 0x00c000ff
106#define CP_SEEK_2 0x00c800ff
107
108#include "ctxnv40.h"
109#include "nv50.h"
110
111#include <subdev/fb.h>
112
113#define IS_NVA3F(x) (((x) > 0xa0 && (x) < 0xaa) || (x) == 0xaf)
114#define IS_NVAAF(x) ((x) >= 0xaa && (x) <= 0xac)
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160enum cp_label {
161 cp_check_load = 1,
162 cp_setup_auto_load,
163 cp_setup_load,
164 cp_setup_save,
165 cp_swap_state,
166 cp_prepare_exit,
167 cp_exit,
168};
169
170static void nv50_gr_construct_mmio(struct nvkm_grctx *ctx);
171static void nv50_gr_construct_xfer1(struct nvkm_grctx *ctx);
172static void nv50_gr_construct_xfer2(struct nvkm_grctx *ctx);
173
174
175
176static int
177nv50_grctx_generate(struct nvkm_grctx *ctx)
178{
179 cp_set (ctx, STATE, RUNNING);
180 cp_set (ctx, XFER_SWITCH, ENABLE);
181
182 cp_bra (ctx, AUTO_SAVE, PENDING, cp_setup_save);
183 cp_bra (ctx, USER_SAVE, PENDING, cp_setup_save);
184
185 cp_name(ctx, cp_check_load);
186 cp_bra (ctx, AUTO_LOAD, PENDING, cp_setup_auto_load);
187 cp_bra (ctx, USER_LOAD, PENDING, cp_setup_load);
188 cp_bra (ctx, ALWAYS, TRUE, cp_prepare_exit);
189
190
191 cp_name(ctx, cp_setup_auto_load);
192 cp_out (ctx, CP_DISABLE1);
193 cp_out (ctx, CP_DISABLE2);
194 cp_out (ctx, CP_ENABLE);
195 cp_out (ctx, CP_NEXT_TO_SWAP);
196 cp_set (ctx, UNK01, SET);
197 cp_name(ctx, cp_setup_load);
198 cp_out (ctx, CP_NEWCTX);
199 cp_wait(ctx, NEWCTX, BUSY);
200 cp_set (ctx, UNK1D, CLEAR);
201 cp_set (ctx, SWAP_DIRECTION, LOAD);
202 cp_bra (ctx, UNK0B, SET, cp_prepare_exit);
203 cp_bra (ctx, ALWAYS, TRUE, cp_swap_state);
204
205
206 cp_name(ctx, cp_setup_save);
207 cp_set (ctx, UNK1D, SET);
208 cp_wait(ctx, STATUS, BUSY);
209 cp_wait(ctx, INTR, PENDING);
210 cp_bra (ctx, STATUS, BUSY, cp_setup_save);
211 cp_set (ctx, UNK01, SET);
212 cp_set (ctx, SWAP_DIRECTION, SAVE);
213
214
215 cp_name(ctx, cp_swap_state);
216 cp_set (ctx, UNK03, SET);
217 cp_pos (ctx, 0x00004/4);
218 cp_ctx (ctx, 0x400828, 1);
219 cp_pos (ctx, 0x00100/4);
220 nv50_gr_construct_mmio(ctx);
221 nv50_gr_construct_xfer1(ctx);
222 nv50_gr_construct_xfer2(ctx);
223
224 cp_bra (ctx, SWAP_DIRECTION, SAVE, cp_check_load);
225
226 cp_set (ctx, UNK20, SET);
227 cp_set (ctx, SWAP_DIRECTION, SAVE);
228 cp_lsr (ctx, ctx->ctxvals_base);
229 cp_out (ctx, CP_SET_XFER_POINTER);
230 cp_lsr (ctx, 4);
231 cp_out (ctx, CP_SEEK_1);
232 cp_out (ctx, CP_XFER_1);
233 cp_wait(ctx, XFER, BUSY);
234
235
236 cp_name(ctx, cp_prepare_exit);
237 cp_set (ctx, UNK01, CLEAR);
238 cp_set (ctx, UNK03, CLEAR);
239 cp_set (ctx, UNK1D, CLEAR);
240
241 cp_bra (ctx, USER_SAVE, PENDING, cp_exit);
242 cp_out (ctx, CP_NEXT_TO_CURRENT);
243
244 cp_name(ctx, cp_exit);
245 cp_set (ctx, USER_SAVE, NOT_PENDING);
246 cp_set (ctx, USER_LOAD, NOT_PENDING);
247 cp_set (ctx, XFER_SWITCH, DISABLE);
248 cp_set (ctx, STATE, STOPPED);
249 cp_out (ctx, CP_END);
250 ctx->ctxvals_pos += 0x400;
251
252 return 0;
253}
254
255void
256nv50_grctx_fill(struct nvkm_device *device, struct nvkm_gpuobj *mem)
257{
258 nv50_grctx_generate(&(struct nvkm_grctx) {
259 .device = device,
260 .mode = NVKM_GRCTX_VALS,
261 .data = mem,
262 });
263}
264
265int
266nv50_grctx_init(struct nvkm_device *device, u32 *size)
267{
268 u32 *ctxprog = kmalloc(512 * 4, GFP_KERNEL), i;
269 struct nvkm_grctx ctx = {
270 .device = device,
271 .mode = NVKM_GRCTX_PROG,
272 .ucode = ctxprog,
273 .ctxprog_max = 512,
274 };
275
276 if (!ctxprog)
277 return -ENOMEM;
278 nv50_grctx_generate(&ctx);
279
280 nvkm_wr32(device, 0x400324, 0);
281 for (i = 0; i < ctx.ctxprog_len; i++)
282 nvkm_wr32(device, 0x400328, ctxprog[i]);
283 *size = ctx.ctxvals_pos * 4;
284 kfree(ctxprog);
285 return 0;
286}
287
288
289
290
291
292
293static void
294nv50_gr_construct_mmio_ddata(struct nvkm_grctx *ctx);
295
296static void
297nv50_gr_construct_mmio(struct nvkm_grctx *ctx)
298{
299 struct nvkm_device *device = ctx->device;
300 int i, j;
301 int offset, base;
302 u32 units = nvkm_rd32(device, 0x1540);
303
304
305 cp_ctx(ctx, 0x400808, 7);
306 gr_def(ctx, 0x400814, 0x00000030);
307 cp_ctx(ctx, 0x400834, 0x32);
308 if (device->chipset == 0x50) {
309 gr_def(ctx, 0x400834, 0xff400040);
310 gr_def(ctx, 0x400838, 0xfff00080);
311 gr_def(ctx, 0x40083c, 0xfff70090);
312 gr_def(ctx, 0x400840, 0xffe806a8);
313 }
314 gr_def(ctx, 0x400844, 0x00000002);
315 if (IS_NVA3F(device->chipset))
316 gr_def(ctx, 0x400894, 0x00001000);
317 gr_def(ctx, 0x4008e8, 0x00000003);
318 gr_def(ctx, 0x4008ec, 0x00001000);
319 if (device->chipset == 0x50)
320 cp_ctx(ctx, 0x400908, 0xb);
321 else if (device->chipset < 0xa0)
322 cp_ctx(ctx, 0x400908, 0xc);
323 else
324 cp_ctx(ctx, 0x400908, 0xe);
325
326 if (device->chipset >= 0xa0)
327 cp_ctx(ctx, 0x400b00, 0x1);
328 if (IS_NVA3F(device->chipset)) {
329 cp_ctx(ctx, 0x400b10, 0x1);
330 gr_def(ctx, 0x400b10, 0x0001629d);
331 cp_ctx(ctx, 0x400b20, 0x1);
332 gr_def(ctx, 0x400b20, 0x0001629d);
333 }
334
335 nv50_gr_construct_mmio_ddata(ctx);
336
337
338 cp_ctx(ctx, 0x400c08, 0x2);
339 gr_def(ctx, 0x400c08, 0x0000fe0c);
340
341
342 if (device->chipset < 0xa0) {
343 cp_ctx(ctx, 0x401008, 0x4);
344 gr_def(ctx, 0x401014, 0x00001000);
345 } else if (!IS_NVA3F(device->chipset)) {
346 cp_ctx(ctx, 0x401008, 0x5);
347 gr_def(ctx, 0x401018, 0x00001000);
348 } else {
349 cp_ctx(ctx, 0x401008, 0x5);
350 gr_def(ctx, 0x401018, 0x00004000);
351 }
352
353
354 cp_ctx(ctx, 0x401400, 0x8);
355 cp_ctx(ctx, 0x401424, 0x3);
356 if (device->chipset == 0x50)
357 gr_def(ctx, 0x40142c, 0x0001fd87);
358 else
359 gr_def(ctx, 0x40142c, 0x00000187);
360 cp_ctx(ctx, 0x401540, 0x5);
361 gr_def(ctx, 0x401550, 0x00001018);
362
363
364 cp_ctx(ctx, 0x401814, 0x1);
365 gr_def(ctx, 0x401814, 0x000000ff);
366 if (device->chipset == 0x50) {
367 cp_ctx(ctx, 0x40181c, 0xe);
368 gr_def(ctx, 0x401850, 0x00000004);
369 } else if (device->chipset < 0xa0) {
370 cp_ctx(ctx, 0x40181c, 0xf);
371 gr_def(ctx, 0x401854, 0x00000004);
372 } else {
373 cp_ctx(ctx, 0x40181c, 0x13);
374 gr_def(ctx, 0x401864, 0x00000004);
375 }
376
377
378 cp_ctx(ctx, 0x401c00, 0x1);
379 switch (device->chipset) {
380 case 0x50:
381 gr_def(ctx, 0x401c00, 0x0001005f);
382 break;
383 case 0x84:
384 case 0x86:
385 case 0x94:
386 gr_def(ctx, 0x401c00, 0x044d00df);
387 break;
388 case 0x92:
389 case 0x96:
390 case 0x98:
391 case 0xa0:
392 case 0xaa:
393 case 0xac:
394 gr_def(ctx, 0x401c00, 0x042500df);
395 break;
396 case 0xa3:
397 case 0xa5:
398 case 0xa8:
399 case 0xaf:
400 gr_def(ctx, 0x401c00, 0x142500df);
401 break;
402 }
403
404
405
406
407 cp_ctx(ctx, 0x402400, 0x1);
408 if (device->chipset == 0x50)
409 cp_ctx(ctx, 0x402408, 0x1);
410 else
411 cp_ctx(ctx, 0x402408, 0x2);
412 gr_def(ctx, 0x402408, 0x00000600);
413
414
415 cp_ctx(ctx, 0x402800, 0x1);
416 if (device->chipset == 0x50)
417 gr_def(ctx, 0x402800, 0x00000006);
418
419
420 cp_ctx(ctx, 0x402c08, 0x6);
421 if (device->chipset != 0x50)
422 gr_def(ctx, 0x402c14, 0x01000000);
423 gr_def(ctx, 0x402c18, 0x000000ff);
424 if (device->chipset == 0x50)
425 cp_ctx(ctx, 0x402ca0, 0x1);
426 else
427 cp_ctx(ctx, 0x402ca0, 0x2);
428 if (device->chipset < 0xa0)
429 gr_def(ctx, 0x402ca0, 0x00000400);
430 else if (!IS_NVA3F(device->chipset))
431 gr_def(ctx, 0x402ca0, 0x00000800);
432 else
433 gr_def(ctx, 0x402ca0, 0x00000400);
434 cp_ctx(ctx, 0x402cac, 0x4);
435
436
437 cp_ctx(ctx, 0x403004, 0x1);
438 gr_def(ctx, 0x403004, 0x00000001);
439
440
441 if (device->chipset >= 0xa0) {
442 cp_ctx(ctx, 0x403404, 0x1);
443 gr_def(ctx, 0x403404, 0x00000001);
444 }
445
446
447 cp_ctx(ctx, 0x405000, 0x1);
448 switch (device->chipset) {
449 case 0x50:
450 gr_def(ctx, 0x405000, 0x00300080);
451 break;
452 case 0x84:
453 case 0xa0:
454 case 0xa3:
455 case 0xa5:
456 case 0xa8:
457 case 0xaa:
458 case 0xac:
459 case 0xaf:
460 gr_def(ctx, 0x405000, 0x000e0080);
461 break;
462 case 0x86:
463 case 0x92:
464 case 0x94:
465 case 0x96:
466 case 0x98:
467 gr_def(ctx, 0x405000, 0x00000080);
468 break;
469 }
470 cp_ctx(ctx, 0x405014, 0x1);
471 gr_def(ctx, 0x405014, 0x00000004);
472 cp_ctx(ctx, 0x40501c, 0x1);
473 cp_ctx(ctx, 0x405024, 0x1);
474 cp_ctx(ctx, 0x40502c, 0x1);
475
476
477 if (device->chipset == 0x50)
478 cp_ctx(ctx, 0x4063e0, 0x1);
479
480
481 if (device->chipset < 0x90) {
482 cp_ctx(ctx, 0x406814, 0x2b);
483 gr_def(ctx, 0x406818, 0x00000f80);
484 gr_def(ctx, 0x406860, 0x007f0080);
485 gr_def(ctx, 0x40689c, 0x007f0080);
486 } else {
487 cp_ctx(ctx, 0x406814, 0x4);
488 if (device->chipset == 0x98)
489 gr_def(ctx, 0x406818, 0x00000f80);
490 else
491 gr_def(ctx, 0x406818, 0x00001f80);
492 if (IS_NVA3F(device->chipset))
493 gr_def(ctx, 0x40681c, 0x00000030);
494 cp_ctx(ctx, 0x406830, 0x3);
495 }
496
497
498 for (i = 0; i < 8; i++) {
499 if (units & (1<<(i+16))) {
500 cp_ctx(ctx, 0x407000 + (i<<8), 3);
501 if (device->chipset == 0x50)
502 gr_def(ctx, 0x407000 + (i<<8), 0x1b74f820);
503 else if (device->chipset != 0xa5)
504 gr_def(ctx, 0x407000 + (i<<8), 0x3b74f821);
505 else
506 gr_def(ctx, 0x407000 + (i<<8), 0x7b74f821);
507 gr_def(ctx, 0x407004 + (i<<8), 0x89058001);
508
509 if (device->chipset == 0x50) {
510 cp_ctx(ctx, 0x407010 + (i<<8), 1);
511 } else if (device->chipset < 0xa0) {
512 cp_ctx(ctx, 0x407010 + (i<<8), 2);
513 gr_def(ctx, 0x407010 + (i<<8), 0x00001000);
514 gr_def(ctx, 0x407014 + (i<<8), 0x0000001f);
515 } else {
516 cp_ctx(ctx, 0x407010 + (i<<8), 3);
517 gr_def(ctx, 0x407010 + (i<<8), 0x00001000);
518 if (device->chipset != 0xa5)
519 gr_def(ctx, 0x407014 + (i<<8), 0x000000ff);
520 else
521 gr_def(ctx, 0x407014 + (i<<8), 0x000001ff);
522 }
523
524 cp_ctx(ctx, 0x407080 + (i<<8), 4);
525 if (device->chipset != 0xa5)
526 gr_def(ctx, 0x407080 + (i<<8), 0x027c10fa);
527 else
528 gr_def(ctx, 0x407080 + (i<<8), 0x827c10fa);
529 if (device->chipset == 0x50)
530 gr_def(ctx, 0x407084 + (i<<8), 0x000000c0);
531 else
532 gr_def(ctx, 0x407084 + (i<<8), 0x400000c0);
533 gr_def(ctx, 0x407088 + (i<<8), 0xb7892080);
534
535 if (device->chipset < 0xa0)
536 cp_ctx(ctx, 0x407094 + (i<<8), 1);
537 else if (!IS_NVA3F(device->chipset))
538 cp_ctx(ctx, 0x407094 + (i<<8), 3);
539 else {
540 cp_ctx(ctx, 0x407094 + (i<<8), 4);
541 gr_def(ctx, 0x4070a0 + (i<<8), 1);
542 }
543 }
544 }
545
546 cp_ctx(ctx, 0x407c00, 0x3);
547 if (device->chipset < 0x90)
548 gr_def(ctx, 0x407c00, 0x00010040);
549 else if (device->chipset < 0xa0)
550 gr_def(ctx, 0x407c00, 0x00390040);
551 else
552 gr_def(ctx, 0x407c00, 0x003d0040);
553 gr_def(ctx, 0x407c08, 0x00000022);
554 if (device->chipset >= 0xa0) {
555 cp_ctx(ctx, 0x407c10, 0x3);
556 cp_ctx(ctx, 0x407c20, 0x1);
557 cp_ctx(ctx, 0x407c2c, 0x1);
558 }
559
560 if (device->chipset < 0xa0) {
561 cp_ctx(ctx, 0x407d00, 0x9);
562 } else {
563 cp_ctx(ctx, 0x407d00, 0x15);
564 }
565 if (device->chipset == 0x98)
566 gr_def(ctx, 0x407d08, 0x00380040);
567 else {
568 if (device->chipset < 0x90)
569 gr_def(ctx, 0x407d08, 0x00010040);
570 else if (device->chipset < 0xa0)
571 gr_def(ctx, 0x407d08, 0x00390040);
572 else {
573 if (device->fb->ram->type != NVKM_RAM_TYPE_GDDR5)
574 gr_def(ctx, 0x407d08, 0x003d0040);
575 else
576 gr_def(ctx, 0x407d08, 0x003c0040);
577 }
578 gr_def(ctx, 0x407d0c, 0x00000022);
579 }
580
581
582 for (i = 0; i < 10; i++) {
583 if (units & (1<<i)) {
584 if (device->chipset < 0xa0)
585 base = 0x408000 + (i<<12);
586 else
587 base = 0x408000 + (i<<11);
588 if (device->chipset < 0xa0)
589 offset = base + 0xc00;
590 else
591 offset = base + 0x80;
592 cp_ctx(ctx, offset + 0x00, 1);
593 gr_def(ctx, offset + 0x00, 0x0000ff0a);
594 cp_ctx(ctx, offset + 0x08, 1);
595
596
597 for (j = 0; j < (device->chipset < 0xa0 ? 2 : 4); j++) {
598 if (!(units & (1 << (j+24)))) continue;
599 if (device->chipset < 0xa0)
600 offset = base + 0x200 + (j<<7);
601 else
602 offset = base + 0x100 + (j<<7);
603 cp_ctx(ctx, offset, 0x20);
604 gr_def(ctx, offset + 0x00, 0x01800000);
605 gr_def(ctx, offset + 0x04, 0x00160000);
606 gr_def(ctx, offset + 0x08, 0x01800000);
607 gr_def(ctx, offset + 0x18, 0x0003ffff);
608 switch (device->chipset) {
609 case 0x50:
610 gr_def(ctx, offset + 0x1c, 0x00080000);
611 break;
612 case 0x84:
613 gr_def(ctx, offset + 0x1c, 0x00880000);
614 break;
615 case 0x86:
616 gr_def(ctx, offset + 0x1c, 0x018c0000);
617 break;
618 case 0x92:
619 case 0x96:
620 case 0x98:
621 gr_def(ctx, offset + 0x1c, 0x118c0000);
622 break;
623 case 0x94:
624 gr_def(ctx, offset + 0x1c, 0x10880000);
625 break;
626 case 0xa0:
627 case 0xa5:
628 gr_def(ctx, offset + 0x1c, 0x310c0000);
629 break;
630 case 0xa3:
631 case 0xa8:
632 case 0xaa:
633 case 0xac:
634 case 0xaf:
635 gr_def(ctx, offset + 0x1c, 0x300c0000);
636 break;
637 }
638 gr_def(ctx, offset + 0x40, 0x00010401);
639 if (device->chipset == 0x50)
640 gr_def(ctx, offset + 0x48, 0x00000040);
641 else
642 gr_def(ctx, offset + 0x48, 0x00000078);
643 gr_def(ctx, offset + 0x50, 0x000000bf);
644 gr_def(ctx, offset + 0x58, 0x00001210);
645 if (device->chipset == 0x50)
646 gr_def(ctx, offset + 0x5c, 0x00000080);
647 else
648 gr_def(ctx, offset + 0x5c, 0x08000080);
649 if (device->chipset >= 0xa0)
650 gr_def(ctx, offset + 0x68, 0x0000003e);
651 }
652
653 if (device->chipset < 0xa0)
654 cp_ctx(ctx, base + 0x300, 0x4);
655 else
656 cp_ctx(ctx, base + 0x300, 0x5);
657 if (device->chipset == 0x50)
658 gr_def(ctx, base + 0x304, 0x00007070);
659 else if (device->chipset < 0xa0)
660 gr_def(ctx, base + 0x304, 0x00027070);
661 else if (!IS_NVA3F(device->chipset))
662 gr_def(ctx, base + 0x304, 0x01127070);
663 else
664 gr_def(ctx, base + 0x304, 0x05127070);
665
666 if (device->chipset < 0xa0)
667 cp_ctx(ctx, base + 0x318, 1);
668 else
669 cp_ctx(ctx, base + 0x320, 1);
670 if (device->chipset == 0x50)
671 gr_def(ctx, base + 0x318, 0x0003ffff);
672 else if (device->chipset < 0xa0)
673 gr_def(ctx, base + 0x318, 0x03ffffff);
674 else
675 gr_def(ctx, base + 0x320, 0x07ffffff);
676
677 if (device->chipset < 0xa0)
678 cp_ctx(ctx, base + 0x324, 5);
679 else
680 cp_ctx(ctx, base + 0x328, 4);
681
682 if (device->chipset < 0xa0) {
683 cp_ctx(ctx, base + 0x340, 9);
684 offset = base + 0x340;
685 } else if (!IS_NVA3F(device->chipset)) {
686 cp_ctx(ctx, base + 0x33c, 0xb);
687 offset = base + 0x344;
688 } else {
689 cp_ctx(ctx, base + 0x33c, 0xd);
690 offset = base + 0x344;
691 }
692 gr_def(ctx, offset + 0x0, 0x00120407);
693 gr_def(ctx, offset + 0x4, 0x05091507);
694 if (device->chipset == 0x84)
695 gr_def(ctx, offset + 0x8, 0x05100202);
696 else
697 gr_def(ctx, offset + 0x8, 0x05010202);
698 gr_def(ctx, offset + 0xc, 0x00030201);
699 if (device->chipset == 0xa3)
700 cp_ctx(ctx, base + 0x36c, 1);
701
702 cp_ctx(ctx, base + 0x400, 2);
703 gr_def(ctx, base + 0x404, 0x00000040);
704 cp_ctx(ctx, base + 0x40c, 2);
705 gr_def(ctx, base + 0x40c, 0x0d0c0b0a);
706 gr_def(ctx, base + 0x410, 0x00141210);
707
708 if (device->chipset < 0xa0)
709 offset = base + 0x800;
710 else
711 offset = base + 0x500;
712 cp_ctx(ctx, offset, 6);
713 gr_def(ctx, offset + 0x0, 0x000001f0);
714 gr_def(ctx, offset + 0x4, 0x00000001);
715 gr_def(ctx, offset + 0x8, 0x00000003);
716 if (device->chipset == 0x50 || IS_NVAAF(device->chipset))
717 gr_def(ctx, offset + 0xc, 0x00008000);
718 gr_def(ctx, offset + 0x14, 0x00039e00);
719 cp_ctx(ctx, offset + 0x1c, 2);
720 if (device->chipset == 0x50)
721 gr_def(ctx, offset + 0x1c, 0x00000040);
722 else
723 gr_def(ctx, offset + 0x1c, 0x00000100);
724 gr_def(ctx, offset + 0x20, 0x00003800);
725
726 if (device->chipset >= 0xa0) {
727 cp_ctx(ctx, base + 0x54c, 2);
728 if (!IS_NVA3F(device->chipset))
729 gr_def(ctx, base + 0x54c, 0x003fe006);
730 else
731 gr_def(ctx, base + 0x54c, 0x003fe007);
732 gr_def(ctx, base + 0x550, 0x003fe000);
733 }
734
735 if (device->chipset < 0xa0)
736 offset = base + 0xa00;
737 else
738 offset = base + 0x680;
739 cp_ctx(ctx, offset, 1);
740 gr_def(ctx, offset, 0x00404040);
741
742 if (device->chipset < 0xa0)
743 offset = base + 0xe00;
744 else
745 offset = base + 0x700;
746 cp_ctx(ctx, offset, 2);
747 if (device->chipset < 0xa0)
748 gr_def(ctx, offset, 0x0077f005);
749 else if (device->chipset == 0xa5)
750 gr_def(ctx, offset, 0x6cf7f007);
751 else if (device->chipset == 0xa8)
752 gr_def(ctx, offset, 0x6cfff007);
753 else if (device->chipset == 0xac)
754 gr_def(ctx, offset, 0x0cfff007);
755 else
756 gr_def(ctx, offset, 0x0cf7f007);
757 if (device->chipset == 0x50)
758 gr_def(ctx, offset + 0x4, 0x00007fff);
759 else if (device->chipset < 0xa0)
760 gr_def(ctx, offset + 0x4, 0x003f7fff);
761 else
762 gr_def(ctx, offset + 0x4, 0x02bf7fff);
763 cp_ctx(ctx, offset + 0x2c, 1);
764 if (device->chipset == 0x50) {
765 cp_ctx(ctx, offset + 0x50, 9);
766 gr_def(ctx, offset + 0x54, 0x000003ff);
767 gr_def(ctx, offset + 0x58, 0x00000003);
768 gr_def(ctx, offset + 0x5c, 0x00000003);
769 gr_def(ctx, offset + 0x60, 0x000001ff);
770 gr_def(ctx, offset + 0x64, 0x0000001f);
771 gr_def(ctx, offset + 0x68, 0x0000000f);
772 gr_def(ctx, offset + 0x6c, 0x0000000f);
773 } else if (device->chipset < 0xa0) {
774 cp_ctx(ctx, offset + 0x50, 1);
775 cp_ctx(ctx, offset + 0x70, 1);
776 } else {
777 cp_ctx(ctx, offset + 0x50, 1);
778 cp_ctx(ctx, offset + 0x60, 5);
779 }
780 }
781 }
782}
783
784static void
785dd_emit(struct nvkm_grctx *ctx, int num, u32 val) {
786 int i;
787 if (val && ctx->mode == NVKM_GRCTX_VALS) {
788 for (i = 0; i < num; i++)
789 nvkm_wo32(ctx->data, 4 * (ctx->ctxvals_pos + i), val);
790 }
791 ctx->ctxvals_pos += num;
792}
793
794static void
795nv50_gr_construct_mmio_ddata(struct nvkm_grctx *ctx)
796{
797 struct nvkm_device *device = ctx->device;
798 int base, num;
799 base = ctx->ctxvals_pos;
800
801
802 dd_emit(ctx, 1, 0);
803 dd_emit(ctx, 1, 0);
804
805
806 dd_emit(ctx, 1, 0);
807 dd_emit(ctx, 1, 2);
808 dd_emit(ctx, 1, 1);
809 dd_emit(ctx, 1, 0);
810 dd_emit(ctx, 1, 0);
811 if (device->chipset >= 0x94)
812 dd_emit(ctx, 1, 0);
813 dd_emit(ctx, 1, 1);
814 dd_emit(ctx, 1, 0x100);
815
816
817 dd_emit(ctx, 1, 0);
818 dd_emit(ctx, 1, 0);
819 dd_emit(ctx, 1, 0);
820 dd_emit(ctx, 1, 0);
821 dd_emit(ctx, 1, 0);
822 dd_emit(ctx, 1, 2);
823 dd_emit(ctx, 1, 1);
824 dd_emit(ctx, 1, 1);
825 dd_emit(ctx, 1, 0);
826 dd_emit(ctx, 1, 0);
827 dd_emit(ctx, 1, 0);
828 dd_emit(ctx, 1, 1);
829 dd_emit(ctx, 1, 0x3fffff);
830 dd_emit(ctx, 1, 0x1fff);
831 dd_emit(ctx, 1, 0);
832 dd_emit(ctx, 1, 1);
833 dd_emit(ctx, 1, 1);
834 dd_emit(ctx, 1, 0);
835 dd_emit(ctx, 1, 1);
836 dd_emit(ctx, 1, 1);
837 dd_emit(ctx, 1, 1);
838 dd_emit(ctx, 1, 4);
839 dd_emit(ctx, 1, 1);
840 if (IS_NVA3F(device->chipset))
841 dd_emit(ctx, 1, 0);
842 dd_emit(ctx, 1, 1);
843 dd_emit(ctx, 1, 1);
844 dd_emit(ctx, 1, 7);
845 dd_emit(ctx, 1, 1);
846 dd_emit(ctx, 1, 7);
847 dd_emit(ctx, 1, 1);
848 dd_emit(ctx, 1, 1);
849 dd_emit(ctx, 1, 1);
850
851
852 if (device->chipset == 0x50) {
853 dd_emit(ctx, 4, 0);
854
855 dd_emit(ctx, 1, 1);
856
857 dd_emit(ctx, 1, 1);
858 dd_emit(ctx, 1, 0);
859 dd_emit(ctx, 1, 1);
860
861 dd_emit(ctx, 1, 0xa);
862 dd_emit(ctx, 1, 0);
863 dd_emit(ctx, 1, 0);
864 dd_emit(ctx, 1, 0);
865 dd_emit(ctx, 1, 0x40);
866 dd_emit(ctx, 1, 0);
867 dd_emit(ctx, 1, 2);
868 dd_emit(ctx, 1, 0x100);
869 dd_emit(ctx, 1, 1);
870 dd_emit(ctx, 1, 0x100);
871
872 dd_emit(ctx, 1, 0);
873 dd_emit(ctx, 1, 0);
874 dd_emit(ctx, 1, 0);
875 dd_emit(ctx, 1, 0);
876 dd_emit(ctx, 1, 0);
877 dd_emit(ctx, 1, 0);
878 dd_emit(ctx, 1, 1);
879 dd_emit(ctx, 1, 0);
880 dd_emit(ctx, 1, 0);
881 dd_emit(ctx, 1, 0);
882
883 dd_emit(ctx, 1, 0);
884 dd_emit(ctx, 1, 0);
885
886 dd_emit(ctx, 1, 0);
887
888 dd_emit(ctx, 1, 0);
889 dd_emit(ctx, 1, 0);
890 dd_emit(ctx, 1, 4);
891 dd_emit(ctx, 1, 0);
892 }
893
894
895 dd_emit(ctx, 1, 0);
896 dd_emit(ctx, 1, 0);
897 dd_emit(ctx, 2, 0);
898 dd_emit(ctx, 1, 1);
899 dd_emit(ctx, 1, 0x100);
900 dd_emit(ctx, 1, 0);
901 dd_emit(ctx, 1, 1);
902 dd_emit(ctx, 2, 0);
903 dd_emit(ctx, 1, 0x100);
904 dd_emit(ctx, 1, 1);
905 dd_emit(ctx, 1, 0x100);
906 dd_emit(ctx, 1, 0);
907 dd_emit(ctx, 1, 1);
908 dd_emit(ctx, 2, 0);
909 dd_emit(ctx, 1, 0x100);
910
911
912 if (device->chipset == 0x50) {
913 dd_emit(ctx, 1, 1);
914 dd_emit(ctx, 1, 0);
915
916 dd_emit(ctx, 1, 1);
917 dd_emit(ctx, 1, 0);
918
919 dd_emit(ctx, 1, 0);
920 dd_emit(ctx, 1, 2);
921 dd_emit(ctx, 1, 0);
922 dd_emit(ctx, 1, 1);
923 dd_emit(ctx, 1, 0);
924 dd_emit(ctx, 1, 1);
925 dd_emit(ctx, 1, 0);
926 dd_emit(ctx, 1, 0);
927 dd_emit(ctx, 1, 0);
928 dd_emit(ctx, 1, 0);
929 dd_emit(ctx, 1, 3);
930 dd_emit(ctx, 1, 0);
931
932 dd_emit(ctx, 1, 0);
933 }
934
935
936 dd_emit(ctx, 1, 0);
937 dd_emit(ctx, 1, 0);
938 dd_emit(ctx, 1, 0);
939 dd_emit(ctx, 1, 0);
940 dd_emit(ctx, 1, 4);
941 dd_emit(ctx, 1, 0x70);
942 dd_emit(ctx, 1, 0x80);
943 dd_emit(ctx, 1, 0);
944 dd_emit(ctx, 1, 0);
945 dd_emit(ctx, 1, 0);
946 if (IS_NVA3F(device->chipset)) {
947 dd_emit(ctx, 1, 0);
948 dd_emit(ctx, 1, 0);
949 } else {
950 dd_emit(ctx, 1, 0);
951 }
952 dd_emit(ctx, 1, 0xc);
953 if (device->chipset != 0x50)
954 dd_emit(ctx, 1, 0);
955 dd_emit(ctx, 1, 8);
956 dd_emit(ctx, 1, 0x14);
957 if (device->chipset == 0x50) {
958 dd_emit(ctx, 1, 0);
959 dd_emit(ctx, 1, 0);
960 } else {
961 dd_emit(ctx, 1, 0);
962 dd_emit(ctx, 1, 0x29);
963 dd_emit(ctx, 1, 0x27);
964 dd_emit(ctx, 1, 0x26);
965 dd_emit(ctx, 1, 8);
966 dd_emit(ctx, 1, 4);
967 dd_emit(ctx, 1, 0x27);
968 dd_emit(ctx, 1, 0);
969 }
970 dd_emit(ctx, 1, 0);
971 dd_emit(ctx, 1, 1);
972 dd_emit(ctx, 1, 2);
973 dd_emit(ctx, 1, 3);
974 dd_emit(ctx, 1, 4);
975 dd_emit(ctx, 1, 5);
976 dd_emit(ctx, 1, 6);
977 dd_emit(ctx, 1, 7);
978 dd_emit(ctx, 1, 1);
979 dd_emit(ctx, 8, 0);
980 dd_emit(ctx, 8, 0);
981 dd_emit(ctx, 1, 0xcf);
982 dd_emit(ctx, 7, 0);
983 if (device->chipset != 0x50)
984 dd_emit(ctx, 3, 0);
985 else
986 dd_emit(ctx, 2, 0);
987 dd_emit(ctx, 1, 0);
988 dd_emit(ctx, 1, 0x80);
989 dd_emit(ctx, 1, 4);
990 dd_emit(ctx, 1, 4);
991 if (IS_NVA3F(device->chipset)) {
992 dd_emit(ctx, 1, 3);
993 dd_emit(ctx, 1, 0);
994 }
995 if (device->chipset != 0x50)
996 dd_emit(ctx, 1, 3);
997 dd_emit(ctx, 1, 1);
998 dd_emit(ctx, 1, 0);
999 if (device->chipset != 0x50)
1000 dd_emit(ctx, 1, 0);
1001 dd_emit(ctx, 1, 0x12);
1002 dd_emit(ctx, 1, 0x10);
1003 dd_emit(ctx, 1, 0xc);
1004 dd_emit(ctx, 1, 1);
1005 dd_emit(ctx, 1, 0);
1006 dd_emit(ctx, 1, 0);
1007 dd_emit(ctx, 1, 0);
1008 dd_emit(ctx, 1, 4);
1009 dd_emit(ctx, 1, 2);
1010 dd_emit(ctx, 1, 4);
1011 if (device->chipset >= 0xa0)
1012 dd_emit(ctx, 1, 0);
1013 dd_emit(ctx, 1, 0);
1014 dd_emit(ctx, 1, 0);
1015 dd_emit(ctx, 1, 0x3fffff);
1016 dd_emit(ctx, 1, 0x1fff);
1017 dd_emit(ctx, 1, 0);
1018 if (device->chipset != 0x50)
1019 dd_emit(ctx, 8, 0);
1020 if (device->chipset >= 0xa0) {
1021 dd_emit(ctx, 1, 1);
1022 dd_emit(ctx, 1, 1);
1023 dd_emit(ctx, 1, 2);
1024 dd_emit(ctx, 1, 0);
1025 }
1026 dd_emit(ctx, 1, 4);
1027 dd_emit(ctx, 1, 0x14);
1028 dd_emit(ctx, 1, 1);
1029 dd_emit(ctx, 1, 0);
1030 dd_emit(ctx, 1, 0);
1031 if (IS_NVA3F(device->chipset))
1032 dd_emit(ctx, 1, 0);
1033 dd_emit(ctx, 1, 2);
1034 if (device->chipset >= 0xa0)
1035 dd_emit(ctx, 1, 0);
1036 dd_emit(ctx, 1, 0);
1037 if (device->chipset >= 0xa0)
1038 dd_emit(ctx, 1, 0);
1039 dd_emit(ctx, 1, 0);
1040 dd_emit(ctx, 1, 1);
1041 dd_emit(ctx, 1, 0);
1042 dd_emit(ctx, 1, 2);
1043 dd_emit(ctx, 1, 0x1000);
1044 if (device->chipset != 0x50) {
1045 dd_emit(ctx, 1, 0xe00);
1046 dd_emit(ctx, 1, 0x1000);
1047 dd_emit(ctx, 1, 0x1e00);
1048 }
1049 dd_emit(ctx, 1, 0);
1050 dd_emit(ctx, 1, 1);
1051 dd_emit(ctx, 1, 1);
1052 dd_emit(ctx, 1, 1);
1053 dd_emit(ctx, 1, 1);
1054 dd_emit(ctx, 1, 1);
1055 dd_emit(ctx, 1, 0);
1056 dd_emit(ctx, 1, 0);
1057 dd_emit(ctx, 1, 0);
1058 dd_emit(ctx, 1, 0x200);
1059 if (IS_NVA3F(device->chipset))
1060 dd_emit(ctx, 1, 0x200);
1061 dd_emit(ctx, 1, 0);
1062 if (device->chipset < 0xa0) {
1063 dd_emit(ctx, 1, 1);
1064 dd_emit(ctx, 1, 0x70);
1065 dd_emit(ctx, 1, 0x80);
1066 dd_emit(ctx, 1, 0);
1067 dd_emit(ctx, 1, 0);
1068 dd_emit(ctx, 1, 1);
1069 dd_emit(ctx, 1, 0x70);
1070 dd_emit(ctx, 1, 0x80);
1071 dd_emit(ctx, 1, 0);
1072 } else {
1073 dd_emit(ctx, 1, 1);
1074 dd_emit(ctx, 1, 0xf0);
1075 dd_emit(ctx, 1, 0xff);
1076 dd_emit(ctx, 1, 0);
1077 dd_emit(ctx, 1, 0);
1078 dd_emit(ctx, 1, 1);
1079 dd_emit(ctx, 1, 0xf0);
1080 dd_emit(ctx, 1, 0xff);
1081 dd_emit(ctx, 1, 0);
1082 dd_emit(ctx, 1, 9);
1083 }
1084
1085
1086 dd_emit(ctx, 1, 0);
1087 dd_emit(ctx, 1, 0);
1088 dd_emit(ctx, 1, 1);
1089 dd_emit(ctx, 1, 0xcf);
1090 dd_emit(ctx, 1, 0);
1091 dd_emit(ctx, 1, 1);
1092 dd_emit(ctx, 1, 0);
1093 dd_emit(ctx, 1, 0);
1094 dd_emit(ctx, 1, 0);
1095 dd_emit(ctx, 1, 0xcf);
1096 dd_emit(ctx, 1, 0);
1097 dd_emit(ctx, 1, 2);
1098 dd_emit(ctx, 1, 0);
1099 dd_emit(ctx, 1, 1);
1100 dd_emit(ctx, 1, 0);
1101 dd_emit(ctx, 1, 1);
1102 dd_emit(ctx, 1, 0);
1103 dd_emit(ctx, 1, 0xcf);
1104 dd_emit(ctx, 1, 0xcf);
1105 dd_emit(ctx, 1, 1);
1106
1107 num = ctx->ctxvals_pos - base;
1108 ctx->ctxvals_pos = base;
1109 if (IS_NVA3F(device->chipset))
1110 cp_ctx(ctx, 0x404800, num);
1111 else
1112 cp_ctx(ctx, 0x405400, num);
1113}
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157static void
1158xf_emit(struct nvkm_grctx *ctx, int num, u32 val) {
1159 int i;
1160 if (val && ctx->mode == NVKM_GRCTX_VALS) {
1161 for (i = 0; i < num; i++)
1162 nvkm_wo32(ctx->data, 4 * (ctx->ctxvals_pos + (i << 3)), val);
1163 }
1164 ctx->ctxvals_pos += num << 3;
1165}
1166
1167
1168
1169static void nv50_gr_construct_gene_dispatch(struct nvkm_grctx *ctx);
1170static void nv50_gr_construct_gene_m2mf(struct nvkm_grctx *ctx);
1171static void nv50_gr_construct_gene_ccache(struct nvkm_grctx *ctx);
1172static void nv50_gr_construct_gene_unk10xx(struct nvkm_grctx *ctx);
1173static void nv50_gr_construct_gene_unk14xx(struct nvkm_grctx *ctx);
1174static void nv50_gr_construct_gene_zcull(struct nvkm_grctx *ctx);
1175static void nv50_gr_construct_gene_clipid(struct nvkm_grctx *ctx);
1176static void nv50_gr_construct_gene_unk24xx(struct nvkm_grctx *ctx);
1177static void nv50_gr_construct_gene_vfetch(struct nvkm_grctx *ctx);
1178static void nv50_gr_construct_gene_eng2d(struct nvkm_grctx *ctx);
1179static void nv50_gr_construct_gene_csched(struct nvkm_grctx *ctx);
1180static void nv50_gr_construct_gene_unk1cxx(struct nvkm_grctx *ctx);
1181static void nv50_gr_construct_gene_strmout(struct nvkm_grctx *ctx);
1182static void nv50_gr_construct_gene_unk34xx(struct nvkm_grctx *ctx);
1183static void nv50_gr_construct_gene_ropm1(struct nvkm_grctx *ctx);
1184static void nv50_gr_construct_gene_ropm2(struct nvkm_grctx *ctx);
1185static void nv50_gr_construct_gene_ropc(struct nvkm_grctx *ctx);
1186static void nv50_gr_construct_xfer_tp(struct nvkm_grctx *ctx);
1187
1188static void
1189nv50_gr_construct_xfer1(struct nvkm_grctx *ctx)
1190{
1191 struct nvkm_device *device = ctx->device;
1192 int i;
1193 int offset;
1194 int size = 0;
1195 u32 units = nvkm_rd32(device, 0x1540);
1196
1197 offset = (ctx->ctxvals_pos+0x3f)&~0x3f;
1198 ctx->ctxvals_base = offset;
1199
1200 if (device->chipset < 0xa0) {
1201
1202 ctx->ctxvals_pos = offset;
1203 nv50_gr_construct_gene_dispatch(ctx);
1204 nv50_gr_construct_gene_m2mf(ctx);
1205 nv50_gr_construct_gene_unk24xx(ctx);
1206 nv50_gr_construct_gene_clipid(ctx);
1207 nv50_gr_construct_gene_zcull(ctx);
1208 if ((ctx->ctxvals_pos-offset)/8 > size)
1209 size = (ctx->ctxvals_pos-offset)/8;
1210
1211
1212 ctx->ctxvals_pos = offset + 0x1;
1213 nv50_gr_construct_gene_vfetch(ctx);
1214 nv50_gr_construct_gene_eng2d(ctx);
1215 nv50_gr_construct_gene_csched(ctx);
1216 nv50_gr_construct_gene_ropm1(ctx);
1217 nv50_gr_construct_gene_ropm2(ctx);
1218 if ((ctx->ctxvals_pos-offset)/8 > size)
1219 size = (ctx->ctxvals_pos-offset)/8;
1220
1221
1222 ctx->ctxvals_pos = offset + 0x2;
1223 nv50_gr_construct_gene_ccache(ctx);
1224 nv50_gr_construct_gene_unk1cxx(ctx);
1225 nv50_gr_construct_gene_strmout(ctx);
1226 nv50_gr_construct_gene_unk14xx(ctx);
1227 nv50_gr_construct_gene_unk10xx(ctx);
1228 nv50_gr_construct_gene_unk34xx(ctx);
1229 if ((ctx->ctxvals_pos-offset)/8 > size)
1230 size = (ctx->ctxvals_pos-offset)/8;
1231
1232
1233 ctx->ctxvals_pos = offset + 3;
1234 for (i = 0; i < 6; i++)
1235 if (units & (1 << (i + 16)))
1236 nv50_gr_construct_gene_ropc(ctx);
1237 if ((ctx->ctxvals_pos-offset)/8 > size)
1238 size = (ctx->ctxvals_pos-offset)/8;
1239
1240
1241 for (i = 0; i < 4; i++) {
1242 ctx->ctxvals_pos = offset + 4 + i;
1243 if (units & (1 << (2 * i)))
1244 nv50_gr_construct_xfer_tp(ctx);
1245 if (units & (1 << (2 * i + 1)))
1246 nv50_gr_construct_xfer_tp(ctx);
1247 if ((ctx->ctxvals_pos-offset)/8 > size)
1248 size = (ctx->ctxvals_pos-offset)/8;
1249 }
1250 } else {
1251
1252 ctx->ctxvals_pos = offset;
1253 nv50_gr_construct_gene_dispatch(ctx);
1254 nv50_gr_construct_gene_m2mf(ctx);
1255 nv50_gr_construct_gene_unk34xx(ctx);
1256 nv50_gr_construct_gene_csched(ctx);
1257 nv50_gr_construct_gene_unk1cxx(ctx);
1258 nv50_gr_construct_gene_strmout(ctx);
1259 if ((ctx->ctxvals_pos-offset)/8 > size)
1260 size = (ctx->ctxvals_pos-offset)/8;
1261
1262
1263 ctx->ctxvals_pos = offset + 1;
1264 nv50_gr_construct_gene_unk10xx(ctx);
1265 if ((ctx->ctxvals_pos-offset)/8 > size)
1266 size = (ctx->ctxvals_pos-offset)/8;
1267
1268
1269 ctx->ctxvals_pos = offset + 2;
1270 if (device->chipset == 0xa0)
1271 nv50_gr_construct_gene_unk14xx(ctx);
1272 nv50_gr_construct_gene_unk24xx(ctx);
1273 if ((ctx->ctxvals_pos-offset)/8 > size)
1274 size = (ctx->ctxvals_pos-offset)/8;
1275
1276
1277 ctx->ctxvals_pos = offset + 3;
1278 nv50_gr_construct_gene_vfetch(ctx);
1279 if ((ctx->ctxvals_pos-offset)/8 > size)
1280 size = (ctx->ctxvals_pos-offset)/8;
1281
1282
1283 ctx->ctxvals_pos = offset + 4;
1284 nv50_gr_construct_gene_ccache(ctx);
1285 if ((ctx->ctxvals_pos-offset)/8 > size)
1286 size = (ctx->ctxvals_pos-offset)/8;
1287
1288
1289 ctx->ctxvals_pos = offset + 5;
1290 nv50_gr_construct_gene_ropm2(ctx);
1291 nv50_gr_construct_gene_ropm1(ctx);
1292
1293 for (i = 0; i < 8; i++)
1294 if (units & (1<<(i+16)))
1295 nv50_gr_construct_gene_ropc(ctx);
1296 if ((ctx->ctxvals_pos-offset)/8 > size)
1297 size = (ctx->ctxvals_pos-offset)/8;
1298
1299
1300 ctx->ctxvals_pos = offset + 6;
1301 nv50_gr_construct_gene_zcull(ctx);
1302 nv50_gr_construct_gene_clipid(ctx);
1303 nv50_gr_construct_gene_eng2d(ctx);
1304 if (units & (1 << 0))
1305 nv50_gr_construct_xfer_tp(ctx);
1306 if (units & (1 << 1))
1307 nv50_gr_construct_xfer_tp(ctx);
1308 if (units & (1 << 2))
1309 nv50_gr_construct_xfer_tp(ctx);
1310 if (units & (1 << 3))
1311 nv50_gr_construct_xfer_tp(ctx);
1312 if ((ctx->ctxvals_pos-offset)/8 > size)
1313 size = (ctx->ctxvals_pos-offset)/8;
1314
1315
1316 ctx->ctxvals_pos = offset + 7;
1317 if (device->chipset == 0xa0) {
1318 if (units & (1 << 4))
1319 nv50_gr_construct_xfer_tp(ctx);
1320 if (units & (1 << 5))
1321 nv50_gr_construct_xfer_tp(ctx);
1322 if (units & (1 << 6))
1323 nv50_gr_construct_xfer_tp(ctx);
1324 if (units & (1 << 7))
1325 nv50_gr_construct_xfer_tp(ctx);
1326 if (units & (1 << 8))
1327 nv50_gr_construct_xfer_tp(ctx);
1328 if (units & (1 << 9))
1329 nv50_gr_construct_xfer_tp(ctx);
1330 } else {
1331 nv50_gr_construct_gene_unk14xx(ctx);
1332 }
1333 if ((ctx->ctxvals_pos-offset)/8 > size)
1334 size = (ctx->ctxvals_pos-offset)/8;
1335 }
1336
1337 ctx->ctxvals_pos = offset + size * 8;
1338 ctx->ctxvals_pos = (ctx->ctxvals_pos+0x3f)&~0x3f;
1339 cp_lsr (ctx, offset);
1340 cp_out (ctx, CP_SET_XFER_POINTER);
1341 cp_lsr (ctx, size);
1342 cp_out (ctx, CP_SEEK_1);
1343 cp_out (ctx, CP_XFER_1);
1344 cp_wait(ctx, XFER, BUSY);
1345}
1346
1347
1348
1349
1350
1351static void
1352nv50_gr_construct_gene_dispatch(struct nvkm_grctx *ctx)
1353{
1354
1355 struct nvkm_device *device = ctx->device;
1356
1357 if (device->chipset == 0x50)
1358 xf_emit(ctx, 5, 0);
1359 else if (!IS_NVA3F(device->chipset))
1360 xf_emit(ctx, 6, 0);
1361 else
1362 xf_emit(ctx, 4, 0);
1363
1364
1365 if (device->chipset == 0x50)
1366 xf_emit(ctx, 8*3, 0);
1367 else
1368 xf_emit(ctx, 0x100*3, 0);
1369
1370 xf_emit(ctx, 3, 0);
1371
1372 if (IS_NVA3F(device->chipset))
1373 xf_emit(ctx, 3, 0);
1374
1375
1376 xf_emit(ctx, 9, 0);
1377
1378 xf_emit(ctx, 9, 0);
1379
1380 xf_emit(ctx, 9, 0);
1381
1382 xf_emit(ctx, 9, 0);
1383
1384 if (device->chipset < 0x90)
1385 xf_emit(ctx, 4, 0);
1386
1387 xf_emit(ctx, 2, 0);
1388
1389 xf_emit(ctx, 6*2, 0);
1390 xf_emit(ctx, 2, 0);
1391
1392 xf_emit(ctx, 2, 0);
1393
1394 xf_emit(ctx, 6*2, 0);
1395 xf_emit(ctx, 2, 0);
1396
1397 if (device->chipset == 0x50)
1398 xf_emit(ctx, 0x1c, 0);
1399 else if (device->chipset < 0xa0)
1400 xf_emit(ctx, 0x1e, 0);
1401 else
1402 xf_emit(ctx, 0x22, 0);
1403
1404 xf_emit(ctx, 0x15, 0);
1405}
1406
1407static void
1408nv50_gr_construct_gene_m2mf(struct nvkm_grctx *ctx)
1409{
1410
1411 struct nvkm_device *device = ctx->device;
1412 int smallm2mf = 0;
1413 if (device->chipset < 0x92 || device->chipset == 0x98)
1414 smallm2mf = 1;
1415
1416 xf_emit (ctx, 1, 0);
1417 xf_emit (ctx, 1, 0);
1418 xf_emit (ctx, 1, 0);
1419 xf_emit (ctx, 1, 0);
1420 xf_emit (ctx, 1, 0);
1421 xf_emit (ctx, 1, 0);
1422 xf_emit (ctx, 1, 0);
1423 xf_emit (ctx, 1, 0);
1424 xf_emit (ctx, 1, 0);
1425 xf_emit (ctx, 1, 0x21);
1426 xf_emit (ctx, 1, 1);
1427 xf_emit (ctx, 1, 0x2);
1428 xf_emit (ctx, 1, 0x100);
1429 xf_emit (ctx, 1, 0x100);
1430 xf_emit (ctx, 1, 1);
1431 xf_emit (ctx, 1, 0);
1432 xf_emit (ctx, 1, 0);
1433 xf_emit (ctx, 1, 1);
1434 xf_emit (ctx, 1, 0x2);
1435 xf_emit (ctx, 1, 0x100);
1436 xf_emit (ctx, 1, 0x100);
1437 xf_emit (ctx, 1, 1);
1438 xf_emit (ctx, 1, 0);
1439 xf_emit (ctx, 1, 0);
1440 xf_emit (ctx, 1, 0);
1441 xf_emit (ctx, 1, 0);
1442
1443 if (smallm2mf)
1444 xf_emit(ctx, 0x40, 0);
1445 else
1446 xf_emit(ctx, 0x100, 0);
1447 xf_emit(ctx, 4, 0);
1448
1449 if (smallm2mf)
1450 xf_emit(ctx, 0x400, 0);
1451 else
1452 xf_emit(ctx, 0x800, 0);
1453 xf_emit(ctx, 4, 0);
1454
1455 xf_emit(ctx, 0x40, 0);
1456 xf_emit(ctx, 0x6, 0);
1457}
1458
1459static void
1460nv50_gr_construct_gene_ccache(struct nvkm_grctx *ctx)
1461{
1462 struct nvkm_device *device = ctx->device;
1463 xf_emit(ctx, 2, 0);
1464 xf_emit(ctx, 0x800, 0);
1465 switch (device->chipset) {
1466 case 0x50:
1467 case 0x92:
1468 case 0xa0:
1469 xf_emit(ctx, 0x2b, 0);
1470 break;
1471 case 0x84:
1472 xf_emit(ctx, 0x29, 0);
1473 break;
1474 case 0x94:
1475 case 0x96:
1476 case 0xa3:
1477 xf_emit(ctx, 0x27, 0);
1478 break;
1479 case 0x86:
1480 case 0x98:
1481 case 0xa5:
1482 case 0xa8:
1483 case 0xaa:
1484 case 0xac:
1485 case 0xaf:
1486 xf_emit(ctx, 0x25, 0);
1487 break;
1488 }
1489
1490
1491 xf_emit(ctx, 0x100, 0);
1492 xf_emit(ctx, 1, 0);
1493 xf_emit(ctx, 1, 0);
1494 xf_emit(ctx, 0x30, 0);
1495 xf_emit(ctx, 1, 0);
1496 xf_emit(ctx, 4, 0);
1497 xf_emit(ctx, 0x100, 0);
1498 xf_emit(ctx, 8, 0);
1499 xf_emit(ctx, 8, 0);
1500 xf_emit(ctx, 4, 0);
1501 xf_emit(ctx, 1, 0);
1502 xf_emit(ctx, 1, 0);
1503 xf_emit(ctx, 1, 0);
1504 xf_emit(ctx, 1, 0);
1505 xf_emit(ctx, 1, 0);
1506 xf_emit(ctx, 1, 0);
1507 xf_emit(ctx, 1, 0);
1508 xf_emit(ctx, 1, 0);
1509 xf_emit(ctx, 1, 0x3fffff);
1510 xf_emit(ctx, 1, 0);
1511 xf_emit(ctx, 1, 0);
1512 xf_emit(ctx, 1, 0x1fff);
1513 xf_emit(ctx, 1, 0);
1514 xf_emit(ctx, 1, 0);
1515 xf_emit(ctx, 1, 0);
1516 xf_emit(ctx, 1, 0);
1517 xf_emit(ctx, 1, 0);
1518 xf_emit(ctx, 1, 0);
1519 xf_emit(ctx, 1, 0);
1520 xf_emit(ctx, 1, 0);
1521 xf_emit(ctx, 1, 0);
1522 xf_emit(ctx, 1, 0);
1523 xf_emit(ctx, 1, 0);
1524 xf_emit(ctx, 1, 0);
1525}
1526
1527static void
1528nv50_gr_construct_gene_unk10xx(struct nvkm_grctx *ctx)
1529{
1530 struct nvkm_device *device = ctx->device;
1531 int i;
1532
1533 xf_emit(ctx, 1, 4);
1534 xf_emit(ctx, 1, 4);
1535 xf_emit(ctx, 1, 0);
1536 xf_emit(ctx, 1, 0x80);
1537 xf_emit(ctx, 1, 4);
1538 xf_emit(ctx, 1, 0x80c14);
1539 xf_emit(ctx, 1, 0);
1540 if (device->chipset == 0x50)
1541 xf_emit(ctx, 1, 0x3ff);
1542 else
1543 xf_emit(ctx, 1, 0x7ff);
1544 xf_emit(ctx, 1, 0);
1545 xf_emit(ctx, 1, 0);
1546 for (i = 0; i < 8; i++) {
1547 switch (device->chipset) {
1548 case 0x50:
1549 case 0x86:
1550 case 0x98:
1551 case 0xaa:
1552 case 0xac:
1553 xf_emit(ctx, 0xa0, 0);
1554 break;
1555 case 0x84:
1556 case 0x92:
1557 case 0x94:
1558 case 0x96:
1559 xf_emit(ctx, 0x120, 0);
1560 break;
1561 case 0xa5:
1562 case 0xa8:
1563 xf_emit(ctx, 0x100, 0);
1564 break;
1565 case 0xa0:
1566 case 0xa3:
1567 case 0xaf:
1568 xf_emit(ctx, 0x400, 0);
1569 break;
1570 }
1571 xf_emit(ctx, 4, 0);
1572 xf_emit(ctx, 4, 0);
1573 }
1574 xf_emit(ctx, 1, 4);
1575 xf_emit(ctx, 1, 4);
1576 xf_emit(ctx, 1, 0);
1577 xf_emit(ctx, 1, 0x80);
1578 xf_emit(ctx, 1, 4);
1579 xf_emit(ctx, 1, 1);
1580 xf_emit(ctx, 1, 0);
1581 xf_emit(ctx, 1, 0x27);
1582 xf_emit(ctx, 1, 0);
1583 xf_emit(ctx, 1, 0x26);
1584 xf_emit(ctx, 1, 0);
1585}
1586
1587static void
1588nv50_gr_construct_gene_unk34xx(struct nvkm_grctx *ctx)
1589{
1590 struct nvkm_device *device = ctx->device;
1591
1592 xf_emit(ctx, 1, 0);
1593 xf_emit(ctx, 1, 0);
1594 xf_emit(ctx, 0x10, 0x04000000);
1595 xf_emit(ctx, 1, 0);
1596 xf_emit(ctx, 0x20, 0);
1597 xf_emit(ctx, 2, 0);
1598 xf_emit(ctx, 1, 0);
1599 xf_emit(ctx, 1, 0x04e3bfdf);
1600 xf_emit(ctx, 1, 0x04e3bfdf);
1601 xf_emit(ctx, 1, 0);
1602 xf_emit(ctx, 1, 0);
1603 xf_emit(ctx, 1, 0x1fe21);
1604 if (device->chipset >= 0xa0)
1605 xf_emit(ctx, 1, 0x0fac6881);
1606 if (IS_NVA3F(device->chipset)) {
1607 xf_emit(ctx, 1, 1);
1608 xf_emit(ctx, 3, 0);
1609 }
1610}
1611
1612static void
1613nv50_gr_construct_gene_unk14xx(struct nvkm_grctx *ctx)
1614{
1615 struct nvkm_device *device = ctx->device;
1616
1617 if (device->chipset != 0x50) {
1618 xf_emit(ctx, 5, 0);
1619 xf_emit(ctx, 1, 0x80c14);
1620 xf_emit(ctx, 1, 0);
1621 xf_emit(ctx, 1, 0);
1622 xf_emit(ctx, 1, 0x804);
1623 xf_emit(ctx, 1, 0);
1624 xf_emit(ctx, 2, 4);
1625 xf_emit(ctx, 1, 0x8100c12);
1626 }
1627 xf_emit(ctx, 1, 0);
1628 xf_emit(ctx, 1, 4);
1629 xf_emit(ctx, 1, 4);
1630 xf_emit(ctx, 1, 0);
1631 xf_emit(ctx, 1, 0x10);
1632 xf_emit(ctx, 1, 0);
1633 if (device->chipset != 0x50)
1634 xf_emit(ctx, 1, 0);
1635 xf_emit(ctx, 1, 0);
1636 xf_emit(ctx, 1, 0);
1637 xf_emit(ctx, 1, 0x804);
1638 xf_emit(ctx, 1, 1);
1639 xf_emit(ctx, 1, 0x1a);
1640 if (device->chipset != 0x50)
1641 xf_emit(ctx, 1, 0x7f);
1642 xf_emit(ctx, 1, 0);
1643 xf_emit(ctx, 1, 1);
1644 xf_emit(ctx, 1, 0x80c14);
1645 xf_emit(ctx, 1, 0);
1646 xf_emit(ctx, 1, 0x8100c12);
1647 xf_emit(ctx, 1, 4);
1648 xf_emit(ctx, 1, 4);
1649 xf_emit(ctx, 1, 0);
1650 xf_emit(ctx, 1, 0x10);
1651 xf_emit(ctx, 1, 0);
1652 xf_emit(ctx, 1, 0);
1653 xf_emit(ctx, 1, 0);
1654 xf_emit(ctx, 1, 1);
1655 xf_emit(ctx, 1, 0x8100c12);
1656 xf_emit(ctx, 4, 0);
1657 xf_emit(ctx, 1, 0);
1658 xf_emit(ctx, 1, 0);
1659 if (device->chipset == 0x50)
1660 xf_emit(ctx, 1, 0x3ff);
1661 else
1662 xf_emit(ctx, 1, 0x7ff);
1663 xf_emit(ctx, 1, 0x80c14);
1664 xf_emit(ctx, 1, 0);
1665 xf_emit(ctx, 0x30, 0);
1666 xf_emit(ctx, 3, 0);
1667 xf_emit(ctx, 3, 0);
1668 xf_emit(ctx, 1, 0);
1669 xf_emit(ctx, 1, 1);
1670 xf_emit(ctx, 1, 0);
1671 xf_emit(ctx, 1, 0);
1672 xf_emit(ctx, 1, 0x10);
1673 xf_emit(ctx, 1, 0);
1674 xf_emit(ctx, 0x30, 0);
1675 xf_emit(ctx, 3, 0);
1676 xf_emit(ctx, 3, 0);
1677 xf_emit(ctx, 1, 0);
1678 xf_emit(ctx, 2, 0x88);
1679 xf_emit(ctx, 1, 0);
1680 xf_emit(ctx, 1, 0);
1681 xf_emit(ctx, 1, 4);
1682 xf_emit(ctx, 2, 0);
1683 xf_emit(ctx, 2, 0);
1684 xf_emit(ctx, 1, 0);
1685 xf_emit(ctx, 0x10, 0);
1686 xf_emit(ctx, 1, 0);
1687 xf_emit(ctx, 1, 0x26);
1688 xf_emit(ctx, 1, 0);
1689 xf_emit(ctx, 1, 0);
1690 xf_emit(ctx, 1, 0x3f800000);
1691 xf_emit(ctx, 1, 0);
1692 xf_emit(ctx, 1, 0);
1693 xf_emit(ctx, 1, 0);
1694 if (IS_NVA3F(device->chipset))
1695 xf_emit(ctx, 1, 0);
1696 xf_emit(ctx, 1, 0x1a);
1697 xf_emit(ctx, 1, 0x10);
1698 if (device->chipset != 0x50) {
1699 xf_emit(ctx, 1, 0);
1700 xf_emit(ctx, 1, 0);
1701 xf_emit(ctx, 1, 0);
1702 }
1703 xf_emit(ctx, 0x20, 0);
1704 xf_emit(ctx, 1, 0);
1705 xf_emit(ctx, 1, 0);
1706 xf_emit(ctx, 1, 0);
1707 xf_emit(ctx, 1, 0);
1708 xf_emit(ctx, 1, 0);
1709 xf_emit(ctx, 1, 0x52);
1710 xf_emit(ctx, 1, 0);
1711 xf_emit(ctx, 1, 0x26);
1712 xf_emit(ctx, 1, 0);
1713 xf_emit(ctx, 1, 4);
1714 xf_emit(ctx, 1, 4);
1715 xf_emit(ctx, 1, 0);
1716 xf_emit(ctx, 1, 0x1a);
1717 xf_emit(ctx, 1, 0);
1718 xf_emit(ctx, 1, 0);
1719 xf_emit(ctx, 1, 0x00ffff00);
1720 xf_emit(ctx, 1, 0);
1721}
1722
1723static void
1724nv50_gr_construct_gene_zcull(struct nvkm_grctx *ctx)
1725{
1726 struct nvkm_device *device = ctx->device;
1727
1728
1729 xf_emit(ctx, 1, 0x3f);
1730 xf_emit(ctx, 1, 0);
1731 xf_emit(ctx, 1, 0);
1732 xf_emit(ctx, 1, 0);
1733 xf_emit(ctx, 1, 0);
1734 xf_emit(ctx, 1, 0);
1735 xf_emit(ctx, 1, 0);
1736 xf_emit(ctx, 1, 0);
1737 xf_emit(ctx, 3, 0);
1738 xf_emit(ctx, 1, 2);
1739 xf_emit(ctx, 2, 0x04000000);
1740 xf_emit(ctx, 1, 0);
1741 xf_emit(ctx, 1, 0);
1742 xf_emit(ctx, 2, 0);
1743 xf_emit(ctx, 1, 0);
1744 xf_emit(ctx, 1, 0);
1745 xf_emit(ctx, 1, 0);
1746 xf_emit(ctx, 1, 0);
1747 xf_emit(ctx, 1, 4);
1748 xf_emit(ctx, 1, 0);
1749 xf_emit(ctx, 1, 0);
1750 xf_emit(ctx, 1, 0);
1751 xf_emit(ctx, 1, 4);
1752 xf_emit(ctx, 1, 0);
1753 xf_emit(ctx, 1, 0);
1754 xf_emit(ctx, 1, 0);
1755 xf_emit(ctx, 1, 0);
1756 xf_emit(ctx, 1, 0);
1757 xf_emit(ctx, 1, 0);
1758 xf_emit(ctx, 1, 0);
1759 xf_emit(ctx, 3, 0);
1760 xf_emit(ctx, 1, 0);
1761 xf_emit(ctx, 1, 0);
1762 xf_emit(ctx, 1, 0);
1763 xf_emit(ctx, 1, 0);
1764 if (device->chipset != 0x50)
1765 xf_emit(ctx, 1, 0);
1766 xf_emit(ctx, 1, 0);
1767 xf_emit(ctx, 1, 0);
1768 xf_emit(ctx, 1, 1);
1769 xf_emit(ctx, 1, 0x1001);
1770
1771 xf_emit(ctx, 4, 0xffff);
1772 xf_emit(ctx, 0x10, 0);
1773 xf_emit(ctx, 0x10, 0);
1774 xf_emit(ctx, 0x10, 0x3f800000);
1775 xf_emit(ctx, 1, 0x10);
1776 xf_emit(ctx, 1, 0);
1777 xf_emit(ctx, 1, 3);
1778 xf_emit(ctx, 1, 0);
1779 if (device->chipset != 0x50)
1780 xf_emit(ctx, 1, 0);
1781 xf_emit(ctx, 1, 0);
1782}
1783
1784static void
1785nv50_gr_construct_gene_clipid(struct nvkm_grctx *ctx)
1786{
1787
1788
1789 xf_emit(ctx, 1, 0);
1790
1791 xf_emit(ctx, 4, 0);
1792 xf_emit(ctx, 4, 0);
1793 xf_emit(ctx, 2, 0);
1794 xf_emit(ctx, 2, 0x04000000);
1795 xf_emit(ctx, 1, 0);
1796 xf_emit(ctx, 1, 0x80);
1797 xf_emit(ctx, 1, 0);
1798 xf_emit(ctx, 1, 0);
1799 xf_emit(ctx, 1, 0);
1800 xf_emit(ctx, 1, 0x80);
1801 xf_emit(ctx, 1, 0);
1802}
1803
1804static void
1805nv50_gr_construct_gene_unk24xx(struct nvkm_grctx *ctx)
1806{
1807 struct nvkm_device *device = ctx->device;
1808 int i;
1809
1810
1811 xf_emit(ctx, 0x33, 0);
1812
1813 xf_emit(ctx, 2, 0);
1814
1815 xf_emit(ctx, 1, 0);
1816 xf_emit(ctx, 1, 4);
1817 xf_emit(ctx, 1, 4);
1818
1819 if (IS_NVA3F(device->chipset)) {
1820 xf_emit(ctx, 4, 0);
1821 xf_emit(ctx, 0xe10, 0);
1822 xf_emit(ctx, 1, 0);
1823 xf_emit(ctx, 8, 0);
1824 xf_emit(ctx, 9, 0);
1825
1826 xf_emit(ctx, 4, 0);
1827 xf_emit(ctx, 0xe10, 0);
1828 xf_emit(ctx, 1, 0);
1829 xf_emit(ctx, 8, 0);
1830 xf_emit(ctx, 9, 0);
1831 } else {
1832 xf_emit(ctx, 0xc, 0);
1833
1834 xf_emit(ctx, 0xe10, 0);
1835 xf_emit(ctx, 1, 0);
1836 xf_emit(ctx, 8, 0);
1837
1838
1839 xf_emit(ctx, 0xc, 0);
1840
1841 xf_emit(ctx, 0xe10, 0);
1842 xf_emit(ctx, 1, 0);
1843 xf_emit(ctx, 8, 0);
1844 }
1845
1846 xf_emit(ctx, 1, 0);
1847 xf_emit(ctx, 1, 4);
1848 xf_emit(ctx, 1, 4);
1849 xf_emit(ctx, 1, 0x8100c12);
1850 if (device->chipset != 0x50)
1851 xf_emit(ctx, 1, 3);
1852
1853 xf_emit(ctx, 1, 0);
1854 xf_emit(ctx, 1, 0x8100c12);
1855 xf_emit(ctx, 1, 0);
1856 xf_emit(ctx, 1, 0x80c14);
1857 xf_emit(ctx, 1, 1);
1858
1859 if (device->chipset >= 0xa0)
1860 xf_emit(ctx, 2, 4);
1861 xf_emit(ctx, 1, 0x80c14);
1862 xf_emit(ctx, 1, 0);
1863 xf_emit(ctx, 1, 0);
1864 xf_emit(ctx, 1, 0x8100c12);
1865 xf_emit(ctx, 1, 0x27);
1866 xf_emit(ctx, 1, 0);
1867 xf_emit(ctx, 1, 0);
1868 xf_emit(ctx, 1, 1);
1869 for (i = 0; i < 10; i++) {
1870
1871 xf_emit(ctx, 0x40, 0);
1872 xf_emit(ctx, 0x10, 0);
1873 xf_emit(ctx, 0x10, 0);
1874 }
1875
1876 xf_emit(ctx, 1, 0);
1877 xf_emit(ctx, 1, 1);
1878 xf_emit(ctx, 1, 0);
1879 xf_emit(ctx, 4, 0);
1880 xf_emit(ctx, 0x10, 0);
1881 xf_emit(ctx, 1, 0);
1882 xf_emit(ctx, 1, 0x8100c12);
1883 if (device->chipset != 0x50)
1884 xf_emit(ctx, 1, 0);
1885}
1886
1887static void
1888nv50_gr_construct_gene_vfetch(struct nvkm_grctx *ctx)
1889{
1890 struct nvkm_device *device = ctx->device;
1891 int acnt = 0x10, rep, i;
1892
1893 if (IS_NVA3F(device->chipset))
1894 acnt = 0x20;
1895
1896 if (device->chipset >= 0xa0) {
1897 xf_emit(ctx, 1, 0);
1898 xf_emit(ctx, 1, 1);
1899 }
1900 xf_emit(ctx, 1, 0);
1901 xf_emit(ctx, 1, 0);
1902 xf_emit(ctx, 1, 0);
1903 xf_emit(ctx, 1, 0);
1904 xf_emit(ctx, 1, 0xf);
1905 xf_emit(ctx, (acnt/8)-1, 0);
1906 xf_emit(ctx, acnt/8, 0);
1907 xf_emit(ctx, 1, 0);
1908 xf_emit(ctx, 1, 0x20);
1909 xf_emit(ctx, 1, 0);
1910 xf_emit(ctx, 1, 0);
1911 xf_emit(ctx, 1, 0);
1912
1913 if (IS_NVA3F(device->chipset))
1914 xf_emit(ctx, 0xb, 0);
1915 else if (device->chipset >= 0xa0)
1916 xf_emit(ctx, 0x9, 0);
1917 else
1918 xf_emit(ctx, 0x8, 0);
1919
1920 xf_emit(ctx, 1, 0);
1921 xf_emit(ctx, 1, 0);
1922 xf_emit(ctx, 1, 0);
1923 xf_emit(ctx, 1, 0x1a);
1924
1925 xf_emit(ctx, 0xc, 0);
1926
1927 xf_emit(ctx, 1, 0);
1928 xf_emit(ctx, 1, 4);
1929 xf_emit(ctx, 1, 4);
1930 xf_emit(ctx, 1, 0);
1931 xf_emit(ctx, 1, 4);
1932 xf_emit(ctx, 1, 8);
1933 xf_emit(ctx, 1, 0);
1934 if (device->chipset == 0x50)
1935 xf_emit(ctx, 1, 0x3ff);
1936 else
1937 xf_emit(ctx, 1, 0x7ff);
1938 if (device->chipset == 0xa8)
1939 xf_emit(ctx, 1, 0x1e00);
1940
1941 xf_emit(ctx, 0xc, 0);
1942
1943 xf_emit(ctx, 1, 0xf);
1944 xf_emit(ctx, (acnt/8)-1, 0);
1945 xf_emit(ctx, 1, 0);
1946 if (device->chipset > 0x50 && device->chipset < 0xa0)
1947 xf_emit(ctx, 2, 0);
1948 else
1949 xf_emit(ctx, 1, 0);
1950 xf_emit(ctx, 1, 0);
1951
1952 if (IS_NVA3F(device->chipset)) {
1953 xf_emit(ctx, 0x10, 0);
1954 xf_emit(ctx, 2, 0);
1955 xf_emit(ctx, 2, 0);
1956 } else {
1957 xf_emit(ctx, 8, 0);
1958 xf_emit(ctx, 1, 0);
1959 xf_emit(ctx, 2, 0);
1960 }
1961
1962 xf_emit(ctx, 1, 0);
1963 xf_emit(ctx, 1, 0);
1964 xf_emit(ctx, acnt, 0);
1965 if (device->chipset >= 0xa0)
1966 xf_emit(ctx, 1, 0);
1967
1968 xf_emit(ctx, acnt, 0);
1969 xf_emit(ctx, 1, 0);
1970
1971 xf_emit(ctx, acnt, 0);
1972 xf_emit(ctx, 1, 0);
1973
1974 xf_emit(ctx, acnt, 0);
1975 xf_emit(ctx, 2, 0);
1976
1977 xf_emit(ctx, 1, 0);
1978 xf_emit(ctx, 1, 0);
1979
1980 xf_emit(ctx, 1, 0);
1981 xf_emit(ctx, 1, 0);
1982 xf_emit(ctx, 1, 0);
1983 xf_emit(ctx, 1, 0);
1984
1985 xf_emit(ctx, acnt, 0);
1986 xf_emit(ctx, 3, 0);
1987
1988 xf_emit(ctx, acnt, 0);
1989 xf_emit(ctx, 3, 0);
1990
1991 xf_emit(ctx, acnt, 0);
1992 xf_emit(ctx, 3, 0);
1993
1994 xf_emit(ctx, acnt, 0);
1995 xf_emit(ctx, 3, 0);
1996
1997 xf_emit(ctx, acnt, 0);
1998 xf_emit(ctx, 3, 0);
1999
2000 xf_emit(ctx, acnt, 0);
2001 xf_emit(ctx, 3, 0);
2002
2003 if (IS_NVA3F(device->chipset)) {
2004 xf_emit(ctx, acnt, 0);
2005 xf_emit(ctx, 3, 0);
2006 }
2007
2008 if (IS_NVA3F(device->chipset))
2009 xf_emit(ctx, 2, 0);
2010 else
2011 xf_emit(ctx, 5, 0);
2012
2013 xf_emit(ctx, 1, 0);
2014
2015 if (device->chipset < 0xa0) {
2016 xf_emit(ctx, 0x41, 0);
2017
2018 xf_emit(ctx, 0x11, 0);
2019 } else if (!IS_NVA3F(device->chipset))
2020 xf_emit(ctx, 0x50, 0);
2021 else
2022 xf_emit(ctx, 0x58, 0);
2023
2024 xf_emit(ctx, 1, 0xf);
2025 xf_emit(ctx, (acnt/8)-1, 0);
2026 xf_emit(ctx, 1, 1);
2027
2028 xf_emit(ctx, acnt*4, 0);
2029 xf_emit(ctx, 4, 0);
2030
2031 if (IS_NVA3F(device->chipset))
2032 xf_emit(ctx, 0x1d, 0);
2033 else
2034 xf_emit(ctx, 0x16, 0);
2035
2036 xf_emit(ctx, 1, 0xf);
2037 xf_emit(ctx, (acnt/8)-1, 0);
2038
2039 if (device->chipset < 0xa0)
2040 xf_emit(ctx, 8, 0);
2041 else if (IS_NVA3F(device->chipset))
2042 xf_emit(ctx, 0xc, 0);
2043 else
2044 xf_emit(ctx, 7, 0);
2045
2046 xf_emit(ctx, 0xa, 0);
2047 if (device->chipset == 0xa0)
2048 rep = 0xc;
2049 else
2050 rep = 4;
2051 for (i = 0; i < rep; i++) {
2052
2053 if (IS_NVA3F(device->chipset))
2054 xf_emit(ctx, 0x20, 0);
2055 xf_emit(ctx, 0x200, 0);
2056 xf_emit(ctx, 4, 0);
2057 xf_emit(ctx, 4, 0);
2058 }
2059
2060 xf_emit(ctx, 1, 0);
2061 xf_emit(ctx, 1, 0xf);
2062 xf_emit(ctx, (acnt/8)-1, 0);
2063 xf_emit(ctx, acnt/8, 0);
2064 xf_emit(ctx, 1, 0);
2065 xf_emit(ctx, 1, 0);
2066
2067 if (IS_NVA3F(device->chipset))
2068 xf_emit(ctx, 7, 0);
2069 else
2070 xf_emit(ctx, 5, 0);
2071}
2072
2073static void
2074nv50_gr_construct_gene_eng2d(struct nvkm_grctx *ctx)
2075{
2076 struct nvkm_device *device = ctx->device;
2077
2078
2079 xf_emit(ctx, 2, 0);
2080 xf_emit(ctx, 2, 0);
2081 xf_emit(ctx, 1, 0);
2082 if (device->chipset < 0xa0) {
2083
2084
2085 xf_emit(ctx, 2, 0);
2086 xf_emit(ctx, 2, 1);
2087 xf_emit(ctx, 1, 0);
2088 }
2089 xf_emit(ctx, 1, 1);
2090 xf_emit(ctx, 1, 0x100);
2091 xf_emit(ctx, 1, 0x100);
2092 xf_emit(ctx, 1, 0x11);
2093 xf_emit(ctx, 1, 0);
2094 xf_emit(ctx, 1, 8);
2095 xf_emit(ctx, 1, 0);
2096 xf_emit(ctx, 1, 0);
2097 xf_emit(ctx, 1, 0);
2098 xf_emit(ctx, 1, 0);
2099 xf_emit(ctx, 1, 0);
2100 xf_emit(ctx, 1, 1);
2101 xf_emit(ctx, 1, 0);
2102 xf_emit(ctx, 1, 1);
2103 xf_emit(ctx, 1, 1);
2104 xf_emit(ctx, 1, 1);
2105 xf_emit(ctx, 1, 0xcf);
2106 xf_emit(ctx, 1, 2);
2107 xf_emit(ctx, 1, 0);
2108 xf_emit(ctx, 1, 0);
2109 xf_emit(ctx, 1, 0);
2110 xf_emit(ctx, 1, 0);
2111 xf_emit(ctx, 1, 0);
2112 xf_emit(ctx, 1, 0);
2113 xf_emit(ctx, 1, 1);
2114 xf_emit(ctx, 1, 0);
2115 xf_emit(ctx, 1, 1);
2116 xf_emit(ctx, 1, 1);
2117 xf_emit(ctx, 1, 1);
2118 xf_emit(ctx, 1, 0);
2119 xf_emit(ctx, 1, 0);
2120 xf_emit(ctx, 1, 0);
2121 xf_emit(ctx, 1, 0);
2122 xf_emit(ctx, 1, 4);
2123 xf_emit(ctx, 1, 0);
2124 xf_emit(ctx, 1, 1);
2125 xf_emit(ctx, 1, 0x15);
2126 xf_emit(ctx, 2, 0);
2127 xf_emit(ctx, 1, 0);
2128 xf_emit(ctx, 1, 0x4444480);
2129
2130 xf_emit(ctx, 0x10, 0);
2131
2132 xf_emit(ctx, 0x27, 0);
2133}
2134
2135static void
2136nv50_gr_construct_gene_csched(struct nvkm_grctx *ctx)
2137{
2138 struct nvkm_device *device = ctx->device;
2139
2140
2141 xf_emit(ctx, 2, 0);
2142 xf_emit(ctx, 1, 0);
2143 xf_emit(ctx, 1, 0);
2144 xf_emit(ctx, 1, 0x8100c12);
2145 xf_emit(ctx, 1, 0);
2146
2147 xf_emit(ctx, 1, 0);
2148 xf_emit(ctx, 1, 0);
2149 xf_emit(ctx, 1, 0);
2150 xf_emit(ctx, 1, 0x100);
2151 xf_emit(ctx, 1, 0);
2152 xf_emit(ctx, 1, 0);
2153 xf_emit(ctx, 1, 0x10001);
2154 xf_emit(ctx, 1, 0);
2155 xf_emit(ctx, 1, 0x10001);
2156 xf_emit(ctx, 1, 1);
2157 xf_emit(ctx, 1, 0x10001);
2158 xf_emit(ctx, 1, 1);
2159 xf_emit(ctx, 1, 4);
2160 xf_emit(ctx, 1, 2);
2161
2162 xf_emit(ctx, 0x40, 0);
2163 switch (device->chipset) {
2164 case 0x50:
2165 case 0x92:
2166 xf_emit(ctx, 8, 0);
2167 xf_emit(ctx, 0x80, 0);
2168 xf_emit(ctx, 2, 0);
2169 xf_emit(ctx, 0x10*2, 0);
2170 break;
2171 case 0x84:
2172 xf_emit(ctx, 8, 0);
2173 xf_emit(ctx, 0x60, 0);
2174 xf_emit(ctx, 2, 0);
2175 xf_emit(ctx, 0xc*2, 0);
2176 break;
2177 case 0x94:
2178 case 0x96:
2179 xf_emit(ctx, 8, 0);
2180 xf_emit(ctx, 0x40, 0);
2181 xf_emit(ctx, 2, 0);
2182 xf_emit(ctx, 8*2, 0);
2183 break;
2184 case 0x86:
2185 case 0x98:
2186 xf_emit(ctx, 4, 0);
2187 xf_emit(ctx, 0x10, 0);
2188 xf_emit(ctx, 2, 0);
2189 xf_emit(ctx, 2*2, 0);
2190 break;
2191 case 0xa0:
2192 xf_emit(ctx, 8, 0);
2193 xf_emit(ctx, 0xf0, 0);
2194 xf_emit(ctx, 2, 0);
2195 xf_emit(ctx, 0x1e*2, 0);
2196 break;
2197 case 0xa3:
2198 xf_emit(ctx, 8, 0);
2199 xf_emit(ctx, 0x60, 0);
2200 xf_emit(ctx, 2, 0);
2201 xf_emit(ctx, 0xc*2, 0);
2202 break;
2203 case 0xa5:
2204 case 0xaf:
2205 xf_emit(ctx, 8, 0);
2206 xf_emit(ctx, 0x30, 0);
2207 xf_emit(ctx, 2, 0);
2208 xf_emit(ctx, 6*2, 0);
2209 break;
2210 case 0xaa:
2211 xf_emit(ctx, 0x12, 0);
2212 break;
2213 case 0xa8:
2214 case 0xac:
2215 xf_emit(ctx, 4, 0);
2216 xf_emit(ctx, 0x10, 0);
2217 xf_emit(ctx, 2, 0);
2218 xf_emit(ctx, 2*2, 0);
2219 break;
2220 }
2221 xf_emit(ctx, 1, 0);
2222 xf_emit(ctx, 1, 0);
2223 xf_emit(ctx, 1, 0);
2224 xf_emit(ctx, 1, 0);
2225 xf_emit(ctx, 4, 0);
2226 xf_emit(ctx, 1, 0);
2227 xf_emit(ctx, 1, 0);
2228 xf_emit(ctx, 4, 0);
2229 xf_emit(ctx, 1, 0);
2230 xf_emit(ctx, 1, 0);
2231 xf_emit(ctx, 1, 0);
2232}
2233
2234static void
2235nv50_gr_construct_gene_unk1cxx(struct nvkm_grctx *ctx)
2236{
2237 struct nvkm_device *device = ctx->device;
2238 xf_emit(ctx, 2, 0);
2239 xf_emit(ctx, 1, 0x3f800000);
2240 xf_emit(ctx, 1, 0);
2241 xf_emit(ctx, 1, 0);
2242 xf_emit(ctx, 1, 0);
2243 xf_emit(ctx, 3, 0);
2244 xf_emit(ctx, 1, 4);
2245 xf_emit(ctx, 1, 0x1a);
2246 xf_emit(ctx, 1, 0);
2247 xf_emit(ctx, 1, 0);
2248 xf_emit(ctx, 1, 1);
2249 xf_emit(ctx, 0x10, 0);
2250 xf_emit(ctx, 1, 0);
2251 xf_emit(ctx, 1, 0);
2252 xf_emit(ctx, 1, 0x00ffff00);
2253 xf_emit(ctx, 1, 0);
2254 xf_emit(ctx, 1, 0);
2255 xf_emit(ctx, 1, 0);
2256 xf_emit(ctx, 2, 0);
2257 xf_emit(ctx, 1, 0);
2258 xf_emit(ctx, 1, 0xf);
2259 xf_emit(ctx, 7, 0);
2260 xf_emit(ctx, 1, 0x0fac6881);
2261 xf_emit(ctx, 1, 0x11);
2262 xf_emit(ctx, 7, 0);
2263 xf_emit(ctx, 8, 0);
2264 xf_emit(ctx, 1, 4);
2265 xf_emit(ctx, 1, 0);
2266 xf_emit(ctx, 1, 0);
2267 if (IS_NVA3F(device->chipset))
2268 xf_emit(ctx, 1, 3);
2269 else if (device->chipset >= 0xa0)
2270 xf_emit(ctx, 1, 1);
2271 xf_emit(ctx, 1, 0);
2272 xf_emit(ctx, 1, 0);
2273 xf_emit(ctx, 1, 2);
2274 xf_emit(ctx, 2, 0x04000000);
2275 xf_emit(ctx, 1, 0);
2276 xf_emit(ctx, 1, 0);
2277 xf_emit(ctx, 1, 0);
2278 xf_emit(ctx, 1, 5);
2279 xf_emit(ctx, 1, 0x52);
2280 xf_emit(ctx, 1, 0);
2281 xf_emit(ctx, 1, 0);
2282 xf_emit(ctx, 1, 0);
2283 if (device->chipset != 0x50) {
2284 xf_emit(ctx, 1, 0);
2285 xf_emit(ctx, 1, 1);
2286 }
2287 if (IS_NVA3F(device->chipset))
2288 xf_emit(ctx, 1, 0);
2289 xf_emit(ctx, 0x10, 0);
2290 xf_emit(ctx, 0x10, 0x3f800000);
2291 xf_emit(ctx, 1, 0x10);
2292 xf_emit(ctx, 0x20, 0);
2293 xf_emit(ctx, 1, 0);
2294 xf_emit(ctx, 1, 0);
2295 xf_emit(ctx, 1, 0);
2296 xf_emit(ctx, 1, 0);
2297 xf_emit(ctx, 1, 0);
2298 xf_emit(ctx, 1, 0);
2299 xf_emit(ctx, 1, 0x8100c12);
2300 xf_emit(ctx, 1, 5);
2301 xf_emit(ctx, 1, 0);
2302 xf_emit(ctx, 1, 0);
2303 xf_emit(ctx, 1, 1);
2304 xf_emit(ctx, 1, 0);
2305 xf_emit(ctx, 4, 0xffff);
2306 if (device->chipset != 0x50)
2307 xf_emit(ctx, 1, 3);
2308 if (device->chipset < 0xa0)
2309 xf_emit(ctx, 0x1c, 0);
2310 else if (IS_NVA3F(device->chipset))
2311 xf_emit(ctx, 0x9, 0);
2312 xf_emit(ctx, 1, 0);
2313 xf_emit(ctx, 1, 0);
2314 xf_emit(ctx, 1, 0);
2315 xf_emit(ctx, 1, 0x00ffff00);
2316 xf_emit(ctx, 1, 0x1a);
2317 xf_emit(ctx, 1, 0);
2318 if (device->chipset != 0x50) {
2319 xf_emit(ctx, 1, 3);
2320 xf_emit(ctx, 1, 0);
2321 }
2322
2323
2324 if (device->chipset < 0xa0)
2325 xf_emit(ctx, 0x25, 0);
2326 else
2327 xf_emit(ctx, 0x3b, 0);
2328}
2329
2330static void
2331nv50_gr_construct_gene_strmout(struct nvkm_grctx *ctx)
2332{
2333 struct nvkm_device *device = ctx->device;
2334 xf_emit(ctx, 1, 0x102);
2335 xf_emit(ctx, 1, 0);
2336 xf_emit(ctx, 4, 4);
2337 if (device->chipset >= 0xa0) {
2338 xf_emit(ctx, 4, 0);
2339 xf_emit(ctx, 4, 0);
2340 }
2341 xf_emit(ctx, 1, 4);
2342 xf_emit(ctx, 1, 4);
2343 xf_emit(ctx, 1, 0);
2344 if (device->chipset == 0x50)
2345 xf_emit(ctx, 1, 0x3ff);
2346 else
2347 xf_emit(ctx, 1, 0x7ff);
2348 xf_emit(ctx, 1, 0);
2349
2350 xf_emit(ctx, 1, 0x102);
2351 xf_emit(ctx, 1, 0);
2352 xf_emit(ctx, 4, 0);
2353 xf_emit(ctx, 4, 0);
2354 xf_emit(ctx, 4, 4);
2355 if (device->chipset >= 0xa0) {
2356 xf_emit(ctx, 4, 0);
2357 xf_emit(ctx, 4, 0);
2358 }
2359 xf_emit(ctx, 1, 0);
2360 xf_emit(ctx, 1, 0);
2361 xf_emit(ctx, 1, 0);
2362 xf_emit(ctx, 2, 0);
2363 xf_emit(ctx, 2, 0);
2364 xf_emit(ctx, 1, 0);
2365
2366 xf_emit(ctx, 0x20, 0);
2367 xf_emit(ctx, 1, 0);
2368 xf_emit(ctx, 1, 0);
2369 xf_emit(ctx, 2, 0);
2370}
2371
2372static void
2373nv50_gr_construct_gene_ropm1(struct nvkm_grctx *ctx)
2374{
2375 struct nvkm_device *device = ctx->device;
2376 xf_emit(ctx, 1, 0x4e3bfdf);
2377 xf_emit(ctx, 1, 0x4e3bfdf);
2378 xf_emit(ctx, 1, 0);
2379 xf_emit(ctx, 1, 0);
2380 if (IS_NVA3F(device->chipset))
2381 xf_emit(ctx, 1, 0x11);
2382 xf_emit(ctx, 1, 0);
2383}
2384
2385static void
2386nv50_gr_construct_gene_ropm2(struct nvkm_grctx *ctx)
2387{
2388 struct nvkm_device *device = ctx->device;
2389
2390 xf_emit(ctx, 1, 0);
2391 xf_emit(ctx, 1, 0x0fac6881);
2392 xf_emit(ctx, 2, 0);
2393 xf_emit(ctx, 1, 0);
2394 xf_emit(ctx, 2, 0);
2395 xf_emit(ctx, 1, 0);
2396 xf_emit(ctx, 1, 0);
2397
2398 xf_emit(ctx, 1, 0);
2399 xf_emit(ctx, 1, 0);
2400 xf_emit(ctx, 2, 0);
2401 xf_emit(ctx, 1, 0x4e3bfdf);
2402 xf_emit(ctx, 1, 0x4e3bfdf);
2403 xf_emit(ctx, 1, 0);
2404 xf_emit(ctx, 1, 0);
2405 xf_emit(ctx, 1, 0);
2406 if (IS_NVA3F(device->chipset))
2407 xf_emit(ctx, 1, 0x11);
2408 xf_emit(ctx, 1, 0);
2409}
2410
2411static void
2412nv50_gr_construct_gene_ropc(struct nvkm_grctx *ctx)
2413{
2414 struct nvkm_device *device = ctx->device;
2415 int magic2;
2416 if (device->chipset == 0x50) {
2417 magic2 = 0x00003e60;
2418 } else if (!IS_NVA3F(device->chipset)) {
2419 magic2 = 0x001ffe67;
2420 } else {
2421 magic2 = 0x00087e67;
2422 }
2423 xf_emit(ctx, 1, 0);
2424 xf_emit(ctx, 1, 0);
2425 xf_emit(ctx, 1, 0);
2426 xf_emit(ctx, 1, 0);
2427 xf_emit(ctx, 1, 0);
2428 xf_emit(ctx, 3, 0);
2429 xf_emit(ctx, 1, 2);
2430 xf_emit(ctx, 1, 0);
2431 xf_emit(ctx, 1, magic2);
2432 xf_emit(ctx, 1, 0);
2433 xf_emit(ctx, 1, 0);
2434 xf_emit(ctx, 1, 0);
2435 xf_emit(ctx, 1, 0);
2436 if (IS_NVA3F(device->chipset))
2437 xf_emit(ctx, 1, 1);
2438 xf_emit(ctx, 1, 0);
2439 xf_emit(ctx, 1, 0);
2440 xf_emit(ctx, 1, 0);
2441 xf_emit(ctx, 3, 0);
2442 xf_emit(ctx, 1, 0);
2443 if (device->chipset >= 0xa0 && !IS_NVAAF(device->chipset))
2444 xf_emit(ctx, 1, 0x15);
2445 xf_emit(ctx, 1, 0);
2446 xf_emit(ctx, 1, 1);
2447 xf_emit(ctx, 1, 0x10);
2448 xf_emit(ctx, 1, 0);
2449 xf_emit(ctx, 1, 0);
2450 xf_emit(ctx, 1, 1);
2451 xf_emit(ctx, 1, 0);
2452 if (device->chipset == 0x86 || device->chipset == 0x92 || device->chipset == 0x98 || device->chipset >= 0xa0) {
2453 xf_emit(ctx, 3, 0);
2454 xf_emit(ctx, 1, 4);
2455 xf_emit(ctx, 1, 0x400);
2456 xf_emit(ctx, 1, 0x300);
2457 xf_emit(ctx, 1, 0x1001);
2458 if (device->chipset != 0xa0) {
2459 if (IS_NVA3F(device->chipset))
2460 xf_emit(ctx, 1, 0);
2461 else
2462 xf_emit(ctx, 1, 0x15);
2463 }
2464 }
2465 xf_emit(ctx, 1, 0);
2466 xf_emit(ctx, 1, 0);
2467 xf_emit(ctx, 1, 0);
2468 xf_emit(ctx, 1, 0);
2469 xf_emit(ctx, 1, 0);
2470 xf_emit(ctx, 1, 2);
2471 xf_emit(ctx, 1, 0);
2472 xf_emit(ctx, 1, 0);
2473 xf_emit(ctx, 1, 0);
2474 xf_emit(ctx, 1, 0);
2475 xf_emit(ctx, 1, 0);
2476 xf_emit(ctx, 1, 0);
2477 xf_emit(ctx, 1, 0);
2478 xf_emit(ctx, 1, 0);
2479 xf_emit(ctx, 1, 1);
2480 xf_emit(ctx, 1, 0x10);
2481 xf_emit(ctx, 1, 0);
2482 xf_emit(ctx, 1, 1);
2483 xf_emit(ctx, 1, 0);
2484 xf_emit(ctx, 1, 0);
2485 xf_emit(ctx, 1, 0);
2486 xf_emit(ctx, 1, 0);
2487 xf_emit(ctx, 1, 0);
2488 xf_emit(ctx, 1, 0);
2489 xf_emit(ctx, 2, 0);
2490 xf_emit(ctx, 1, 0);
2491 xf_emit(ctx, 1, 0);
2492 xf_emit(ctx, 1, 0);
2493 xf_emit(ctx, 1, 0);
2494 xf_emit(ctx, 1, 0);
2495 xf_emit(ctx, 1, 0);
2496 xf_emit(ctx, 1, 0);
2497 xf_emit(ctx, 1, 0);
2498 xf_emit(ctx, 1, 0);
2499 xf_emit(ctx, 1, 0);
2500 xf_emit(ctx, 1, 0);
2501 xf_emit(ctx, 1, 0x10);
2502 xf_emit(ctx, 0x10, 0);
2503 xf_emit(ctx, 0x10, 0x3f800000);
2504 xf_emit(ctx, 1, 0);
2505 xf_emit(ctx, 1, 0);
2506 xf_emit(ctx, 1, 0);
2507 xf_emit(ctx, 1, 0);
2508 xf_emit(ctx, 1, 0);
2509 xf_emit(ctx, 1, 0);
2510 xf_emit(ctx, 3, 0);
2511 xf_emit(ctx, 2, 0);
2512 xf_emit(ctx, 1, 0);
2513 xf_emit(ctx, 1, 0);
2514 xf_emit(ctx, 1, 0);
2515 xf_emit(ctx, 1, 0);
2516 xf_emit(ctx, 1, 0);
2517 xf_emit(ctx, 1, 0);
2518 xf_emit(ctx, 1, 0);
2519 xf_emit(ctx, 1, 0);
2520 xf_emit(ctx, 1, 0);
2521 xf_emit(ctx, 3, 0);
2522 xf_emit(ctx, 1, 0);
2523 xf_emit(ctx, 1, 0);
2524 xf_emit(ctx, 1, 0x10);
2525 xf_emit(ctx, 1, 0);
2526 xf_emit(ctx, 1, 0x3f);
2527 xf_emit(ctx, 1, 0);
2528 xf_emit(ctx, 1, 0);
2529 xf_emit(ctx, 2, 0);
2530 xf_emit(ctx, 1, 0);
2531 xf_emit(ctx, 1, 0);
2532 xf_emit(ctx, 1, 1);
2533 xf_emit(ctx, 1, 0);
2534 xf_emit(ctx, 1, 1);
2535 xf_emit(ctx, 1, 0);
2536 xf_emit(ctx, 1, 1);
2537 if (device->chipset >= 0xa0) {
2538 xf_emit(ctx, 2, 0);
2539 xf_emit(ctx, 1, 0x1001);
2540 xf_emit(ctx, 0xb, 0);
2541 } else {
2542 xf_emit(ctx, 1, 0);
2543 xf_emit(ctx, 1, 0);
2544 xf_emit(ctx, 1, 0);
2545 xf_emit(ctx, 8, 0);
2546 xf_emit(ctx, 1, 0);
2547 }
2548 xf_emit(ctx, 1, 0x11);
2549 xf_emit(ctx, 7, 0);
2550 xf_emit(ctx, 1, 0xf);
2551 xf_emit(ctx, 7, 0);
2552 xf_emit(ctx, 1, 0x11);
2553 xf_emit(ctx, 1, 0);
2554 if (device->chipset != 0x50) {
2555 xf_emit(ctx, 1, 0);
2556 xf_emit(ctx, 1, 0);
2557 }
2558 xf_emit(ctx, 1, 0);
2559 xf_emit(ctx, 1, 0);
2560 xf_emit(ctx, 1, 0);
2561 xf_emit(ctx, 2, 1);
2562 xf_emit(ctx, 1, 1);
2563 xf_emit(ctx, 1, 2);
2564 xf_emit(ctx, 1, 1);
2565 xf_emit(ctx, 1, 2);
2566 xf_emit(ctx, 1, 1);
2567 xf_emit(ctx, 1, 0);
2568 xf_emit(ctx, 1, magic2);
2569 xf_emit(ctx, 1, 0);
2570 xf_emit(ctx, 1, 0x0fac6881);
2571 if (IS_NVA3F(device->chipset)) {
2572 xf_emit(ctx, 1, 0);
2573 xf_emit(ctx, 8, 1);
2574 xf_emit(ctx, 8, 1);
2575 xf_emit(ctx, 8, 1);
2576 xf_emit(ctx, 8, 2);
2577 xf_emit(ctx, 8, 1);
2578 xf_emit(ctx, 8, 2);
2579 xf_emit(ctx, 8, 1);
2580 xf_emit(ctx, 1, 0);
2581 xf_emit(ctx, 2, 0);
2582 xf_emit(ctx, 1, 1);
2583 xf_emit(ctx, 1, 0);
2584 xf_emit(ctx, 1, 0);
2585 xf_emit(ctx, 1, 0);
2586 xf_emit(ctx, 2, 0);
2587 xf_emit(ctx, 1, 1);
2588 xf_emit(ctx, 1, 0);
2589 xf_emit(ctx, 1, 0);
2590 } else if (device->chipset >= 0xa0) {
2591 xf_emit(ctx, 2, 0);
2592 xf_emit(ctx, 1, 0);
2593 xf_emit(ctx, 1, 0);
2594 xf_emit(ctx, 1, 0);
2595 xf_emit(ctx, 2, 0);
2596 } else {
2597 xf_emit(ctx, 1, 0);
2598 xf_emit(ctx, 1, 0);
2599 xf_emit(ctx, 1, 0);
2600 }
2601 xf_emit(ctx, 4, 0);
2602 xf_emit(ctx, 4, 0);
2603 xf_emit(ctx, 1, 0);
2604 if (device->chipset >= 0xa0)
2605 xf_emit(ctx, 2, 0);
2606 xf_emit(ctx, 1, 0);
2607 xf_emit(ctx, 8, 0);
2608 xf_emit(ctx, 1, 1);
2609 xf_emit(ctx, 1, 2);
2610 xf_emit(ctx, 1, 1);
2611 xf_emit(ctx, 1, 1);
2612 xf_emit(ctx, 1, 2);
2613 xf_emit(ctx, 1, 1);
2614 xf_emit(ctx, 1, 1);
2615 xf_emit(ctx, 1, 0);
2616 xf_emit(ctx, 1, 0);
2617 xf_emit(ctx, 1, 0);
2618 if (device->chipset >= 0xa0)
2619 xf_emit(ctx, 1, 0);
2620 if (IS_NVA3F(device->chipset)) {
2621 xf_emit(ctx, 8, 1);
2622 xf_emit(ctx, 8, 1);
2623 xf_emit(ctx, 8, 2);
2624 xf_emit(ctx, 8, 1);
2625 xf_emit(ctx, 8, 1);
2626 xf_emit(ctx, 8, 2);
2627 xf_emit(ctx, 8, 1);
2628 xf_emit(ctx, 1, 0);
2629 xf_emit(ctx, 1, 0);
2630 xf_emit(ctx, 1, 0);
2631 }
2632 xf_emit(ctx, 1, 0x11);
2633 xf_emit(ctx, 1, 1);
2634 xf_emit(ctx, 1, 0);
2635 xf_emit(ctx, 2, 0);
2636 xf_emit(ctx, 1, 0);
2637 xf_emit(ctx, 2, 0);
2638 xf_emit(ctx, 1, 0);
2639 xf_emit(ctx, 1, 0);
2640 xf_emit(ctx, 1, 0);
2641 xf_emit(ctx, 1, 0);
2642 xf_emit(ctx, 1, 0);
2643 xf_emit(ctx, 0x50, 0);
2644}
2645
2646static void
2647nv50_gr_construct_xfer_unk84xx(struct nvkm_grctx *ctx)
2648{
2649 struct nvkm_device *device = ctx->device;
2650 int magic3;
2651 switch (device->chipset) {
2652 case 0x50:
2653 magic3 = 0x1000;
2654 break;
2655 case 0x86:
2656 case 0x98:
2657 case 0xa8:
2658 case 0xaa:
2659 case 0xac:
2660 case 0xaf:
2661 magic3 = 0x1e00;
2662 break;
2663 default:
2664 magic3 = 0;
2665 }
2666 xf_emit(ctx, 1, 0);
2667 xf_emit(ctx, 1, 4);
2668 xf_emit(ctx, 1, 0);
2669 xf_emit(ctx, 1, 0);
2670 xf_emit(ctx, 1, 0);
2671 if (IS_NVA3F(device->chipset))
2672 xf_emit(ctx, 0x1f, 0);
2673 else if (device->chipset >= 0xa0)
2674 xf_emit(ctx, 0x0f, 0);
2675 else
2676 xf_emit(ctx, 0x10, 0);
2677 xf_emit(ctx, 2, 0);
2678 xf_emit(ctx, 1, 4);
2679 xf_emit(ctx, 1, 4);
2680 if (device->chipset >= 0xa0)
2681 xf_emit(ctx, 1, 0x03020100);
2682 else
2683 xf_emit(ctx, 1, 0x00608080);
2684 xf_emit(ctx, 1, 0);
2685 xf_emit(ctx, 1, 0);
2686 xf_emit(ctx, 2, 0);
2687 xf_emit(ctx, 1, 4);
2688 xf_emit(ctx, 1, 0);
2689 xf_emit(ctx, 1, 0);
2690 xf_emit(ctx, 1, 4);
2691 xf_emit(ctx, 1, 4);
2692 xf_emit(ctx, 1, 0x80);
2693 if (magic3)
2694 xf_emit(ctx, 1, magic3);
2695 xf_emit(ctx, 1, 4);
2696 xf_emit(ctx, 1, 0);
2697 xf_emit(ctx, 1, 0);
2698 xf_emit(ctx, 0x1f, 0);
2699 xf_emit(ctx, 1, 0);
2700 xf_emit(ctx, 1, 0);
2701 xf_emit(ctx, 1, 0);
2702 xf_emit(ctx, 1, 4);
2703 xf_emit(ctx, 1, 0x80);
2704 xf_emit(ctx, 1, 4);
2705 xf_emit(ctx, 1, 0x03020100);
2706 xf_emit(ctx, 1, 3);
2707 if (magic3)
2708 xf_emit(ctx, 1, magic3);
2709 xf_emit(ctx, 1, 4);
2710 xf_emit(ctx, 1, 0);
2711 xf_emit(ctx, 1, 0);
2712 xf_emit(ctx, 1, 0);
2713 xf_emit(ctx, 1, 0);
2714 xf_emit(ctx, 1, 4);
2715 xf_emit(ctx, 1, 3);
2716 xf_emit(ctx, 1, 0);
2717 xf_emit(ctx, 1, 0);
2718 xf_emit(ctx, 1, 0);
2719 xf_emit(ctx, 1, 4);
2720 xf_emit(ctx, 1, 0);
2721 xf_emit(ctx, 1, 0);
2722 xf_emit(ctx, 1, 0);
2723 if (device->chipset == 0x94 || device->chipset == 0x96)
2724 xf_emit(ctx, 0x1020, 0);
2725 else if (device->chipset < 0xa0)
2726 xf_emit(ctx, 0xa20, 0);
2727 else if (!IS_NVA3F(device->chipset))
2728 xf_emit(ctx, 0x210, 0);
2729 else
2730 xf_emit(ctx, 0x410, 0);
2731 xf_emit(ctx, 1, 0);
2732 xf_emit(ctx, 1, 4);
2733 xf_emit(ctx, 1, 3);
2734 xf_emit(ctx, 1, 0);
2735 xf_emit(ctx, 1, 0);
2736}
2737
2738static void
2739nv50_gr_construct_xfer_tprop(struct nvkm_grctx *ctx)
2740{
2741 struct nvkm_device *device = ctx->device;
2742 int magic1, magic2;
2743 if (device->chipset == 0x50) {
2744 magic1 = 0x3ff;
2745 magic2 = 0x00003e60;
2746 } else if (!IS_NVA3F(device->chipset)) {
2747 magic1 = 0x7ff;
2748 magic2 = 0x001ffe67;
2749 } else {
2750 magic1 = 0x7ff;
2751 magic2 = 0x00087e67;
2752 }
2753 xf_emit(ctx, 1, 0);
2754 xf_emit(ctx, 1, 0);
2755 xf_emit(ctx, 1, 0);
2756 if (IS_NVA3F(device->chipset))
2757 xf_emit(ctx, 1, 1);
2758 xf_emit(ctx, 1, 0);
2759 xf_emit(ctx, 1, 0);
2760 xf_emit(ctx, 1, 0);
2761 xf_emit(ctx, 3, 0);
2762 xf_emit(ctx, 4, 0);
2763 xf_emit(ctx, 1, 0);
2764 xf_emit(ctx, 1, 0);
2765 xf_emit(ctx, 1, 0xf);
2766 xf_emit(ctx, 7, 0);
2767 xf_emit(ctx, 1, 0);
2768 xf_emit(ctx, 1, 0);
2769 xf_emit(ctx, 1, 0);
2770 xf_emit(ctx, 1, 0);
2771 xf_emit(ctx, 1, 4);
2772 xf_emit(ctx, 4, 0xffff);
2773 xf_emit(ctx, 1, 0);
2774 xf_emit(ctx, 3, 0);
2775 xf_emit(ctx, 1, 0);
2776 xf_emit(ctx, 1, 0);
2777 xf_emit(ctx, 2, 0);
2778 xf_emit(ctx, 1, 1);
2779 xf_emit(ctx, 1, 0);
2780 xf_emit(ctx, 1, 0);
2781 xf_emit(ctx, 1, 0);
2782 xf_emit(ctx, 1, 1);
2783 xf_emit(ctx, 1, 0);
2784 xf_emit(ctx, 1, 0);
2785 xf_emit(ctx, 1, 0);
2786 xf_emit(ctx, 2, 0);
2787 xf_emit(ctx, 1, 1);
2788 xf_emit(ctx, 1, 0);
2789 xf_emit(ctx, 1, 0);
2790 if (IS_NVA3F(device->chipset)) {
2791 xf_emit(ctx, 1, 3);
2792 xf_emit(ctx, 1, 0);
2793 xf_emit(ctx, 1, 0);
2794 } else if (device->chipset >= 0xa0) {
2795 xf_emit(ctx, 1, 1);
2796 xf_emit(ctx, 1, 0);
2797 } else {
2798 xf_emit(ctx, 1, 0);
2799 }
2800 xf_emit(ctx, 1, 0);
2801 xf_emit(ctx, 8, 0);
2802 xf_emit(ctx, 1, 1);
2803 xf_emit(ctx, 1, 1);
2804 xf_emit(ctx, 1, 2);
2805 xf_emit(ctx, 1, 1);
2806 xf_emit(ctx, 1, 1);
2807 xf_emit(ctx, 1, 2);
2808 if (IS_NVA3F(device->chipset)) {
2809 xf_emit(ctx, 1, 0);
2810 xf_emit(ctx, 8, 1);
2811 xf_emit(ctx, 8, 1);
2812 xf_emit(ctx, 8, 1);
2813 xf_emit(ctx, 8, 2);
2814 xf_emit(ctx, 8, 1);
2815 xf_emit(ctx, 8, 2);
2816 xf_emit(ctx, 8, 1);
2817 xf_emit(ctx, 1, 0);
2818 }
2819 xf_emit(ctx, 1, 1);
2820 xf_emit(ctx, 1, 0);
2821 xf_emit(ctx, 1, 0x11);
2822 xf_emit(ctx, 7, 0);
2823 xf_emit(ctx, 1, 0x0fac6881);
2824 xf_emit(ctx, 1, 0);
2825 xf_emit(ctx, 1, 0);
2826 xf_emit(ctx, 1, 4);
2827 xf_emit(ctx, 1, 0);
2828 xf_emit(ctx, 1, 0);
2829 xf_emit(ctx, 1, 0);
2830 xf_emit(ctx, 1, 0x11);
2831 xf_emit(ctx, 1, 1);
2832 xf_emit(ctx, 1, 0);
2833 xf_emit(ctx, 1, 0xcf);
2834 xf_emit(ctx, 1, 0xcf);
2835 xf_emit(ctx, 1, 0xcf);
2836 if (IS_NVA3F(device->chipset))
2837 xf_emit(ctx, 1, 1);
2838 xf_emit(ctx, 1, 0);
2839 xf_emit(ctx, 1, 0);
2840 xf_emit(ctx, 8, 0);
2841 xf_emit(ctx, 1, 1);
2842 xf_emit(ctx, 1, 1);
2843 xf_emit(ctx, 1, 2);
2844 xf_emit(ctx, 1, 1);
2845 xf_emit(ctx, 1, 1);
2846 xf_emit(ctx, 1, 2);
2847 xf_emit(ctx, 1, 1);
2848 xf_emit(ctx, 1, 0);
2849 xf_emit(ctx, 8, 1);
2850 xf_emit(ctx, 1, 0x11);
2851 xf_emit(ctx, 7, 0);
2852 xf_emit(ctx, 1, 0x0fac6881);
2853 xf_emit(ctx, 1, 0xf);
2854 xf_emit(ctx, 7, 0);
2855 xf_emit(ctx, 1, magic2);
2856 xf_emit(ctx, 1, 0);
2857 xf_emit(ctx, 1, 0);
2858 xf_emit(ctx, 1, 0x11);
2859 xf_emit(ctx, 1, 1);
2860 if (IS_NVA3F(device->chipset))
2861 xf_emit(ctx, 1, 1);
2862 if (device->chipset == 0x50)
2863 xf_emit(ctx, 1, 0);
2864 else
2865 xf_emit(ctx, 3, 0);
2866 xf_emit(ctx, 1, 4);
2867 xf_emit(ctx, 1, 0);
2868 xf_emit(ctx, 1, 0);
2869 xf_emit(ctx, 1, 0);
2870 xf_emit(ctx, 1, 0);
2871 xf_emit(ctx, 1, 0);
2872 xf_emit(ctx, 1, 1);
2873 xf_emit(ctx, 1, 0);
2874 xf_emit(ctx, 1, 0);
2875 xf_emit(ctx, 1, 0);
2876 xf_emit(ctx, 1, 0);
2877 xf_emit(ctx, 1, 0x11);
2878 xf_emit(ctx, 7, 0);
2879 xf_emit(ctx, 1, 0x0fac6881);
2880 xf_emit(ctx, 1, 0);
2881 xf_emit(ctx, 1, 0);
2882 xf_emit(ctx, 1, 0);
2883 xf_emit(ctx, 1, 0x11);
2884 xf_emit(ctx, 1, 1);
2885 xf_emit(ctx, 1, 0);
2886 xf_emit(ctx, 1, 1);
2887 xf_emit(ctx, 1, 0);
2888 xf_emit(ctx, 1, 1);
2889 xf_emit(ctx, 1, 0);
2890 xf_emit(ctx, 1, magic1);
2891 xf_emit(ctx, 1, 0);
2892 xf_emit(ctx, 1, 1);
2893 xf_emit(ctx, 1, 0);
2894 xf_emit(ctx, 1, 1);
2895 xf_emit(ctx, 1, 0);
2896 xf_emit(ctx, 1, 0);
2897 if (IS_NVA3F(device->chipset))
2898 xf_emit(ctx, 1, 1);
2899 xf_emit(ctx, 8, 0);
2900 xf_emit(ctx, 1, 0);
2901 xf_emit(ctx, 1, 0);
2902 xf_emit(ctx, 1, 0);
2903 xf_emit(ctx, 1, 0);
2904 xf_emit(ctx, 1, 0);
2905 xf_emit(ctx, 1, 0);
2906 xf_emit(ctx, 1, 0);
2907 xf_emit(ctx, 1, 0);
2908 xf_emit(ctx, 8, 0);
2909 xf_emit(ctx, 8, 0);
2910 xf_emit(ctx, 8, 0);
2911 xf_emit(ctx, 8, 8);
2912 xf_emit(ctx, 1, 0x11);
2913 xf_emit(ctx, 7, 0);
2914 xf_emit(ctx, 1, 0x0fac6881);
2915 xf_emit(ctx, 8, 0x400);
2916 xf_emit(ctx, 8, 0x300);
2917 xf_emit(ctx, 1, 1);
2918 xf_emit(ctx, 1, 0xf);
2919 xf_emit(ctx, 7, 0);
2920 xf_emit(ctx, 1, 0x20);
2921 xf_emit(ctx, 1, 0x11);
2922 xf_emit(ctx, 1, 0x100);
2923 xf_emit(ctx, 1, 0);
2924 xf_emit(ctx, 1, 1);
2925 xf_emit(ctx, 1, 0);
2926 xf_emit(ctx, 1, 0);
2927 xf_emit(ctx, 1, 0x40);
2928 xf_emit(ctx, 1, 0x100);
2929 xf_emit(ctx, 1, 0);
2930 xf_emit(ctx, 1, 3);
2931 xf_emit(ctx, 1, 0);
2932 xf_emit(ctx, 1, 0);
2933 xf_emit(ctx, 1, 0);
2934 xf_emit(ctx, 1, 0);
2935 if (IS_NVA3F(device->chipset))
2936 xf_emit(ctx, 1, 1);
2937 xf_emit(ctx, 1, magic2);
2938 xf_emit(ctx, 1, 0);
2939 xf_emit(ctx, 1, 0);
2940 xf_emit(ctx, 1, 0);
2941 xf_emit(ctx, 1, 2);
2942 xf_emit(ctx, 1, 0x0fac6881);
2943 xf_emit(ctx, 1, 0);
2944 xf_emit(ctx, 1, 0);
2945 xf_emit(ctx, 1, 0);
2946 xf_emit(ctx, 1, 0);
2947 xf_emit(ctx, 2, 0);
2948 xf_emit(ctx, 1, 0);
2949 xf_emit(ctx, 1, 0);
2950 xf_emit(ctx, 1, 0);
2951 xf_emit(ctx, 1, 1);
2952 xf_emit(ctx, 1, 0);
2953 xf_emit(ctx, 1, 0);
2954 xf_emit(ctx, 1, 0);
2955 xf_emit(ctx, 1, 0);
2956 xf_emit(ctx, 1, 4);
2957 xf_emit(ctx, 1, 0);
2958 xf_emit(ctx, 1, 1);
2959 xf_emit(ctx, 1, 0x400);
2960 xf_emit(ctx, 1, 0x300);
2961 xf_emit(ctx, 1, 0x1001);
2962 xf_emit(ctx, 1, 0);
2963 xf_emit(ctx, 1, 0);
2964 if (IS_NVA3F(device->chipset))
2965 xf_emit(ctx, 1, 0);
2966 xf_emit(ctx, 1, 0);
2967 xf_emit(ctx, 1, 0x11);
2968 xf_emit(ctx, 7, 0);
2969 xf_emit(ctx, 1, 0x0fac6881);
2970 xf_emit(ctx, 1, 0xf);
2971 xf_emit(ctx, 7, 0);
2972 xf_emit(ctx, 1, 0);
2973 xf_emit(ctx, 8, 0);
2974 xf_emit(ctx, 1, 0);
2975 xf_emit(ctx, 1, 0);
2976 xf_emit(ctx, 1, 0);
2977 xf_emit(ctx, 1, 0);
2978 if (IS_NVA3F(device->chipset)) {
2979 xf_emit(ctx, 1, 0);
2980 xf_emit(ctx, 1, 1);
2981 }
2982 xf_emit(ctx, 1, 0);
2983 xf_emit(ctx, 1, 0);
2984 xf_emit(ctx, 1, 0);
2985 if (device->chipset >= 0xa0)
2986 xf_emit(ctx, 1, 0x0fac6881);
2987 xf_emit(ctx, 1, magic2);
2988 xf_emit(ctx, 1, 0);
2989 xf_emit(ctx, 1, 0);
2990 xf_emit(ctx, 1, 0);
2991 xf_emit(ctx, 1, 0x11);
2992 xf_emit(ctx, 1, 0);
2993 xf_emit(ctx, 1, 0);
2994 xf_emit(ctx, 1, 4);
2995 xf_emit(ctx, 1, 0);
2996 xf_emit(ctx, 1, 1);
2997 xf_emit(ctx, 1, 1);
2998 xf_emit(ctx, 1, 0);
2999 xf_emit(ctx, 1, 0);
3000 xf_emit(ctx, 1, 0);
3001 xf_emit(ctx, 1, 1);
3002 if (IS_NVA3F(device->chipset)) {
3003 xf_emit(ctx, 1, 1);
3004 xf_emit(ctx, 1, 0);
3005 }
3006 xf_emit(ctx, 1, 0);
3007 if (device->chipset >= 0xa0) {
3008 xf_emit(ctx, 3, 0);
3009 xf_emit(ctx, 1, 0xfac6881);
3010 xf_emit(ctx, 4, 0);
3011 xf_emit(ctx, 1, 4);
3012 xf_emit(ctx, 1, 0);
3013 xf_emit(ctx, 2, 1);
3014 xf_emit(ctx, 2, 0);
3015 xf_emit(ctx, 1, 1);
3016 xf_emit(ctx, 1, 0);
3017 if (IS_NVA3F(device->chipset))
3018 xf_emit(ctx, 0x9, 0);
3019 else
3020 xf_emit(ctx, 0x8, 0);
3021 xf_emit(ctx, 1, 0);
3022 xf_emit(ctx, 8, 1);
3023 xf_emit(ctx, 1, 0x11);
3024 xf_emit(ctx, 7, 0);
3025 xf_emit(ctx, 1, 0xfac6881);
3026 xf_emit(ctx, 1, 0xf);
3027 xf_emit(ctx, 7, 0);
3028 xf_emit(ctx, 1, 0x11);
3029 xf_emit(ctx, 1, 1);
3030 xf_emit(ctx, 5, 0);
3031 if (IS_NVA3F(device->chipset)) {
3032 xf_emit(ctx, 1, 0);
3033 xf_emit(ctx, 1, 1);
3034 }
3035 }
3036}
3037
3038static void
3039nv50_gr_construct_xfer_tex(struct nvkm_grctx *ctx)
3040{
3041 struct nvkm_device *device = ctx->device;
3042 xf_emit(ctx, 2, 0);
3043 if (device->chipset != 0x50)
3044 xf_emit(ctx, 1, 0);
3045 xf_emit(ctx, 1, 1);
3046 xf_emit(ctx, 1, 0);
3047 xf_emit(ctx, 1, 1);
3048 xf_emit(ctx, 1, 0);
3049 if (device->chipset == 0x50)
3050 xf_emit(ctx, 1, 0);
3051 else
3052 xf_emit(ctx, 2, 0);
3053 xf_emit(ctx, 1, 0x2a712488);
3054 xf_emit(ctx, 1, 0);
3055 xf_emit(ctx, 1, 0x4085c000);
3056 xf_emit(ctx, 1, 0x40);
3057 xf_emit(ctx, 1, 0x100);
3058 xf_emit(ctx, 1, 0x10100);
3059 xf_emit(ctx, 1, 0x02800000);
3060 xf_emit(ctx, 1, 0);
3061 if (device->chipset == 0x50) {
3062 xf_emit(ctx, 1, 0);
3063 xf_emit(ctx, 1, 0);
3064 xf_emit(ctx, 1, 0);
3065 xf_emit(ctx, 1, 0);
3066 xf_emit(ctx, 1, 0);
3067 } else if (!IS_NVAAF(device->chipset)) {
3068 xf_emit(ctx, 1, 0);
3069 xf_emit(ctx, 1, 0);
3070 xf_emit(ctx, 1, 0);
3071 xf_emit(ctx, 1, 0);
3072 xf_emit(ctx, 1, 0);
3073 xf_emit(ctx, 1, 0);
3074 xf_emit(ctx, 1, 0);
3075 xf_emit(ctx, 1, 0);
3076 } else {
3077 xf_emit(ctx, 0x6, 0);
3078 }
3079 xf_emit(ctx, 1, 0);
3080 xf_emit(ctx, 1, 0);
3081 xf_emit(ctx, 1, 0);
3082}
3083
3084static void
3085nv50_gr_construct_xfer_unk8cxx(struct nvkm_grctx *ctx)
3086{
3087 struct nvkm_device *device = ctx->device;
3088 xf_emit(ctx, 1, 0);
3089 xf_emit(ctx, 1, 0);
3090 xf_emit(ctx, 2, 0);
3091 xf_emit(ctx, 1, 0);
3092 xf_emit(ctx, 1, 0);
3093 xf_emit(ctx, 1, 0x04e3bfdf);
3094 xf_emit(ctx, 1, 0x04e3bfdf);
3095 xf_emit(ctx, 1, 1);
3096 xf_emit(ctx, 1, 0);
3097 xf_emit(ctx, 1, 0x00ffff00);
3098 xf_emit(ctx, 1, 1);
3099 if (IS_NVA3F(device->chipset))
3100 xf_emit(ctx, 1, 1);
3101 xf_emit(ctx, 1, 0);
3102 xf_emit(ctx, 1, 0);
3103 xf_emit(ctx, 1, 0x00ffff00);
3104 xf_emit(ctx, 1, 0);
3105 xf_emit(ctx, 1, 0);
3106 xf_emit(ctx, 1, 0);
3107 xf_emit(ctx, 1, 0);
3108 xf_emit(ctx, 1, 0);
3109 xf_emit(ctx, 1, 0);
3110 xf_emit(ctx, 1, 0);
3111 xf_emit(ctx, 1, 0);
3112 xf_emit(ctx, 1, 1);
3113 xf_emit(ctx, 1, 0);
3114 xf_emit(ctx, 1, 1);
3115 xf_emit(ctx, 1, 0x30201000);
3116 xf_emit(ctx, 1, 0x70605040);
3117 xf_emit(ctx, 1, 0xb8a89888);
3118 xf_emit(ctx, 1, 0xf8e8d8c8);
3119 xf_emit(ctx, 1, 0);
3120 xf_emit(ctx, 1, 0x1a);
3121}
3122
3123static void
3124nv50_gr_construct_xfer_tp(struct nvkm_grctx *ctx)
3125{
3126 struct nvkm_device *device = ctx->device;
3127 if (device->chipset < 0xa0) {
3128 nv50_gr_construct_xfer_unk84xx(ctx);
3129 nv50_gr_construct_xfer_tprop(ctx);
3130 nv50_gr_construct_xfer_tex(ctx);
3131 nv50_gr_construct_xfer_unk8cxx(ctx);
3132 } else {
3133 nv50_gr_construct_xfer_tex(ctx);
3134 nv50_gr_construct_xfer_tprop(ctx);
3135 nv50_gr_construct_xfer_unk8cxx(ctx);
3136 nv50_gr_construct_xfer_unk84xx(ctx);
3137 }
3138}
3139
3140static void
3141nv50_gr_construct_xfer_mpc(struct nvkm_grctx *ctx)
3142{
3143 struct nvkm_device *device = ctx->device;
3144 int i, mpcnt = 2;
3145 switch (device->chipset) {
3146 case 0x98:
3147 case 0xaa:
3148 mpcnt = 1;
3149 break;
3150 case 0x50:
3151 case 0x84:
3152 case 0x86:
3153 case 0x92:
3154 case 0x94:
3155 case 0x96:
3156 case 0xa8:
3157 case 0xac:
3158 mpcnt = 2;
3159 break;
3160 case 0xa0:
3161 case 0xa3:
3162 case 0xa5:
3163 case 0xaf:
3164 mpcnt = 3;
3165 break;
3166 }
3167 for (i = 0; i < mpcnt; i++) {
3168 xf_emit(ctx, 1, 0);
3169 xf_emit(ctx, 1, 0x80);
3170 xf_emit(ctx, 1, 0x80007004);
3171 xf_emit(ctx, 1, 0x04000400);
3172 if (device->chipset >= 0xa0)
3173 xf_emit(ctx, 1, 0xc0);
3174 xf_emit(ctx, 1, 0x1000);
3175 xf_emit(ctx, 1, 0);
3176 xf_emit(ctx, 1, 0);
3177 if (device->chipset == 0x86 || device->chipset == 0x98 || device->chipset == 0xa8 || IS_NVAAF(device->chipset)) {
3178 xf_emit(ctx, 1, 0xe00);
3179 xf_emit(ctx, 1, 0x1e00);
3180 }
3181 xf_emit(ctx, 1, 1);
3182 xf_emit(ctx, 1, 0);
3183 xf_emit(ctx, 1, 0);
3184 if (device->chipset == 0x50)
3185 xf_emit(ctx, 2, 0x1000);
3186 xf_emit(ctx, 1, 1);
3187 xf_emit(ctx, 1, 0);
3188 xf_emit(ctx, 1, 4);
3189 xf_emit(ctx, 1, 2);
3190 if (IS_NVAAF(device->chipset))
3191 xf_emit(ctx, 0xb, 0);
3192 else if (device->chipset >= 0xa0)
3193 xf_emit(ctx, 0xc, 0);
3194 else
3195 xf_emit(ctx, 0xa, 0);
3196 }
3197 xf_emit(ctx, 1, 0x08100c12);
3198 xf_emit(ctx, 1, 0);
3199 if (device->chipset >= 0xa0) {
3200 xf_emit(ctx, 1, 0x1fe21);
3201 }
3202 xf_emit(ctx, 3, 0);
3203 xf_emit(ctx, 1, 0);
3204 xf_emit(ctx, 1, 0);
3205 xf_emit(ctx, 4, 0xffff);
3206 xf_emit(ctx, 1, 1);
3207 xf_emit(ctx, 1, 0x10001);
3208 xf_emit(ctx, 1, 0x10001);
3209 xf_emit(ctx, 1, 1);
3210 xf_emit(ctx, 1, 0);
3211 xf_emit(ctx, 1, 0x1fe21);
3212 xf_emit(ctx, 1, 0);
3213 if (IS_NVA3F(device->chipset))
3214 xf_emit(ctx, 1, 1);
3215 xf_emit(ctx, 1, 0);
3216 xf_emit(ctx, 1, 0);
3217 xf_emit(ctx, 1, 0);
3218 xf_emit(ctx, 1, 0);
3219 xf_emit(ctx, 1, 0x08100c12);
3220 xf_emit(ctx, 1, 4);
3221 xf_emit(ctx, 1, 0);
3222 xf_emit(ctx, 1, 2);
3223 xf_emit(ctx, 1, 0x11);
3224 xf_emit(ctx, 7, 0);
3225 xf_emit(ctx, 1, 0);
3226 xf_emit(ctx, 1, 0xfac6881);
3227 xf_emit(ctx, 1, 0);
3228 if (IS_NVA3F(device->chipset))
3229 xf_emit(ctx, 1, 3);
3230 xf_emit(ctx, 1, 0);
3231 xf_emit(ctx, 1, 0);
3232 xf_emit(ctx, 1, 0);
3233 xf_emit(ctx, 1, 4);
3234 xf_emit(ctx, 8, 0);
3235 xf_emit(ctx, 1, 0);
3236 xf_emit(ctx, 1, 2);
3237 xf_emit(ctx, 1, 1);
3238 xf_emit(ctx, 1, 1);
3239 xf_emit(ctx, 1, 2);
3240 xf_emit(ctx, 1, 1);
3241 xf_emit(ctx, 1, 1);
3242 xf_emit(ctx, 1, 1);
3243 if (IS_NVA3F(device->chipset)) {
3244 xf_emit(ctx, 1, 0);
3245 xf_emit(ctx, 8, 2);
3246 xf_emit(ctx, 8, 1);
3247 xf_emit(ctx, 8, 1);
3248 xf_emit(ctx, 8, 2);
3249 xf_emit(ctx, 8, 1);
3250 xf_emit(ctx, 8, 1);
3251 xf_emit(ctx, 8, 1);
3252 xf_emit(ctx, 1, 0);
3253 xf_emit(ctx, 1, 0);
3254 }
3255 xf_emit(ctx, 1, 0);
3256 xf_emit(ctx, 1, 4);
3257
3258 if (device->chipset == 0x50)
3259 xf_emit(ctx, 0x3a0, 0);
3260 else if (device->chipset < 0x94)
3261 xf_emit(ctx, 0x3a2, 0);
3262 else if (device->chipset == 0x98 || device->chipset == 0xaa)
3263 xf_emit(ctx, 0x39f, 0);
3264 else
3265 xf_emit(ctx, 0x3a3, 0);
3266 xf_emit(ctx, 1, 0x11);
3267 xf_emit(ctx, 1, 0);
3268 xf_emit(ctx, 1, 1);
3269 xf_emit(ctx, 0x2d, 0);
3270}
3271
3272static void
3273nv50_gr_construct_xfer2(struct nvkm_grctx *ctx)
3274{
3275 struct nvkm_device *device = ctx->device;
3276 int i;
3277 u32 offset;
3278 u32 units = nvkm_rd32(device, 0x1540);
3279 int size = 0;
3280
3281 offset = (ctx->ctxvals_pos+0x3f)&~0x3f;
3282
3283 if (device->chipset < 0xa0) {
3284 for (i = 0; i < 8; i++) {
3285 ctx->ctxvals_pos = offset + i;
3286
3287
3288 if (i == 0)
3289 xf_emit(ctx, 1, 0x08100c12);
3290 if (units & (1 << i))
3291 nv50_gr_construct_xfer_mpc(ctx);
3292 if ((ctx->ctxvals_pos-offset)/8 > size)
3293 size = (ctx->ctxvals_pos-offset)/8;
3294 }
3295 } else {
3296
3297 ctx->ctxvals_pos = offset;
3298
3299
3300 xf_emit(ctx, 1, 0x08100c12);
3301 if (units & (1 << 0))
3302 nv50_gr_construct_xfer_mpc(ctx);
3303 if (units & (1 << 1))
3304 nv50_gr_construct_xfer_mpc(ctx);
3305 if ((ctx->ctxvals_pos-offset)/8 > size)
3306 size = (ctx->ctxvals_pos-offset)/8;
3307
3308
3309 ctx->ctxvals_pos = offset + 1;
3310 if (units & (1 << 2))
3311 nv50_gr_construct_xfer_mpc(ctx);
3312 if (units & (1 << 3))
3313 nv50_gr_construct_xfer_mpc(ctx);
3314 if ((ctx->ctxvals_pos-offset)/8 > size)
3315 size = (ctx->ctxvals_pos-offset)/8;
3316
3317
3318 ctx->ctxvals_pos = offset + 2;
3319 if (units & (1 << 4))
3320 nv50_gr_construct_xfer_mpc(ctx);
3321 if (units & (1 << 5))
3322 nv50_gr_construct_xfer_mpc(ctx);
3323 if (units & (1 << 6))
3324 nv50_gr_construct_xfer_mpc(ctx);
3325 if ((ctx->ctxvals_pos-offset)/8 > size)
3326 size = (ctx->ctxvals_pos-offset)/8;
3327
3328
3329 ctx->ctxvals_pos = offset + 3;
3330 if (units & (1 << 7))
3331 nv50_gr_construct_xfer_mpc(ctx);
3332 if (units & (1 << 8))
3333 nv50_gr_construct_xfer_mpc(ctx);
3334 if (units & (1 << 9))
3335 nv50_gr_construct_xfer_mpc(ctx);
3336 if ((ctx->ctxvals_pos-offset)/8 > size)
3337 size = (ctx->ctxvals_pos-offset)/8;
3338 }
3339 ctx->ctxvals_pos = offset + size * 8;
3340 ctx->ctxvals_pos = (ctx->ctxvals_pos+0x3f)&~0x3f;
3341 cp_lsr (ctx, offset);
3342 cp_out (ctx, CP_SET_XFER_POINTER);
3343 cp_lsr (ctx, size);
3344 cp_out (ctx, CP_SEEK_2);
3345 cp_out (ctx, CP_XFER_2);
3346 cp_wait(ctx, XFER, BUSY);
3347}
3348