diff options
author | Aparna Das <aparnad@nvidia.com> | 2018-07-10 17:48:27 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-07-20 01:14:58 -0400 |
commit | 3a5fd2399cabc0c268c6a3c518b698be9d08e07b (patch) | |
tree | 496292521d24794fd78ac6b643239b92ebae4f99 /drivers/gpu/nvgpu/gv11b/mm_gv11b.c | |
parent | f39ec4f9a0b40db0042418c3bfe0fee8ceb3d190 (diff) |
gpu: nvgpu: disable fb fault buffer in prepare poweroff
FB fault buffer is enabled on finalize poweron. Disable the buffer
in prepare poweroff. This also eliminates the need to disable
the buffer in fault info mem destroy which otherwise accesses
GPU registers after these are locked in prepare poweroff.
Bug 200427479
Change-Id: I1ca3e6ed4417847731c09b887134f215a2ba331c
Signed-off-by: Aparna Das <aparnad@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1776387
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/mm_gv11b.c')
-rw-r--r-- | drivers/gpu/nvgpu/gv11b/mm_gv11b.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/mm_gv11b.c b/drivers/gpu/nvgpu/gv11b/mm_gv11b.c index 9373ee19..39c79bba 100644 --- a/drivers/gpu/nvgpu/gv11b/mm_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/mm_gv11b.c | |||
@@ -67,15 +67,10 @@ bool gv11b_mm_mmu_fault_pending(struct gk20a *g) | |||
67 | return g->ops.fb.mmu_fault_pending(g); | 67 | return g->ops.fb.mmu_fault_pending(g); |
68 | } | 68 | } |
69 | 69 | ||
70 | void gv11b_mm_fault_info_mem_destroy(struct gk20a *g) | 70 | void gv11b_mm_mmu_fault_disable_hw(struct gk20a *g) |
71 | { | 71 | { |
72 | struct vm_gk20a *vm = g->mm.bar2.vm; | ||
73 | |||
74 | nvgpu_log_fn(g, " "); | ||
75 | |||
76 | nvgpu_mutex_acquire(&g->mm.hub_isr_mutex); | 72 | nvgpu_mutex_acquire(&g->mm.hub_isr_mutex); |
77 | 73 | ||
78 | |||
79 | if ((g->ops.fb.is_fault_buf_enabled(g, | 74 | if ((g->ops.fb.is_fault_buf_enabled(g, |
80 | NVGPU_FB_MMU_FAULT_NONREPLAY_REG_INDEX))) { | 75 | NVGPU_FB_MMU_FAULT_NONREPLAY_REG_INDEX))) { |
81 | g->ops.fb.fault_buf_set_state_hw(g, | 76 | g->ops.fb.fault_buf_set_state_hw(g, |
@@ -90,6 +85,17 @@ void gv11b_mm_fault_info_mem_destroy(struct gk20a *g) | |||
90 | NVGPU_FB_MMU_FAULT_BUF_DISABLED); | 85 | NVGPU_FB_MMU_FAULT_BUF_DISABLED); |
91 | } | 86 | } |
92 | 87 | ||
88 | nvgpu_mutex_release(&g->mm.hub_isr_mutex); | ||
89 | } | ||
90 | |||
91 | void gv11b_mm_fault_info_mem_destroy(struct gk20a *g) | ||
92 | { | ||
93 | struct vm_gk20a *vm = g->mm.bar2.vm; | ||
94 | |||
95 | nvgpu_log_fn(g, " "); | ||
96 | |||
97 | nvgpu_mutex_acquire(&g->mm.hub_isr_mutex); | ||
98 | |||
93 | if (nvgpu_mem_is_valid( | 99 | if (nvgpu_mem_is_valid( |
94 | &g->mm.hw_fault_buf[NVGPU_MM_MMU_FAULT_TYPE_OTHER_AND_NONREPLAY])) | 100 | &g->mm.hw_fault_buf[NVGPU_MM_MMU_FAULT_TYPE_OTHER_AND_NONREPLAY])) |
95 | nvgpu_dma_unmap_free(vm, | 101 | nvgpu_dma_unmap_free(vm, |