diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c index f1f2cc705..d15386d72 100644 --- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c @@ -1088,12 +1088,15 @@ static int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode) /*do elpg disable before clock gating */ if (support_gk20a_pmu(g->dev)) gk20a_pmu_disable_elpg(g); - g->ops.clock_gating.slcg_gr_load_gating_prod(g, - false); - g->ops.clock_gating.slcg_perf_load_gating_prod(g, - false); - g->ops.clock_gating.slcg_ltc_load_gating_prod(g, - false); + if (g->ops.clock_gating.slcg_gr_load_gating_prod) + g->ops.clock_gating.slcg_gr_load_gating_prod(g, + false); + if (g->ops.clock_gating.slcg_perf_load_gating_prod) + g->ops.clock_gating.slcg_perf_load_gating_prod(g, + false); + if (g->ops.clock_gating.slcg_ltc_load_gating_prod) + g->ops.clock_gating.slcg_ltc_load_gating_prod(g, + false); gr_gk20a_init_cg_mode(g, BLCG_MODE, BLCG_RUN); g->elcg_enabled = false; @@ -1120,12 +1123,15 @@ static int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode) gr_gk20a_init_cg_mode(g, ELCG_MODE, ELCG_AUTO); gr_gk20a_init_cg_mode(g, BLCG_MODE, BLCG_AUTO); - g->ops.clock_gating.slcg_ltc_load_gating_prod(g, - g->slcg_enabled); - g->ops.clock_gating.slcg_perf_load_gating_prod(g, - g->slcg_enabled); - g->ops.clock_gating.slcg_gr_load_gating_prod(g, - g->slcg_enabled); + if (g->ops.clock_gating.slcg_ltc_load_gating_prod) + g->ops.clock_gating.slcg_ltc_load_gating_prod(g, + g->slcg_enabled); + if (g->ops.clock_gating.slcg_perf_load_gating_prod) + g->ops.clock_gating.slcg_perf_load_gating_prod(g, + g->slcg_enabled); + if (g->ops.clock_gating.slcg_gr_load_gating_prod) + g->ops.clock_gating.slcg_gr_load_gating_prod(g, + g->slcg_enabled); if (support_gk20a_pmu(g->dev)) gk20a_pmu_enable_elpg(g); diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index c5bc5bda1..ee42f4d78 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c @@ -1323,12 +1323,15 @@ static bool gk20a_fifo_handle_mmu_fault( /* Disable power management */ if (support_gk20a_pmu(g->dev) && g->elpg_enabled) gk20a_pmu_disable_elpg(g); - g->ops.clock_gating.slcg_gr_load_gating_prod(g, - false); - g->ops.clock_gating.slcg_perf_load_gating_prod(g, - false); - g->ops.clock_gating.slcg_ltc_load_gating_prod(g, - false); + if (g->ops.clock_gating.slcg_gr_load_gating_prod) + g->ops.clock_gating.slcg_gr_load_gating_prod(g, + false); + if (g->ops.clock_gating.slcg_perf_load_gating_prod) + g->ops.clock_gating.slcg_perf_load_gating_prod(g, + false); + if (g->ops.clock_gating.slcg_ltc_load_gating_prod) + g->ops.clock_gating.slcg_ltc_load_gating_prod(g, + false); gr_gk20a_init_cg_mode(g, ELCG_MODE, ELCG_RUN); diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c index 973adc7d7..8ac983d90 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c @@ -104,7 +104,8 @@ static ssize_t blcg_enable_store(struct device *dev, g->ops.clock_gating.blcg_fb_load_gating_prod(g, g->blcg_enabled); if (g->ops.clock_gating.blcg_fifo_load_gating_prod) g->ops.clock_gating.blcg_fifo_load_gating_prod(g, g->blcg_enabled); - g->ops.clock_gating.blcg_gr_load_gating_prod(g, g->blcg_enabled); + if (g->ops.clock_gating.blcg_gr_load_gating_prod) + g->ops.clock_gating.blcg_gr_load_gating_prod(g, g->blcg_enabled); if (g->ops.clock_gating.blcg_ltc_load_gating_prod) g->ops.clock_gating.blcg_ltc_load_gating_prod(g, g->blcg_enabled); if (g->ops.clock_gating.blcg_pmu_load_gating_prod) @@ -167,10 +168,12 @@ static ssize_t slcg_enable_store(struct device *dev, g->ops.clock_gating.slcg_fb_load_gating_prod(g, g->slcg_enabled); if (g->ops.clock_gating.slcg_fifo_load_gating_prod) g->ops.clock_gating.slcg_fifo_load_gating_prod(g, g->slcg_enabled); - g->ops.clock_gating.slcg_gr_load_gating_prod(g, g->slcg_enabled); + if (g->ops.clock_gating.slcg_gr_load_gating_prod) + g->ops.clock_gating.slcg_gr_load_gating_prod(g, g->slcg_enabled); if (g->ops.clock_gating.slcg_ltc_load_gating_prod) g->ops.clock_gating.slcg_ltc_load_gating_prod(g, g->slcg_enabled); - g->ops.clock_gating.slcg_perf_load_gating_prod(g, g->slcg_enabled); + if (g->ops.clock_gating.slcg_perf_load_gating_prod) + g->ops.clock_gating.slcg_perf_load_gating_prod(g, g->slcg_enabled); if (g->ops.clock_gating.slcg_priring_load_gating_prod) g->ops.clock_gating.slcg_priring_load_gating_prod(g, g->slcg_enabled); if (g->ops.clock_gating.slcg_pmu_load_gating_prod)