mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 09:57:08 +03:00
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:
committed by
Terje Bergstrom
parent
851188a5ac
commit
47bd35e153
@@ -780,6 +780,7 @@ void gk20a_fifo_reset_engine(struct gk20a *g, u32 engine_id)
|
|||||||
/* resetting engine using mc_enable_r() is not
|
/* resetting engine using mc_enable_r() is not
|
||||||
enough, we do full init sequence */
|
enough, we do full init sequence */
|
||||||
gk20a_gr_reset(g);
|
gk20a_gr_reset(g);
|
||||||
|
gk20a_pmu_enable_elpg(g);
|
||||||
}
|
}
|
||||||
if (engine_id == top_device_info_type_enum_copy0_v())
|
if (engine_id == top_device_info_type_enum_copy0_v())
|
||||||
gk20a_reset(g, mc_enable_ce2_m());
|
gk20a_reset(g, mc_enable_ce2_m());
|
||||||
@@ -1086,7 +1087,7 @@ static bool gk20a_fifo_handle_mmu_fault(
|
|||||||
" deferring channel recovery to channel free");
|
" deferring channel recovery to channel free");
|
||||||
/* clear interrupt */
|
/* clear interrupt */
|
||||||
gk20a_writel(g, fifo_intr_mmu_fault_id_r(), fault_id);
|
gk20a_writel(g, fifo_intr_mmu_fault_id_r(), fault_id);
|
||||||
return verbose;
|
goto exit_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clear interrupt */
|
/* clear interrupt */
|
||||||
@@ -1101,6 +1102,7 @@ static bool gk20a_fifo_handle_mmu_fault(
|
|||||||
gr_gpfifo_ctl_access_enabled_f() |
|
gr_gpfifo_ctl_access_enabled_f() |
|
||||||
gr_gpfifo_ctl_semaphore_access_enabled_f());
|
gr_gpfifo_ctl_semaphore_access_enabled_f());
|
||||||
|
|
||||||
|
exit_enable:
|
||||||
/* It is safe to enable ELPG again. */
|
/* It is safe to enable ELPG again. */
|
||||||
if (support_gk20a_pmu(g->dev) && g->elpg_enabled)
|
if (support_gk20a_pmu(g->dev) && g->elpg_enabled)
|
||||||
gk20a_pmu_enable_elpg(g);
|
gk20a_pmu_enable_elpg(g);
|
||||||
|
|||||||
@@ -439,7 +439,10 @@ void gk20a_gr_clear_sm_hww(struct gk20a *g,
|
|||||||
int err = 0; \
|
int err = 0; \
|
||||||
if (support_gk20a_pmu(g->dev)) \
|
if (support_gk20a_pmu(g->dev)) \
|
||||||
err = gk20a_pmu_disable_elpg(g); \
|
err = gk20a_pmu_disable_elpg(g); \
|
||||||
if (err) return err; \
|
if (err) { \
|
||||||
|
gk20a_pmu_enable_elpg(g); \
|
||||||
|
return err; \
|
||||||
|
} \
|
||||||
err = func; \
|
err = func; \
|
||||||
if (support_gk20a_pmu(g->dev)) \
|
if (support_gk20a_pmu(g->dev)) \
|
||||||
gk20a_pmu_enable_elpg(g); \
|
gk20a_pmu_enable_elpg(g); \
|
||||||
|
|||||||
Reference in New Issue
Block a user