summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/power_features/cg/cg.c
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2019-07-09 05:42:32 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2019-11-04 09:10:39 -0500
commit0ffc5fa5e44c623b6fde3d6bed5369b9674ee089 (patch)
tree5fcf39cd05d2128dd05837c36bdd89a24f4ac631 /drivers/gpu/nvgpu/common/power_features/cg/cg.c
parentaa43252d1a60db5d317a71787e2aee3b0d7cb8a8 (diff)
gpu: nvgpu: add clock gating support for HSHUB
Add BLCG and SLCG clock gating support for HSHUB unit on gv11b Register list for BLCG and SLCG is auto generated with scripts. Add HAL operations to enable/disable HSHUB clock gating Re-generate gv11b reglist so that all the manually commented registers are automatically deleted. Some of the unicast registers are also deleted. We already have corresponding broadcast registers present. Cherry-pick/manually port from dev-main Bug 2526212 Change-Id: I2654f158daa802bcf992e103ed4a44675aa5fd4d Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2150199 (cherry picked from commit e34b6f76d38ad5641c1ed7c3a4b36752d9dd4750) Reviewed-on: https://git-master.nvidia.com/r/2224708 Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com> GVS: Gerrit_Virtual_Submit Tested-by: Peter Daifuku <pdaifuku@nvidia.com> Reviewed-by: Luis Dib <ldib@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common/power_features/cg/cg.c')
-rw-r--r--drivers/gpu/nvgpu/common/power_features/cg/cg.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/power_features/cg/cg.c b/drivers/gpu/nvgpu/common/power_features/cg/cg.c
index a538c44b..39796bc8 100644
--- a/drivers/gpu/nvgpu/common/power_features/cg/cg.c
+++ b/drivers/gpu/nvgpu/common/power_features/cg/cg.c
@@ -428,6 +428,9 @@ void nvgpu_cg_init_gr_load_gating_prod(struct gk20a *g)
428 if (g->ops.clock_gating.slcg_xbar_load_gating_prod != NULL) { 428 if (g->ops.clock_gating.slcg_xbar_load_gating_prod != NULL) {
429 g->ops.clock_gating.slcg_xbar_load_gating_prod(g, true); 429 g->ops.clock_gating.slcg_xbar_load_gating_prod(g, true);
430 } 430 }
431 if (g->ops.clock_gating.slcg_hshub_load_gating_prod != NULL) {
432 g->ops.clock_gating.slcg_hshub_load_gating_prod(g, true);
433 }
431 434
432check_can_blcg: 435check_can_blcg:
433 if (!nvgpu_is_enabled(g, NVGPU_GPU_CAN_BLCG)) { 436 if (!nvgpu_is_enabled(g, NVGPU_GPU_CAN_BLCG)) {
@@ -449,6 +452,9 @@ check_can_blcg:
449 if (g->ops.clock_gating.blcg_xbar_load_gating_prod != NULL) { 452 if (g->ops.clock_gating.blcg_xbar_load_gating_prod != NULL) {
450 g->ops.clock_gating.blcg_xbar_load_gating_prod(g, true); 453 g->ops.clock_gating.blcg_xbar_load_gating_prod(g, true);
451 } 454 }
455 if (g->ops.clock_gating.blcg_hshub_load_gating_prod != NULL) {
456 g->ops.clock_gating.blcg_hshub_load_gating_prod(g, true);
457 }
452pg_gr_load: 458pg_gr_load:
453 if (g->ops.clock_gating.pg_gr_load_gating_prod != NULL) { 459 if (g->ops.clock_gating.pg_gr_load_gating_prod != NULL) {
454 g->ops.clock_gating.pg_gr_load_gating_prod(g, true); 460 g->ops.clock_gating.pg_gr_load_gating_prod(g, true);
@@ -538,6 +544,9 @@ void nvgpu_cg_blcg_set_blcg_enabled(struct gk20a *g, bool enable)
538 if (g->ops.clock_gating.blcg_xbar_load_gating_prod != NULL) { 544 if (g->ops.clock_gating.blcg_xbar_load_gating_prod != NULL) {
539 g->ops.clock_gating.blcg_xbar_load_gating_prod(g, enable); 545 g->ops.clock_gating.blcg_xbar_load_gating_prod(g, enable);
540 } 546 }
547 if (g->ops.clock_gating.blcg_hshub_load_gating_prod != NULL) {
548 g->ops.clock_gating.blcg_hshub_load_gating_prod(g, enable);
549 }
541 550
542done: 551done:
543 nvgpu_mutex_release(&g->cg_pg_lock); 552 nvgpu_mutex_release(&g->cg_pg_lock);
@@ -610,6 +619,9 @@ void nvgpu_cg_slcg_set_slcg_enabled(struct gk20a *g, bool enable)
610 if (g->ops.clock_gating.slcg_xbar_load_gating_prod != NULL) { 619 if (g->ops.clock_gating.slcg_xbar_load_gating_prod != NULL) {
611 g->ops.clock_gating.slcg_xbar_load_gating_prod(g, enable); 620 g->ops.clock_gating.slcg_xbar_load_gating_prod(g, enable);
612 } 621 }
622 if (g->ops.clock_gating.slcg_hshub_load_gating_prod != NULL) {
623 g->ops.clock_gating.slcg_hshub_load_gating_prod(g, enable);
624 }
613 625
614done: 626done:
615 nvgpu_mutex_release(&g->cg_pg_lock); 627 nvgpu_mutex_release(&g->cg_pg_lock);