From 5a4926f2918b84fccefb8ddf6dbaa7b6449735bf Mon Sep 17 00:00:00 2001 From: Deepak Goyal Date: Wed, 19 Apr 2017 23:37:05 +0530 Subject: gpu: nvgpu: pmu: add check before enabling elpg. Do not enable/disable elpg if platform->can_elpg is false. Bug 1870556 Change-Id: I82d1fc4efdccc518827a6150fd3c17f6112e2f4a Signed-off-by: Deepak Goyal Reviewed-on: http://git-master/r/1465816 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/fifo_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index cb54a1ca..edd98896 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c @@ -1206,6 +1206,7 @@ static inline void get_exception_mmu_fault_info( void gk20a_fifo_reset_engine(struct gk20a *g, u32 engine_id) { struct fifo_gk20a *f = NULL; + struct gk20a_platform *platform; u32 engine_enum = ENGINE_INVAL_GK20A; u32 inst_id = 0; struct fifo_engine_info_gk20a *engine_info; @@ -1216,6 +1217,7 @@ void gk20a_fifo_reset_engine(struct gk20a *g, u32 engine_id) return; f = &g->fifo; + platform = dev_get_drvdata(g->dev); engine_info = gk20a_fifo_get_engine_info(g, engine_id); @@ -1228,7 +1230,7 @@ void gk20a_fifo_reset_engine(struct gk20a *g, u32 engine_id) nvgpu_err(g, "unsupported engine_id %d", engine_id); if (engine_enum == ENGINE_GR_GK20A) { - if (g->support_pmu && g->elpg_enabled) + if (g->support_pmu && platform->can_elpg) gk20a_pmu_disable_elpg(g); /* resetting engine will alter read/write index. * need to flush circular buffer before re-enabling FECS. @@ -1241,7 +1243,7 @@ void gk20a_fifo_reset_engine(struct gk20a *g, u32 engine_id) /* resetting engine using mc_enable_r() is not enough, we do full init sequence */ gk20a_gr_reset(g); - if (g->support_pmu && g->elpg_enabled) + if (g->support_pmu && platform->can_elpg) gk20a_pmu_enable_elpg(g); } if ((engine_enum == ENGINE_GRCE_GK20A) || @@ -1466,6 +1468,7 @@ static bool gk20a_fifo_handle_mmu_fault( bool id_is_tsg) { bool fake_fault; + struct gk20a_platform *platform = dev_get_drvdata(g->dev); unsigned long fault_id; unsigned long engine_mmu_fault_id; bool verbose = true; @@ -1476,7 +1479,7 @@ static bool gk20a_fifo_handle_mmu_fault( g->fifo.deferred_reset_pending = false; /* Disable power management */ - if (g->support_pmu && g->elpg_enabled) + if (g->support_pmu && platform->can_elpg) gk20a_pmu_disable_elpg(g); if (g->ops.clock_gating.slcg_gr_load_gating_prod) g->ops.clock_gating.slcg_gr_load_gating_prod(g, @@ -1675,8 +1678,9 @@ static bool gk20a_fifo_handle_mmu_fault( gr_gpfifo_ctl_semaphore_access_enabled_f()); /* It is safe to enable ELPG again. */ - if (g->support_pmu && g->elpg_enabled) + if (g->support_pmu && platform->can_elpg) gk20a_pmu_enable_elpg(g); + return verbose; } -- cgit v1.2.2