1d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki/* 2d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * Copyright 2009 Marcin Kościelnicki 3d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 4d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * Permission is hereby granted, free of charge, to any person obtaining a 5d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * copy of this software and associated documentation files (the "Software"), 6d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * to deal in the Software without restriction, including without limitation 7d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * and/or sell copies of the Software, and to permit persons to whom the 9d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * Software is furnished to do so, subject to the following conditions: 10d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 11d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * The above copyright notice and this permission notice shall be included in 12d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * all copies or substantial portions of the Software. 13d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 14d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * OTHER DEALINGS IN THE SOFTWARE. 21d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki */ 22d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 23d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_CLEAR 0 24d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_SET 1 25d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_SWAP_DIRECTION ((0 * 32) + 0) 26d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_SWAP_DIRECTION_LOAD 0 27d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_SWAP_DIRECTION_SAVE 1 28d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK01 ((0 * 32) + 1) 29d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK01_CLEAR 0 30d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK01_SET 1 31d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK03 ((0 * 32) + 3) 32d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK03_CLEAR 0 33d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK03_SET 1 34d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_USER_SAVE ((0 * 32) + 5) 35d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_USER_SAVE_NOT_PENDING 0 36d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_USER_SAVE_PENDING 1 37d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_USER_LOAD ((0 * 32) + 6) 38d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_USER_LOAD_NOT_PENDING 0 39d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_USER_LOAD_PENDING 1 40d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK0B ((0 * 32) + 0xb) 41d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK0B_CLEAR 0 42d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK0B_SET 1 43fbba036a56fe0e5c5e8c91daf3fa211f88d94a03Martin Peres#define CP_FLAG_XFER_SWITCH ((0 * 32) + 0xe) 44fbba036a56fe0e5c5e8c91daf3fa211f88d94a03Martin Peres#define CP_FLAG_XFER_SWITCH_DISABLE 0 45fbba036a56fe0e5c5e8c91daf3fa211f88d94a03Martin Peres#define CP_FLAG_XFER_SWITCH_ENABLE 1 4695f0de3a0ae52bbe11f285ae46b5319bb2a2360dBen Skeggs#define CP_FLAG_STATE ((0 * 32) + 0x1c) 4795f0de3a0ae52bbe11f285ae46b5319bb2a2360dBen Skeggs#define CP_FLAG_STATE_STOPPED 0 4895f0de3a0ae52bbe11f285ae46b5319bb2a2360dBen Skeggs#define CP_FLAG_STATE_RUNNING 1 49d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK1D ((0 * 32) + 0x1d) 50d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK1D_CLEAR 0 51d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK1D_SET 1 52d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK20 ((1 * 32) + 0) 53d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK20_CLEAR 0 54d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_UNK20_SET 1 55d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_STATUS ((2 * 32) + 0) 56d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_STATUS_BUSY 0 57d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_STATUS_IDLE 1 58d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_AUTO_SAVE ((2 * 32) + 4) 59d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_AUTO_SAVE_NOT_PENDING 0 60d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_AUTO_SAVE_PENDING 1 61d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_AUTO_LOAD ((2 * 32) + 5) 62d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_AUTO_LOAD_NOT_PENDING 0 63d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_AUTO_LOAD_PENDING 1 640dd8c3f093e3d0cab2cc967f9620b41a125f1f56Marcin Kościelnicki#define CP_FLAG_NEWCTX ((2 * 32) + 10) 650dd8c3f093e3d0cab2cc967f9620b41a125f1f56Marcin Kościelnicki#define CP_FLAG_NEWCTX_BUSY 0 660dd8c3f093e3d0cab2cc967f9620b41a125f1f56Marcin Kościelnicki#define CP_FLAG_NEWCTX_DONE 1 67d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_XFER ((2 * 32) + 11) 68d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_XFER_IDLE 0 69d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_XFER_BUSY 1 70d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_ALWAYS ((2 * 32) + 13) 71d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_ALWAYS_FALSE 0 72d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_FLAG_ALWAYS_TRUE 1 733bf777bf0ab112527cea103c3681934a9f41c03dMarcin Kościelnicki#define CP_FLAG_INTR ((2 * 32) + 15) 743bf777bf0ab112527cea103c3681934a9f41c03dMarcin Kościelnicki#define CP_FLAG_INTR_NOT_PENDING 0 753bf777bf0ab112527cea103c3681934a9f41c03dMarcin Kościelnicki#define CP_FLAG_INTR_PENDING 1 76d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 77d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_CTX 0x00100000 78d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_CTX_COUNT 0x000f0000 79d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_CTX_COUNT_SHIFT 16 80d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_CTX_REG 0x00003fff 81d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_LOAD_SR 0x00200000 82d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_LOAD_SR_VALUE 0x000fffff 83d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_BRA 0x00400000 84d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_BRA_IP 0x0001ff00 85d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_BRA_IP_SHIFT 8 86d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_BRA_IF_CLEAR 0x00000080 87d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_BRA_FLAG 0x0000007f 88d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_WAIT 0x00500000 89d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_WAIT_SET 0x00000080 90d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_WAIT_FLAG 0x0000007f 91d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_SET 0x00700000 92d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_SET_1 0x00000080 93d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_SET_FLAG 0x0000007f 94d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_NEWCTX 0x00600004 95d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_NEXT_TO_SWAP 0x00600005 96d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_SET_CONTEXT_POINTER 0x00600006 97d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_SET_XFER_POINTER 0x00600007 98d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_ENABLE 0x00600009 99d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_END 0x0060000c 100d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_NEXT_TO_CURRENT 0x0060000d 101d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_DISABLE1 0x0090ffff 102d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_DISABLE2 0x0091ffff 103d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_XFER_1 0x008000ff 104d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_XFER_2 0x008800ff 105d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_SEEK_1 0x00c000ff 106d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#define CP_SEEK_2 0x00c800ff 107d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 108d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#include "drmP.h" 109d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#include "nouveau_drv.h" 110d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki#include "nouveau_grctx.h" 111d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 112e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki#define IS_NVA3F(x) (((x) > 0xa0 && (x) < 0xaa) || (x) == 0xaf) 113e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki#define IS_NVAAF(x) ((x) >= 0xaa && (x) <= 0xac) 114e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 115d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki/* 116d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * This code deals with PGRAPH contexts on NV50 family cards. Like NV40, it's 117d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * the GPU itself that does context-switching, but it needs a special 118d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * microcode to do it. And it's the driver's task to supply this microcode, 119d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * further known as ctxprog, as well as the initial context values, known 120d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * as ctxvals. 121d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 122d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * Without ctxprog, you cannot switch contexts. Not even in software, since 123d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * the majority of context [xfer strands] isn't accessible directly. You're 124d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * stuck with a single channel, and you also suffer all the problems resulting 125d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * from missing ctxvals, since you cannot load them. 126d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 127d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * Without ctxvals, you're stuck with PGRAPH's default context. It's enough to 128d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * run 2d operations, but trying to utilise 3d or CUDA will just lock you up, 129d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * since you don't have... some sort of needed setup. 130d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 131d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * Nouveau will just disable acceleration if not given ctxprog + ctxvals, since 132d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * it's too much hassle to handle no-ctxprog as a special case. 133d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki */ 134d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 135d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki/* 136d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * How ctxprogs work. 137d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 138d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * The ctxprog is written in its own kind of microcode, with very small and 139d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * crappy set of available commands. You upload it to a small [512 insns] 140d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * area of memory on PGRAPH, and it'll be run when PFIFO wants PGRAPH to 141d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * switch channel. or when the driver explicitely requests it. Stuff visible 142d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * to ctxprog consists of: PGRAPH MMIO registers, PGRAPH context strands, 143d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * the per-channel context save area in VRAM [known as ctxvals or grctx], 144d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 4 flags registers, a scratch register, two grctx pointers, plus many 145d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * random poorly-understood details. 146d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 147d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * When ctxprog runs, it's supposed to check what operations are asked of it, 148d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * save old context if requested, optionally reset PGRAPH and switch to the 149d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * new channel, and load the new context. Context consists of three major 150d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * parts: subset of MMIO registers and two "xfer areas". 151d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki */ 152d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 153d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki/* TODO: 154d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * - document unimplemented bits compared to nvidia 155d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * - NVAx: make a TP subroutine, use it. 156d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * - use 0x4008fc instead of 0x1540? 157d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki */ 158d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 159d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickienum cp_label { 160d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_check_load = 1, 161d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_setup_auto_load, 162d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_setup_load, 163d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_setup_save, 164d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_swap_state, 165d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_prepare_exit, 166d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_exit, 167d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki}; 168d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 169d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void nv50_graph_construct_mmio(struct nouveau_grctx *ctx); 170d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void nv50_graph_construct_xfer1(struct nouveau_grctx *ctx); 171d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void nv50_graph_construct_xfer2(struct nouveau_grctx *ctx); 172d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 173d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki/* Main function: construct the ctxprog skeleton, call the other functions. */ 174d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 175d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickiint 176d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickinv50_grctx_init(struct nouveau_grctx *ctx) 177d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 178d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 179d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 180d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki switch (dev_priv->chipset) { 181d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x50: 182d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x84: 183d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x86: 184d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x92: 185d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x94: 186d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x96: 187d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x98: 188d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa0: 189eaeefba154a19aeab9037b1d29478e5303a992feMarcin Kościelnicki case 0xa3: 190d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa5: 191d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa8: 192d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xaa: 193d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xac: 194e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaf: 195d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 196d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki default: 197d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki NV_ERROR(ctx->dev, "I don't know how to make a ctxprog for " 198d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki "your NV%x card.\n", dev_priv->chipset); 199d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki NV_ERROR(ctx->dev, "Disabling acceleration. Please contact " 200d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki "the devs.\n"); 201d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki return -ENOSYS; 202d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 20395f0de3a0ae52bbe11f285ae46b5319bb2a2360dBen Skeggs 20495f0de3a0ae52bbe11f285ae46b5319bb2a2360dBen Skeggs cp_set (ctx, STATE, RUNNING); 205fbba036a56fe0e5c5e8c91daf3fa211f88d94a03Martin Peres cp_set (ctx, XFER_SWITCH, ENABLE); 206d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* decide whether we're loading/unloading the context */ 207d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_bra (ctx, AUTO_SAVE, PENDING, cp_setup_save); 208d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_bra (ctx, USER_SAVE, PENDING, cp_setup_save); 209d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 210d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_name(ctx, cp_check_load); 211d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_bra (ctx, AUTO_LOAD, PENDING, cp_setup_auto_load); 212d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_bra (ctx, USER_LOAD, PENDING, cp_setup_load); 213d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_bra (ctx, ALWAYS, TRUE, cp_exit); 214d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 215d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* setup for context load */ 216d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_name(ctx, cp_setup_auto_load); 217d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_DISABLE1); 218d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_DISABLE2); 219d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_ENABLE); 220d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_NEXT_TO_SWAP); 221d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, UNK01, SET); 222d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_name(ctx, cp_setup_load); 223d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_NEWCTX); 224d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_wait(ctx, NEWCTX, BUSY); 225d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, UNK1D, CLEAR); 226d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, SWAP_DIRECTION, LOAD); 227d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_bra (ctx, UNK0B, SET, cp_prepare_exit); 228d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_bra (ctx, ALWAYS, TRUE, cp_swap_state); 229d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 230d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* setup for context save */ 231d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_name(ctx, cp_setup_save); 232d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, UNK1D, SET); 233d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_wait(ctx, STATUS, BUSY); 2343bf777bf0ab112527cea103c3681934a9f41c03dMarcin Kościelnicki cp_wait(ctx, INTR, PENDING); 2353bf777bf0ab112527cea103c3681934a9f41c03dMarcin Kościelnicki cp_bra (ctx, STATUS, BUSY, cp_setup_save); 236d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, UNK01, SET); 237d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, SWAP_DIRECTION, SAVE); 238d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 239d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* general PGRAPH state */ 240d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_name(ctx, cp_swap_state); 241d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, UNK03, SET); 242d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_pos (ctx, 0x00004/4); 243d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx (ctx, 0x400828, 1); /* needed. otherwise, flickering happens. */ 244d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_pos (ctx, 0x00100/4); 245d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_mmio(ctx); 246d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer1(ctx); 247d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer2(ctx); 248d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 249d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_bra (ctx, SWAP_DIRECTION, SAVE, cp_check_load); 250d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 251d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, UNK20, SET); 252d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, SWAP_DIRECTION, SAVE); /* no idea why this is needed, but fixes at least one lockup. */ 253d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_lsr (ctx, ctx->ctxvals_base); 254d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_SET_XFER_POINTER); 255d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_lsr (ctx, 4); 256d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_SEEK_1); 257d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_XFER_1); 258d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_wait(ctx, XFER, BUSY); 259d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 260d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* pre-exit state updates */ 261d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_name(ctx, cp_prepare_exit); 262d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, UNK01, CLEAR); 263d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, UNK03, CLEAR); 264d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, UNK1D, CLEAR); 265d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 266d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_bra (ctx, USER_SAVE, PENDING, cp_exit); 267d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_NEXT_TO_CURRENT); 268d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 269d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_name(ctx, cp_exit); 270d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, USER_SAVE, NOT_PENDING); 271d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_set (ctx, USER_LOAD, NOT_PENDING); 272fbba036a56fe0e5c5e8c91daf3fa211f88d94a03Martin Peres cp_set (ctx, XFER_SWITCH, DISABLE); 27395f0de3a0ae52bbe11f285ae46b5319bb2a2360dBen Skeggs cp_set (ctx, STATE, STOPPED); 274d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_END); 275d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos += 0x400; /* padding... no idea why you need it */ 276d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 277d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki return 0; 278d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 279d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 280d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki/* 281d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * Constructs MMIO part of ctxprog and ctxvals. Just a matter of knowing which 282d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * registers to save/restore and the default values for them. 283d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki */ 284d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 285d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 286e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_mmio_ddata(struct nouveau_grctx *ctx); 287e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 288e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void 289d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickinv50_graph_construct_mmio(struct nouveau_grctx *ctx) 290d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 291d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 292d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int i, j; 293d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int offset, base; 294d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki uint32_t units = nv_rd32 (ctx->dev, 0x1540); 295d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 296304424e17dd904cef048ef8966d9f54618a915ccMarcin Kościelnicki /* 0800: DISPATCH */ 297d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x400808, 7); 298d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x400814, 0x00000030); 299d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x400834, 0x32); 300d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 301d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x400834, 0xff400040); 302d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x400838, 0xfff00080); 303d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x40083c, 0xfff70090); 304d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x400840, 0xffe806a8); 305d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 306d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x400844, 0x00000002); 307e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 308d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x400894, 0x00001000); 309d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x4008e8, 0x00000003); 310d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x4008ec, 0x00001000); 311d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 312d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x400908, 0xb); 313d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset < 0xa0) 314d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x400908, 0xc); 315d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 316d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x400908, 0xe); 317d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 318d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 319d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x400b00, 0x1); 320e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 321d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x400b10, 0x1); 322d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x400b10, 0x0001629d); 323d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x400b20, 0x1); 324d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x400b20, 0x0001629d); 325d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 326d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 327e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_mmio_ddata(ctx); 328e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 329304424e17dd904cef048ef8966d9f54618a915ccMarcin Kościelnicki /* 0C00: VFETCH */ 330d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x400c08, 0x2); 331d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x400c08, 0x0000fe0c); 332d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 333d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* 1000 */ 334d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) { 335d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x401008, 0x4); 336d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401014, 0x00001000); 337e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else if (!IS_NVA3F(dev_priv->chipset)) { 338d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x401008, 0x5); 339d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401018, 0x00001000); 340d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 341d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x401008, 0x5); 342d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401018, 0x00004000); 343d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 344d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 345d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* 1400 */ 346d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x401400, 0x8); 347d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x401424, 0x3); 348d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 349d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x40142c, 0x0001fd87); 350d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 351d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x40142c, 0x00000187); 352d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x401540, 0x5); 353d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401550, 0x00001018); 354d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 355304424e17dd904cef048ef8966d9f54618a915ccMarcin Kościelnicki /* 1800: STREAMOUT */ 356d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x401814, 0x1); 357d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401814, 0x000000ff); 358d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 359d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x40181c, 0xe); 360d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401850, 0x00000004); 361d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else if (dev_priv->chipset < 0xa0) { 362d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x40181c, 0xf); 363d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401854, 0x00000004); 364d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 365d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x40181c, 0x13); 366d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401864, 0x00000004); 367d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 368d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 369d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* 1C00 */ 370d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x401c00, 0x1); 371d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki switch (dev_priv->chipset) { 372d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x50: 373d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401c00, 0x0001005f); 374d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 375d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x84: 376d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x86: 377d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x94: 378d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401c00, 0x044d00df); 379d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 380d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x92: 381d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x96: 382d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x98: 383d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa0: 384d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xaa: 385d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xac: 386d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401c00, 0x042500df); 387d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 388eaeefba154a19aeab9037b1d29478e5303a992feMarcin Kościelnicki case 0xa3: 389d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa5: 390d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa8: 391e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaf: 392d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x401c00, 0x142500df); 393d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 394d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 395d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 396e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* 2000 */ 397e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 398d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* 2400 */ 399d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x402400, 0x1); 400d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 401d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x402408, 0x1); 402d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 403d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x402408, 0x2); 404d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x402408, 0x00000600); 405d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 406e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* 2800: CSCHED */ 407d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x402800, 0x1); 408d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 409d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x402800, 0x00000006); 410d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 411e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* 2C00: ZCULL */ 412d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x402c08, 0x6); 413d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0x50) 414d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x402c14, 0x01000000); 415d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x402c18, 0x000000ff); 416d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 417d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x402ca0, 0x1); 418d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 419d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x402ca0, 0x2); 420d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 421d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x402ca0, 0x00000400); 422e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else if (!IS_NVA3F(dev_priv->chipset)) 423d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x402ca0, 0x00000800); 424d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 425d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x402ca0, 0x00000400); 426d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x402cac, 0x4); 427d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 428e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* 3000: ENG2D */ 429d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x403004, 0x1); 430d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x403004, 0x00000001); 431d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 432e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* 3400 */ 433d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 434d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x403404, 0x1); 435d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x403404, 0x00000001); 436d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 437d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 438e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* 5000: CCACHE */ 439d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x405000, 0x1); 440d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki switch (dev_priv->chipset) { 441d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x50: 442d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x405000, 0x00300080); 443d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 444d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x84: 445d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa0: 446eaeefba154a19aeab9037b1d29478e5303a992feMarcin Kościelnicki case 0xa3: 447d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa5: 448d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa8: 449d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xaa: 450d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xac: 451e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaf: 452d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x405000, 0x000e0080); 453d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 454d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x86: 455d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x92: 456d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x94: 457d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x96: 458d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x98: 459d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x405000, 0x00000080); 460d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 461d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 462d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x405014, 0x1); 463d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x405014, 0x00000004); 464d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x40501c, 0x1); 465d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x405024, 0x1); 466d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x40502c, 0x1); 467d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 468d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* 6000? */ 469d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 470d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x4063e0, 0x1); 471d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 472304424e17dd904cef048ef8966d9f54618a915ccMarcin Kościelnicki /* 6800: M2MF */ 473d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0x90) { 474d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x406814, 0x2b); 475d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x406818, 0x00000f80); 476d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x406860, 0x007f0080); 477d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x40689c, 0x007f0080); 478d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 479d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x406814, 0x4); 480d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x98) 481d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x406818, 0x00000f80); 482d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 483d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x406818, 0x00001f80); 484e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 485d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x40681c, 0x00000030); 486d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x406830, 0x3); 487d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 488d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 489d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* 7000: per-ROP group state */ 490d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki for (i = 0; i < 8; i++) { 491d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1<<(i+16))) { 492d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407000 + (i<<8), 3); 493d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 494d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407000 + (i<<8), 0x1b74f820); 495d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset != 0xa5) 496d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407000 + (i<<8), 0x3b74f821); 497d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 498d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407000 + (i<<8), 0x7b74f821); 499d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407004 + (i<<8), 0x89058001); 500d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 501d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 502d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407010 + (i<<8), 1); 503d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else if (dev_priv->chipset < 0xa0) { 504d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407010 + (i<<8), 2); 505d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407010 + (i<<8), 0x00001000); 506d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407014 + (i<<8), 0x0000001f); 507d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 508d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407010 + (i<<8), 3); 509d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407010 + (i<<8), 0x00001000); 510d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0xa5) 511d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407014 + (i<<8), 0x000000ff); 512d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 513d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407014 + (i<<8), 0x000001ff); 514d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 515d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 516d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407080 + (i<<8), 4); 517d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0xa5) 518d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407080 + (i<<8), 0x027c10fa); 519d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 520d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407080 + (i<<8), 0x827c10fa); 521d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 522d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407084 + (i<<8), 0x000000c0); 523d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 524d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407084 + (i<<8), 0x400000c0); 525d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407088 + (i<<8), 0xb7892080); 526d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 527d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 528d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407094 + (i<<8), 1); 529e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else if (!IS_NVA3F(dev_priv->chipset)) 530d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407094 + (i<<8), 3); 531d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else { 532d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407094 + (i<<8), 4); 533d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x4070a0 + (i<<8), 1); 534d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 535d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 536d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 537d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 538d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407c00, 0x3); 539d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0x90) 540d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407c00, 0x00010040); 541d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset < 0xa0) 542d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407c00, 0x00390040); 543d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 544d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407c00, 0x003d0040); 545d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407c08, 0x00000022); 546d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 547d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407c10, 0x3); 548d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407c20, 0x1); 549d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407c2c, 0x1); 550d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 551d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 552d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) { 553d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407d00, 0x9); 554d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 555d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, 0x407d00, 0x15); 556d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 557d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x98) 558d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407d08, 0x00380040); 559d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else { 560d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0x90) 561d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407d08, 0x00010040); 562d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset < 0xa0) 563d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407d08, 0x00390040); 564d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 565d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407d08, 0x003d0040); 566d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, 0x407d0c, 0x00000022); 567d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 568d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 569d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* 8000+: per-TP state */ 570d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki for (i = 0; i < 10; i++) { 571d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1<<i)) { 572d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 573d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki base = 0x408000 + (i<<12); 574d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 575d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki base = 0x408000 + (i<<11); 576d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 577d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0xc00; 578d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 579d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x80; 580d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset + 0x00, 1); 581d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x00, 0x0000ff0a); 582d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset + 0x08, 1); 583d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 584d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* per-MP state */ 585d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki for (j = 0; j < (dev_priv->chipset < 0xa0 ? 2 : 4); j++) { 586d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (!(units & (1 << (j+24)))) continue; 587d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 588d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x200 + (j<<7); 589d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 590d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x100 + (j<<7); 591d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset, 0x20); 592d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x00, 0x01800000); 593d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x04, 0x00160000); 594d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x08, 0x01800000); 595d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x18, 0x0003ffff); 596d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki switch (dev_priv->chipset) { 597d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x50: 598d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x1c, 0x00080000); 599d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 600d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x84: 601d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x1c, 0x00880000); 602d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 603d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x86: 60471856abefb49bae5d67275752ada02853c16660dMaxim Levitsky gr_def(ctx, offset + 0x1c, 0x018c0000); 605d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 606d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x92: 607d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x96: 608d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x98: 609d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x1c, 0x118c0000); 610d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 611d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x94: 612d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x1c, 0x10880000); 613d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 614d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa0: 615d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa5: 616d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x1c, 0x310c0000); 617d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 618eaeefba154a19aeab9037b1d29478e5303a992feMarcin Kościelnicki case 0xa3: 619d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa8: 620d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xaa: 621d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xac: 622e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaf: 623d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x1c, 0x300c0000); 624d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 625d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 626d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x40, 0x00010401); 627d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 628d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x48, 0x00000040); 629d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 630d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x48, 0x00000078); 631d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x50, 0x000000bf); 632d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x58, 0x00001210); 633d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 634d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x5c, 0x00000080); 635d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 636d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x5c, 0x08000080); 637d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 638d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x68, 0x0000003e); 639d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 640d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 641d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 642d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x300, 0x4); 643d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 644d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x300, 0x5); 645d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 646d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x304, 0x00007070); 647d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset < 0xa0) 648d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x304, 0x00027070); 649e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else if (!IS_NVA3F(dev_priv->chipset)) 650d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x304, 0x01127070); 651d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 652d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x304, 0x05127070); 653d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 654d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 655d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x318, 1); 656d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 657d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x320, 1); 658d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 659d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x318, 0x0003ffff); 660d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset < 0xa0) 661d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x318, 0x03ffffff); 662d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 663d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x320, 0x07ffffff); 664d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 665d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 666d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x324, 5); 667d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 668d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x328, 4); 669d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 670d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) { 671d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x340, 9); 672d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x340; 673e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else if (!IS_NVA3F(dev_priv->chipset)) { 674d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x33c, 0xb); 675d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x344; 676d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 677d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x33c, 0xd); 678d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x344; 679d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 680d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x0, 0x00120407); 681d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x4, 0x05091507); 682d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x84) 683d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x8, 0x05100202); 684d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 685d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x8, 0x05010202); 686d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0xc, 0x00030201); 687eaeefba154a19aeab9037b1d29478e5303a992feMarcin Kościelnicki if (dev_priv->chipset == 0xa3) 688eaeefba154a19aeab9037b1d29478e5303a992feMarcin Kościelnicki cp_ctx(ctx, base + 0x36c, 1); 689d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 690d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x400, 2); 691d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x404, 0x00000040); 692d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x40c, 2); 693d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x40c, 0x0d0c0b0a); 694d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x410, 0x00141210); 695d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 696d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 697d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x800; 698d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 699d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x500; 700d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset, 6); 701d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x0, 0x000001f0); 702d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x4, 0x00000001); 703d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x8, 0x00000003); 704e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50 || IS_NVAAF(dev_priv->chipset)) 705d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0xc, 0x00008000); 706d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x14, 0x00039e00); 707d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset + 0x1c, 2); 708d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 709d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x1c, 0x00000040); 710d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 711d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x1c, 0x00000100); 712d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x20, 0x00003800); 713d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 714d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 715d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, base + 0x54c, 2); 716e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (!IS_NVA3F(dev_priv->chipset)) 717d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x54c, 0x003fe006); 718d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 719d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x54c, 0x003fe007); 720d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, base + 0x550, 0x003fe000); 721d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 722d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 723d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 724d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0xa00; 725d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 726d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x680; 727d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset, 1); 728d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset, 0x00404040); 729d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 730d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 731d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0xe00; 732d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 733d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = base + 0x700; 734d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset, 2); 735d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 736d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset, 0x0077f005); 737d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset == 0xa5) 738d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset, 0x6cf7f007); 739d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset == 0xa8) 740d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset, 0x6cfff007); 741d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset == 0xac) 742d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset, 0x0cfff007); 743d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 744d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset, 0x0cf7f007); 745d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 746d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x4, 0x00007fff); 747d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset < 0xa0) 748d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x4, 0x003f7fff); 749d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 750d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x4, 0x02bf7fff); 751d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset + 0x2c, 1); 752d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 753d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset + 0x50, 9); 754d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x54, 0x000003ff); 755d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x58, 0x00000003); 756d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x5c, 0x00000003); 757d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x60, 0x000001ff); 758d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x64, 0x0000001f); 759d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x68, 0x0000000f); 760d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki gr_def(ctx, offset + 0x6c, 0x0000000f); 76171298e2f0b6fb6dce9f2b2e999652edf1f643d9eEmil Velikov } else if (dev_priv->chipset < 0xa0) { 762d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset + 0x50, 1); 763d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset + 0x70, 1); 764d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 765d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset + 0x50, 1); 766d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_ctx(ctx, offset + 0x60, 5); 767d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 768d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 769d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 770d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 771d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 772e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void 773e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickidd_emit(struct nouveau_grctx *ctx, int num, uint32_t val) { 774e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki int i; 775e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (val && ctx->mode == NOUVEAU_GRCTX_VALS) 776e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki for (i = 0; i < num; i++) 777e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv_wo32(ctx->data, 4 * (ctx->ctxvals_pos + i), val); 778e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki ctx->ctxvals_pos += num; 779e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki} 780e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 781e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void 782e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_mmio_ddata(struct nouveau_grctx *ctx) 783e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki{ 784e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 785e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki int base, num; 786e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki base = ctx->ctxvals_pos; 787e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 788e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* tesla state */ 789e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 UNK0F90 */ 790e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 UNK135C */ 791e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 792e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SRC_TIC state */ 793e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000007 SRC_TILE_MODE_Z */ 794e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* 00000007 SRC_TILE_MODE_Y */ 795e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 SRC_LINEAR #1 */ 796e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff SRC_ADDRESS_HIGH */ 797e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 SRC_SRGB */ 798e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0x94) 799e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000003 eng2d UNK0258 */ 800e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000fff SRC_DEPTH */ 801e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x100); /* 0000ffff SRC_HEIGHT */ 802e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 803e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* turing state */ 804e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f TEXTURES_LOG2 */ 805e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f SAMPLERS_LOG2 */ 806e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff CB_DEF_ADDRESS_HIGH */ 807e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff CB_DEF_ADDRESS_LOW */ 808e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff SHARED_SIZE */ 809e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* ffffffff REG_MODE */ 810e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 0000ffff BLOCK_ALLOC_THREADS */ 811e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 LANES32 */ 812e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff UNK370 */ 813e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff USER_PARAM_UNK */ 814e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff USER_PARAM_COUNT */ 815e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 000000ff UNK384 bits 8-15 */ 816e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x3fffff); /* 003fffff TIC_LIMIT */ 817e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x1fff); /* 000fffff TSC_LIMIT */ 818e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff CB_ADDR_INDEX */ 819e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 000007ff BLOCKDIM_X */ 820e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 000007ff BLOCKDIM_XMY */ 821e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 BLOCKDIM_XMY_OVERFLOW */ 822e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 0003ffff BLOCKDIM_XMYMZ */ 823e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 000007ff BLOCKDIM_Y */ 824e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 0000007f BLOCKDIM_Z */ 825e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* 000000ff CP_REG_ALLOC_TEMP */ 826e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 BLOCKDIM_DIRTY */ 827e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 828e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000003 UNK03E8 */ 829e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 0000007f BLOCK_ALLOC_HALFWARPS */ 830e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000007 LOCAL_WARPS_NO_CLAMP */ 831e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 7); /* 00000007 LOCAL_WARPS_LOG_ALLOC */ 832e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000007 STACK_WARPS_NO_CLAMP */ 833e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 7); /* 00000007 STACK_WARPS_LOG_ALLOC */ 834e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00001fff BLOCK_ALLOC_REGSLOTS_PACKED */ 835e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00001fff BLOCK_ALLOC_REGSLOTS_STRIDED */ 836e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 000007ff BLOCK_ALLOC_THREADS */ 837e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 838e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* compat 2d state */ 839e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 840e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 4, 0); /* 0000ffff clip X, Y, W, H */ 841e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 842e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff chroma COLOR_FORMAT */ 843e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 844e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff pattern COLOR_FORMAT */ 845e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff pattern SHAPE */ 846e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff pattern PATTERN_SELECT */ 847e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 848e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xa); /* ffffffff surf2d SRC_FORMAT */ 849e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff surf2d DMA_SRC */ 850e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff surf2d SRC_ADDRESS_HIGH */ 851e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff surf2d SRC_ADDRESS_LOW */ 852e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x40); /* 0000ffff surf2d SRC_PITCH */ 853e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f surf2d SRC_TILE_MODE_Z */ 854e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* 0000000f surf2d SRC_TILE_MODE_Y */ 855e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x100); /* ffffffff surf2d SRC_HEIGHT */ 856e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 surf2d SRC_LINEAR */ 857e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x100); /* ffffffff surf2d SRC_WIDTH */ 858e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 859e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_B_X */ 860e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_B_Y */ 861e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_C_X */ 862e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_C_Y */ 863e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_D_X */ 864e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff gdirect CLIP_D_Y */ 865e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff gdirect COLOR_FORMAT */ 866e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff gdirect OPERATION */ 867e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff gdirect POINT_X */ 868e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff gdirect POINT_Y */ 869e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 870e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff blit SRC_Y */ 871e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff blit OPERATION */ 872e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 873e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff ifc OPERATION */ 874e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 875e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff iifc INDEX_FORMAT */ 876e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff iifc LUT_OFFSET */ 877e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* ffffffff iifc COLOR_FORMAT */ 878e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff iifc OPERATION */ 879e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 880e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 881e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* m2mf state */ 882e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff m2mf LINE_COUNT */ 883e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff m2mf LINE_LENGTH_IN */ 884e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 2, 0); /* ffffffff m2mf OFFSET_IN, OFFSET_OUT */ 885e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff m2mf TILING_DEPTH_OUT */ 886e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x100); /* ffffffff m2mf TILING_HEIGHT_OUT */ 887e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff m2mf TILING_POSITION_OUT_Z */ 888e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 m2mf LINEAR_OUT */ 889e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 2, 0); /* 0000ffff m2mf TILING_POSITION_OUT_X, Y */ 890e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x100); /* ffffffff m2mf TILING_PITCH_OUT */ 891e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff m2mf TILING_DEPTH_IN */ 892e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x100); /* ffffffff m2mf TILING_HEIGHT_IN */ 893e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff m2mf TILING_POSITION_IN_Z */ 894e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 m2mf LINEAR_IN */ 895e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 2, 0); /* 0000ffff m2mf TILING_POSITION_IN_X, Y */ 896e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x100); /* ffffffff m2mf TILING_PITCH_IN */ 897e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 898e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* more compat 2d state */ 899e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 900e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff line COLOR_FORMAT */ 901e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff line OPERATION */ 902e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 903e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff triangle COLOR_FORMAT */ 904e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff triangle OPERATION */ 905e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 906e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f sifm TILE_MODE_Z */ 907e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* 0000000f sifm TILE_MODE_Y */ 908e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff sifm FORMAT_FILTER */ 909e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 000000ff sifm FORMAT_ORIGIN */ 910e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff sifm SRC_PITCH */ 911e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 sifm SRC_LINEAR */ 912e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff sifm SRC_OFFSET_HIGH */ 913e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff sifm SRC_OFFSET */ 914e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff sifm SRC_HEIGHT */ 915e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff sifm SRC_WIDTH */ 916e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 3); /* ffffffff sifm COLOR_FORMAT */ 917e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff sifm OPERATION */ 918e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 919e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff sifc OPERATION */ 920e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 921e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 922e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* tesla state */ 923e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f GP_TEXTURES_LOG2 */ 924e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f GP_SAMPLERS_LOG2 */ 925e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff */ 926e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff */ 927e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* 000000ff UNK12B0_0 */ 928e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x70); /* 000000ff UNK12B0_1 */ 929e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x80); /* 000000ff UNK12B0_3 */ 930e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff UNK12B0_2 */ 931e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f FP_TEXTURES_LOG2 */ 932e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f FP_SAMPLERS_LOG2 */ 933e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 934e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff */ 935e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000007f MULTISAMPLE_SAMPLES_LOG2 */ 936e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else { 937e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f MULTISAMPLE_SAMPLES_LOG2 */ 938f212949ced2397b5f00e987bb5d4bb34dc69cc8dEmil Velikov } 939e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xc); /* 000000ff SEMANTIC_COLOR.BFC0_ID */ 940e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) 941e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 SEMANTIC_COLOR.CLMP_EN */ 942e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 8); /* 000000ff SEMANTIC_COLOR.COLR_NR */ 943e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x14); /* 000000ff SEMANTIC_COLOR.FFC0_ID */ 944e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 945e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff SEMANTIC_LAYER */ 946e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 */ 947e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else { 948e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 SEMANTIC_PTSZ.ENABLE */ 949e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x29); /* 000000ff SEMANTIC_PTSZ.PTSZ_ID */ 950e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x27); /* 000000ff SEMANTIC_PRIM */ 951e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x26); /* 000000ff SEMANTIC_LAYER */ 952e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 8); /* 0000000f SMENATIC_CLIP.CLIP_HIGH */ 953e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* 000000ff SEMANTIC_CLIP.CLIP_LO */ 954e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x27); /* 000000ff UNK0FD4 */ 955e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 UNK1900 */ 956e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 957e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000007 RT_CONTROL_MAP0 */ 958e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000007 RT_CONTROL_MAP1 */ 959e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* 00000007 RT_CONTROL_MAP2 */ 960e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 3); /* 00000007 RT_CONTROL_MAP3 */ 961e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* 00000007 RT_CONTROL_MAP4 */ 962e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 5); /* 00000007 RT_CONTROL_MAP5 */ 963e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 6); /* 00000007 RT_CONTROL_MAP6 */ 964e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 7); /* 00000007 RT_CONTROL_MAP7 */ 965e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 0000000f RT_CONTROL_COUNT */ 966e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 8, 0); /* 00000001 RT_HORIZ_UNK */ 967e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 8, 0); /* ffffffff RT_ADDRESS_LOW */ 968e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xcf); /* 000000ff RT_FORMAT */ 969e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 7, 0); /* 000000ff RT_FORMAT */ 970e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) 971e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 3, 0); /* 1, 1, 1 */ 972e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 973e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 2, 0); /* 1, 1 */ 974e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff GP_ENABLE */ 975e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT*/ 976e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_RESULT */ 977e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 978e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 979e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 3); /* 00000003 */ 980e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 UNK1418. Alone. */ 981e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 982e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) 983e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 3); /* 00000003 UNK15AC */ 984e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff RASTERIZE_ENABLE */ 985e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 FP_CONTROL.EXPORTS_Z */ 986e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) 987e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 FP_CONTROL.MULTIPLE_RESULTS */ 988e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x12); /* 000000ff FP_INTERPOLANT_CTRL.COUNT */ 989e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x10); /* 000000ff FP_INTERPOLANT_CTRL.COUNT_NONFLAT */ 990e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xc); /* 000000ff FP_INTERPOLANT_CTRL.OFFSET */ 991e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 FP_INTERPOLANT_CTRL.UMASK.W */ 992e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 FP_INTERPOLANT_CTRL.UMASK.X */ 993e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 FP_INTERPOLANT_CTRL.UMASK.Y */ 994e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 FP_INTERPOLANT_CTRL.UMASK.Z */ 995e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* 000000ff FP_RESULT_COUNT */ 996e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* ffffffff REG_MODE */ 997e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* 000000ff FP_REG_ALLOC_TEMP */ 998e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 999e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff */ 1000e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 GP_BUILTIN_RESULT_EN.LAYER_IDX */ 1001e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff STRMOUT_ENABLE */ 1002e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x3fffff); /* 003fffff TIC_LIMIT */ 1003e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x1fff); /* 000fffff TSC_LIMIT */ 1004e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE*/ 1005e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) 1006e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 8, 0); /* 00000001 */ 1007e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 1008e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000007 VTX_ATTR_DEFINE.COMP */ 1009e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000007 VTX_ATTR_DEFINE.SIZE */ 1010e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* 00000007 VTX_ATTR_DEFINE.TYPE */ 1011e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff VTX_ATTR_DEFINE.ATTR */ 1012e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1013e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ 1014e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x14); /* 0000001f ZETA_FORMAT */ 1015e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 1016e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f VP_TEXTURES_LOG2 */ 1017e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000000f VP_SAMPLERS_LOG2 */ 1018e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 1019e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 */ 1020e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* 00000003 POLYGON_MODE_BACK */ 1021e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 1022e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000003 VTX_ATTR_DEFINE.SIZE - 1 */ 1023e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 0000ffff CB_ADDR_INDEX */ 1024e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 1025e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000003 */ 1026e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 CULL_FACE_ENABLE */ 1027e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000003 CULL_FACE */ 1028e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 FRONT_FACE */ 1029e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* 00000003 POLYGON_MODE_FRONT */ 1030e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x1000); /* 00007fff UNK141C */ 1031e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) { 1032e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xe00); /* 7fff */ 1033e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x1000); /* 7fff */ 1034e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x1e00); /* 7fff */ 1035e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1036e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 BEGIN_END_ACTIVE */ 1037e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 POLYGON_MODE_??? */ 1038e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 000000ff GP_REG_ALLOC_TEMP / 4 rounded up */ 1039e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 000000ff FP_REG_ALLOC_TEMP... without /4? */ 1040e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 000000ff VP_REG_ALLOC_TEMP / 4 rounded up */ 1041e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 */ 1042e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 */ 1043e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 VTX_ATTR_MASK_UNK0 nonempty */ 1044e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 VTX_ATTR_MASK_UNK1 nonempty */ 1045e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x200); /* 0003ffff GP_VERTEX_OUTPUT_COUNT*GP_REG_ALLOC_RESULT */ 1046e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 1047e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x200); 1048e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 */ 1049e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset < 0xa0) { 1050e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 */ 1051e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x70); /* 000000ff */ 1052e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x80); /* 000000ff */ 1053e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff */ 1054e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 */ 1055e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 */ 1056e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x70); /* 000000ff */ 1057e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0x80); /* 000000ff */ 1058e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff */ 1059e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else { 1060e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 */ 1061e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xf0); /* 000000ff */ 1062e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xff); /* 000000ff */ 1063e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff */ 1064e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 */ 1065e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 */ 1066e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xf0); /* 000000ff */ 1067e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xff); /* 000000ff */ 1068e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 000000ff */ 1069e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 9); /* 0000003f UNK114C.COMP,SIZE */ 1070e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1071e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 1072e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* eng2d state */ 1073e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 eng2d COLOR_KEY_ENABLE */ 1074e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000007 eng2d COLOR_KEY_FORMAT */ 1075e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff eng2d DST_DEPTH */ 1076e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xcf); /* 000000ff eng2d DST_FORMAT */ 1077e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff eng2d DST_LAYER */ 1078e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 eng2d DST_LINEAR */ 1079e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000007 eng2d PATTERN_COLOR_FORMAT */ 1080e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000007 eng2d OPERATION */ 1081e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000003 eng2d PATTERN_SELECT */ 1082e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xcf); /* 000000ff eng2d SIFC_FORMAT */ 1083e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 eng2d SIFC_BITMAP_ENABLE */ 1084e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 2); /* 00000003 eng2d SIFC_BITMAP_UNK808 */ 1085e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff eng2d BLIT_DU_DX_FRACT */ 1086e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff eng2d BLIT_DU_DX_INT */ 1087e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* ffffffff eng2d BLIT_DV_DY_FRACT */ 1088e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* ffffffff eng2d BLIT_DV_DY_INT */ 1089e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0); /* 00000001 eng2d BLIT_CONTROL_FILTER */ 1090e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xcf); /* 000000ff eng2d DRAW_COLOR_FORMAT */ 1091e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 0xcf); /* 000000ff eng2d SRC_FORMAT */ 1092e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki dd_emit(ctx, 1, 1); /* 00000001 eng2d SRC_LINEAR #2 */ 1093e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 1094e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki num = ctx->ctxvals_pos - base; 1095e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki ctx->ctxvals_pos = base; 1096e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 1097e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki cp_ctx(ctx, 0x404800, num); 1098e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 1099e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki cp_ctx(ctx, 0x405400, num); 1100e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki} 1101e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 1102d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki/* 1103d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * xfer areas. These are a pain. 1104d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 1105d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * There are 2 xfer areas: the first one is big and contains all sorts of 1106d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * stuff, the second is small and contains some per-TP context. 1107d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 1108d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * Each area is split into 8 "strands". The areas, when saved to grctx, 1109d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * are made of 8-word blocks. Each block contains a single word from 1110d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * each strand. The strands are independent of each other, their 1111d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * addresses are unrelated to each other, and data in them is closely 1112d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * packed together. The strand layout varies a bit between cards: here 1113d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * and there, a single word is thrown out in the middle and the whole 1114d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * strand is offset by a bit from corresponding one on another chipset. 1115d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * For this reason, addresses of stuff in strands are almost useless. 1116d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * Knowing sequence of stuff and size of gaps between them is much more 1117d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * useful, and that's how we build the strands in our generator. 1118d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 1119d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * NVA0 takes this mess to a whole new level by cutting the old strands 1120d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * into a few dozen pieces [known as genes], rearranging them randomly, 1121d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * and putting them back together to make new strands. Hopefully these 1122d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * genes correspond more or less directly to the same PGRAPH subunits 1123d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * as in 400040 register. 1124d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 1125d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * The most common value in default context is 0, and when the genes 1126d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * are separated by 0's, gene bounduaries are quite speculative... 1127d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * some of them can be clearly deduced, others can be guessed, and yet 1128d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * others won't be resolved without figuring out the real meaning of 1129d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * given ctxval. For the same reason, ending point of each strand 1130d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * is unknown. Except for strand 0, which is the longest strand and 1131d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * its end corresponds to end of the whole xfer. 1132d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 1133d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * An unsolved mystery is the seek instruction: it takes an argument 1134d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * in bits 8-18, and that argument is clearly the place in strands to 1135d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * seek to... but the offsets don't seem to correspond to offsets as 1136d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * seen in grctx. Perhaps there's another, real, not randomly-changing 1137d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * addressing in strands, and the xfer insn just happens to skip over 1138d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * the unused bits? NV10-NV30 PIPE comes to mind... 1139d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * 1140d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * As far as I know, there's no way to access the xfer areas directly 1141d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * without the help of ctxprog. 1142d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki */ 1143d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1144e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void 1145d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickixf_emit(struct nouveau_grctx *ctx, int num, uint32_t val) { 1146d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int i; 1147d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (val && ctx->mode == NOUVEAU_GRCTX_VALS) 1148d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki for (i = 0; i < num; i++) 1149e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv_wo32(ctx->data, 4 * (ctx->ctxvals_pos + (i << 3)), val); 1150d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos += num << 3; 1151d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 1152d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1153d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki/* Gene declarations... */ 1154d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1155e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_dispatch(struct nouveau_grctx *ctx); 1156d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void nv50_graph_construct_gene_m2mf(struct nouveau_grctx *ctx); 1157e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_ccache(struct nouveau_grctx *ctx); 1158e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_unk10xx(struct nouveau_grctx *ctx); 1159e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_unk14xx(struct nouveau_grctx *ctx); 1160e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_zcull(struct nouveau_grctx *ctx); 1161e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_clipid(struct nouveau_grctx *ctx); 1162e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_unk24xx(struct nouveau_grctx *ctx); 1163e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_vfetch(struct nouveau_grctx *ctx); 1164e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_eng2d(struct nouveau_grctx *ctx); 1165e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_csched(struct nouveau_grctx *ctx); 1166e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_unk1cxx(struct nouveau_grctx *ctx); 1167e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_strmout(struct nouveau_grctx *ctx); 1168e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_unk34xx(struct nouveau_grctx *ctx); 1169e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_ropm1(struct nouveau_grctx *ctx); 1170e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void nv50_graph_construct_gene_ropm2(struct nouveau_grctx *ctx); 1171d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void nv50_graph_construct_gene_ropc(struct nouveau_grctx *ctx); 1172d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void nv50_graph_construct_xfer_tp(struct nouveau_grctx *ctx); 1173d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1174d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 1175d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickinv50_graph_construct_xfer1(struct nouveau_grctx *ctx) 1176d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 1177d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1178d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int i; 1179d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int offset; 1180d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int size = 0; 1181d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki uint32_t units = nv_rd32 (ctx->dev, 0x1540); 1182d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1183d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = (ctx->ctxvals_pos+0x3f)&~0x3f; 1184d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_base = offset; 1185d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1186d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) { 1187d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 0 */ 1188d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset; 1189e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_dispatch(ctx); 1190e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_m2mf(ctx); 1191e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk24xx(ctx); 1192e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_clipid(ctx); 1193e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_zcull(ctx); 1194d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1195d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1196d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1197d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 1 */ 1198d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 0x1; 1199e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_vfetch(ctx); 1200e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_eng2d(ctx); 1201e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_csched(ctx); 1202e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_ropm1(ctx); 1203e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_ropm2(ctx); 1204d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1205d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1206d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1207d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 2 */ 1208d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 0x2; 1209e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_ccache(ctx); 1210e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk1cxx(ctx); 1211e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_strmout(ctx); 1212e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk14xx(ctx); 1213e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk10xx(ctx); 1214e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk34xx(ctx); 1215d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1216d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1217d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1218d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 3: per-ROP group state */ 1219d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 3; 1220d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki for (i = 0; i < 6; i++) 1221d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << (i + 16))) 1222d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_gene_ropc(ctx); 1223d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1224d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1225d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1226d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strands 4-7: per-TP state */ 1227d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki for (i = 0; i < 4; i++) { 1228d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 4 + i; 1229d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << (2 * i))) 1230d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1231d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << (2 * i + 1))) 1232d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1233d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1234d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1235d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 1236d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 1237d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 0 */ 1238d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset; 1239e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_dispatch(ctx); 1240d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_gene_m2mf(ctx); 1241e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk34xx(ctx); 1242e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_csched(ctx); 1243e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk1cxx(ctx); 1244e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_strmout(ctx); 1245d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1246d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1247d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1248d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 1 */ 1249d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 1; 1250e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk10xx(ctx); 1251d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1252d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1253d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1254d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 2 */ 1255d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 2; 1256e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0xa0) 1257e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk14xx(ctx); 1258e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk24xx(ctx); 1259d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1260d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1261d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1262d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 3 */ 1263d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 3; 1264e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_vfetch(ctx); 1265d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1266d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1267d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1268d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 4 */ 1269d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 4; 1270e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_ccache(ctx); 1271d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1272d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1273d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1274d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 5 */ 1275d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 5; 1276e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_ropm2(ctx); 1277e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_ropm1(ctx); 1278e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* per-ROP context */ 1279d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki for (i = 0; i < 8; i++) 1280d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1<<(i+16))) 1281d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_gene_ropc(ctx); 1282d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1283d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1284d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1285d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 6 */ 1286d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 6; 1287e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_zcull(ctx); 1288e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_clipid(ctx); 1289e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_eng2d(ctx); 1290d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 0)) 1291d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1292d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 1)) 1293d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1294d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 2)) 1295d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1296d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 3)) 1297d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1298d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1299d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1300d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1301d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 7 */ 1302d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 7; 1303d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0xa0) { 1304d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 4)) 1305d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1306d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 5)) 1307d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1308d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 6)) 1309d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1310d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 7)) 1311d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1312d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 8)) 1313d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1314d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 9)) 1315d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki nv50_graph_construct_xfer_tp(ctx); 1316d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 1317e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_gene_unk14xx(ctx); 1318d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 1319d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 1320d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 1321d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 1322d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1323d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + size * 8; 1324d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = (ctx->ctxvals_pos+0x3f)&~0x3f; 1325d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_lsr (ctx, offset); 1326d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_SET_XFER_POINTER); 1327d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_lsr (ctx, size); 1328d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_SEEK_1); 1329d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_XFER_1); 1330d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_wait(ctx, XFER, BUSY); 1331d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 1332d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1333d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki/* 1334d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki * non-trivial demagiced parts of ctx init go here 1335d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki */ 1336d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1337d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 1338e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_dispatch(struct nouveau_grctx *ctx) 1339e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki{ 1340e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* start of strand 0 */ 1341e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1342e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1343e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50) 1344e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 5, 0); 1345e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else if (!IS_NVA3F(dev_priv->chipset)) 1346e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 6, 0); 1347e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 1348e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); 1349e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1350e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* the PGRAPH's internal FIFO */ 1351e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50) 1352e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8*3, 0); 1353e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 1354e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x100*3, 0); 1355e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* and another bonus slot?!? */ 1356e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); 1357e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* and YET ANOTHER bonus slot? */ 1358e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 1359e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); 1360e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1361e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* CTX_SWITCH: caches of gr objects bound to subchannels. 8 values, last used index */ 1362e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 9, 0); 1363e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1364e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 9, 0); 1365e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1366e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 9, 0); 1367e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1368e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 9, 0); 1369e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1370e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset < 0x90) 1371e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); 1372e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1373e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); 1374e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1375e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 6*2, 0); 1376e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); 1377e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1378e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); 1379e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1380e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 6*2, 0); 1381e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); 1382e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1383e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50) 1384e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x1c, 0); 1385e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else if (dev_priv->chipset < 0xa0) 1386e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x1e, 0); 1387e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 1388e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x22, 0); 1389e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1390e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x15, 0); 1391e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki} 1392e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 1393e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void 1394d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickinv50_graph_construct_gene_m2mf(struct nouveau_grctx *ctx) 1395d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 1396e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* Strand 0, right after dispatch */ 1397e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1398e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki int smallm2mf = 0; 1399e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset < 0x92 || dev_priv->chipset == 0x98) 1400e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki smallm2mf = 1; 1401e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1402d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* DMA_NOTIFY instance >> 4 */ 1403d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* DMA_BUFFER_IN instance >> 4 */ 1404d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* DMA_BUFFER_OUT instance >> 4 */ 1405d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* OFFSET_IN */ 1406d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* OFFSET_OUT */ 1407d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* PITCH_IN */ 1408d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* PITCH_OUT */ 1409d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* LINE_LENGTH */ 1410d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* LINE_COUNT */ 1411d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0x21); /* FORMAT: bits 0-4 INPUT_INC, bits 5-9 OUTPUT_INC */ 1412d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 1); /* LINEAR_IN */ 1413d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0x2); /* TILING_MODE_IN: bits 0-2 y tiling, bits 3-5 z tiling */ 1414d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0x100); /* TILING_PITCH_IN */ 1415d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0x100); /* TILING_HEIGHT_IN */ 1416d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 1); /* TILING_DEPTH_IN */ 1417d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* TILING_POSITION_IN_Z */ 1418d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* TILING_POSITION_IN */ 1419d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 1); /* LINEAR_OUT */ 1420d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0x2); /* TILING_MODE_OUT: bits 0-2 y tiling, bits 3-5 z tiling */ 1421d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0x100); /* TILING_PITCH_OUT */ 1422d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0x100); /* TILING_HEIGHT_OUT */ 1423d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 1); /* TILING_DEPTH_OUT */ 1424d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* TILING_POSITION_OUT_Z */ 1425d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* TILING_POSITION_OUT */ 1426d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* OFFSET_IN_HIGH */ 1427d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit (ctx, 1, 0); /* OFFSET_OUT_HIGH */ 1428e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1429e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (smallm2mf) 1430e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x40, 0); /* 20 * ffffffff, 3ffff */ 1431e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 1432e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x100, 0); /* 80 * ffffffff, 3ffff */ 1433e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* 1f/7f, 0, 1f/7f, 0 [1f for smallm2mf, 7f otherwise] */ 1434e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1435e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (smallm2mf) 1436e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x400, 0); /* ffffffff */ 1437e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 1438e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x800, 0); /* ffffffff */ 1439e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ff/1ff, 0, 0, 0 [ff for smallm2mf, 1ff otherwise] */ 1440e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1441e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x40, 0); /* 20 * bits ffffffff, 3ffff */ 1442e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x6, 0); /* 1f, 0, 1f, 0, 1f, 0 */ 1443d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 1444d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1445d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 1446e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_ccache(struct nouveau_grctx *ctx) 1447d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 1448d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1449e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* RO */ 1450e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x800, 0); /* ffffffff */ 1451d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki switch (dev_priv->chipset) { 1452d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x50: 1453e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x92: 1454e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa0: 1455e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x2b, 0); 1456d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 1457d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x84: 1458e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x29, 0); 1459e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 1460d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x94: 1461d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0x96: 1462eaeefba154a19aeab9037b1d29478e5303a992feMarcin Kościelnicki case 0xa3: 1463e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x27, 0); 1464d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 1465e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x86: 1466e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x98: 1467d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa5: 1468d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki case 0xa8: 1469e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaa: 1470e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xac: 1471e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaf: 1472e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x25, 0); 1473d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki break; 1474d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 1475e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* CB bindings, 0x80 of them. first word is address >> 8, second is 1476e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki * size >> 4 | valid << 24 */ 1477e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x100, 0); /* ffffffff CB_DEF */ 1478e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000007f CB_ADDR_BUFFER */ 1479e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0 */ 1480e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x30, 0); /* ff SET_PROGRAM_CB */ 1481e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 3f last SET_PROGRAM_CB */ 1482e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* RO */ 1483e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x100, 0); /* ffffffff */ 1484e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 1f, 0, 0, ... */ 1485e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* ffffffff */ 1486e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff */ 1487e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 3 */ 1488e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 1489e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_CODE_CB */ 1490e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_TIC */ 1491e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_TSC */ 1492e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINKED_TSC */ 1493e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff TIC_ADDRESS_HIGH */ 1494e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff TIC_ADDRESS_LOW */ 1495e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x3fffff); /* 003fffff TIC_LIMIT */ 1496e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff TSC_ADDRESS_HIGH */ 1497e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff TSC_ADDRESS_LOW */ 1498e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1fff); /* 000fffff TSC_LIMIT */ 1499e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff VP_ADDRESS_HIGH */ 1500e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff VP_ADDRESS_LOW */ 1501e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00ffffff VP_START_ID */ 1502e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff CB_DEF_ADDRESS_HIGH */ 1503e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff CB_DEF_ADDRESS_LOW */ 1504e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1505e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff GP_ADDRESS_HIGH */ 1506e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff GP_ADDRESS_LOW */ 1507e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00ffffff GP_START_ID */ 1508e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff FP_ADDRESS_HIGH */ 1509e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff FP_ADDRESS_LOW */ 1510e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00ffffff FP_START_ID */ 1511d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 1512d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1513d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 1514e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_unk10xx(struct nouveau_grctx *ctx) 1515d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 1516e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1517e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki int i; 1518d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* end of area 2 on pre-NVA0, area 1 on NVAx */ 1519e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 1520e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ 1521e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1522e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT */ 1523e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_RESULT */ 1524e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ 1525e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ 1526e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50) 1527e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x3ff); 1528e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 1529e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x7ff); /* 000007ff */ 1530e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 111/113 */ 1531e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1532e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki for (i = 0; i < 8; i++) { 1533e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki switch (dev_priv->chipset) { 1534e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x50: 1535e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x86: 1536e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x98: 1537e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaa: 1538e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xac: 1539e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xa0, 0); /* ffffffff */ 1540e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 1541e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x84: 1542e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x92: 1543e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x94: 1544e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x96: 1545e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x120, 0); 1546e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 1547e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa5: 1548e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa8: 1549e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x100, 0); /* ffffffff */ 1550e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 1551e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa0: 1552e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa3: 1553e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaf: 1554e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x400, 0); /* ffffffff */ 1555e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 1556e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1557e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* 3f, 0, 0, 0 */ 1558e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff */ 1559e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1560e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 1561e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ 1562e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1563e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT */ 1564e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_TEMP */ 1565e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 RASTERIZE_ENABLE */ 1566e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ 1567e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x27); /* 000000ff UNK0FD4 */ 1568e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ 1569e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x26); /* 000000ff SEMANTIC_LAYER */ 1570e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1571e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki} 1572e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 1573e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void 1574e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_unk34xx(struct nouveau_grctx *ctx) 1575e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki{ 1576e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1577e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* end of area 2 on pre-NVA0, area 1 on NVAx */ 1578e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 VIEWPORT_CLIP_RECTS_EN */ 1579e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 VIEWPORT_CLIP_MODE */ 1580e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0x04000000); /* 07ffffff VIEWPORT_CLIP_HORIZ*8, VIEWPORT_CLIP_VERT*8 */ 1581e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 POLYGON_STIPPLE_ENABLE */ 1582e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x20, 0); /* ffffffff POLYGON_STIPPLE */ 1583e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY */ 1584e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 1585e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x04e3bfdf); /* ffffffff UNK0D64 */ 1586e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x04e3bfdf); /* ffffffff UNK0DF4 */ 1587e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ 1588e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 1589e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1fe21); /* 0001ffff tesla UNK0FAC */ 1590e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 1591e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); 1592e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 1593e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); 1594e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); 1595e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1596d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 1597d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1598d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 1599e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_unk14xx(struct nouveau_grctx *ctx) 1600d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 1601d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1602d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* middle of area 2 on pre-NVA0, beginning of area 2 on NVA0, area 7 on >NVA0 */ 1603d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0x50) { 1604e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 5, 0); /* ffffffff */ 1605e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ 1606e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 1607e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 1608e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x804); /* 00000fff SEMANTIC_CLIP */ 1609e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 1610e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 4); /* 7f, ff */ 1611e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 1612d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 1613e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1614e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ 1615e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 1616e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1617e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ 1618e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff VP_CLIP_DISTANCE_ENABLE */ 1619d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0x50) 1620e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 3ff */ 1621e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff tesla UNK1940 */ 1622e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0D7C */ 1623e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x804); /* 00000fff SEMANTIC_CLIP */ 1624e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 VIEWPORT_TRANSFORM_EN */ 1625e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ 1626d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0x50) 1627e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x7f); /* 000000ff tesla UNK0FFC */ 1628e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1629e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 SHADE_MODEL */ 1630e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ 1631e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ 1632e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 1633e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ 1634e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 1635e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1636e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ 1637e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0D7C */ 1638e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0F8C */ 1639e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1640e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 VIEWPORT_TRANSFORM_EN */ 1641e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 1642e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff NOPERSPECTIVE_BITMAP */ 1643e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ 1644e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f */ 1645e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50) 1646e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x3ff); /* 000003ff tesla UNK0D68 */ 1647d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 1648e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x7ff); /* 000007ff tesla UNK0D68 */ 1649e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ 1650e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ 1651e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x30, 0); /* ffffffff VIEWPORT_SCALE: X0, Y0, Z0, X1, Y1, ... */ 1652e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* f, 0, 0 */ 1653e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* ffffffff last VIEWPORT_SCALE? */ 1654e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1655e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 VIEWPORT_TRANSFORM_EN */ 1656e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ 1657e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1924 */ 1658e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 000000ff VIEW_VOLUME_CLIP_CTRL */ 1659e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 1660e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x30, 0); /* ffffffff VIEWPORT_TRANSLATE */ 1661e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* f, 0, 0 */ 1662e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* ffffffff */ 1663e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1664e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0x88); /* 000001ff tesla UNK19D8 */ 1665e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1924 */ 1666e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1667e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000000f CULL_MODE */ 1668e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 07ffffff SCREEN_SCISSOR */ 1669e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY */ 1670e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ 1671e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* 00000001 SCISSOR_ENABLE */ 1672e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ 1673e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x26); /* 000000ff SEMANTIC_LAYER */ 1674e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ 1675e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f */ 1676e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x3f800000); /* ffffffff LINE_WIDTH */ 1677e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ 1678e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ 1679e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ 1680e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 1681e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 1682e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ 1683e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 000000ff VIEW_VOLUME_CLIP_CTRL */ 1684e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) { 1685e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 1686e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 1687e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 1688e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1689e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x20, 0); /* 10xbits ffffffff, 3fffff. SCISSOR_* */ 1690e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* f */ 1691e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0? */ 1692e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 1693e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 003fffff */ 1694e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1695e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x52); /* 000001ff SEMANTIC_PTSZ */ 1696e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ 1697e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x26); /* 000000ff SEMANTIC_LAYER */ 1698e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ 1699e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ 1700e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 1701e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1702e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ 1703e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ 1704e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ 1705e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ 1706e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f */ 1707d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 1708d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1709d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 1710e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_zcull(struct nouveau_grctx *ctx) 1711d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 1712d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1713e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* end of strand 0 on pre-NVA0, beginning of strand 6 on NVAx */ 1714e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1715e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x3f); /* 0000003f UNK1590 */ 1716e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ 1717e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ 1718e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 1719e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ 1720e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ 1721e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_REF */ 1722e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ 1723e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 00000007 STENCIL_BACK_OP_FAIL, ZFAIL, ZPASS */ 1724e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ 1725e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0x04000000); /* 07ffffff tesla UNK0D6C */ 1726e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 1727e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 CLIPID_ENABLE */ 1728e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff DEPTH_BOUNDS */ 1729e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 1730e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ 1731e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 1732e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 1733e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000000f CULL_MODE */ 1734e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff */ 1735e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK0FB0 */ 1736e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 POLYGON_STIPPLE_ENABLE */ 1737e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ 1738e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 1739e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ 1740e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff CLEAR_STENCIL */ 1741e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ 1742e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ 1743e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_REF */ 1744e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ 1745e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 00000007 STENCIL_FRONT_OP_FAIL, ZFAIL, ZPASS */ 1746e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 1747e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ 1748e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff CLEAR_DEPTH */ 1749e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 1750e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) 1751e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1108 */ 1752e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ 1753e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 1754e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 1755e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1001); /* 00001fff ZETA_ARRAY_MODE */ 1756e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1757e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0xffff); /* 0000ffff MSAA_MASK */ 1758e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* 00000001 SCISSOR_ENABLE */ 1759e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* ffffffff DEPTH_RANGE_NEAR */ 1760e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0x3f800000); /* ffffffff DEPTH_RANGE_FAR */ 1761e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 7f/ff/3ff VIEW_VOLUME_CLIP_CTRL */ 1762e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 VIEWPORT_CLIP_RECTS_EN */ 1763e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 FP_CTRL_UNK196C */ 1764e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1968 */ 1765e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) 1766e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0fffffff tesla UNK1104 */ 1767e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK151C */ 1768d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 1769d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1770d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 1771e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_clipid(struct nouveau_grctx *ctx) 1772d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 1773e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* middle of strand 0 on pre-NVA0 [after 24xx], middle of area 6 on NVAx */ 1774e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1775e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 UNK0FB4 */ 1776e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1777e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* 07ffffff CLIPID_REGION_HORIZ */ 1778e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* 07ffffff CLIPID_REGION_VERT */ 1779e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 07ffffff SCREEN_SCISSOR */ 1780e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0x04000000); /* 07ffffff UNK1508 */ 1781e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 CLIPID_ENABLE */ 1782e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80); /* 00003fff CLIPID_WIDTH */ 1783e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff CLIPID_ID */ 1784e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff CLIPID_ADDRESS_HIGH */ 1785e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff CLIPID_ADDRESS_LOW */ 1786e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80); /* 00003fff CLIPID_HEIGHT */ 1787e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_CLIPID */ 1788d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 1789d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1790d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 1791e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_unk24xx(struct nouveau_grctx *ctx) 1792d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 1793d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1794e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki int i; 1795e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* middle of strand 0 on pre-NVA0 [after m2mf], end of strand 2 on NVAx */ 1796e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1797e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x33, 0); 1798e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1799e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); 1800e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1801e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1802e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ 1803e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 1804e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1805e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 1806e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* RO */ 1807e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xe10, 0); /* 190 * 9: 8*ffffffff, 7ff */ 1808e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 1ff */ 1809e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 0? */ 1810e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 9, 0); /* ffffffff, 7ff */ 1811e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 1812e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* RO */ 1813e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xe10, 0); /* 190 * 9: 8*ffffffff, 7ff */ 1814e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 1ff */ 1815e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 0? */ 1816e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 9, 0); /* ffffffff, 7ff */ 1817f9ec8f6c8dea942bc4be5cc1f34c99df7a4d78eeEmil Velikov } else { 1818e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xc, 0); /* RO */ 1819e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1820e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xe10, 0); /* 190 * 9: 8*ffffffff, 7ff */ 1821e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 1ff */ 1822e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 0? */ 1823e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 1824e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1825e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xc, 0); /* RO */ 1826e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1827e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xe10, 0); /* 190 * 9: 8*ffffffff, 7ff */ 1828e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 1ff */ 1829e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 0? */ 1830e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1831e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1832e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1833e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 1834e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ 1835e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 1836d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0x50) 1837e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 tesla UNK1100 */ 1838e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1839e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1840e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 1841e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ 1842e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ 1843e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 */ 1844e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1845d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 1846e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 4); /* 000000ff */ 1847e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80c14); /* 01ffffff SEMANTIC_COLOR */ 1848e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ 1849e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 POINT_SPRITE_ENABLE */ 1850e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 1851e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x27); /* 000000ff SEMANTIC_PRIM_ID */ 1852e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1853e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f */ 1854e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 */ 1855e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki for (i = 0; i < 10; i++) { 1856e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1857e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x40, 0); /* ffffffff */ 1858e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* 3, 0, 0.... */ 1859e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* ffffffff */ 1860e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1861e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1862e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 POINT_SPRITE_CTRL */ 1863e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 */ 1864e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 1865e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff NOPERSPECTIVE_BITMAP */ 1866e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* 00ffffff POINT_COORD_REPLACE_MAP */ 1867e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ 1868e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 1869e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) 1870e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 1871d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 1872d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 1873d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 1874e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_vfetch(struct nouveau_grctx *ctx) 1875d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 1876d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 1877e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki int acnt = 0x10, rep, i; 1878e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* beginning of strand 1 on pre-NVA0, strand 3 on NVAx */ 1879e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 1880e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki acnt = 0x20; 1881e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1882e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 1883e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK13A4 */ 1884e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000fff tesla UNK1318 */ 1885e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1886e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff VERTEX_BUFFER_FIRST */ 1887e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 PRIMITIVE_RESTART_ENABLE */ 1888e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK0DE8 */ 1889e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff PRIMITIVE_RESTART_INDEX */ 1890e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ 1891e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ 1892e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt/8, 0); /* ffffffff VTX_ATR_MASK_UNK0DD0 */ 1893e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ 1894e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x20); /* 0000ffff tesla UNK129C */ 1895e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff turing UNK370??? */ 1896e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff turing USER_PARAM_COUNT */ 1897e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 1898e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1899e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 1900e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xb, 0); /* RO */ 1901d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset >= 0xa0) 1902e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x9, 0); /* RO */ 1903d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 1904e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x8, 0); /* RO */ 1905e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1906e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 EDGE_FLAG */ 1907e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 PROVOKING_VERTEX_LAST */ 1908e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1909e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ 1910e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1911e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xc, 0); /* RO */ 1912e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1913e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7f/ff */ 1914e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7f/ff VP_REG_ALLOC_RESULT */ 1915e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ 1916e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ 1917e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000001ff UNK1A28 */ 1918e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 8); /* 000001ff UNK0DF0 */ 1919e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 1920d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 1921e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x3ff); /* 3ff tesla UNK0D68 */ 1922d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 1923e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x7ff); /* 7ff tesla UNK0D68 */ 1924d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0xa8) 1925e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1e00); /* 7fff */ 1926e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1927e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xc, 0); /* RO or close */ 1928e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1929e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ 1930e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ 1931e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ 1932e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset > 0x50 && dev_priv->chipset < 0xa0) 1933e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff */ 1934d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 1935e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 1936e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK0FD8 */ 1937e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1938e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 1939e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* 0? */ 1940e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* weird... */ 1941e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* RO */ 1942e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else { 1943e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 0? */ 1944e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* weird... */ 1945e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* RO */ 1946e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1947e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1948e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff VB_ELEMENT_BASE */ 1949e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff UNK1438 */ 1950e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* 1 tesla UNK1000 */ 1951e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 1952e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1118? */ 1953e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1954e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* ffffffff VERTEX_ARRAY_UNK90C */ 1955e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* f/1f */ 1956e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1957e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* ffffffff VERTEX_ARRAY_UNK90C */ 1958e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* f/1f */ 1959e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1960e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* RO */ 1961e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* RO */ 1962e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1963e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK111C? */ 1964e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* RO */ 1965e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1966e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff UNK15F4_ADDRESS_HIGH */ 1967e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff UNK15F4_ADDRESS_LOW */ 1968e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff UNK0F84_ADDRESS_HIGH */ 1969e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff UNK0F84_ADDRESS_LOW */ 1970e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1971e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* 00003fff VERTEX_ARRAY_ATTRIB_OFFSET */ 1972e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* f/1f */ 1973e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1974e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* 00000fff VERTEX_ARRAY_STRIDE */ 1975e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* f/1f */ 1976e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1977e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* ffffffff VERTEX_ARRAY_LOW */ 1978e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* f/1f */ 1979e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1980e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* 000000ff VERTEX_ARRAY_HIGH */ 1981e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* f/1f */ 1982e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1983e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* ffffffff VERTEX_LIMIT_LOW */ 1984e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* f/1f */ 1985e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1986e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* 000000ff VERTEX_LIMIT_HIGH */ 1987e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* f/1f */ 1988e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1989e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 1990e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt, 0); /* f */ 1991e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* f/1f */ 1992e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 1993e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1994e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 1995e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* RO */ 1996e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 1997e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 5, 0); /* RO */ 1998e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 1999e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff DMA_VTXBUF */ 2000e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2001e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset < 0xa0) { 2002e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x41, 0); /* RO */ 2003e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2004e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x11, 0); /* RO */ 2005e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else if (!IS_NVA3F(dev_priv->chipset)) 2006e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x50, 0); /* RO */ 2007d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2008e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x58, 0); /* RO */ 2009e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2010e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ 2011e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ 2012e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 1 UNK0DEC */ 2013e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2014e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt*4, 0); /* ffffffff VTX_ATTR */ 2015e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* f/1f, 0, 0, 0 */ 2016e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2017e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2018e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x1d, 0); /* RO */ 2019d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2020e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x16, 0); /* RO */ 2021e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2022e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ 2023e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ 2024e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2025d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 2026e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* RO */ 2027e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else if (IS_NVA3F(dev_priv->chipset)) 2028e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xc, 0); /* RO */ 2029e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 2030e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* RO */ 2031e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2032e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xa, 0); /* RO */ 2033e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0xa0) 2034e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki rep = 0xc; 2035e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 2036e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki rep = 4; 2037e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki for (i = 0; i < rep; i++) { 2038e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2039e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2040e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x20, 0); /* ffffffff */ 2041e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x200, 0); /* ffffffff */ 2042e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* 7f/ff, 0, 0, 0 */ 2043e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff */ 2044e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2045e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2046e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 113/111 */ 2047e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* ffffffff VP_ATTR_EN */ 2048e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, (acnt/8)-1, 0); /* ffffffff VP_ATTR_EN */ 2049e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, acnt/8, 0); /* ffffffff VTX_ATTR_MASK_UNK0DD0 */ 2050e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f VP_GP_BUILTIN_ATTR_EN */ 2051e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2052e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2053e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2054e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* weird... */ 2055d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2056e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 5, 0); /* weird... */ 2057d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 2058d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 2059d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 2060e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_eng2d(struct nouveau_grctx *ctx) 2061d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 2062d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 2063e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* middle of strand 1 on pre-NVA0 [after vfetch], middle of strand 6 on NVAx */ 2064e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2065e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 0001ffff CLIP_X, CLIP_Y */ 2066e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 0000ffff CLIP_W, CLIP_H */ 2067e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 CLIP_ENABLE */ 2068e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset < 0xa0) { 2069e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* this is useless on everything but the original NV50, 2070e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki * guess they forgot to nuke it. Or just didn't bother. */ 2071e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 0000ffff IFC_CLIP_X, Y */ 2072e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 1); /* 0000ffff IFC_CLIP_W, H */ 2073e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 IFC_CLIP_ENABLE */ 2074e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2075e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ 2076e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x100); /* 0001ffff DST_WIDTH */ 2077e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x100); /* 0001ffff DST_HEIGHT */ 2078e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f[NV50]/7f[NV84+] DST_FORMAT */ 2079e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff DRAW_POINT_X */ 2080e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 8); /* 0000000f DRAW_UNK58C */ 2081e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff SIFC_DST_X_FRACT */ 2082e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff SIFC_DST_X_INT */ 2083e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff SIFC_DST_Y_FRACT */ 2084e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff SIFC_DST_Y_INT */ 2085e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff SIFC_DX_DU_FRACT */ 2086e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0001ffff SIFC_DX_DU_INT */ 2087e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff SIFC_DY_DV_FRACT */ 2088e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0001ffff SIFC_DY_DV_INT */ 2089e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000ffff SIFC_WIDTH */ 2090e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000ffff SIFC_HEIGHT */ 2091e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xcf); /* 000000ff SIFC_FORMAT */ 2092e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 00000003 SIFC_BITMAP_UNK808 */ 2093e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 SIFC_BITMAP_LINE_PACK_MODE */ 2094e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 SIFC_BITMAP_LSB_FIRST */ 2095e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 SIFC_BITMAP_ENABLE */ 2096e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff BLIT_DST_X */ 2097e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff BLIT_DST_Y */ 2098e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff BLIT_DU_DX_FRACT */ 2099e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0001ffff BLIT_DU_DX_INT */ 2100e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff BLIT_DV_DY_FRACT */ 2101e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0001ffff BLIT_DV_DY_INT */ 2102e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000ffff BLIT_DST_W */ 2103e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000ffff BLIT_DST_H */ 2104e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff BLIT_SRC_X_FRACT */ 2105e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff BLIT_SRC_X_INT */ 2106e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff BLIT_SRC_Y_FRACT */ 2107e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK888 */ 2108e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000003f UNK884 */ 2109e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 UNK880 */ 2110e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK0FB8 */ 2111e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x15); /* 000000ff tesla UNK128C */ 2112e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00000007, ffff0ff3 */ 2113e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK260 */ 2114e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x4444480); /* 1fffffff UNK870 */ 2115e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2116e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); 2117e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2118e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x27, 0); 2119d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 2120d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 2121d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 2122e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_csched(struct nouveau_grctx *ctx) 2123d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 2124e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 2125e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* middle of strand 1 on pre-NVA0 [after eng2d], middle of strand 0 on NVAx */ 2126e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2127e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY... what is it doing here??? */ 2128e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1924 */ 2129e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ 2130e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 2131e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 2132e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2133e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff turing UNK364 */ 2134e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f turing UNK36C */ 2135e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff USER_PARAM_COUNT */ 2136e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x100); /* 00ffffff turing UNK384 */ 2137e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f turing UNK2A0 */ 2138e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff GRIDID */ 2139e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10001); /* ffffffff GRIDDIM_XY */ 2140e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 2141e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10001); /* ffffffff BLOCKDIM_XY */ 2142e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000ffff BLOCKDIM_Z */ 2143e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10001); /* 00ffffff BLOCK_ALLOC */ 2144e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 LANES32 */ 2145e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff FP_REG_ALLOC_TEMP */ 2146e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 00000003 REG_MODE */ 2147e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2148e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x40, 0); /* ffffffff USER_PARAM */ 2149e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki switch (dev_priv->chipset) { 2150e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x50: 2151e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x92: 2152e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ 2153e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x80, 0); /* fff */ 2154e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ff, fff */ 2155e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10*2, 0); /* ffffffff, 1f */ 2156e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2157e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x84: 2158e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ 2159e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x60, 0); /* fff */ 2160e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ff, fff */ 2161e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xc*2, 0); /* ffffffff, 1f */ 2162e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2163e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x94: 2164e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x96: 2165e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ 2166e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x40, 0); /* fff */ 2167e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ff, fff */ 2168e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8*2, 0); /* ffffffff, 1f */ 2169e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2170e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x86: 2171e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x98: 2172e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* f, 0, 0, 0 */ 2173e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* fff */ 2174e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ff, fff */ 2175e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2*2, 0); /* ffffffff, 1f */ 2176e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2177e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa0: 2178e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ 2179e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xf0, 0); /* fff */ 2180e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ff, fff */ 2181e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x1e*2, 0); /* ffffffff, 1f */ 2182e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2183e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa3: 2184e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ 2185e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x60, 0); /* fff */ 2186e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ff, fff */ 2187e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xc*2, 0); /* ffffffff, 1f */ 2188e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2189e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa5: 2190e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaf: 2191e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 7, 0, 0, 0, ... */ 2192e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x30, 0); /* fff */ 2193e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ff, fff */ 2194e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 6*2, 0); /* ffffffff, 1f */ 2195e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2196e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaa: 2197e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x12, 0); 2198e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2199e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa8: 2200e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xac: 2201e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* f, 0, 0, 0 */ 2202e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* fff */ 2203e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ff, fff */ 2204e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2*2, 0); /* ffffffff, 1f */ 2205e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2206e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2207e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f */ 2208e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000000 */ 2209e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 2210e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000001f */ 2211e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff */ 2212e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 turing UNK35C */ 2213e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 2214e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff */ 2215e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 turing UNK35C */ 2216e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 2217e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff */ 2218d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 2219d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 2220d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 2221e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_unk1cxx(struct nouveau_grctx *ctx) 2222d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 2223d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 2224e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY */ 2225e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x3f800000); /* ffffffff LINE_WIDTH */ 2226e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ 2227e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1658 */ 2228e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 POLYGON_SMOOTH_ENABLE */ 2229e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 00000001 POLYGON_OFFSET_*_ENABLE */ 2230e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000000f CULL_MODE */ 2231e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ 2232e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2233e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 POINT_SPRITE_ENABLE */ 2234e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK165C */ 2235e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* 00000001 SCISSOR_ENABLE */ 2236e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2237e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ 2238e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ 2239e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff POLYGON_OFFSET_UNITS */ 2240e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff POLYGON_OFFSET_FACTOR */ 2241e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1668 */ 2242e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 07ffffff SCREEN_SCISSOR */ 2243e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ 2244e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ 2245e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ 2246e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ 2247e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 0000007f RT_FORMAT */ 2248e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 0000007f RT_FORMAT */ 2249e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 00000001 RT_HORIZ_LINEAR */ 2250e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ 2251e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ 2252e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 ALPHA_TEST_FUNC */ 2253e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2254e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 UNK16B4 */ 2255d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset >= 0xa0) 2256e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 UNK16B4 */ 2257e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 MULTISAMPLE_CTRL */ 2258e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK0F90 */ 2259e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ 2260e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0x04000000); /* 07ffffff tesla UNK0D6C */ 2261e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ 2262e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 2263e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ 2264e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 5); /* 0000000f UNK1408 */ 2265e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x52); /* 000001ff SEMANTIC_PTSZ */ 2266e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff POINT_SIZE */ 2267e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 2268e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 tesla UNK0FB4 */ 2269e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) { 2270e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 3ff */ 2271e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK1110 */ 2272d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2273e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2274e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1928 */ 2275e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* ffffffff DEPTH_RANGE_NEAR */ 2276e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0x3f800000); /* ffffffff DEPTH_RANGE_FAR */ 2277e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 000000ff VIEW_VOLUME_CLIP_CTRL */ 2278e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x20, 0); /* 07ffffff VIEWPORT_HORIZ, then VIEWPORT_VERT. (W&0x3fff)<<13 | (X&0x1fff). */ 2279e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK187C */ 2280e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ 2281e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2282e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2283e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ 2284e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ 2285e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x8100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 2286e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 5); /* 0000000f tesla UNK1220 */ 2287e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ 2288e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff tesla UNK1A20 */ 2289e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 2290e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ 2291e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0xffff); /* 0000ffff MSAA_MASK */ 2292d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0x50) 2293e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 tesla UNK1100 */ 2294d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 2295e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x1c, 0); /* RO */ 2296e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else if (IS_NVA3F(dev_priv->chipset)) 2297e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x9, 0); 2298e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK1534 */ 2299e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ 2300e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ 2301e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ 2302e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ 2303e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 WINDOW_ORIGIN */ 2304d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0x50) { 2305e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 tesla UNK1100 */ 2306e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 3ff */ 2307d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2308e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* XXX: the following block could belong either to unk1cxx, or 2309e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki * to STRMOUT. Rather hard to tell. */ 2310d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) 2311e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x25, 0); 2312d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2313e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x3b, 0); 2314e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki} 2315e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 2316e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void 2317e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_strmout(struct nouveau_grctx *ctx) 2318e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki{ 2319e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 2320e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x102); /* 0000ffff STRMOUT_BUFFER_CTRL */ 2321e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff STRMOUT_PRIMITIVE_COUNT */ 2322e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 4); /* 000000ff STRMOUT_NUM_ATTRIBS */ 2323e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 2324e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff UNK1A8C */ 2325e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff UNK1780 */ 2326e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2327e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 2328e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 0000007f VP_RESULT_MAP_SIZE */ 2329e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 2330d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 2331e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x3ff); /* 000003ff tesla UNK0D68 */ 2332d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2333e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x7ff); /* 000007ff tesla UNK0D68 */ 2334e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2335e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2336e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x102); /* 0000ffff STRMOUT_BUFFER_CTRL */ 2337e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff STRMOUT_PRIMITIVE_COUNT */ 2338e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* 000000ff STRMOUT_ADDRESS_HIGH */ 2339e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff STRMOUT_ADDRESS_LOW */ 2340e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 4); /* 000000ff STRMOUT_NUM_ATTRIBS */ 2341e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 2342e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff UNK1A8C */ 2343e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff UNK1780 */ 2344e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2345e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_STRMOUT */ 2346e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_QUERY */ 2347e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff QUERY_ADDRESS_HIGH */ 2348e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff QUERY_ADDRESS_LOW QUERY_COUNTER */ 2349e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff */ 2350e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2351e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2352e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x20, 0); /* ffffffff STRMOUT_MAP */ 2353e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f */ 2354e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000000? */ 2355e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff */ 2356e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki} 2357e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 2358e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void 2359e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_ropm1(struct nouveau_grctx *ctx) 2360e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki{ 2361e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 2362e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x4e3bfdf); /* ffffffff UNK0D64 */ 2363e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x4e3bfdf); /* ffffffff UNK0DF4 */ 2364e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 2365e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 2366e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2367e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 000000ff tesla UNK1968 */ 2368e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2369e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki} 2370e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki 2371e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickistatic void 2372e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_gene_ropm2(struct nouveau_grctx *ctx) 2373e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki{ 2374e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 2375e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2376e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_QUERY */ 2377e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ 2378e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff */ 2379e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff QUERY_ADDRESS_HIGH */ 2380e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff QUERY_ADDRESS_LOW, COUNTER */ 2381e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ 2382e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7 */ 2383e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* SEEK */ 2384e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_QUERY */ 2385e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff QUERY_ADDRESS_HIGH */ 2386e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff QUERY_ADDRESS_LOW, COUNTER */ 2387e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x4e3bfdf); /* ffffffff UNK0D64 */ 2388e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x4e3bfdf); /* ffffffff UNK0DF4 */ 2389e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 eng2d UNK260 */ 2390e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 2391e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 2392e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2393e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 000000ff tesla UNK1968 */ 2394e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2395d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 2396d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 2397d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 2398d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickinv50_graph_construct_gene_ropc(struct nouveau_grctx *ctx) 2399d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 2400d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 2401d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int magic2; 2402d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 2403d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic2 = 0x00003e60; 2404e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else if (!IS_NVA3F(dev_priv->chipset)) { 2405d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic2 = 0x001ffe67; 2406d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 2407d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic2 = 0x00087e67; 2408d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2409e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* f/7 MUTISAMPLE_SAMPLES_LOG2 */ 2410e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2411e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ 2412e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ 2413e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ 2414e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 00000007 STENCIL_BACK_OP_FAIL, ZFAIL, ZPASS */ 2415e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ 2416e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2417e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ 2418e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ 2419e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ 2420e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2421e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 2422e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2423e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 2424e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ 2425e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ 2426e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ 2427e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 00000007 STENCIL_FRONT_OP_FAIL, ZFAIL, ZPASS */ 2428e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2429e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0 && !IS_NVAAF(dev_priv->chipset)) 2430e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x15); /* 000000ff */ 2431e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ 2432e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ 2433e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 3ff/ff VIEW_VOLUME_CLIP_CTRL */ 2434e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff CLEAR_DEPTH */ 2435e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2436e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 2437e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2438d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x92 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa0) { 2439e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* ff, ffffffff, ffffffff */ 2440e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7 */ 2441e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x400); /* fffffff */ 2442e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x300); /* ffff */ 2443e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1001); /* 1fff */ 2444d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset != 0xa0) { 2445e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2446e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f UNK15C8 */ 2447d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2448e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x15); /* ff */ 2449d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2450d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2451e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ 2452e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2453e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ 2454e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ 2455e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2456e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ 2457e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ 2458e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ 2459e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2460e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 2461e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ 2462e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ 2463e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2464e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ 2465e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ 2466e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ 2467e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2468e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 2469e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2470e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2471e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1900 */ 2472e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ 2473e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ 2474e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_REF */ 2475e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff DEPTH_BOUNDS */ 2476e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ 2477e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ 2478e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2479e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 2480e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f */ 2481e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0FB0 */ 2482e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ 2483e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ 2484e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_REF */ 2485e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2486e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ 2487e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ 2488e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* ffffffff DEPTH_RANGE_NEAR */ 2489e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0x3f800000); /* ffffffff DEPTH_RANGE_FAR */ 2490e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2491e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ 2492e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_BACK_FUNC_FUNC */ 2493e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_MASK */ 2494e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_FUNC_REF */ 2495e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ 2496e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 00000007 STENCIL_BACK_OP_FAIL, ZFAIL, ZPASS */ 2497e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff DEPTH_BOUNDS */ 2498e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ 2499e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 DEPTH_TEST_FUNC */ 2500e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2501e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 2502e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff CLEAR_STENCIL */ 2503e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 STENCIL_FRONT_FUNC_FUNC */ 2504e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_MASK */ 2505e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_FUNC_REF */ 2506e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ 2507e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 00000007 STENCIL_FRONT_OP_FAIL, ZFAIL, ZPASS */ 2508e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2509e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ 2510e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10); /* 7f/ff VIEW_VOLUME_CLIP_CTRL */ 2511e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2512e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x3f); /* 0000003f UNK1590 */ 2513e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ 2514e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2515e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffff0ff3, ffff */ 2516e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0FB0 */ 2517e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ 2518e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ 2519e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2520e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 2521e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff CLEAR_DEPTH */ 2522e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK19CC */ 2523d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 2524d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit(ctx, 2, 0); 2525d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit(ctx, 1, 0x1001); 2526d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit(ctx, 0xb, 0); 2527d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 2528e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 2529e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2530e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ 2531e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ 2532e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2533d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2534e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ 2535e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ 2536e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ 2537e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ 2538e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f */ 2539e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ 2540e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) { 2541e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f LOGIC_OP */ 2542e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff */ 2543e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2544e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 OPERATION */ 2545e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 2546e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ 2547e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 1); /* 00000007 BLEND_EQUATION_RGB, ALPHA */ 2548e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ 2549e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ 2550e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ 2551e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ 2552e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ 2553e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 2554e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ 2555e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2556e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ 2557e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 2558e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK12E4 */ 2559e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_RGB */ 2560e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_ALPHA */ 2561e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000001 IBLEND_UNK00 */ 2562e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_RGB */ 2563e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_RGB */ 2564e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_ALPHA */ 2565e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_ALPHA */ 2566e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1140 */ 2567e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00000001 */ 2568e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 2569e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f */ 2570e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 */ 2571e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 2572e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00000001 */ 2573e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 2574e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 2575e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 2576e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else if (dev_priv->chipset >= 0xa0) { 2577e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00000001 */ 2578e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 2579e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 */ 2580e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 2581e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00000001 */ 2582d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 2583e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 MULTISAMPLE_SAMPLES_LOG2 */ 2584e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1430 */ 2585e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2586d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2587e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff CLEAR_COLOR */ 2588e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff BLEND_COLOR A R G B */ 2589e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000fff eng2d UNK2B0 */ 2590d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 2591e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00000001 */ 2592e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 2593e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ 2594e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ 2595e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ 2596e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ 2597e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_RGB */ 2598e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ 2599e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ 2600e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_ALPHA */ 2601e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK19C0 */ 2602e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ 2603e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f LOGIC_OP */ 2604e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 2605e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK12E4? NVA3+ only? */ 2606e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 2607e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000001 IBLEND_UNK00 */ 2608e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_RGB */ 2609e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_RGB */ 2610e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_RGB */ 2611e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_ALPHA */ 2612e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_ALPHA */ 2613e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_ALPHA */ 2614e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK15C4 */ 2615e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 2616e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1140 */ 2617d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2618e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ 2619e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ 2620e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 PATTERN_COLOR_FORMAT */ 2621e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff PATTERN_MONO_COLOR */ 2622e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 PATTERN_MONO_FORMAT */ 2623e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff PATTERN_MONO_BITMAP */ 2624e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 PATTERN_SELECT */ 2625e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff ROP */ 2626e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff BETA1 */ 2627e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff BETA4 */ 2628e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 OPERATION */ 2629e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x50, 0); /* 10x ffffff, ffffff, ffffff, ffffff, 3 PATTERN */ 2630d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 2631d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 2632d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 2633e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_xfer_unk84xx(struct nouveau_grctx *ctx) 2634d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 2635d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 2636d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int magic3; 2637e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki switch (dev_priv->chipset) { 2638e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x50: 2639d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic3 = 0x1000; 2640e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2641e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x86: 2642e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x98: 2643e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa8: 2644e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaa: 2645e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xac: 2646e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaf: 2647d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic3 = 0x1e00; 2648e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 2649e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki default: 2650d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic3 = 0; 2651e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2652e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 2653e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7f/ff[NVA0+] VP_REG_ALLOC_RESULT */ 2654e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 2655e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2656e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 111/113[NVA0+] */ 2657e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2658e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x1f, 0); /* ffffffff */ 2659d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset >= 0xa0) 2660e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x0f, 0); /* ffffffff */ 2661d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2662e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x10, 0); /* fffffff VP_RESULT_MAP_1 up */ 2663e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* f/1f[NVA3], fffffff/ffffffff[NVA0+] */ 2664e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7f/ff VP_REG_ALLOC_RESULT */ 2665e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ 2666d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 2667e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x03020100); /* ffffffff */ 2668d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2669e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x00608080); /* fffffff VP_RESULT_MAP_0 */ 2670e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 2671e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2672e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 111/113, 7f/ff */ 2673e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ 2674e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2675e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 2676e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_RESULT */ 2677e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 2678e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT */ 2679d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (magic3) 2680e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, magic3); /* 00007fff tesla UNK141C */ 2681e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ 2682e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2683e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 111/113 */ 2684e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x1f, 0); /* ffffffff GP_RESULT_MAP_1 up */ 2685e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000001f */ 2686e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff */ 2687e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 2688e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_REG_ALLOC_RESULT */ 2689e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80); /* 0000ffff GP_VERTEX_OUTPUT_COUNT */ 2690e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 2691e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x03020100); /* ffffffff GP_RESULT_MAP_0 */ 2692e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 GP_OUTPUT_PRIMITIVE_TYPE */ 2693d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (magic3) 2694e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, magic3); /* 7fff tesla UNK141C */ 2695e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7f/ff VP_RESULT_MAP_SIZE */ 2696e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 PROVOKING_VERTEX_LAST */ 2697e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2698e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 111/113 */ 2699e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 2700e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 2701e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 GP_OUTPUT_PRIMITIVE_TYPE */ 2702e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 PROVOKING_VERTEX_LAST */ 2703e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2704e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK13A0 */ 2705e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7f/ff VP_REG_ALLOC_RESULT */ 2706e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 2707e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2708e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 111/113 */ 2709d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x94 || dev_priv->chipset == 0x96) 2710e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x1020, 0); /* 4 x (0x400 x 0xffffffff, ff, 0, 0, 0, 4 x ffffffff) */ 2711d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset < 0xa0) 2712e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xa20, 0); /* 4 x (0x280 x 0xffffffff, ff, 0, 0, 0, 4 x ffffffff) */ 2713e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else if (!IS_NVA3F(dev_priv->chipset)) 2714e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x210, 0); /* ffffffff */ 2715d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2716e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x410, 0); /* ffffffff */ 2717e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 2718e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff GP_RESULT_MAP_SIZE */ 2719e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 GP_OUTPUT_PRIMITIVE_TYPE */ 2720e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 PROVOKING_VERTEX_LAST */ 2721e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 2722d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 2723d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 2724d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 2725e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_xfer_tprop(struct nouveau_grctx *ctx) 2726d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 2727d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 2728d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int magic1, magic2; 2729d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 2730d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic1 = 0x3ff; 2731d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic2 = 0x00003e60; 2732e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else if (!IS_NVA3F(dev_priv->chipset)) { 2733d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic1 = 0x7ff; 2734d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic2 = 0x001ffe67; 2735d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 2736d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic1 = 0x7ff; 2737d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki magic2 = 0x00087e67; 2738d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2739e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 ALPHA_TEST_FUNC */ 2740e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff ALPHA_TEST_REF */ 2741e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ 2742e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2743e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000000f UNK16A0 */ 2744e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ 2745e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2746e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_BACK_MASK */ 2747e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 00000007 STENCIL_BACK_OP_FAIL, ZFAIL, ZPASS */ 2748e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* ffffffff BLEND_COLOR */ 2749e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK19C0 */ 2750e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK0FDC */ 2751e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ 2752e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ 2753e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2754e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 2755e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ 2756e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff[NV50]/3ff[NV84+] */ 2757e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ 2758e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0xffff); /* 0000ffff MSAA_MASK */ 2759e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ 2760e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 00000007 STENCIL_FRONT_OP_FAIL, ZFAIL, ZPASS */ 2761e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2762e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_BACK_ENABLE */ 2763e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 00007fff WINDOW_OFFSET_XY */ 2764e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK19CC */ 2765e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7 */ 2766e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ 2767e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2768e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 2769e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff COLOR_KEY */ 2770e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 COLOR_KEY_ENABLE */ 2771e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 COLOR_KEY_FORMAT */ 2772e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffffffff SIFC_BITMAP_COLOR */ 2773e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 SIFC_BITMAP_WRITE_BIT0_ENABLE */ 2774e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 ALPHA_TEST_FUNC */ 2775e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ 2776e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 2777e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 tesla UNK16B4 */ 2778e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 */ 2779e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1298 */ 2780e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else if (dev_priv->chipset >= 0xa0) { 2781e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK16B4 */ 2782e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 */ 2783e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else { 2784e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 MULTISAMPLE_CTRL */ 2785d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 2786e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2787e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ 2788e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ 2789e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_ALPHA */ 2790e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ 2791e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ 2792e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_RGB */ 2793e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ 2794e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 2795e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK12E4 */ 2796e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_RGB */ 2797e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_ALPHA */ 2798e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000001 IBLEND_UNK00 */ 2799e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 2); /* 0000001f IBLEND_SRC_RGB */ 2800e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 0000001f IBLEND_DST_RGB */ 2801e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 2); /* 0000001f IBLEND_SRC_ALPHA */ 2802e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 0000001f IBLEND_DST_ALPHA */ 2803e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK1140 */ 2804e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2805e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ 2806e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2807e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ 2808e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ 2809e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ 2810e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ 2811e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 2812e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ 2813e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ 2814e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 FRAMEBUFFER_SRGB */ 2815e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7 */ 2816e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ 2817e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ 2818e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 OPERATION */ 2819e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xcf); /* 000000ff SIFC_FORMAT */ 2820e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xcf); /* 000000ff DRAW_COLOR_FORMAT */ 2821e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xcf); /* 000000ff SRC_FORMAT */ 2822e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2823e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 2824e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2825e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f[NVA3] MULTISAMPLE_SAMPLES_LOG2 */ 2826e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ 2827e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ 2828e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_ALPHA */ 2829e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ 2830e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ 2831e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_RGB */ 2832e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ 2833e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ 2834e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2835e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000001 UNK19E0 */ 2836e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ 2837e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ 2838e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ 2839e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ 2840e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ 2841e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ 2842e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ 2843e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2844e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ 2845e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ 2846e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2847e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 284871298e2f0b6fb6dce9f2b2e999652edf1f643d9eEmil Velikov if (dev_priv->chipset == 0x50) 2849e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff */ 2850d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 2851e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 1, 7, 3ff */ 2852e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ 2853e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ 2854e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2855e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 2856e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ 2857e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2858e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 2859e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2860e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ 2861e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2862e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2863e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ 2864e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ 2865e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ 2866e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ 2867e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2868e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 2869e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ 2870e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ 2871e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff BLIT_DU_DX_FRACT */ 2872e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0001ffff BLIT_DU_DX_INT */ 2873e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000fffff BLIT_DV_DY_FRACT */ 2874e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0001ffff BLIT_DV_DY_INT */ 2875e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 2876e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, magic1); /* 3ff/7ff tesla UNK0D68 */ 2877e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2878e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ 2879e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2880e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 2881e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 2882e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2883e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2884e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 2885e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 0000ffff DMA_COLOR */ 2886e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_GLOBAL */ 2887e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_LOCAL */ 2888e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_STACK */ 2889e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 2890e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_DST */ 2891e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7 */ 2892e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ 2893e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2894e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 000000ff RT_ADDRESS_HIGH */ 2895e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* ffffffff RT_LAYER_STRIDE */ 2896e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* ffffffff RT_ADDRESS_LOW */ 2897e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 8); /* 0000007f RT_TILE_MODE */ 2898e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ 2899e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ 2900e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ 2901e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0x400); /* 0fffffff RT_HORIZ */ 2902e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0x300); /* 0000ffff RT_VERT */ 2903e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00001fff RT_ARRAY_MODE */ 2904e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ 2905e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ 2906e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x20); /* 00000fff DST_TILE_MODE */ 2907e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ 2908e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x100); /* 0001ffff DST_HEIGHT */ 2909e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000007ff DST_LAYER */ 2910e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 DST_LINEAR */ 2911e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff DST_ADDRESS_LOW */ 2912e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff DST_ADDRESS_HIGH */ 2913e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x40); /* 0007ffff DST_PITCH */ 2914e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x100); /* 0001ffff DST_WIDTH */ 2915e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff */ 2916e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 tesla UNK15AC */ 2917e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 2918e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ 2919e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ 2920e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 2921e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2922e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 2923e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ 2924e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ 2925e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 2926e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2927e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 00000003 tesla UNK143C */ 2928e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ 2929e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_ZETA */ 2930e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ 2931e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2932e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 2933e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* ffff, ff/3ff */ 2934e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0001ffff GP_BUILTIN_RESULT_EN */ 2935e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2936e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff STENCIL_FRONT_MASK */ 2937e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ 2938e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 2939e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff ZETA_LAYER_STRIDE */ 2940e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff ZETA_ADDRESS_HIGH */ 2941e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff ZETA_ADDRESS_LOW */ 2942e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 00000007 ZETA_TILE_MODE */ 2943e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2944e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 2945e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x400); /* 0fffffff ZETA_HORIZ */ 2946e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x300); /* 0000ffff ZETA_VERT */ 2947e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1001); /* 00001fff ZETA_ARRAY_MODE */ 2948e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2949e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ 2950e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 2951e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 */ 2952e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2953e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f RT_FORMAT */ 2954e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 3f/7f RT_FORMAT */ 2955e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* 0fffffff RT_CONTROL */ 2956e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* 0000000f COLOR_MASK */ 2957e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 0000000f COLOR_MASK */ 2958e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 2959e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ 2960e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 UNK0F90 */ 2961e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 FRAMEBUFFER_SRGB */ 2962e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7 */ 2963e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ 2964e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 2965e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK1140 */ 2966e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 2967e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2968e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ 2969e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK1534 */ 2970e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 2971d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 2972e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x0fac6881); /* fffffff */ 2973e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, magic2); /* 001fffff tesla UNK0F78 */ 2974e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_BOUNDS_EN */ 2975e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 2976e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE_ENABLE */ 2977e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ 2978e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK0FB0 */ 2979e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 2980e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ 2981e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 STENCIL_FRONT_ENABLE */ 2982e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK15B4 */ 2983e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK19CC */ 2984e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 2985e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 SAMPLECNT_ENABLE */ 2986e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f ZETA_FORMAT */ 2987e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 ZETA_ENABLE */ 2988e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 2989e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 2990e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000000f tesla UNK15C8 */ 2991e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 2992e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A3C */ 2993e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 2994e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 7/f, 1, ffff0ff3 */ 2995e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xfac6881); /* fffffff */ 2996e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0); /* 1, 1, 1, 3ff */ 2997e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 7 */ 2998e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 1 */ 2999e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 1); /* 1 */ 3000e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 7, f */ 3001e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 1 */ 3002e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f */ 3003e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 3004e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x9, 0); /* 1 */ 3005e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki else 3006e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x8, 0); /* 1 */ 3007e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 3008e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 1 */ 3009e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 7f */ 3010e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 7f */ 3011e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xfac6881); /* fffffff */ 3012e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf); /* f */ 3013e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* f */ 3014e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 7f */ 3015e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 1 */ 3016e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 5, 0); /* 1, 7, 3ff, 3, 7 */ 3017e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 3018e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK1140 */ 3019e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 3020e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 3021e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 3022d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 3023d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3024d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 3025e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_xfer_tex(struct nouveau_grctx *ctx) 3026d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 3027d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 3028e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 1 LINKED_TSC. yes, 2. */ 3029e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset != 0x50) 3030e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 3 */ 3031e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 1ffff BLIT_DU_DX_INT */ 3032e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* fffff BLIT_DU_DX_FRACT */ 3033e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 1ffff BLIT_DV_DY_INT */ 3034e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* fffff BLIT_DV_DY_FRACT */ 3035d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 3036e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 3 BLIT_CONTROL */ 3037d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 3038e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 3ff, 1 */ 3039e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x2a712488); /* ffffffff SRC_TIC_0 */ 3040e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff SRC_TIC_1 */ 3041e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x4085c000); /* ffffffff SRC_TIC_2 */ 3042e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x40); /* ffffffff SRC_TIC_3 */ 3043e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x100); /* ffffffff SRC_TIC_4 */ 3044e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10100); /* ffffffff SRC_TIC_5 */ 3045e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x02800000); /* ffffffff SRC_TIC_6 */ 3046e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff SRC_TIC_7 */ 3047e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x50) { 3048e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 turing UNK358 */ 3049e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A34? */ 3050e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 turing UNK37C tesla UNK1690 */ 3051e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 BLIT_CONTROL */ 3052e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 turing UNK32C tesla UNK0F94 */ 3053e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else if (!IS_NVAAF(dev_priv->chipset)) { 3054e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A34? */ 3055e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 */ 3056e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 3057e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 */ 3058e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 3059e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1664 / turing UNK03E8 */ 3060e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 */ 3061e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000003ff */ 3062e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } else { 3063e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0x6, 0); 3064e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 3065e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A34 */ 3066e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_TEXTURE */ 3067e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 0000ffff DMA_SRC */ 3068d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 3069d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3070d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 3071e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_xfer_unk8cxx(struct nouveau_grctx *ctx) 3072d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 3073d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 3074e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK1534 */ 3075e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ 3076e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0); /* 7, ffff0ff3 */ 3077e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 3078e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE */ 3079e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x04e3bfdf); /* ffffffff UNK0D64 */ 3080e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x04e3bfdf); /* ffffffff UNK0DF4 */ 3081e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 UNK15B4 */ 3082e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ 3083e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ 3084e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK0F98 */ 3085e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 3086e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 3087e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1668 */ 3088e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_STIPPLE_ENABLE */ 3089e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x00ffff00); /* 00ffffff LINE_STIPPLE_PATTERN */ 3090e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 POLYGON_SMOOTH_ENABLE */ 3091e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK1534 */ 3092e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ 3093e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1658 */ 3094e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINE_SMOOTH_ENABLE */ 3095e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffff0ff3 */ 3096e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_TEST_ENABLE */ 3097e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 DEPTH_WRITE */ 3098e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 UNK15B4 */ 3099e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 POINT_SPRITE_ENABLE */ 3100e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 tesla UNK165C */ 3101e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x30201000); /* ffffffff tesla UNK1670 */ 3102e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x70605040); /* ffffffff tesla UNK1670 */ 3103e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xb8a89888); /* ffffffff tesla UNK1670 */ 3104e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xf8e8d8c8); /* ffffffff tesla UNK1670 */ 3105e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 VERTEX_TWO_SIDE_ENABLE */ 3106e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1a); /* 0000001f POLYGON_MODE */ 3107d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 3108d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3109d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 3110d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickinv50_graph_construct_xfer_tp(struct nouveau_grctx *ctx) 3111d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 3112d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 3113d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) { 3114e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_unk84xx(ctx); 3115e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_tprop(ctx); 3116e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_tex(ctx); 3117e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_unk8cxx(ctx); 3118d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 3119e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_tex(ctx); 3120e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_tprop(ctx); 3121e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_unk8cxx(ctx); 3122e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_unk84xx(ctx); 3123d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 3124d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 3125d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3126d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 3127e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnickinv50_graph_construct_xfer_mpc(struct nouveau_grctx *ctx) 3128d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 3129d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 3130e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki int i, mpcnt = 2; 3131e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki switch (dev_priv->chipset) { 3132e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x98: 3133e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaa: 3134e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki mpcnt = 1; 3135e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 3136e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x50: 3137e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x84: 3138e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x86: 3139e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x92: 3140e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x94: 3141e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0x96: 3142e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa8: 3143e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xac: 3144e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki mpcnt = 2; 3145e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 3146e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa0: 3147e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa3: 3148e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xa5: 3149e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki case 0xaf: 3150e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki mpcnt = 3; 3151e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki break; 3152e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki } 3153d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki for (i = 0; i < mpcnt; i++) { 3154e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff */ 3155e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80); /* ffffffff tesla UNK1404 */ 3156e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x80007004); /* ffffffff tesla UNK12B0 */ 3157e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x04000400); /* ffffffff */ 3158d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) 3159e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xc0); /* 00007fff tesla UNK152C */ 3160e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1000); /* 0000ffff tesla UNK0D60 */ 3161e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 3162e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A30 */ 3163e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x98 || dev_priv->chipset == 0xa8 || IS_NVAAF(dev_priv->chipset)) { 3164e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xe00); /* 7fff */ 3165e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1e00); /* 7fff */ 3166d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 3167e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 000000ff VP_REG_ALLOC_TEMP */ 3168e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LINKED_TSC */ 3169e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 3170d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 3171e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 2, 0x1000); /* 7fff tesla UNK141C */ 3172e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 000000ff GP_REG_ALLOC_TEMP */ 3173e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 GP_ENABLE */ 3174e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff FP_REG_ALLOC_TEMP */ 3175e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 00000003 REG_MODE */ 3176e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVAAF(dev_priv->chipset)) 3177e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xb, 0); /* RO */ 3178d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset >= 0xa0) 3179e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xc, 0); /* RO */ 3180d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 3181e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 0xa, 0); /* RO */ 3182d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 3183e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x08100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 3184e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 3185d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset >= 0xa0) { 3186e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1fe21); /* 0003ffff tesla UNK0FAC */ 3187d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 3188e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 3, 0); /* 7fff, 0, 0 */ 3189e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 tesla UNK1534 */ 3190e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7/f MULTISAMPLE_SAMPLES_LOG2 */ 3191e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 4, 0xffff); /* 0000ffff MSAA_MASK */ 3192e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 LANES32 */ 3193e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10001); /* 00ffffff BLOCK_ALLOC */ 3194e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x10001); /* ffffffff BLOCKDIM_XY */ 3195e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000ffff BLOCKDIM_Z */ 3196e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff SHARED_SIZE */ 3197e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x1fe21); /* 1ffff/3ffff[NVA0+] tesla UNk0FAC */ 3198e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff tesla UNK1A34 */ 3199e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 3200e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f tesla UNK169C */ 3201e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff/3ff */ 3202e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 1 LINKED_TSC */ 3203e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ff FP_ADDRESS_HIGH */ 3204e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* ffffffff FP_ADDRESS_LOW */ 3205e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x08100c12); /* 1fffffff FP_INTERPOLANT_CTRL */ 3206e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 00000007 FP_CONTROL */ 3207e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 000000ff FRAG_COLOR_CLAMP_EN */ 3208e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 00000003 REG_MODE */ 3209e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 0000007f RT_FORMAT */ 3210e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 7, 0); /* 0000007f RT_FORMAT */ 3211e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 */ 3212e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0xfac6881); /* 0fffffff RT_CONTROL */ 3213e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 MULTISAMPLE_CTRL */ 3214e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) 3215e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 3); /* 00000003 tesla UNK16B4 */ 3216e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 ALPHA_TEST_ENABLE */ 3217e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000007 ALPHA_TEST_FUNC */ 3218e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 FRAMEBUFFER_SRGB */ 3219e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* ffffffff tesla UNK1400 */ 3220e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 0); /* 00000001 BLEND_ENABLE */ 3221e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 LOGIC_OP_ENABLE */ 3222e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_RGB */ 3223e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_RGB */ 3224e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_RGB */ 3225e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 2); /* 0000001f BLEND_FUNC_SRC_ALPHA */ 3226e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 0000001f BLEND_FUNC_DST_ALPHA */ 3227e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000007 BLEND_EQUATION_ALPHA */ 3228e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 00000001 UNK133C */ 3229e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki if (IS_NVA3F(dev_priv->chipset)) { 3230e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK12E4 */ 3231e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_RGB */ 3232e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_RGB */ 3233e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_RGB */ 3234e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 2); /* 0000001f IBLEND_FUNC_SRC_ALPHA */ 3235e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 0000001f IBLEND_FUNC_DST_ALPHA */ 3236e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000007 IBLEND_EQUATION_ALPHA */ 3237e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 8, 1); /* 00000001 IBLEND_UNK00 */ 3238e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK1928 */ 3239e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000001 UNK1140 */ 3240d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 3241e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 00000003 tesla UNK0F90 */ 3242e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 4); /* 000000ff FP_RESULT_COUNT */ 3243e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* XXX: demagic this part some day */ 3244d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset == 0x50) 3245d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit(ctx, 0x3a0, 0); 3246d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset < 0x94) 3247d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit(ctx, 0x3a2, 0); 3248d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else if (dev_priv->chipset == 0x98 || dev_priv->chipset == 0xaa) 3249d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit(ctx, 0x39f, 0); 3250d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki else 3251d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit(ctx, 0x3a3, 0); 3252e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x11); /* 3f/7f DST_FORMAT */ 3253e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0); /* 7 OPERATION */ 3254e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 1); /* 1 DST_LINEAR */ 3255d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki xf_emit(ctx, 0x2d, 0); 3256d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 3257d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3258d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickistatic void 3259d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnickinv50_graph_construct_xfer2(struct nouveau_grctx *ctx) 3260d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki{ 3261d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; 3262d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int i; 3263d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki uint32_t offset; 3264d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki uint32_t units = nv_rd32 (ctx->dev, 0x1540); 3265d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki int size = 0; 3266d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3267d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki offset = (ctx->ctxvals_pos+0x3f)&~0x3f; 3268d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3269d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (dev_priv->chipset < 0xa0) { 3270d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki for (i = 0; i < 8; i++) { 3271d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + i; 3272e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* that little bugger belongs to csched. No idea 3273e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki * what it's doing here. */ 3274d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (i == 0) 3275e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x08100c12); /* FP_INTERPOLANT_CTRL */ 3276d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << i)) 3277e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3278d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 3279d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 3280d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 3281d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } else { 3282d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki /* Strand 0: TPs 0, 1 */ 3283d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset; 3284e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* that little bugger belongs to csched. No idea 3285e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki * what it's doing here. */ 3286e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki xf_emit(ctx, 1, 0x08100c12); /* FP_INTERPOLANT_CTRL */ 3287d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 0)) 3288e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3289d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 1)) 3290e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3291d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 3292d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 3293d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3294e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* Strand 1: TPs 2, 3 */ 3295d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 1; 3296d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 2)) 3297e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3298d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 3)) 3299e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3300d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 3301d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 3302d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3303e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* Strand 2: TPs 4, 5, 6 */ 3304d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 2; 3305d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 4)) 3306e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3307d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 5)) 3308e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3309d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 6)) 3310e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3311d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 3312d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 3313d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki 3314e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki /* Strand 3: TPs 7, 8, 9 */ 3315d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + 3; 3316d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 7)) 3317e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3318d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 8)) 3319e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3320d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if (units & (1 << 9)) 3321e69b4418825c2e4c6563ae1d69bd75377826e263Marcin Kościelnicki nv50_graph_construct_xfer_mpc(ctx); 3322d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki if ((ctx->ctxvals_pos-offset)/8 > size) 3323d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki size = (ctx->ctxvals_pos-offset)/8; 3324d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki } 3325d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = offset + size * 8; 3326d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki ctx->ctxvals_pos = (ctx->ctxvals_pos+0x3f)&~0x3f; 3327d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_lsr (ctx, offset); 3328d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_SET_XFER_POINTER); 3329d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_lsr (ctx, size); 3330d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_SEEK_2); 3331d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_out (ctx, CP_XFER_2); 3332d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki cp_wait(ctx, XFER, BUSY); 3333d5f3c90d4f3ad6b054f9855b7b69137b97bda131Marcin Kościelnicki} 3334