aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/macros.fuc
blob: 2a0b0f84429928260a3238963a30965abed03f48 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
/*
 * Copyright 2013 Red Hat Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 * Authors: Ben Skeggs <bskeggs@redhat.com>
 */

#include "os.h"

#define GF100 0xc0
#define GF117 0xd7
#define GK100 0xe0
#define GK110 0xf0
#define GK208 0x108

#define NV_PGRAPH_TRAPPED_ADDR                                         0x400704
#define NV_PGRAPH_TRAPPED_DATA_LO                                      0x400708
#define NV_PGRAPH_TRAPPED_DATA_HI                                      0x40070c

#define NV_PGRAPH_FE_OBJECT_TABLE(n)                        ((n) * 4 + 0x400700)

#define NV_PGRAPH_FECS_INTR_ACK                                        0x409004
#define NV_PGRAPH_FECS_INTR                                            0x409008
#define NV_PGRAPH_FECS_INTR_FWMTHD                                   0x00000400
#define NV_PGRAPH_FECS_INTR_CHSW                                     0x00000100
#define NV_PGRAPH_FECS_INTR_FIFO                                     0x00000004
#define NV_PGRAPH_FECS_INTR_MODE                                       0x40900c
#define NV_PGRAPH_FECS_INTR_MODE_FIFO                                0x00000004
#define NV_PGRAPH_FECS_INTR_MODE_FIFO_LEVEL                          0x00000004
#define NV_PGRAPH_FECS_INTR_MODE_FIFO_EDGE                           0x00000000
#define NV_PGRAPH_FECS_INTR_EN_SET                                     0x409010
#define NV_PGRAPH_FECS_INTR_EN_SET_FIFO                              0x00000004
#define NV_PGRAPH_FECS_INTR_ROUTE                                      0x40901c
#define NV_PGRAPH_FECS_ACCESS                                          0x409048
#define NV_PGRAPH_FECS_ACCESS_FIFO                                   0x00000002
#define NV_PGRAPH_FECS_FIFO_DATA                                       0x409064
#define NV_PGRAPH_FECS_FIFO_CMD                                        0x409068
#define NV_PGRAPH_FECS_FIFO_ACK                                        0x409074
#define NV_PGRAPH_FECS_CAPS                                            0x409108
#define NV_PGRAPH_FECS_SIGNAL                                          0x409400
#define NV_PGRAPH_FECS_IROUTE                                          0x409404
#define NV_PGRAPH_FECS_BAR_MASK0                                       0x40940c
#define NV_PGRAPH_FECS_BAR_MASK1                                       0x409410
#define NV_PGRAPH_FECS_BAR                                             0x409414
#define NV_PGRAPH_FECS_BAR_SET                                         0x409418
#define NV_PGRAPH_FECS_RED_SWITCH                                      0x409614
#define NV_PGRAPH_FECS_RED_SWITCH_ENABLE_ROP                         0x00000400
#define NV_PGRAPH_FECS_RED_SWITCH_ENABLE_GPC                         0x00000200
#define NV_PGRAPH_FECS_RED_SWITCH_ENABLE_MAIN                        0x00000100
#define NV_PGRAPH_FECS_RED_SWITCH_POWER_ROP                          0x00000040
#define NV_PGRAPH_FECS_RED_SWITCH_POWER_GPC                          0x00000020
#define NV_PGRAPH_FECS_RED_SWITCH_POWER_MAIN                         0x00000010
#define NV_PGRAPH_FECS_RED_SWITCH_PAUSE_GPC                          0x00000002
#define NV_PGRAPH_FECS_RED_SWITCH_PAUSE_MAIN                         0x00000001
#define NV_PGRAPH_FECS_MMCTX_SAVE_SWBASE                               0x409700
#define NV_PGRAPH_FECS_MMCTX_LOAD_SWBASE                               0x409704
#define NV_PGRAPH_FECS_MMCTX_LOAD_COUNT                                0x40974c
#define NV_PGRAPH_FECS_MMCTX_SAVE_SWBASE                               0x409700
#define NV_PGRAPH_FECS_MMCTX_LOAD_SWBASE                               0x409704
#define NV_PGRAPH_FECS_MMCTX_BASE                                      0x409710
#define NV_PGRAPH_FECS_MMCTX_CTRL                                      0x409714
#define NV_PGRAPH_FECS_MMCTX_MULTI_STRIDE                              0x409718
#define NV_PGRAPH_FECS_MMCTX_MULTI_MASK                                0x40971c
#define NV_PGRAPH_FECS_MMCTX_QUEUE                                     0x409720
#define NV_PGRAPH_FECS_MMIO_CTRL                                       0x409728
#define NV_PGRAPH_FECS_MMIO_RDVAL                                      0x40972c
#define NV_PGRAPH_FECS_MMIO_WRVAL                                      0x409730
#define NV_PGRAPH_FECS_MMCTX_LOAD_COUNT                                0x40974c
#if CHIPSET < GK110
#define NV_PGRAPH_FECS_CC_SCRATCH_VAL(n)                    ((n) * 4 + 0x409800)
#define NV_PGRAPH_FECS_CC_SCRATCH_SET(n)                    ((n) * 4 + 0x409820)
#define NV_PGRAPH_FECS_CC_SCRATCH_CLR(n)                    ((n) * 4 + 0x409840)
#define NV_PGRAPH_FECS_UNK86C                                          0x40986c
#else
#define NV_PGRAPH_FECS_CC_SCRATCH_VAL(n)                    ((n) * 4 + 0x409800)
#define NV_PGRAPH_FECS_CC_SCRATCH_CLR(n)                    ((n) * 4 + 0x409840)
#define NV_PGRAPH_FECS_UNK86C                                          0x40988c
#define NV_PGRAPH_FECS_CC_SCRATCH_SET(n)                    ((n) * 4 + 0x4098c0)
#endif
#define NV_PGRAPH_FECS_STRANDS_CNT                                     0x409880
#define NV_PGRAPH_FECS_STRAND_SAVE_SWBASE                              0x409908
#define NV_PGRAPH_FECS_STRAND_LOAD_SWBASE                              0x40990c
#define NV_PGRAPH_FECS_STRAND_WORDS                                    0x409910
#define NV_PGRAPH_FECS_STRAND_DATA                                     0x409918
#define NV_PGRAPH_FECS_STRAND_SELECT                                   0x40991c
#define NV_PGRAPH_FECS_STRAND_CMD                                      0x409928
#define NV_PGRAPH_FECS_STRAND_CMD_SEEK                               0x00000001
#define NV_PGRAPH_FECS_STRAND_CMD_GET_INFO                           0x00000002
#define NV_PGRAPH_FECS_STRAND_CMD_SAVE                               0x00000003
#define NV_PGRAPH_FECS_STRAND_CMD_LOAD                               0x00000004
#define NV_PGRAPH_FECS_STRAND_CMD_ACTIVATE_FILTER                    0x0000000a
#define NV_PGRAPH_FECS_STRAND_CMD_DEACTIVATE_FILTER                  0x0000000b
#define NV_PGRAPH_FECS_STRAND_CMD_ENABLE                             0x0000000c
#define NV_PGRAPH_FECS_STRAND_CMD_DISABLE                            0x0000000d
#define NV_PGRAPH_FECS_STRAND_FILTER                                   0x40993c
#define NV_PGRAPH_FECS_MEM_BASE                                        0x409a04
#define NV_PGRAPH_FECS_MEM_CHAN                                        0x409a0c
#define NV_PGRAPH_FECS_MEM_CMD                                         0x409a10
#define NV_PGRAPH_FECS_MEM_CMD_LOAD_CHAN                             0x00000007
#define NV_PGRAPH_FECS_MEM_TARGET                                      0x409a20
#define NV_PGRAPH_FECS_MEM_TARGET_UNK31                              0x80000000
#define NV_PGRAPH_FECS_MEM_TARGET_AS                                 0x0000001f
#define NV_PGRAPH_FECS_MEM_TARGET_AS_VM                              0x00000001
#define NV_PGRAPH_FECS_MEM_TARGET_AS_VRAM                            0x00000002
#define NV_PGRAPH_FECS_CHAN_ADDR                                       0x409b00
#define NV_PGRAPH_FECS_CHAN_NEXT                                       0x409b04
#define NV_PGRAPH_FECS_CHSW                                            0x409b0c
#define NV_PGRAPH_FECS_CHSW_ACK                                      0x00000001
#define NV_PGRAPH_FECS_INTR_UP_SET                                     0x409c1c
#define NV_PGRAPH_FECS_INTR_UP_EN                                      0x409c24

