summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gv11b/mm_gv11b.c
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2018-01-09 17:45:44 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-01-24 17:41:37 -0500
commit0a0ffca1459d43dfdba3f5a39a7aa0c193ff0d73 (patch)
treeaaf581ab0c7cd2783a771063926fc62225faac66 /drivers/gpu/nvgpu/gv11b/mm_gv11b.c
parent0f291f0d5854b35e802fc0cd102fe2d669103edd (diff)
gpu: nvgpu: gv11b: skip mmu fault buf alloc after resume
Skip allocating memory if required s/w set up for mmu fault buffers is already done. Bug 2045228 Change-Id: Ib88e8dd4f54b3f0faf7dc9edf091ec285220f7b5 Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1640516 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.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/mm_gv11b.c b/drivers/gpu/nvgpu/gv11b/mm_gv11b.c
index 439bf9ed..8d307d7c 100644
--- a/drivers/gpu/nvgpu/gv11b/mm_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/mm_gv11b.c
@@ -89,6 +89,12 @@ static int gv11b_mm_mmu_fault_info_buf_init(struct gk20a *g,
89{ 89{
90 struct mmu_fault_info *fault_info_mem; 90 struct mmu_fault_info *fault_info_mem;
91 91
92 if (g->mm.fault_info[FAULT_TYPE_OTHER_AND_NONREPLAY] != NULL &&
93 g->mm.fault_info[FAULT_TYPE_REPLAY] != NULL) {
94 *hub_intr_types |= HUB_INTR_TYPE_OTHER;
95 return 0;
96 }
97
92 fault_info_mem = nvgpu_kzalloc(g, sizeof(struct mmu_fault_info) * 98 fault_info_mem = nvgpu_kzalloc(g, sizeof(struct mmu_fault_info) *
93 FAULT_TYPE_NUM); 99 FAULT_TYPE_NUM);
94 if (!fault_info_mem) { 100 if (!fault_info_mem) {
@@ -117,24 +123,31 @@ static void gv11b_mm_mmu_hw_fault_buf_init(struct gk20a *g,
117 fb_size = (g->ops.fifo.get_num_fifos(g) + 1) * 123 fb_size = (g->ops.fifo.get_num_fifos(g) + 1) *
118 gmmu_fault_buf_size_v(); 124 gmmu_fault_buf_size_v();
119 125
120 err = nvgpu_dma_alloc_map_sys(vm, fb_size, 126 if (!nvgpu_mem_is_valid(
127 &g->mm.hw_fault_buf[FAULT_TYPE_OTHER_AND_NONREPLAY])) {
128
129 err = nvgpu_dma_alloc_map_sys(vm, fb_size,
121 &g->mm.hw_fault_buf[FAULT_TYPE_OTHER_AND_NONREPLAY]); 130 &g->mm.hw_fault_buf[FAULT_TYPE_OTHER_AND_NONREPLAY]);
122 if (err) { 131 if (err) {
123 nvgpu_err(g, 132 nvgpu_err(g,
124 "Error in hw mmu fault buf [0] alloc in bar2 vm "); 133 "Error in hw mmu fault buf [0] alloc in bar2 vm ");
125 /* Fault will be snapped in pri reg but not in buffer */ 134 /* Fault will be snapped in pri reg but not in buffer */
126 return; 135 return;
136 }
127 } 137 }
128 138
129 *hub_intr_types |= HUB_INTR_TYPE_NONREPLAY; 139 *hub_intr_types |= HUB_INTR_TYPE_NONREPLAY;
130 140
131 err = nvgpu_dma_alloc_map_sys(vm, fb_size, 141 if (!nvgpu_mem_is_valid(
132 &g->mm.hw_fault_buf[FAULT_TYPE_REPLAY]); 142 &g->mm.hw_fault_buf[FAULT_TYPE_REPLAY])) {
133 if (err) { 143 err = nvgpu_dma_alloc_map_sys(vm, fb_size,
134 nvgpu_err(g, 144 &g->mm.hw_fault_buf[FAULT_TYPE_REPLAY]);
135 "Error in hw mmu fault buf [1] alloc in bar2 vm "); 145 if (err) {
136 /* Fault will be snapped in pri reg but not in buffer */ 146 nvgpu_err(g,
137 return; 147 "Error in hw mmu fault buf [1] alloc in bar2 vm ");
148 /* Fault will be snapped in pri reg but not in buffer */
149 return;
150 }
138 } 151 }
139 152
140 *hub_intr_types |= HUB_INTR_TYPE_REPLAY; 153 *hub_intr_types |= HUB_INTR_TYPE_REPLAY;