From 1ab4754c052b639427f38202860d064c2fa03b57 Mon Sep 17 00:00:00 2001 From: Mahantesh Kumbar Date: Fri, 20 Oct 2017 16:30:42 +0530 Subject: gpu: nvgpu: Kill pg init thread if pmu boot fails - Created nvgpu_kill_task_pg_init() method to set pmu state to PMU_STATE_EXIT & make thread stop, and poll to confirm thread stopped. - Check for PMU/SEC2 ACR secure boot completion status & initiate pg init thread kill if ACR boot exits with error, which fails to validate & boot LS-PMU. - Set pmu state to PMU_STATE_OFF after thread kill during ACR boot failure. Issue: pg init task blocks if PMU boot fails & cause kernel to show message "task nvgpu_pg_init_g:2120 blocked for more than 120 seconds" Bug 200346134 Change-Id: I5270426080dcd628ccca4df798005294c19767a0 Signed-off-by: Mahantesh Kumbar Reviewed-on: https://git-master.nvidia.com/r/1582593 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gm20b/acr_gm20b.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'drivers/gpu/nvgpu/gm20b/acr_gm20b.c') diff --git a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c index a39cdf2c..e5fd8692 100644 --- a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c @@ -1407,12 +1407,12 @@ int pmu_wait_for_halt(struct gk20a *g, unsigned int timeout_ms) { struct nvgpu_pmu *pmu = &g->pmu; u32 data = 0; - int ret = -EBUSY; + int ret = 0; ret = nvgpu_flcn_wait_for_halt(pmu->flcn, timeout_ms); if (ret) { nvgpu_err(g, "ACR boot timed out"); - return ret; + goto exit; } g->acr.capabilities = gk20a_readl(g, pwr_falcon_mailbox1_r()); @@ -1421,6 +1421,13 @@ int pmu_wait_for_halt(struct gk20a *g, unsigned int timeout_ms) if (data) { nvgpu_err(g, "ACR boot failed, err %x", data); ret = -EAGAIN; + goto exit; + } + +exit: + if (ret) { + nvgpu_kill_task_pg_init(g); + nvgpu_pmu_state_change(g, PMU_STATE_OFF, false); } return ret; -- cgit v1.2.2