#define NV_PGRAPH_GPCX_GPCCS_INTR_ACK                                  0x41a004
#define NV_PGRAPH_GPCX_GPCCS_INTR                                      0x41a008
#define NV_PGRAPH_GPCX_GPCCS_INTR_FIFO                               0x00000004
#define NV_PGRAPH_GPCX_GPCCS_INTR_EN_SET                               0x41a010
#define NV_PGRAPH_GPCX_GPCCS_INTR_EN_SET_FIFO                        0x00000004
#define NV_PGRAPH_GPCX_GPCCS_INTR_ROUTE                                0x41a01c
#define NV_PGRAPH_GPCX_GPCCS_ACCESS                                    0x41a048
#define NV_PGRAPH_GPCX_GPCCS_ACCESS_FIFO                             0x00000002
#define NV_PGRAPH_GPCX_GPCCS_FIFO_DATA                                 0x41a064
#define NV_PGRAPH_GPCX_GPCCS_FIFO_CMD                                  0x41a068
#define NV_PGRAPH_GPCX_GPCCS_FIFO_ACK                                  0x41a074
#define NV_PGRAPH_GPCX_GPCCS_UNITS                                     0x41a608
#define NV_PGRAPH_GPCX_GPCCS_CAPS                                      0x41a108
#define NV_PGRAPH_GPCX_GPCCS_RED_SWITCH                                0x41a614
#define NV_PGRAPH_GPCX_GPCCS_RED_SWITCH_UNK11                        0x00000800
#define NV_PGRAPH_GPCX_GPCCS_RED_SWITCH_ENABLE                       0x00000200
#define NV_PGRAPH_GPCX_GPCCS_RED_SWITCH_POWER                        0x00000020
#define NV_PGRAPH_GPCX_GPCCS_RED_SWITCH_PAUSE                        0x00000002
#define NV_PGRAPH_GPCX_GPCCS_MYINDEX                                   0x41a618
#define NV_PGRAPH_GPCX_GPCCS_MMCTX_SAVE_SWBASE                         0x41a700
#define NV_PGRAPH_GPCX_GPCCS_MMCTX_LOAD_SWBASE                         0x41a704
#define NV_PGRAPH_GPCX_GPCCS_MMCTX_LOAD_COUNT                          0x41a74c
#if CHIPSET < GK110
#define NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_VAL(n)              ((n) * 4 + 0x41a800)
#define NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_SET(n)              ((n) * 4 + 0x41a820)
#define NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_CLR(n)              ((n) * 4 + 0x41a840)
#define NV_PGRAPH_GPCX_GPCCS_UNK86C                                    0x41a86c
#else
#define NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_VAL(n)              ((n) * 4 + 0x41a800)
#define NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_CLR(n)              ((n) * 4 + 0x41a840)
#define NV_PGRAPH_GPCX_GPCCS_UNK86C                                    0x41a88c
#define NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_SET(n)              ((n) * 4 + 0x41a8c0)
#endif
#define NV_PGRAPH_GPCX_GPCCS_STRAND_SELECT                             0x41a91c
#define NV_PGRAPH_GPCX_GPCCS_STRAND_CMD                                0x41a928
#define NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_SAVE                         0x00000003
#define NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_LOAD                         0x00000004
#define NV_PGRAPH_GPCX_GPCCS_MEM_BASE                                  0x41aa04

