xref: /openbmc/linux/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf117.c (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
1e3c71eb2SBen Skeggs /*
2e3c71eb2SBen Skeggs  * Copyright 2013 Red Hat Inc.
3e3c71eb2SBen Skeggs  *
4e3c71eb2SBen Skeggs  * Permission is hereby granted, free of charge, to any person obtaining a
5e3c71eb2SBen Skeggs  * copy of this software and associated documentation files (the "Software"),
6e3c71eb2SBen Skeggs  * to deal in the Software without restriction, including without limitation
7e3c71eb2SBen Skeggs  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8e3c71eb2SBen Skeggs  * and/or sell copies of the Software, and to permit persons to whom the
9e3c71eb2SBen Skeggs  * Software is furnished to do so, subject to the following conditions:
10e3c71eb2SBen Skeggs  *
11e3c71eb2SBen Skeggs  * The above copyright notice and this permission notice shall be included in
12e3c71eb2SBen Skeggs  * all copies or substantial portions of the Software.
13e3c71eb2SBen Skeggs  *
14e3c71eb2SBen Skeggs  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15e3c71eb2SBen Skeggs  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16e3c71eb2SBen Skeggs  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17e3c71eb2SBen Skeggs  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18e3c71eb2SBen Skeggs  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19e3c71eb2SBen Skeggs  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20e3c71eb2SBen Skeggs  * OTHER DEALINGS IN THE SOFTWARE.
21e3c71eb2SBen Skeggs  *
22e3c71eb2SBen Skeggs  * Authors: Ben Skeggs <bskeggs@redhat.com>
23e3c71eb2SBen Skeggs  */
24e3c71eb2SBen Skeggs #include "ctxgf100.h"
25e3c71eb2SBen Skeggs 
26e3c71eb2SBen Skeggs #include <subdev/fb.h>
27e3c71eb2SBen Skeggs #include <subdev/mc.h>
28e3c71eb2SBen Skeggs 
29e3c71eb2SBen Skeggs /*******************************************************************************
30e3c71eb2SBen Skeggs  * PGRAPH context register lists
31e3c71eb2SBen Skeggs  ******************************************************************************/
32e3c71eb2SBen Skeggs 
33e3c71eb2SBen Skeggs static const struct gf100_gr_init
34e3c71eb2SBen Skeggs gf117_grctx_init_ds_0[] = {
35e3c71eb2SBen Skeggs 	{ 0x405800,   1, 0x04, 0x0f8000bf },
36e3c71eb2SBen Skeggs 	{ 0x405830,   1, 0x04, 0x02180324 },
37e3c71eb2SBen Skeggs 	{ 0x405834,   1, 0x04, 0x08000000 },
38e3c71eb2SBen Skeggs 	{ 0x405838,   1, 0x04, 0x00000000 },
39e3c71eb2SBen Skeggs 	{ 0x405854,   1, 0x04, 0x00000000 },
40e3c71eb2SBen Skeggs 	{ 0x405870,   4, 0x04, 0x00000001 },
41e3c71eb2SBen Skeggs 	{ 0x405a00,   2, 0x04, 0x00000000 },
42e3c71eb2SBen Skeggs 	{ 0x405a18,   1, 0x04, 0x00000000 },
43e3c71eb2SBen Skeggs 	{}
44e3c71eb2SBen Skeggs };
45e3c71eb2SBen Skeggs 
46e3c71eb2SBen Skeggs static const struct gf100_gr_init
47e3c71eb2SBen Skeggs gf117_grctx_init_pd_0[] = {
48e3c71eb2SBen Skeggs 	{ 0x406020,   1, 0x04, 0x000103c1 },
49e3c71eb2SBen Skeggs 	{ 0x406028,   4, 0x04, 0x00000001 },
50e3c71eb2SBen Skeggs 	{ 0x4064a8,   1, 0x04, 0x00000000 },
51e3c71eb2SBen Skeggs 	{ 0x4064ac,   1, 0x04, 0x00003fff },
52e3c71eb2SBen Skeggs 	{ 0x4064b4,   3, 0x04, 0x00000000 },
53e3c71eb2SBen Skeggs 	{ 0x4064c0,   1, 0x04, 0x801a0078 },
54e3c71eb2SBen Skeggs 	{ 0x4064c4,   1, 0x04, 0x00c9ffff },
55e3c71eb2SBen Skeggs 	{ 0x4064d0,   8, 0x04, 0x00000000 },
56e3c71eb2SBen Skeggs 	{}
57e3c71eb2SBen Skeggs };
58e3c71eb2SBen Skeggs 
59e3c71eb2SBen Skeggs static const struct gf100_gr_pack
60e3c71eb2SBen Skeggs gf117_grctx_pack_hub[] = {
61e3c71eb2SBen Skeggs 	{ gf100_grctx_init_main_0 },
62e3c71eb2SBen Skeggs 	{ gf119_grctx_init_fe_0 },
63e3c71eb2SBen Skeggs 	{ gf100_grctx_init_pri_0 },
64e3c71eb2SBen Skeggs 	{ gf100_grctx_init_memfmt_0 },
65e3c71eb2SBen Skeggs 	{ gf117_grctx_init_ds_0 },
66e3c71eb2SBen Skeggs 	{ gf117_grctx_init_pd_0 },
67e3c71eb2SBen Skeggs 	{ gf100_grctx_init_rstr2d_0 },
68e3c71eb2SBen Skeggs 	{ gf100_grctx_init_scc_0 },
69e3c71eb2SBen Skeggs 	{ gf119_grctx_init_be_0 },
70e3c71eb2SBen Skeggs 	{}
71e3c71eb2SBen Skeggs };
72e3c71eb2SBen Skeggs 
73e3c71eb2SBen Skeggs static const struct gf100_gr_init
74e3c71eb2SBen Skeggs gf117_grctx_init_setup_0[] = {
75e3c71eb2SBen Skeggs 	{ 0x418800,   1, 0x04, 0x7006860a },
76e3c71eb2SBen Skeggs 	{ 0x418808,   3, 0x04, 0x00000000 },
77e3c71eb2SBen Skeggs 	{ 0x418828,   1, 0x04, 0x00008442 },
78e3c71eb2SBen Skeggs 	{ 0x418830,   1, 0x04, 0x10000001 },
79e3c71eb2SBen Skeggs 	{ 0x4188d8,   1, 0x04, 0x00000008 },
80e3c71eb2SBen Skeggs 	{ 0x4188e0,   1, 0x04, 0x01000000 },
81e3c71eb2SBen Skeggs 	{ 0x4188e8,   5, 0x04, 0x00000000 },
82e3c71eb2SBen Skeggs 	{ 0x4188fc,   1, 0x04, 0x20100018 },
83e3c71eb2SBen Skeggs 	{}
84e3c71eb2SBen Skeggs };
85e3c71eb2SBen Skeggs 
86e3c71eb2SBen Skeggs static const struct gf100_gr_pack
87191e3232SBen Skeggs gf117_grctx_pack_gpc_0[] = {
88e3c71eb2SBen Skeggs 	{ gf100_grctx_init_gpc_unk_0 },
89e3c71eb2SBen Skeggs 	{ gf119_grctx_init_prop_0 },
90e3c71eb2SBen Skeggs 	{ gf119_grctx_init_gpc_unk_1 },
91e3c71eb2SBen Skeggs 	{ gf117_grctx_init_setup_0 },
92e3c71eb2SBen Skeggs 	{ gf100_grctx_init_zcull_0 },
93191e3232SBen Skeggs 	{}
94191e3232SBen Skeggs };
95191e3232SBen Skeggs 
96191e3232SBen Skeggs const struct gf100_gr_pack
97191e3232SBen Skeggs gf117_grctx_pack_gpc_1[] = {
98e3c71eb2SBen Skeggs 	{ gf119_grctx_init_crstr_0 },
99e3c71eb2SBen Skeggs 	{ gf108_grctx_init_gpm_0 },
100e3c71eb2SBen Skeggs 	{ gf100_grctx_init_gcc_0 },
101e3c71eb2SBen Skeggs 	{}
102e3c71eb2SBen Skeggs };
103e3c71eb2SBen Skeggs 
104e3c71eb2SBen Skeggs const struct gf100_gr_init
105e3c71eb2SBen Skeggs gf117_grctx_init_pe_0[] = {
106e3c71eb2SBen Skeggs 	{ 0x419848,   1, 0x04, 0x00000000 },
107e3c71eb2SBen Skeggs 	{ 0x419864,   1, 0x04, 0x00000129 },
108e3c71eb2SBen Skeggs 	{ 0x419888,   1, 0x04, 0x00000000 },
109e3c71eb2SBen Skeggs 	{}
110e3c71eb2SBen Skeggs };
111e3c71eb2SBen Skeggs 
112e3c71eb2SBen Skeggs static const struct gf100_gr_init
113e3c71eb2SBen Skeggs gf117_grctx_init_tex_0[] = {
114e3c71eb2SBen Skeggs 	{ 0x419a00,   1, 0x04, 0x000001f0 },
115e3c71eb2SBen Skeggs 	{ 0x419a04,   1, 0x04, 0x00000001 },
116e3c71eb2SBen Skeggs 	{ 0x419a08,   1, 0x04, 0x00000023 },
117e3c71eb2SBen Skeggs 	{ 0x419a0c,   1, 0x04, 0x00020000 },
118e3c71eb2SBen Skeggs 	{ 0x419a10,   1, 0x04, 0x00000000 },
119e3c71eb2SBen Skeggs 	{ 0x419a14,   1, 0x04, 0x00000200 },
120e3c71eb2SBen Skeggs 	{ 0x419a1c,   1, 0x04, 0x00008000 },
121e3c71eb2SBen Skeggs 	{ 0x419a20,   1, 0x04, 0x00000800 },
122e3c71eb2SBen Skeggs 	{ 0x419ac4,   1, 0x04, 0x0017f440 },
123e3c71eb2SBen Skeggs 	{}
124e3c71eb2SBen Skeggs };
125e3c71eb2SBen Skeggs 
126e3c71eb2SBen Skeggs static const struct gf100_gr_init
127e3c71eb2SBen Skeggs gf117_grctx_init_mpc_0[] = {
128e3c71eb2SBen Skeggs 	{ 0x419c00,   1, 0x04, 0x0000000a },
129e3c71eb2SBen Skeggs 	{ 0x419c04,   1, 0x04, 0x00000006 },
130e3c71eb2SBen Skeggs 	{ 0x419c08,   1, 0x04, 0x00000002 },
131e3c71eb2SBen Skeggs 	{ 0x419c20,   1, 0x04, 0x00000000 },
132e3c71eb2SBen Skeggs 	{ 0x419c24,   1, 0x04, 0x00084210 },
133e3c71eb2SBen Skeggs 	{ 0x419c28,   1, 0x04, 0x3efbefbe },
134e3c71eb2SBen Skeggs 	{}
135e3c71eb2SBen Skeggs };
136e3c71eb2SBen Skeggs 
137e3c71eb2SBen Skeggs static const struct gf100_gr_pack
138e3c71eb2SBen Skeggs gf117_grctx_pack_tpc[] = {
139e3c71eb2SBen Skeggs 	{ gf117_grctx_init_pe_0 },
140e3c71eb2SBen Skeggs 	{ gf117_grctx_init_tex_0 },
141e3c71eb2SBen Skeggs 	{ gf117_grctx_init_mpc_0 },
142e3c71eb2SBen Skeggs 	{ gf104_grctx_init_l1c_0 },
143e3c71eb2SBen Skeggs 	{ gf119_grctx_init_sm_0 },
144e3c71eb2SBen Skeggs 	{}
145e3c71eb2SBen Skeggs };
146e3c71eb2SBen Skeggs 
147e3c71eb2SBen Skeggs static const struct gf100_gr_init
148e3c71eb2SBen Skeggs gf117_grctx_init_pes_0[] = {
149e3c71eb2SBen Skeggs 	{ 0x41be24,   1, 0x04, 0x00000002 },
150e3c71eb2SBen Skeggs 	{}
151e3c71eb2SBen Skeggs };
152e3c71eb2SBen Skeggs 
153e3c71eb2SBen Skeggs static const struct gf100_gr_init
154e3c71eb2SBen Skeggs gf117_grctx_init_cbm_0[] = {
155e3c71eb2SBen Skeggs 	{ 0x41bec0,   1, 0x04, 0x12180000 },
156e3c71eb2SBen Skeggs 	{ 0x41bec4,   1, 0x04, 0x00003fff },
157e3c71eb2SBen Skeggs 	{ 0x41bee4,   1, 0x04, 0x03240218 },
158e3c71eb2SBen Skeggs 	{}
159e3c71eb2SBen Skeggs };
160e3c71eb2SBen Skeggs 
161e3c71eb2SBen Skeggs const struct gf100_gr_init
162e3c71eb2SBen Skeggs gf117_grctx_init_wwdx_0[] = {
163e3c71eb2SBen Skeggs 	{ 0x41bf00,   1, 0x04, 0x0a418820 },
164e3c71eb2SBen Skeggs 	{ 0x41bf04,   1, 0x04, 0x062080e6 },
165e3c71eb2SBen Skeggs 	{ 0x41bf08,   1, 0x04, 0x020398a4 },
166e3c71eb2SBen Skeggs 	{ 0x41bf0c,   1, 0x04, 0x0e629062 },
167e3c71eb2SBen Skeggs 	{ 0x41bf10,   1, 0x04, 0x0a418820 },
168e3c71eb2SBen Skeggs 	{ 0x41bf14,   1, 0x04, 0x000000e6 },
169e3c71eb2SBen Skeggs 	{ 0x41bfd0,   1, 0x04, 0x00900103 },
170e3c71eb2SBen Skeggs 	{ 0x41bfe0,   1, 0x04, 0x00400001 },
171e3c71eb2SBen Skeggs 	{ 0x41bfe4,   1, 0x04, 0x00000000 },
172e3c71eb2SBen Skeggs 	{}
173e3c71eb2SBen Skeggs };
174e3c71eb2SBen Skeggs 
175e3c71eb2SBen Skeggs static const struct gf100_gr_pack
176e3c71eb2SBen Skeggs gf117_grctx_pack_ppc[] = {
177e3c71eb2SBen Skeggs 	{ gf117_grctx_init_pes_0 },
178e3c71eb2SBen Skeggs 	{ gf117_grctx_init_cbm_0 },
179e3c71eb2SBen Skeggs 	{ gf117_grctx_init_wwdx_0 },
180e3c71eb2SBen Skeggs 	{}
181e3c71eb2SBen Skeggs };
182e3c71eb2SBen Skeggs 
183e3c71eb2SBen Skeggs /*******************************************************************************
184e3c71eb2SBen Skeggs  * PGRAPH context implementation
185e3c71eb2SBen Skeggs  ******************************************************************************/
186e3c71eb2SBen Skeggs 
187e3c71eb2SBen Skeggs void
gf117_grctx_generate_dist_skip_table(struct gf100_gr * gr)18860770fa2SBen Skeggs gf117_grctx_generate_dist_skip_table(struct gf100_gr *gr)
18960770fa2SBen Skeggs {
19060770fa2SBen Skeggs 	struct nvkm_device *device = gr->base.engine.subdev.device;
19160770fa2SBen Skeggs 	int i;
19260770fa2SBen Skeggs 
19360770fa2SBen Skeggs 	for (i = 0; i < 8; i++)
19460770fa2SBen Skeggs 		nvkm_wr32(device, 0x4064d0 + (i * 0x04), 0x00000000);
19560770fa2SBen Skeggs }
19660770fa2SBen Skeggs 
19760770fa2SBen Skeggs void
gf117_grctx_generate_rop_mapping(struct gf100_gr * gr)198ff209c23SBen Skeggs gf117_grctx_generate_rop_mapping(struct gf100_gr *gr)
199ff209c23SBen Skeggs {
200ff209c23SBen Skeggs 	struct nvkm_device *device = gr->base.engine.subdev.device;
201ff209c23SBen Skeggs 	u32 data[6] = {}, data2[2] = {};
202ff209c23SBen Skeggs 	u8  shift, ntpcv;
2035f6474a4SBen Skeggs 	int i;
204ff209c23SBen Skeggs 
2055f6474a4SBen Skeggs 	/* Pack tile map into register format. */
2065f6474a4SBen Skeggs 	for (i = 0; i < 32; i++)
2075f6474a4SBen Skeggs 		data[i / 6] |= (gr->tile[i] & 0x07) << ((i % 6) * 5);
208ff209c23SBen Skeggs 
2095f6474a4SBen Skeggs 	/* Magic. */
210ff209c23SBen Skeggs 	shift = 0;
211ff209c23SBen Skeggs 	ntpcv = gr->tpc_total;
212ff209c23SBen Skeggs 	while (!(ntpcv & (1 << 4))) {
213ff209c23SBen Skeggs 		ntpcv <<= 1;
214ff209c23SBen Skeggs 		shift++;
215ff209c23SBen Skeggs 	}
216ff209c23SBen Skeggs 
217ff209c23SBen Skeggs 	data2[0]  = (ntpcv << 16);
218ff209c23SBen Skeggs 	data2[0] |= (shift << 21);
219ff209c23SBen Skeggs 	data2[0] |= (((1 << (0 + 5)) % ntpcv) << 24);
220ff209c23SBen Skeggs 	for (i = 1; i < 7; i++)
221ff209c23SBen Skeggs 		data2[1] |= ((1 << (i + 5)) % ntpcv) << ((i - 1) * 5);
222ff209c23SBen Skeggs 
223ff209c23SBen Skeggs 	/* GPC_BROADCAST */
224ff209c23SBen Skeggs 	nvkm_wr32(device, 0x418bb8, (gr->tpc_total << 8) |
225ff209c23SBen Skeggs 				     gr->screen_tile_row_offset);
226ff209c23SBen Skeggs 	for (i = 0; i < 6; i++)
227ff209c23SBen Skeggs 		nvkm_wr32(device, 0x418b08 + (i * 4), data[i]);
228ff209c23SBen Skeggs 
229ff209c23SBen Skeggs 	/* GPC_BROADCAST.TP_BROADCAST */
230ff209c23SBen Skeggs 	nvkm_wr32(device, 0x41bfd0, (gr->tpc_total << 8) |
231ff209c23SBen Skeggs 				     gr->screen_tile_row_offset | data2[0]);
232ff209c23SBen Skeggs 	nvkm_wr32(device, 0x41bfe4, data2[1]);
233ff209c23SBen Skeggs 	for (i = 0; i < 6; i++)
234ff209c23SBen Skeggs 		nvkm_wr32(device, 0x41bf00 + (i * 4), data[i]);
235ff209c23SBen Skeggs 
236ff209c23SBen Skeggs 	/* UNK78xx */
237ff209c23SBen Skeggs 	nvkm_wr32(device, 0x4078bc, (gr->tpc_total << 8) |
238ff209c23SBen Skeggs 				     gr->screen_tile_row_offset);
239ff209c23SBen Skeggs 	for (i = 0; i < 6; i++)
240ff209c23SBen Skeggs 		nvkm_wr32(device, 0x40780c + (i * 4), data[i]);
241ff209c23SBen Skeggs }
242ff209c23SBen Skeggs 
243ff209c23SBen Skeggs void
gf117_grctx_generate_attrib(struct gf100_gr_chan * chan)24478a43c7eSBen Skeggs gf117_grctx_generate_attrib(struct gf100_gr_chan *chan)
245e3c71eb2SBen Skeggs {
24678a43c7eSBen Skeggs 	struct gf100_gr *gr = chan->gr;
24727f3d6cfSBen Skeggs 	const struct gf100_grctx_func *grctx = gr->func->grctx;
24827f3d6cfSBen Skeggs 	const u32  alpha = grctx->alpha_nr;
24927f3d6cfSBen Skeggs 	const u32   beta = grctx->attrib_nr;
250e3c71eb2SBen Skeggs 	const int timeslice_mode = 1;
251e3c71eb2SBen Skeggs 	const int max_batches = 0xffff;
252e3c71eb2SBen Skeggs 	u32 bo = 0;
25327f3d6cfSBen Skeggs 	u32 ao = bo + grctx->attrib_nr_max * gr->tpc_total;
254e3c71eb2SBen Skeggs 	int gpc, ppc;
255e3c71eb2SBen Skeggs 
25678a43c7eSBen Skeggs 	gf100_grctx_patch_wr32(chan, 0x405830, (beta << 16) | alpha);
25778a43c7eSBen Skeggs 	gf100_grctx_patch_wr32(chan, 0x4064c4, ((alpha / 4) << 16) | max_batches);
258e3c71eb2SBen Skeggs 
259bfee3f3dSBen Skeggs 	for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
260*0c520ad4SBen Skeggs 		for (ppc = 0; ppc < gr->func->ppc_nr; ppc++) {
261bfee3f3dSBen Skeggs 			const u32 a = alpha * gr->ppc_tpc_nr[gpc][ppc];
262bfee3f3dSBen Skeggs 			const u32 b =  beta * gr->ppc_tpc_nr[gpc][ppc];
263e3c71eb2SBen Skeggs 			const u32 t = timeslice_mode;
264e3c71eb2SBen Skeggs 			const u32 o = PPC_UNIT(gpc, ppc, 0);
26578a43c7eSBen Skeggs 
2662fb2b3c6SBen Skeggs 			if (!(gr->ppc_mask[gpc] & (1 << ppc)))
2672fb2b3c6SBen Skeggs 				continue;
26878a43c7eSBen Skeggs 
26978a43c7eSBen Skeggs 			gf100_grctx_patch_wr32(chan, o + 0xc0, (t << 28) | (b << 16) | bo);
27027f3d6cfSBen Skeggs 			bo += grctx->attrib_nr_max * gr->ppc_tpc_nr[gpc][ppc];
27178a43c7eSBen Skeggs 			gf100_grctx_patch_wr32(chan, o + 0xe4, (a << 16) | ao);
27227f3d6cfSBen Skeggs 			ao += grctx->alpha_nr_max * gr->ppc_tpc_nr[gpc][ppc];
273e3c71eb2SBen Skeggs 		}
274e3c71eb2SBen Skeggs 	}
275e3c71eb2SBen Skeggs }
276e3c71eb2SBen Skeggs 
27727f3d6cfSBen Skeggs const struct gf100_grctx_func
27827f3d6cfSBen Skeggs gf117_grctx = {
279201ed6f6SBen Skeggs 	.main  = gf100_grctx_generate_main,
280e3c71eb2SBen Skeggs 	.unkn  = gk104_grctx_generate_unkn,
281e3c71eb2SBen Skeggs 	.hub   = gf117_grctx_pack_hub,
282191e3232SBen Skeggs 	.gpc_0 = gf117_grctx_pack_gpc_0,
283191e3232SBen Skeggs 	.gpc_1 = gf117_grctx_pack_gpc_1,
284e3c71eb2SBen Skeggs 	.zcull = gf100_grctx_pack_zcull,
285e3c71eb2SBen Skeggs 	.tpc   = gf117_grctx_pack_tpc,
286e3c71eb2SBen Skeggs 	.ppc   = gf117_grctx_pack_ppc,
287e3c71eb2SBen Skeggs 	.icmd  = gf119_grctx_pack_icmd,
288e3c71eb2SBen Skeggs 	.mthd  = gf119_grctx_pack_mthd,
289e3c71eb2SBen Skeggs 	.bundle = gf100_grctx_generate_bundle,
290e3c71eb2SBen Skeggs 	.bundle_size = 0x1800,
291e3c71eb2SBen Skeggs 	.pagepool = gf100_grctx_generate_pagepool,
292e3c71eb2SBen Skeggs 	.pagepool_size = 0x8000,
29378a43c7eSBen Skeggs 	.attrib_cb_size = gf100_grctx_generate_attrib_cb_size,
29478a43c7eSBen Skeggs 	.attrib_cb = gf100_grctx_generate_attrib_cb,
295e3c71eb2SBen Skeggs 	.attrib = gf117_grctx_generate_attrib,
296e3c71eb2SBen Skeggs 	.attrib_nr_max = 0x324,
297e3c71eb2SBen Skeggs 	.attrib_nr = 0x218,
298e3c71eb2SBen Skeggs 	.alpha_nr_max = 0x7ff,
299e3c71eb2SBen Skeggs 	.alpha_nr = 0x324,
300fc740f54SBen Skeggs 	.sm_id = gf100_grctx_generate_sm_id,
301fc740f54SBen Skeggs 	.tpc_nr = gf100_grctx_generate_tpc_nr,
3029d8a80dfSBen Skeggs 	.r4060a8 = gf100_grctx_generate_r4060a8,
303ff209c23SBen Skeggs 	.rop_mapping = gf117_grctx_generate_rop_mapping,
30443952c6fSBen Skeggs 	.alpha_beta_tables = gf100_grctx_generate_alpha_beta_tables,
305c4a2b638SBen Skeggs 	.max_ways_evict = gf100_grctx_generate_max_ways_evict,
30660770fa2SBen Skeggs 	.dist_skip_table = gf117_grctx_generate_dist_skip_table,
30799a3c67eSBen Skeggs 	.r419cb8 = gf100_grctx_generate_r419cb8,
30827f3d6cfSBen Skeggs };
309