summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gv11b/gv11b_gating_reglist.c
diff options
context:
space:
mode:
authorDeepak Goyal <dgoyal@nvidia.com>2017-06-27 03:26:15 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-06-30 03:05:25 -0400
commit514e7aa643317209be47a5faa6f6146152a4b6ed (patch)
treef732fb86082fb6528f0b41409051d02fbfc70b82 /drivers/gpu/nvgpu/gv11b/gv11b_gating_reglist.c
parent6f6329c377ae12f0bf3790c15c582e454d90d3f9 (diff)
gpu: nvgpu: gv11b: check flag before enabling CG.
We should check if BLCG/SLCG feature is enabled before trying to enable/disable them in hardware. Bug 200314250 Change-Id: I5431f97cc559444298b7bd4d53a9f4fc598fd268 Signed-off-by: Deepak Goyal <dgoyal@nvidia.com> Reviewed-on: https://git-master/r/1509184 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Seema Khowala <seemaj@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/gv11b_gating_reglist.c')
-rw-r--r--drivers/gpu/nvgpu/gv11b/gv11b_gating_reglist.c96
1 files changed, 96 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/gv11b_gating_reglist.c b/drivers/gpu/nvgpu/gv11b/gv11b_gating_reglist.c
index 13d529fe..390d89c2 100644
--- a/drivers/gpu/nvgpu/gv11b/gv11b_gating_reglist.c
+++ b/drivers/gpu/nvgpu/gv11b/gv11b_gating_reglist.c
@@ -283,6 +283,10 @@ void gv11b_slcg_bus_load_gating_prod(struct gk20a *g,
283{ 283{
284 u32 i; 284 u32 i;
285 u32 size = sizeof(gv11b_slcg_bus) / sizeof(struct gating_desc); 285 u32 size = sizeof(gv11b_slcg_bus) / sizeof(struct gating_desc);
286
287 if (!g->slcg_enabled)
288 return;
289
286 for (i = 0; i < size; i++) { 290 for (i = 0; i < size; i++) {
287 if (prod) 291 if (prod)
288 gk20a_writel(g, gv11b_slcg_bus[i].addr, 292 gk20a_writel(g, gv11b_slcg_bus[i].addr,
@@ -298,6 +302,10 @@ void gv11b_slcg_ce2_load_gating_prod(struct gk20a *g,
298{ 302{
299 u32 i; 303 u32 i;
300 u32 size = sizeof(gv11b_slcg_ce2) / sizeof(struct gating_desc); 304 u32 size = sizeof(gv11b_slcg_ce2) / sizeof(struct gating_desc);
305
306 if (!g->slcg_enabled)
307 return;
308
301 for (i = 0; i < size; i++) { 309 for (i = 0; i < size; i++) {
302 if (prod) 310 if (prod)
303 gk20a_writel(g, gv11b_slcg_ce2[i].addr, 311 gk20a_writel(g, gv11b_slcg_ce2[i].addr,
@@ -313,6 +321,10 @@ void gv11b_slcg_chiplet_load_gating_prod(struct gk20a *g,
313{ 321{
314 u32 i; 322 u32 i;
315 u32 size = sizeof(gv11b_slcg_chiplet) / sizeof(struct gating_desc); 323 u32 size = sizeof(gv11b_slcg_chiplet) / sizeof(struct gating_desc);
324
325 if (!g->slcg_enabled)
326 return;
327
316 for (i = 0; i < size; i++) { 328 for (i = 0; i < size; i++) {
317 if (prod) 329 if (prod)
318 gk20a_writel(g, gv11b_slcg_chiplet[i].addr, 330 gk20a_writel(g, gv11b_slcg_chiplet[i].addr,
@@ -333,6 +345,10 @@ void gv11b_slcg_fb_load_gating_prod(struct gk20a *g,
333{ 345{
334 u32 i; 346 u32 i;
335 u32 size = sizeof(gv11b_slcg_fb) / sizeof(struct gating_desc); 347 u32 size = sizeof(gv11b_slcg_fb) / sizeof(struct gating_desc);
348
349 if (!g->slcg_enabled)
350 return;
351
336 for (i = 0; i < size; i++) { 352 for (i = 0; i < size; i++) {
337 if (prod) 353 if (prod)
338 gk20a_writel(g, gv11b_slcg_fb[i].addr, 354 gk20a_writel(g, gv11b_slcg_fb[i].addr,
@@ -348,6 +364,10 @@ void gv11b_slcg_fifo_load_gating_prod(struct gk20a *g,
348{ 364{
349 u32 i; 365 u32 i;
350 u32 size = sizeof(gv11b_slcg_fifo) / sizeof(struct gating_desc); 366 u32 size = sizeof(gv11b_slcg_fifo) / sizeof(struct gating_desc);
367
368 if (!g->slcg_enabled)
369 return;
370
351 for (i = 0; i < size; i++) { 371 for (i = 0; i < size; i++) {
352 if (prod) 372 if (prod)
353 gk20a_writel(g, gv11b_slcg_fifo[i].addr, 373 gk20a_writel(g, gv11b_slcg_fifo[i].addr,
@@ -363,6 +383,10 @@ void gr_gv11b_slcg_gr_load_gating_prod(struct gk20a *g,
363{ 383{
364 u32 i; 384 u32 i;
365 u32 size = sizeof(gv11b_slcg_gr) / sizeof(struct gating_desc); 385 u32 size = sizeof(gv11b_slcg_gr) / sizeof(struct gating_desc);
386
387 if (!g->slcg_enabled)
388 return;
389
366 for (i = 0; i < size; i++) { 390 for (i = 0; i < size; i++) {
367 if (prod) 391 if (prod)
368 gk20a_writel(g, gv11b_slcg_gr[i].addr, 392 gk20a_writel(g, gv11b_slcg_gr[i].addr,
@@ -378,6 +402,10 @@ void ltc_gv11b_slcg_ltc_load_gating_prod(struct gk20a *g,
378{ 402{
379 u32 i; 403 u32 i;
380 u32 size = sizeof(gv11b_slcg_ltc) / sizeof(struct gating_desc); 404 u32 size = sizeof(gv11b_slcg_ltc) / sizeof(struct gating_desc);
405
406 if (!g->slcg_enabled)
407 return;
408
381 for (i = 0; i < size; i++) { 409 for (i = 0; i < size; i++) {
382 if (prod) 410 if (prod)
383 gk20a_writel(g, gv11b_slcg_ltc[i].addr, 411 gk20a_writel(g, gv11b_slcg_ltc[i].addr,
@@ -393,6 +421,10 @@ void gv11b_slcg_perf_load_gating_prod(struct gk20a *g,
393{ 421{
394 u32 i; 422 u32 i;
395 u32 size = sizeof(gv11b_slcg_perf) / sizeof(struct gating_desc); 423 u32 size = sizeof(gv11b_slcg_perf) / sizeof(struct gating_desc);
424
425 if (!g->slcg_enabled)
426 return;
427
396 for (i = 0; i < size; i++) { 428 for (i = 0; i < size; i++) {
397 if (prod) 429 if (prod)
398 gk20a_writel(g, gv11b_slcg_perf[i].addr, 430 gk20a_writel(g, gv11b_slcg_perf[i].addr,
@@ -408,6 +440,10 @@ void gv11b_slcg_priring_load_gating_prod(struct gk20a *g,
408{ 440{
409 u32 i; 441 u32 i;
410 u32 size = sizeof(gv11b_slcg_priring) / sizeof(struct gating_desc); 442 u32 size = sizeof(gv11b_slcg_priring) / sizeof(struct gating_desc);
443
444 if (!g->slcg_enabled)
445 return;
446
411 for (i = 0; i < size; i++) { 447 for (i = 0; i < size; i++) {
412 if (prod) 448 if (prod)
413 gk20a_writel(g, gv11b_slcg_priring[i].addr, 449 gk20a_writel(g, gv11b_slcg_priring[i].addr,
@@ -423,6 +459,10 @@ void gv11b_slcg_pwr_csb_load_gating_prod(struct gk20a *g,
423{ 459{
424 u32 i; 460 u32 i;
425 u32 size = sizeof(gv11b_slcg_pwr_csb) / sizeof(struct gating_desc); 461 u32 size = sizeof(gv11b_slcg_pwr_csb) / sizeof(struct gating_desc);
462
463 if (!g->slcg_enabled)
464 return;
465
426 for (i = 0; i < size; i++) { 466 for (i = 0; i < size; i++) {
427 if (prod) 467 if (prod)
428 gk20a_writel(g, gv11b_slcg_pwr_csb[i].addr, 468 gk20a_writel(g, gv11b_slcg_pwr_csb[i].addr,
@@ -438,6 +478,10 @@ void gv11b_slcg_pmu_load_gating_prod(struct gk20a *g,
438{ 478{
439 u32 i; 479 u32 i;
440 u32 size = sizeof(gv11b_slcg_pmu) / sizeof(struct gating_desc); 480 u32 size = sizeof(gv11b_slcg_pmu) / sizeof(struct gating_desc);
481
482 if (!g->slcg_enabled)
483 return;
484
441 for (i = 0; i < size; i++) { 485 for (i = 0; i < size; i++) {
442 if (prod) 486 if (prod)
443 gk20a_writel(g, gv11b_slcg_pmu[i].addr, 487 gk20a_writel(g, gv11b_slcg_pmu[i].addr,
@@ -453,6 +497,10 @@ void gv11b_slcg_therm_load_gating_prod(struct gk20a *g,
453{ 497{
454 u32 i; 498 u32 i;
455 u32 size = sizeof(gv11b_slcg_therm) / sizeof(struct gating_desc); 499 u32 size = sizeof(gv11b_slcg_therm) / sizeof(struct gating_desc);
500
501 if (!g->slcg_enabled)
502 return;
503
456 for (i = 0; i < size; i++) { 504 for (i = 0; i < size; i++) {
457 if (prod) 505 if (prod)
458 gk20a_writel(g, gv11b_slcg_therm[i].addr, 506 gk20a_writel(g, gv11b_slcg_therm[i].addr,
@@ -468,6 +516,10 @@ void gv11b_slcg_xbar_load_gating_prod(struct gk20a *g,
468{ 516{
469 u32 i; 517 u32 i;
470 u32 size = sizeof(gv11b_slcg_xbar) / sizeof(struct gating_desc); 518 u32 size = sizeof(gv11b_slcg_xbar) / sizeof(struct gating_desc);
519
520 if (!g->slcg_enabled)
521 return;
522
471 for (i = 0; i < size; i++) { 523 for (i = 0; i < size; i++) {
472 if (prod) 524 if (prod)
473 gk20a_writel(g, gv11b_slcg_xbar[i].addr, 525 gk20a_writel(g, gv11b_slcg_xbar[i].addr,
@@ -483,6 +535,10 @@ void gv11b_blcg_bus_load_gating_prod(struct gk20a *g,
483{ 535{
484 u32 i; 536 u32 i;
485 u32 size = sizeof(gv11b_blcg_bus) / sizeof(struct gating_desc); 537 u32 size = sizeof(gv11b_blcg_bus) / sizeof(struct gating_desc);
538
539 if (!g->blcg_enabled)
540 return;
541
486 for (i = 0; i < size; i++) { 542 for (i = 0; i < size; i++) {
487 if (prod) 543 if (prod)
488 gk20a_writel(g, gv11b_blcg_bus[i].addr, 544 gk20a_writel(g, gv11b_blcg_bus[i].addr,
@@ -498,6 +554,10 @@ void gv11b_blcg_ce_load_gating_prod(struct gk20a *g,
498{ 554{
499 u32 i; 555 u32 i;
500 u32 size = sizeof(gv11b_blcg_ce) / sizeof(struct gating_desc); 556 u32 size = sizeof(gv11b_blcg_ce) / sizeof(struct gating_desc);
557
558 if (!g->blcg_enabled)
559 return;
560
501 for (i = 0; i < size; i++) { 561 for (i = 0; i < size; i++) {
502 if (prod) 562 if (prod)
503 gk20a_writel(g, gv11b_blcg_ce[i].addr, 563 gk20a_writel(g, gv11b_blcg_ce[i].addr,
@@ -513,6 +573,10 @@ void gv11b_blcg_ctxsw_firmware_load_gating_prod(struct gk20a *g,
513{ 573{
514 u32 i; 574 u32 i;
515 u32 size = sizeof(gv11b_blcg_ctxsw_prog) / sizeof(struct gating_desc); 575 u32 size = sizeof(gv11b_blcg_ctxsw_prog) / sizeof(struct gating_desc);
576
577 if (!g->blcg_enabled)
578 return;
579
516 for (i = 0; i < size; i++) { 580 for (i = 0; i < size; i++) {
517 if (prod) 581 if (prod)
518 gk20a_writel(g, gv11b_blcg_ctxsw_prog[i].addr, 582 gk20a_writel(g, gv11b_blcg_ctxsw_prog[i].addr,
@@ -528,6 +592,10 @@ void gv11b_blcg_fb_load_gating_prod(struct gk20a *g,
528{ 592{
529 u32 i; 593 u32 i;
530 u32 size = sizeof(gv11b_blcg_fb) / sizeof(struct gating_desc); 594 u32 size = sizeof(gv11b_blcg_fb) / sizeof(struct gating_desc);
595
596 if (!g->blcg_enabled)
597 return;
598
531 for (i = 0; i < size; i++) { 599 for (i = 0; i < size; i++) {
532 if (prod) 600 if (prod)
533 gk20a_writel(g, gv11b_blcg_fb[i].addr, 601 gk20a_writel(g, gv11b_blcg_fb[i].addr,
@@ -543,6 +611,10 @@ void gv11b_blcg_fifo_load_gating_prod(struct gk20a *g,
543{ 611{
544 u32 i; 612 u32 i;
545 u32 size = sizeof(gv11b_blcg_fifo) / sizeof(struct gating_desc); 613 u32 size = sizeof(gv11b_blcg_fifo) / sizeof(struct gating_desc);
614
615 if (!g->blcg_enabled)
616 return;
617
546 for (i = 0; i < size; i++) { 618 for (i = 0; i < size; i++) {
547 if (prod) 619 if (prod)
548 gk20a_writel(g, gv11b_blcg_fifo[i].addr, 620 gk20a_writel(g, gv11b_blcg_fifo[i].addr,
@@ -558,6 +630,10 @@ void gv11b_blcg_gr_load_gating_prod(struct gk20a *g,
558{ 630{
559 u32 i; 631 u32 i;
560 u32 size = sizeof(gv11b_blcg_gr) / sizeof(struct gating_desc); 632 u32 size = sizeof(gv11b_blcg_gr) / sizeof(struct gating_desc);
633
634 if (!g->blcg_enabled)
635 return;
636
561 for (i = 0; i < size; i++) { 637 for (i = 0; i < size; i++) {
562 if (prod) 638 if (prod)
563 gk20a_writel(g, gv11b_blcg_gr[i].addr, 639 gk20a_writel(g, gv11b_blcg_gr[i].addr,
@@ -573,6 +649,10 @@ void gv11b_blcg_ltc_load_gating_prod(struct gk20a *g,
573{ 649{
574 u32 i; 650 u32 i;
575 u32 size = sizeof(gv11b_blcg_ltc) / sizeof(struct gating_desc); 651 u32 size = sizeof(gv11b_blcg_ltc) / sizeof(struct gating_desc);
652
653 if (!g->blcg_enabled)
654 return;
655
576 for (i = 0; i < size; i++) { 656 for (i = 0; i < size; i++) {
577 if (prod) 657 if (prod)
578 gk20a_writel(g, gv11b_blcg_ltc[i].addr, 658 gk20a_writel(g, gv11b_blcg_ltc[i].addr,
@@ -588,6 +668,10 @@ void gv11b_blcg_pwr_csb_load_gating_prod(struct gk20a *g,
588{ 668{
589 u32 i; 669 u32 i;
590 u32 size = sizeof(gv11b_blcg_pwr_csb) / sizeof(struct gating_desc); 670 u32 size = sizeof(gv11b_blcg_pwr_csb) / sizeof(struct gating_desc);
671
672 if (!g->blcg_enabled)
673 return;
674
591 for (i = 0; i < size; i++) { 675 for (i = 0; i < size; i++) {
592 if (prod) 676 if (prod)
593 gk20a_writel(g, gv11b_blcg_pwr_csb[i].addr, 677 gk20a_writel(g, gv11b_blcg_pwr_csb[i].addr,
@@ -603,6 +687,10 @@ void gv11b_blcg_pmu_load_gating_prod(struct gk20a *g,
603{ 687{
604 u32 i; 688 u32 i;
605 u32 size = sizeof(gv11b_blcg_pmu) / sizeof(struct gating_desc); 689 u32 size = sizeof(gv11b_blcg_pmu) / sizeof(struct gating_desc);
690
691 if (!g->blcg_enabled)
692 return;
693
606 for (i = 0; i < size; i++) { 694 for (i = 0; i < size; i++) {
607 if (prod) 695 if (prod)
608 gk20a_writel(g, gv11b_blcg_pmu[i].addr, 696 gk20a_writel(g, gv11b_blcg_pmu[i].addr,
@@ -618,6 +706,10 @@ void gv11b_blcg_xbar_load_gating_prod(struct gk20a *g,
618{ 706{
619 u32 i; 707 u32 i;
620 u32 size = sizeof(gv11b_blcg_xbar) / sizeof(struct gating_desc); 708 u32 size = sizeof(gv11b_blcg_xbar) / sizeof(struct gating_desc);
709
710 if (!g->blcg_enabled)
711 return;
712
621 for (i = 0; i < size; i++) { 713 for (i = 0; i < size; i++) {
622 if (prod) 714 if (prod)
623 gk20a_writel(g, gv11b_blcg_xbar[i].addr, 715 gk20a_writel(g, gv11b_blcg_xbar[i].addr,
@@ -633,6 +725,10 @@ void gr_gv11b_pg_gr_load_gating_prod(struct gk20a *g,
633{ 725{
634 u32 i; 726 u32 i;
635 u32 size = sizeof(gv11b_pg_gr) / sizeof(struct gating_desc); 727 u32 size = sizeof(gv11b_pg_gr) / sizeof(struct gating_desc);
728
729 if (!g->blcg_enabled)
730 return;
731
636 for (i = 0; i < size; i++) { 732 for (i = 0; i < size; i++) {
637 if (prod) 733 if (prod)
638 gk20a_writel(g, gv11b_pg_gr[i].addr, 734 gk20a_writel(g, gv11b_pg_gr[i].addr,