Skip to content

Commit 1cd97b5

Browse files
author
Ben Skeggs
committed
drm/nouveau/gr/tu102-: use sw_veid_bundle_init from firmware
NVIDIA provided this on Turing, but we kept using the hardcoded version from Volta (where they didn't). Switch to the firmware version prior to Ampere. Signed-off-by: Ben Skeggs <[email protected]> Reviewed-by: Lyude Paul <[email protected]>
1 parent edc6938 commit 1cd97b5

File tree

8 files changed

+44
-6
lines changed

8 files changed

+44
-6
lines changed

drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,12 +1381,17 @@ gf100_grctx_generate_main(struct gf100_gr_chan *chan)
13811381
gf100_gr_wait_idle(gr);
13821382

13831383
if (grctx->r400088) grctx->r400088(gr, false);
1384+
13841385
if (gr->bundle)
13851386
gf100_gr_icmd(gr, gr->bundle);
13861387
else
13871388
gf100_gr_icmd(gr, grctx->icmd);
1389+
1390+
if (gr->bundle_veid)
1391+
gf100_gr_icmd(gr, gr->bundle_veid);
13881392
if (grctx->sw_veid_bundle_init)
13891393
gf100_gr_icmd(gr, grctx->sw_veid_bundle_init);
1394+
13901395
if (grctx->r400088) grctx->r400088(gr, true);
13911396

13921397
nvkm_wr32(device, 0x404154, idle_timeout);

drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ extern const struct gf100_grctx_func gv100_grctx;
153153
extern const struct gf100_grctx_func tu102_grctx;
154154
void gv100_grctx_unkn88c(struct gf100_gr *, bool);
155155
void gv100_grctx_generate_unkn(struct gf100_gr *);
156-
extern const struct gf100_gr_init gv100_grctx_init_sw_veid_bundle_init_0[];
157156
void gv100_grctx_generate_attrib_cb(struct gf100_gr_chan *, u64, u32);
158157
void gv100_grctx_generate_attrib(struct gf100_gr_chan *);
159158
void gv100_grctx_generate_rop_mapping(struct gf100_gr *);

drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgv100.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
* PGRAPH context implementation
2626
******************************************************************************/
2727

28-
const struct gf100_gr_init
28+
static const struct gf100_gr_init
2929
gv100_grctx_init_sw_veid_bundle_init_0[] = {
3030
{ 0x00001000, 64, 0x00100000, 0x00000008 },
3131
{ 0x00000941, 64, 0x00100000, 0x00000000 },

drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxtu102.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ tu102_grctx_init_unknown_bundle_init_0[] = {
5151

5252
static const struct gf100_gr_pack
5353
tu102_grctx_pack_sw_veid_bundle_init[] = {
54-
{ gv100_grctx_init_sw_veid_bundle_init_0 },
5554
{ tu102_grctx_init_unknown_bundle_init_0 },
5655
{}
5756
};

drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2139,6 +2139,7 @@ gf100_gr_dtor(struct nvkm_gr *base)
21392139
nvkm_blob_dtor(&gr->gpccs.inst);
21402140
nvkm_blob_dtor(&gr->gpccs.data);
21412141

2142+
vfree(gr->bundle_veid);
21422143
vfree(gr->bundle);
21432144
vfree(gr->method);
21442145
vfree(gr->sw_ctx);

drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ struct gf100_gr {
9090
struct gf100_gr_pack *sw_nonctx;
9191
struct gf100_gr_pack *sw_ctx;
9292
struct gf100_gr_pack *bundle;
93+
struct gf100_gr_pack *bundle_veid;
9394
struct gf100_gr_pack *method;
9495

9596
struct gf100_gr_zbc_color zbc_color[NVKM_LTC_MAX_ZBC_COLOR_CNT];
@@ -224,6 +225,7 @@ void gm107_gr_init_shader_exceptions(struct gf100_gr *, int, int);
224225
void gm107_gr_init_400054(struct gf100_gr *);
225226

226227
int gk20a_gr_init(struct gf100_gr *);
228+
int gk20a_gr_av_to_init_(struct nvkm_blob *, u8 count, u32 pitch, struct gf100_gr_pack **);
227229
int gk20a_gr_av_to_init(struct nvkm_blob *, struct gf100_gr_pack **);
228230
int gk20a_gr_aiv_to_init(struct nvkm_blob *, struct gf100_gr_pack **);
229231
int gk20a_gr_av_to_method(struct nvkm_blob *, struct gf100_gr_pack **);
@@ -253,6 +255,8 @@ void gv100_gr_init_504430(struct gf100_gr *, int, int);
253255
void gv100_gr_init_shader_exceptions(struct gf100_gr *, int, int);
254256
void gv100_gr_trap_mp(struct gf100_gr *, int, int);
255257

258+
int tu102_gr_av_to_init_veid(struct nvkm_blob *, struct gf100_gr_pack **);
259+
256260
#define gf100_gr_chan(p) container_of((p), struct gf100_gr_chan, object)
257261
#include <core/object.h>
258262

drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct gk20a_fw_av
3434
};
3535

3636
int
37-
gk20a_gr_av_to_init(struct nvkm_blob *blob, struct gf100_gr_pack **ppack)
37+
gk20a_gr_av_to_init_(struct nvkm_blob *blob, u8 count, u32 pitch, struct gf100_gr_pack **ppack)
3838
{
3939
struct gf100_gr_init *init;
4040
struct gf100_gr_pack *pack;
@@ -55,14 +55,20 @@ gk20a_gr_av_to_init(struct nvkm_blob *blob, struct gf100_gr_pack **ppack)
5555

5656
ent->addr = av->addr;
5757
ent->data = av->data;
58-
ent->count = 1;
59-
ent->pitch = 1;
58+
ent->count = ((ent->addr & 0xffff) != 0xe100) ? count : 1;
59+
ent->pitch = pitch;
6060
}
6161

6262
*ppack = pack;
6363
return 0;
6464
}
6565

66+
int
67+
gk20a_gr_av_to_init(struct nvkm_blob *blob, struct gf100_gr_pack **ppack)
68+
{
69+
return gk20a_gr_av_to_init_(blob, 1, 1, ppack);
70+
}
71+
6672
struct gk20a_fw_aiv
6773
{
6874
u32 addr;

drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ MODULE_FIRMWARE("nvidia/tu102/gr/sw_ctx.bin");
141141
MODULE_FIRMWARE("nvidia/tu102/gr/sw_nonctx.bin");
142142
MODULE_FIRMWARE("nvidia/tu102/gr/sw_bundle_init.bin");
143143
MODULE_FIRMWARE("nvidia/tu102/gr/sw_method_init.bin");
144+
MODULE_FIRMWARE("nvidia/tu102/gr/sw_veid_bundle_init.bin");
144145

145146
MODULE_FIRMWARE("nvidia/tu104/gr/fecs_bl.bin");
146147
MODULE_FIRMWARE("nvidia/tu104/gr/fecs_inst.bin");
@@ -154,6 +155,7 @@ MODULE_FIRMWARE("nvidia/tu104/gr/sw_ctx.bin");
154155
MODULE_FIRMWARE("nvidia/tu104/gr/sw_nonctx.bin");
155156
MODULE_FIRMWARE("nvidia/tu104/gr/sw_bundle_init.bin");
156157
MODULE_FIRMWARE("nvidia/tu104/gr/sw_method_init.bin");
158+
MODULE_FIRMWARE("nvidia/tu104/gr/sw_veid_bundle_init.bin");
157159

158160
MODULE_FIRMWARE("nvidia/tu106/gr/fecs_bl.bin");
159161
MODULE_FIRMWARE("nvidia/tu106/gr/fecs_inst.bin");
@@ -167,6 +169,7 @@ MODULE_FIRMWARE("nvidia/tu106/gr/sw_ctx.bin");
167169
MODULE_FIRMWARE("nvidia/tu106/gr/sw_nonctx.bin");
168170
MODULE_FIRMWARE("nvidia/tu106/gr/sw_bundle_init.bin");
169171
MODULE_FIRMWARE("nvidia/tu106/gr/sw_method_init.bin");
172+
MODULE_FIRMWARE("nvidia/tu106/gr/sw_veid_bundle_init.bin");
170173

171174
MODULE_FIRMWARE("nvidia/tu117/gr/fecs_bl.bin");
172175
MODULE_FIRMWARE("nvidia/tu117/gr/fecs_inst.bin");
@@ -180,6 +183,7 @@ MODULE_FIRMWARE("nvidia/tu117/gr/sw_ctx.bin");
180183
MODULE_FIRMWARE("nvidia/tu117/gr/sw_nonctx.bin");
181184
MODULE_FIRMWARE("nvidia/tu117/gr/sw_bundle_init.bin");
182185
MODULE_FIRMWARE("nvidia/tu117/gr/sw_method_init.bin");
186+
MODULE_FIRMWARE("nvidia/tu117/gr/sw_veid_bundle_init.bin");
183187

184188
MODULE_FIRMWARE("nvidia/tu116/gr/fecs_bl.bin");
185189
MODULE_FIRMWARE("nvidia/tu116/gr/fecs_inst.bin");
@@ -193,6 +197,26 @@ MODULE_FIRMWARE("nvidia/tu116/gr/sw_ctx.bin");
193197
MODULE_FIRMWARE("nvidia/tu116/gr/sw_nonctx.bin");
194198
MODULE_FIRMWARE("nvidia/tu116/gr/sw_bundle_init.bin");
195199
MODULE_FIRMWARE("nvidia/tu116/gr/sw_method_init.bin");
200+
MODULE_FIRMWARE("nvidia/tu116/gr/sw_veid_bundle_init.bin");
201+
202+
int
203+
tu102_gr_av_to_init_veid(struct nvkm_blob *blob, struct gf100_gr_pack **ppack)
204+
{
205+
return gk20a_gr_av_to_init_(blob, 64, 0x00100000, ppack);
206+
}
207+
208+
int
209+
tu102_gr_load(struct gf100_gr *gr, int ver, const struct gf100_gr_fwif *fwif)
210+
{
211+
int ret;
212+
213+
ret = gm200_gr_load(gr, ver, fwif);
214+
if (ret)
215+
return ret;
216+
217+
return gk20a_gr_load_net(gr, "gr/", "sw_veid_bundle_init", ver, tu102_gr_av_to_init_veid,
218+
&gr->bundle_veid);
219+
}
196220

197221
static const struct gf100_gr_fwif
198222
tu102_gr_fwif[] = {

0 commit comments

Comments
 (0)