#define mmctx_data(r,c) .b32 (((c - 1) << 26) | r)
#define queue_init      .skip 72 // (2 * 4) + ((8 * 4) * 2)

#define T_WAIT    0
#define T_MMCTX   1
#define T_STRWAIT 2
#define T_STRINIT 3
#define T_AUTO    4
#define T_CHAN    5
#define T_LOAD    6
#define T_SAVE    7
#define T_LCHAN   8
#define T_LCTXH   9

#if CHIPSET < GK208
#define imm32(reg,val) /*
*/	movw reg  ((val) & 0x0000ffff) /*
*/	sethi reg ((val) & 0xffff0000)
#else
#define imm32(reg,val) /*
*/	mov reg (val)
#endif

#define nv_mkio(rv,r,i) /*
*/	imm32(rv, (((r) & 0xffc) << 6) | ((i) << 2))

#define hash #
#define fn(a) a
#if CHIPSET < GK208
#define call(a) call fn(hash)a
#else
#define call(a) lcall fn(hash)a
#endif

#define nv_iord(rv,r,i) /*
*/	nv_mkio(rv,r,i) /*
*/	iord rv I[rv]

#define nv_iowr(r,i,rv) /*
*/	nv_mkio($r0,r,i) /*
*/	iowr I[$r0] rv /*
*/	clear b32 $r0

#define nv_rd32(reg,addr) /*
*/	imm32($r14, addr) /*
*/	call(nv_rd32) /*
*/	mov b32 reg $r15

#define nv_wr32(addr,reg) /*
*/	mov b32 $r15 reg /*
*/	imm32($r14, addr) /*
*/	call(nv_wr32)

#define trace_set(bit) /*
*/	clear b32 $r9 /*
*/	bset $r9 bit /*
*/	nv_iowr(NV_PGRAPH_FECS_CC_SCRATCH_SET(7), 0, $r9)

#define trace_clr(bit) /*
*/	clear b32 $r9 /*
*/	bset $r9 bit /*
*/	nv_iowr(NV_PGRAPH_FECS_CC_SCRATCH_CLR(7), 0, $r9)