diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gp106/sec2_gp106.c')
-rw-r--r-- | drivers/gpu/nvgpu/gp106/sec2_gp106.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gp106/sec2_gp106.c b/drivers/gpu/nvgpu/gp106/sec2_gp106.c index 26ded39e..332ac794 100644 --- a/drivers/gpu/nvgpu/gp106/sec2_gp106.c +++ b/drivers/gpu/nvgpu/gp106/sec2_gp106.c | |||
@@ -52,20 +52,26 @@ int sec2_wait_for_halt(struct gk20a *g, unsigned int timeout) | |||
52 | completion = nvgpu_flcn_wait_for_halt(&g->sec2_flcn, timeout); | 52 | completion = nvgpu_flcn_wait_for_halt(&g->sec2_flcn, timeout); |
53 | if (completion) { | 53 | if (completion) { |
54 | nvgpu_err(g, "ACR boot timed out"); | 54 | nvgpu_err(g, "ACR boot timed out"); |
55 | return completion; | 55 | goto exit; |
56 | } | 56 | } |
57 | 57 | ||
58 | g->acr.capabilities = gk20a_readl(g, psec_falcon_mailbox1_r()); | 58 | g->acr.capabilities = gk20a_readl(g, psec_falcon_mailbox1_r()); |
59 | gm20b_dbg_pmu("ACR capabilities %x\n", g->acr.capabilities); | 59 | gm20b_dbg_pmu("ACR capabilities %x\n", g->acr.capabilities); |
60 | data = gk20a_readl(g, psec_falcon_mailbox0_r()); | 60 | data = gk20a_readl(g, psec_falcon_mailbox0_r()); |
61 | if (data) { | 61 | if (data) { |
62 | |||
63 | nvgpu_err(g, "ACR boot failed, err %x", data); | 62 | nvgpu_err(g, "ACR boot failed, err %x", data); |
64 | completion = -EAGAIN; | 63 | completion = -EAGAIN; |
64 | goto exit; | ||
65 | } | 65 | } |
66 | 66 | ||
67 | init_pmu_setup_hw1(g); | 67 | init_pmu_setup_hw1(g); |
68 | 68 | ||
69 | exit: | ||
70 | if (completion) { | ||
71 | nvgpu_kill_task_pg_init(g); | ||
72 | nvgpu_pmu_state_change(g, PMU_STATE_OFF, false); | ||
73 | } | ||
74 | |||
69 | return completion; | 75 | return completion; |
70 | } | 76 | } |
71 | 77 | ||