summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAparna Das <aparnad@nvidia.com>2018-07-10 17:48:27 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-07-20 01:14:58 -0400
commit3a5fd2399cabc0c268c6a3c518b698be9d08e07b (patch)
tree496292521d24794fd78ac6b643239b92ebae4f99 /drivers/gpu
parentf39ec4f9a0b40db0042418c3bfe0fee8ceb3d190 (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')
-rw-r--r--drivers/gpu/nvgpu/common/mm/mm.c4
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gv100/hal_gv100.c1
-rw-r--r--drivers/gpu/nvgpu/gv11b/hal_gv11b.c1
-rw-r--r--drivers/gpu/nvgpu/gv11b/mm_gv11b.c18
-rw-r--r--drivers/gpu/nvgpu/gv11b/mm_gv11b.h1
6 files changed, 20 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/common/mm/mm.c b/drivers/gpu/nvgpu/common/mm/mm.c
index 2663ab43..42d708ee 100644
--- a/drivers/gpu/nvgpu/common/mm/mm.c
+++ b/drivers/gpu/nvgpu/common/mm/mm.c
@@ -117,6 +117,10 @@ int nvgpu_mm_suspend(struct gk20a *g)
117 g->ops.fb.disable_hub_intr(g); 117 g->ops.fb.disable_hub_intr(g);
118 } 118 }
119 119
120 if (g->ops.mm.mmu_fault_disable_hw != NULL) {
121 g->ops.mm.mmu_fault_disable_hw(g);
122 }
123
120 nvgpu_log_info(g, "MM suspend done!"); 124 nvgpu_log_info(g, "MM suspend done!");
121 125
122 return 0; 126 return 0;
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index e69036d7..948d8e60 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -961,6 +961,7 @@ struct gpu_ops {
961 struct vm_gk20a *vm, u32 big_page_size); 961 struct vm_gk20a *vm, u32 big_page_size);
962 bool (*mmu_fault_pending)(struct gk20a *g); 962 bool (*mmu_fault_pending)(struct gk20a *g);
963 void (*fault_info_mem_destroy)(struct gk20a *g); 963 void (*fault_info_mem_destroy)(struct gk20a *g);
964 void (*mmu_fault_disable_hw)(struct gk20a *g);
964 u32 (*get_kind_invalid)(void); 965 u32 (*get_kind_invalid)(void);
965 u32 (*get_kind_pitch)(void); 966 u32 (*get_kind_pitch)(void);
966 u32 (*get_flush_retries)(struct gk20a *g, 967 u32 (*get_flush_retries)(struct gk20a *g,
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c
index 6134dedc..09a96d40 100644
--- a/drivers/gpu/nvgpu/gv100/hal_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c
@@ -689,6 +689,7 @@ static const struct gpu_ops gv100_ops = {
689 .init_bar2_vm = gp10b_init_bar2_vm, 689 .init_bar2_vm = gp10b_init_bar2_vm,
690 .remove_bar2_vm = gp10b_remove_bar2_vm, 690 .remove_bar2_vm = gp10b_remove_bar2_vm,
691 .fault_info_mem_destroy = gv11b_mm_fault_info_mem_destroy, 691 .fault_info_mem_destroy = gv11b_mm_fault_info_mem_destroy,
692 .mmu_fault_disable_hw = gv11b_mm_mmu_fault_disable_hw,
692 .get_flush_retries = gv100_mm_get_flush_retries, 693 .get_flush_retries = gv100_mm_get_flush_retries,
693 }, 694 },
694 .pramin = { 695 .pramin = {
diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
index efac772c..d479fef8 100644
--- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
@@ -656,6 +656,7 @@ static const struct gpu_ops gv11b_ops = {
656 .init_bar2_vm = gp10b_init_bar2_vm, 656 .init_bar2_vm = gp10b_init_bar2_vm,
657 .remove_bar2_vm = gp10b_remove_bar2_vm, 657 .remove_bar2_vm = gp10b_remove_bar2_vm,
658 .fault_info_mem_destroy = gv11b_mm_fault_info_mem_destroy, 658 .fault_info_mem_destroy = gv11b_mm_fault_info_mem_destroy,
659 .mmu_fault_disable_hw = gv11b_mm_mmu_fault_disable_hw,
659 }, 660 },
660 .therm = { 661 .therm = {
661 .init_therm_setup_hw = gv11b_init_therm_setup_hw, 662 .init_therm_setup_hw = gv11b_init_therm_setup_hw,
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
70void gv11b_mm_fault_info_mem_destroy(struct gk20a *g) 70void 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
91void 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,
diff --git a/drivers/gpu/nvgpu/gv11b/mm_gv11b.h b/drivers/gpu/nvgpu/gv11b/mm_gv11b.h
index 6ad4a91a..ba247088 100644
--- a/drivers/gpu/nvgpu/gv11b/mm_gv11b.h
+++ b/drivers/gpu/nvgpu/gv11b/mm_gv11b.h
@@ -37,5 +37,6 @@ void gv11b_mm_l2_flush(struct gk20a *g, bool invalidate);
37u64 gv11b_gpu_phys_addr(struct gk20a *g, 37u64 gv11b_gpu_phys_addr(struct gk20a *g,
38 struct nvgpu_gmmu_attrs *attrs, u64 phys); 38 struct nvgpu_gmmu_attrs *attrs, u64 phys);
39void gv11b_mm_fault_info_mem_destroy(struct gk20a *g); 39void gv11b_mm_fault_info_mem_destroy(struct gk20a *g);
40void gv11b_mm_mmu_fault_disable_hw(struct gk20a *g);
40 41
41#endif 42#endif