Loading drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c +37 −23 Original line number Diff line number Diff line Loading @@ -1079,28 +1079,6 @@ gf100_grctx_generate_unkn(struct gf100_gr *gr) { } void gf100_grctx_generate_tpcid(struct gf100_gr *gr) { struct nvkm_device *device = gr->base.engine.subdev.device; int gpc, tpc, id; for (tpc = 0, id = 0; tpc < 4; tpc++) { for (gpc = 0; gpc < gr->gpc_nr; gpc++) { if (tpc < gr->tpc_nr[gpc]) { nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x698), id); nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x4e8), id); nvkm_wr32(device, GPC_UNIT(gpc, 0x0c10 + tpc * 4), id); nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x088), id); id++; } nvkm_wr32(device, GPC_UNIT(gpc, 0x0c08), gr->tpc_nr[gpc]); nvkm_wr32(device, GPC_UNIT(gpc, 0x0c8c), gr->tpc_nr[gpc]); } } } void gf100_grctx_generate_r406028(struct gf100_gr *gr) { Loading Loading @@ -1230,6 +1208,40 @@ gf100_grctx_generate_r406800(struct gf100_gr *gr) } } void gf100_grctx_generate_tpc_nr(struct gf100_gr *gr, int gpc) { struct nvkm_device *device = gr->base.engine.subdev.device; nvkm_wr32(device, GPC_UNIT(gpc, 0x0c08), gr->tpc_nr[gpc]); nvkm_wr32(device, GPC_UNIT(gpc, 0x0c8c), gr->tpc_nr[gpc]); } void gf100_grctx_generate_sm_id(struct gf100_gr *gr, int gpc, int tpc, int sm) { struct nvkm_device *device = gr->base.engine.subdev.device; nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x698), sm); nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x4e8), sm); nvkm_wr32(device, GPC_UNIT(gpc, 0x0c10 + tpc * 4), sm); nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x088), sm); } void gf100_grctx_generate_floorsweep(struct gf100_gr *gr) { const struct gf100_grctx_func *func = gr->func->grctx; int tpc, gpc, sm; for (tpc = 0, sm = 0; tpc < gr->tpc_max; tpc++) { for (gpc = 0; gpc < gr->gpc_nr; gpc++) { if (tpc < gr->tpc_nr[gpc]) func->sm_id(gr, gpc, tpc, sm++); if (func->tpc_nr) func->tpc_nr(gr, gpc); } } } void gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info) { Loading Loading @@ -1258,7 +1270,7 @@ gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info) grctx->patch_ltc(info); grctx->unkn(gr); gf100_grctx_generate_tpcid(gr); gf100_grctx_generate_floorsweep(gr); gf100_grctx_generate_r406028(gr); gf100_grctx_generate_r4060a8(gr); gf100_grctx_generate_r418bb8(gr); Loading Loading @@ -1410,4 +1422,6 @@ gf100_grctx = { .attrib = gf100_grctx_generate_attrib, .attrib_nr_max = 0x324, .attrib_nr = 0x218, .sm_id = gf100_grctx_generate_sm_id, .tpc_nr = gf100_grctx_generate_tpc_nr, }; drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h +7 −2 Original line number Diff line number Diff line Loading @@ -50,6 +50,9 @@ struct gf100_grctx_func { u32 alpha_nr; /* other patch buffer stuff */ void (*patch_ltc)(struct gf100_grctx *); /* floorsweeping */ void (*sm_id)(struct gf100_gr *, int gpc, int tpc, int sm); void (*tpc_nr)(struct gf100_gr *, int gpc); }; extern const struct gf100_grctx_func gf100_grctx; Loading @@ -59,11 +62,13 @@ void gf100_grctx_generate_bundle(struct gf100_grctx *); void gf100_grctx_generate_pagepool(struct gf100_grctx *); void gf100_grctx_generate_attrib(struct gf100_grctx *); void gf100_grctx_generate_unkn(struct gf100_gr *); void gf100_grctx_generate_tpcid(struct gf100_gr *); void gf100_grctx_generate_floorsweep(struct gf100_gr *); void gf100_grctx_generate_r406028(struct gf100_gr *); void gf100_grctx_generate_r4060a8(struct gf100_gr *); void gf100_grctx_generate_r418bb8(struct gf100_gr *); void gf100_grctx_generate_r406800(struct gf100_gr *); void gf100_grctx_generate_sm_id(struct gf100_gr *, int, int, int); void gf100_grctx_generate_tpc_nr(struct gf100_gr *, int); extern const struct gf100_grctx_func gf108_grctx; void gf108_grctx_generate_attrib(struct gf100_grctx *); Loading @@ -89,6 +94,7 @@ void gk104_grctx_generate_r418bb8(struct gf100_gr *); void gm107_grctx_generate_bundle(struct gf100_grctx *); void gm107_grctx_generate_pagepool(struct gf100_grctx *); void gm107_grctx_generate_attrib(struct gf100_grctx *); void gm107_grctx_generate_sm_id(struct gf100_gr *, int, int, int); extern const struct gf100_grctx_func gk110_grctx; extern const struct gf100_grctx_func gk110b_grctx; Loading @@ -100,7 +106,6 @@ void gm107_grctx_generate_pagepool(struct gf100_grctx *); void gm107_grctx_generate_attrib(struct gf100_grctx *); extern const struct gf100_grctx_func gm200_grctx; void gm200_grctx_generate_tpcid(struct gf100_gr *); void gm200_grctx_generate_405b60(struct gf100_gr *); extern const struct gf100_grctx_func gm20b_grctx; Loading drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf104.c +2 −0 Original line number Diff line number Diff line Loading @@ -96,4 +96,6 @@ gf104_grctx = { .attrib = gf100_grctx_generate_attrib, .attrib_nr_max = 0x324, .attrib_nr = 0x218, .sm_id = gf100_grctx_generate_sm_id, .tpc_nr = gf100_grctx_generate_tpc_nr, }; drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf108.c +2 −0 Original line number Diff line number Diff line Loading @@ -794,4 +794,6 @@ gf108_grctx = { .attrib_nr = 0x218, .alpha_nr_max = 0x324, .alpha_nr = 0x218, .sm_id = gf100_grctx_generate_sm_id, .tpc_nr = gf100_grctx_generate_tpc_nr, }; drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf110.c +2 −0 Original line number Diff line number Diff line Loading @@ -347,4 +347,6 @@ gf110_grctx = { .attrib = gf100_grctx_generate_attrib, .attrib_nr_max = 0x324, .attrib_nr = 0x218, .sm_id = gf100_grctx_generate_sm_id, .tpc_nr = gf100_grctx_generate_tpc_nr, }; Loading
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c +37 −23 Original line number Diff line number Diff line Loading @@ -1079,28 +1079,6 @@ gf100_grctx_generate_unkn(struct gf100_gr *gr) { } void gf100_grctx_generate_tpcid(struct gf100_gr *gr) { struct nvkm_device *device = gr->base.engine.subdev.device; int gpc, tpc, id; for (tpc = 0, id = 0; tpc < 4; tpc++) { for (gpc = 0; gpc < gr->gpc_nr; gpc++) { if (tpc < gr->tpc_nr[gpc]) { nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x698), id); nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x4e8), id); nvkm_wr32(device, GPC_UNIT(gpc, 0x0c10 + tpc * 4), id); nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x088), id); id++; } nvkm_wr32(device, GPC_UNIT(gpc, 0x0c08), gr->tpc_nr[gpc]); nvkm_wr32(device, GPC_UNIT(gpc, 0x0c8c), gr->tpc_nr[gpc]); } } } void gf100_grctx_generate_r406028(struct gf100_gr *gr) { Loading Loading @@ -1230,6 +1208,40 @@ gf100_grctx_generate_r406800(struct gf100_gr *gr) } } void gf100_grctx_generate_tpc_nr(struct gf100_gr *gr, int gpc) { struct nvkm_device *device = gr->base.engine.subdev.device; nvkm_wr32(device, GPC_UNIT(gpc, 0x0c08), gr->tpc_nr[gpc]); nvkm_wr32(device, GPC_UNIT(gpc, 0x0c8c), gr->tpc_nr[gpc]); } void gf100_grctx_generate_sm_id(struct gf100_gr *gr, int gpc, int tpc, int sm) { struct nvkm_device *device = gr->base.engine.subdev.device; nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x698), sm); nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x4e8), sm); nvkm_wr32(device, GPC_UNIT(gpc, 0x0c10 + tpc * 4), sm); nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x088), sm); } void gf100_grctx_generate_floorsweep(struct gf100_gr *gr) { const struct gf100_grctx_func *func = gr->func->grctx; int tpc, gpc, sm; for (tpc = 0, sm = 0; tpc < gr->tpc_max; tpc++) { for (gpc = 0; gpc < gr->gpc_nr; gpc++) { if (tpc < gr->tpc_nr[gpc]) func->sm_id(gr, gpc, tpc, sm++); if (func->tpc_nr) func->tpc_nr(gr, gpc); } } } void gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info) { Loading Loading @@ -1258,7 +1270,7 @@ gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info) grctx->patch_ltc(info); grctx->unkn(gr); gf100_grctx_generate_tpcid(gr); gf100_grctx_generate_floorsweep(gr); gf100_grctx_generate_r406028(gr); gf100_grctx_generate_r4060a8(gr); gf100_grctx_generate_r418bb8(gr); Loading Loading @@ -1410,4 +1422,6 @@ gf100_grctx = { .attrib = gf100_grctx_generate_attrib, .attrib_nr_max = 0x324, .attrib_nr = 0x218, .sm_id = gf100_grctx_generate_sm_id, .tpc_nr = gf100_grctx_generate_tpc_nr, };
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h +7 −2 Original line number Diff line number Diff line Loading @@ -50,6 +50,9 @@ struct gf100_grctx_func { u32 alpha_nr; /* other patch buffer stuff */ void (*patch_ltc)(struct gf100_grctx *); /* floorsweeping */ void (*sm_id)(struct gf100_gr *, int gpc, int tpc, int sm); void (*tpc_nr)(struct gf100_gr *, int gpc); }; extern const struct gf100_grctx_func gf100_grctx; Loading @@ -59,11 +62,13 @@ void gf100_grctx_generate_bundle(struct gf100_grctx *); void gf100_grctx_generate_pagepool(struct gf100_grctx *); void gf100_grctx_generate_attrib(struct gf100_grctx *); void gf100_grctx_generate_unkn(struct gf100_gr *); void gf100_grctx_generate_tpcid(struct gf100_gr *); void gf100_grctx_generate_floorsweep(struct gf100_gr *); void gf100_grctx_generate_r406028(struct gf100_gr *); void gf100_grctx_generate_r4060a8(struct gf100_gr *); void gf100_grctx_generate_r418bb8(struct gf100_gr *); void gf100_grctx_generate_r406800(struct gf100_gr *); void gf100_grctx_generate_sm_id(struct gf100_gr *, int, int, int); void gf100_grctx_generate_tpc_nr(struct gf100_gr *, int); extern const struct gf100_grctx_func gf108_grctx; void gf108_grctx_generate_attrib(struct gf100_grctx *); Loading @@ -89,6 +94,7 @@ void gk104_grctx_generate_r418bb8(struct gf100_gr *); void gm107_grctx_generate_bundle(struct gf100_grctx *); void gm107_grctx_generate_pagepool(struct gf100_grctx *); void gm107_grctx_generate_attrib(struct gf100_grctx *); void gm107_grctx_generate_sm_id(struct gf100_gr *, int, int, int); extern const struct gf100_grctx_func gk110_grctx; extern const struct gf100_grctx_func gk110b_grctx; Loading @@ -100,7 +106,6 @@ void gm107_grctx_generate_pagepool(struct gf100_grctx *); void gm107_grctx_generate_attrib(struct gf100_grctx *); extern const struct gf100_grctx_func gm200_grctx; void gm200_grctx_generate_tpcid(struct gf100_gr *); void gm200_grctx_generate_405b60(struct gf100_gr *); extern const struct gf100_grctx_func gm20b_grctx; Loading
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf104.c +2 −0 Original line number Diff line number Diff line Loading @@ -96,4 +96,6 @@ gf104_grctx = { .attrib = gf100_grctx_generate_attrib, .attrib_nr_max = 0x324, .attrib_nr = 0x218, .sm_id = gf100_grctx_generate_sm_id, .tpc_nr = gf100_grctx_generate_tpc_nr, };
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf108.c +2 −0 Original line number Diff line number Diff line Loading @@ -794,4 +794,6 @@ gf108_grctx = { .attrib_nr = 0x218, .alpha_nr_max = 0x324, .alpha_nr = 0x218, .sm_id = gf100_grctx_generate_sm_id, .tpc_nr = gf100_grctx_generate_tpc_nr, };
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf110.c +2 −0 Original line number Diff line number Diff line Loading @@ -347,4 +347,6 @@ gf110_grctx = { .attrib = gf100_grctx_generate_attrib, .attrib_nr_max = 0x324, .attrib_nr = 0x218, .sm_id = gf100_grctx_generate_sm_id, .tpc_nr = gf100_grctx_generate_tpc_nr, };