forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-04 1543e317f1da31b75942316931e8f491a8920811
kernel/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c
....@@ -1324,10 +1324,8 @@
13241324 void
13251325 gf100_grctx_generate_floorsweep(struct gf100_gr *gr)
13261326 {
1327
- struct nvkm_device *device = gr->base.engine.subdev.device;
13281327 const struct gf100_grctx_func *func = gr->func->grctx;
1329
- int gpc, sm, i, j;
1330
- u32 data;
1328
+ int sm;
13311329
13321330 for (sm = 0; sm < gr->sm_nr; sm++) {
13331331 func->sm_id(gr, gr->sm[sm].gpc, gr->sm[sm].tpc, sm);
....@@ -1335,12 +1333,9 @@
13351333 func->tpc_nr(gr, gr->sm[sm].gpc);
13361334 }
13371335
1338
- for (gpc = 0, i = 0; i < 4; i++) {
1339
- for (data = 0, j = 0; j < 8 && gpc < gr->gpc_nr; j++, gpc++)
1340
- data |= gr->tpc_nr[gpc] << (j * 4);
1341
- nvkm_wr32(device, 0x406028 + (i * 4), data);
1342
- nvkm_wr32(device, 0x405870 + (i * 4), data);
1343
- }
1336
+ gf100_gr_init_num_tpc_per_gpc(gr, false, true);
1337
+ if (!func->skip_pd_num_tpc_per_gpc)
1338
+ gf100_gr_init_num_tpc_per_gpc(gr, true, false);
13441339
13451340 if (func->r4060a8)
13461341 func->r4060a8(gr);
....@@ -1374,7 +1369,7 @@
13741369
13751370 nvkm_mc_unk260(device, 0);
13761371
1377
- if (!gr->fuc_sw_ctx) {
1372
+ if (!gr->sw_ctx) {
13781373 gf100_gr_mmio(gr, grctx->hub);
13791374 gf100_gr_mmio(gr, grctx->gpc_0);
13801375 gf100_gr_mmio(gr, grctx->zcull);
....@@ -1382,7 +1377,7 @@
13821377 gf100_gr_mmio(gr, grctx->tpc);
13831378 gf100_gr_mmio(gr, grctx->ppc);
13841379 } else {
1385
- gf100_gr_mmio(gr, gr->fuc_sw_ctx);
1380
+ gf100_gr_mmio(gr, gr->sw_ctx);
13861381 }
13871382
13881383 gf100_gr_wait_idle(gr);
....@@ -1401,8 +1396,8 @@
14011396 gf100_gr_wait_idle(gr);
14021397
14031398 if (grctx->r400088) grctx->r400088(gr, false);
1404
- if (gr->fuc_bundle)
1405
- gf100_gr_icmd(gr, gr->fuc_bundle);
1399
+ if (gr->bundle)
1400
+ gf100_gr_icmd(gr, gr->bundle);
14061401 else
14071402 gf100_gr_icmd(gr, grctx->icmd);
14081403 if (grctx->sw_veid_bundle_init)
....@@ -1411,8 +1406,8 @@
14111406
14121407 nvkm_wr32(device, 0x404154, idle_timeout);
14131408
1414
- if (gr->fuc_method)
1415
- gf100_gr_mthd(gr, gr->fuc_method);
1409
+ if (gr->method)
1410
+ gf100_gr_mthd(gr, gr->method);
14161411 else
14171412 gf100_gr_mthd(gr, grctx->mthd);
14181413 nvkm_mc_unk260(device, 1);
....@@ -1431,6 +1426,8 @@
14311426 grctx->r419a3c(gr);
14321427 if (grctx->r408840)
14331428 grctx->r408840(gr);
1429
+ if (grctx->r419c0c)
1430
+ grctx->r419c0c(gr);
14341431 }
14351432
14361433 #define CB_RESERVED 0x80000
....@@ -1523,13 +1520,9 @@
15231520 /* Make channel current. */
15241521 addr = nvkm_memory_addr(inst) >> 12;
15251522 if (gr->firmware) {
1526
- nvkm_wr32(device, 0x409840, 0x00000030);
1527
- nvkm_wr32(device, 0x409500, 0x80000000 | addr);
1528
- nvkm_wr32(device, 0x409504, 0x00000003);
1529
- nvkm_msec(device, 2000,
1530
- if (nvkm_rd32(device, 0x409800) & 0x00000010)
1531
- break;
1532
- );
1523
+ ret = gf100_gr_fecs_bind_pointer(gr, 0x80000000 | addr);
1524
+ if (ret)
1525
+ goto done;
15331526
15341527 nvkm_kmap(data);
15351528 nvkm_wo32(data, 0x1c, 1);