gpu: nvgpu: Enable ELPG when disabled due to reset

Enable ELPG back whenever ELPG disable is done due to reset or recovery.
Otherwise elpg_refcnt mismatch doesn’t engage ELPG correctly

Bug 200156347

Change-Id: Ic01f85b9e1eff10cfb9cb180b50b045f67d4b33c
Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com>
Reviewed-on: http://git-master/r/925763
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
Mahantesh Kumbar
2015-12-22 10:35:01 +05:30
committed by Terje Bergstrom
parent 851188a5ac
commit 47bd35e153
2 changed files with 7 additions and 2 deletions

View File

@@ -780,6 +780,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);
gk20a_pmu_enable_elpg(g);
}
if (engine_id == top_device_info_type_enum_copy0_v())
gk20a_reset(g, mc_enable_ce2_m());
@@ -1086,7 +1087,7 @@ static bool gk20a_fifo_handle_mmu_fault(
" deferring channel recovery to channel free");
/* clear interrupt */
gk20a_writel(g, fifo_intr_mmu_fault_id_r(), fault_id);
return verbose;
goto exit_enable;
}
/* clear interrupt */
@@ -1101,6 +1102,7 @@ static bool gk20a_fifo_handle_mmu_fault(
gr_gpfifo_ctl_access_enabled_f() |
gr_gpfifo_ctl_semaphore_access_enabled_f());
exit_enable:
/* It is safe to enable ELPG again. */
if (support_gk20a_pmu(g->dev) && g->elpg_enabled)
gk20a_pmu_enable_elpg(g);

View File

@@ -439,7 +439,10 @@ void gk20a_gr_clear_sm_hww(struct gk20a *g,
int err = 0; \
if (support_gk20a_pmu(g->dev)) \
err = gk20a_pmu_disable_elpg(g); \
if (err) return err; \
if (err) { \
gk20a_pmu_enable_elpg(g); \
return err; \
} \
err = func; \
if (support_gk20a_pmu(g->dev)) \
gk20a_pmu_enable_elpg(g); \