summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu')
-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