| .. | .. |
|---|
| 1324 | 1324 | void |
|---|
| 1325 | 1325 | gf100_grctx_generate_floorsweep(struct gf100_gr *gr) |
|---|
| 1326 | 1326 | { |
|---|
| 1327 | | - struct nvkm_device *device = gr->base.engine.subdev.device; |
|---|
| 1328 | 1327 | const struct gf100_grctx_func *func = gr->func->grctx; |
|---|
| 1329 | | - int gpc, sm, i, j; |
|---|
| 1330 | | - u32 data; |
|---|
| 1328 | + int sm; |
|---|
| 1331 | 1329 | |
|---|
| 1332 | 1330 | for (sm = 0; sm < gr->sm_nr; sm++) { |
|---|
| 1333 | 1331 | func->sm_id(gr, gr->sm[sm].gpc, gr->sm[sm].tpc, sm); |
|---|
| .. | .. |
|---|
| 1335 | 1333 | func->tpc_nr(gr, gr->sm[sm].gpc); |
|---|
| 1336 | 1334 | } |
|---|
| 1337 | 1335 | |
|---|
| 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); |
|---|
| 1344 | 1339 | |
|---|
| 1345 | 1340 | if (func->r4060a8) |
|---|
| 1346 | 1341 | func->r4060a8(gr); |
|---|
| .. | .. |
|---|
| 1374 | 1369 | |
|---|
| 1375 | 1370 | nvkm_mc_unk260(device, 0); |
|---|
| 1376 | 1371 | |
|---|
| 1377 | | - if (!gr->fuc_sw_ctx) { |
|---|
| 1372 | + if (!gr->sw_ctx) { |
|---|
| 1378 | 1373 | gf100_gr_mmio(gr, grctx->hub); |
|---|
| 1379 | 1374 | gf100_gr_mmio(gr, grctx->gpc_0); |
|---|
| 1380 | 1375 | gf100_gr_mmio(gr, grctx->zcull); |
|---|
| .. | .. |
|---|
| 1382 | 1377 | gf100_gr_mmio(gr, grctx->tpc); |
|---|
| 1383 | 1378 | gf100_gr_mmio(gr, grctx->ppc); |
|---|
| 1384 | 1379 | } else { |
|---|
| 1385 | | - gf100_gr_mmio(gr, gr->fuc_sw_ctx); |
|---|
| 1380 | + gf100_gr_mmio(gr, gr->sw_ctx); |
|---|
| 1386 | 1381 | } |
|---|
| 1387 | 1382 | |
|---|
| 1388 | 1383 | gf100_gr_wait_idle(gr); |
|---|
| .. | .. |
|---|
| 1401 | 1396 | gf100_gr_wait_idle(gr); |
|---|
| 1402 | 1397 | |
|---|
| 1403 | 1398 | 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); |
|---|
| 1406 | 1401 | else |
|---|
| 1407 | 1402 | gf100_gr_icmd(gr, grctx->icmd); |
|---|
| 1408 | 1403 | if (grctx->sw_veid_bundle_init) |
|---|
| .. | .. |
|---|
| 1411 | 1406 | |
|---|
| 1412 | 1407 | nvkm_wr32(device, 0x404154, idle_timeout); |
|---|
| 1413 | 1408 | |
|---|
| 1414 | | - if (gr->fuc_method) |
|---|
| 1415 | | - gf100_gr_mthd(gr, gr->fuc_method); |
|---|
| 1409 | + if (gr->method) |
|---|
| 1410 | + gf100_gr_mthd(gr, gr->method); |
|---|
| 1416 | 1411 | else |
|---|
| 1417 | 1412 | gf100_gr_mthd(gr, grctx->mthd); |
|---|
| 1418 | 1413 | nvkm_mc_unk260(device, 1); |
|---|
| .. | .. |
|---|
| 1431 | 1426 | grctx->r419a3c(gr); |
|---|
| 1432 | 1427 | if (grctx->r408840) |
|---|
| 1433 | 1428 | grctx->r408840(gr); |
|---|
| 1429 | + if (grctx->r419c0c) |
|---|
| 1430 | + grctx->r419c0c(gr); |
|---|
| 1434 | 1431 | } |
|---|
| 1435 | 1432 | |
|---|
| 1436 | 1433 | #define CB_RESERVED 0x80000 |
|---|
| .. | .. |
|---|
| 1523 | 1520 | /* Make channel current. */ |
|---|
| 1524 | 1521 | addr = nvkm_memory_addr(inst) >> 12; |
|---|
| 1525 | 1522 | 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; |
|---|
| 1533 | 1526 | |
|---|
| 1534 | 1527 | nvkm_kmap(data); |
|---|
| 1535 | 1528 | nvkm_wo32(data, 0x1c, 1); |
|---|