diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b/fifo_gp10b.c')
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/fifo_gp10b.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/fifo_gp10b.c b/drivers/gpu/nvgpu/gp10b/fifo_gp10b.c index 59e127b7..386318e7 100644 --- a/drivers/gpu/nvgpu/gp10b/fifo_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/fifo_gp10b.c | |||
@@ -277,9 +277,41 @@ static void gp10b_fifo_init_pbdma_intr_descs(struct fifo_gk20a *f) | |||
277 | pbdma_intr_0_device_pending_f(); | 277 | pbdma_intr_0_device_pending_f(); |
278 | } | 278 | } |
279 | 279 | ||
280 | static void gp10b_fifo_get_mmu_fault_info(struct gk20a *g, u32 mmu_fault_id, | ||
281 | struct mmu_fault_info *mmfault) | ||
282 | { | ||
283 | u32 fault_info; | ||
284 | u32 addr_lo, addr_hi; | ||
285 | |||
286 | gk20a_dbg_fn("mmu_fault_id %d", mmu_fault_id); | ||
287 | |||
288 | memset(mmfault, 0, sizeof(*mmfault)); | ||
289 | |||
290 | fault_info = gk20a_readl(g, | ||
291 | fifo_intr_mmu_fault_info_r(mmu_fault_id)); | ||
292 | mmfault->fault_type = | ||
293 | fifo_intr_mmu_fault_info_type_v(fault_info); | ||
294 | mmfault->access_type = | ||
295 | fifo_intr_mmu_fault_info_access_type_v(fault_info); | ||
296 | mmfault->client_type = | ||
297 | fifo_intr_mmu_fault_info_client_type_v(fault_info); | ||
298 | mmfault->client_id = | ||
299 | fifo_intr_mmu_fault_info_client_v(fault_info); | ||
300 | |||
301 | addr_lo = gk20a_readl(g, fifo_intr_mmu_fault_lo_r(mmu_fault_id)); | ||
302 | addr_hi = gk20a_readl(g, fifo_intr_mmu_fault_hi_r(mmu_fault_id)); | ||
303 | mmfault->fault_addr = hi32_lo32_to_u64(addr_hi, addr_lo); | ||
304 | /* note:ignoring aperture */ | ||
305 | mmfault->inst_ptr = fifo_intr_mmu_fault_inst_ptr_v( | ||
306 | gk20a_readl(g, fifo_intr_mmu_fault_inst_r(mmu_fault_id))); | ||
307 | /* note: inst_ptr is a 40b phys addr. */ | ||
308 | mmfault->inst_ptr <<= fifo_intr_mmu_fault_inst_ptr_align_shift_v(); | ||
309 | } | ||
310 | |||
280 | void gp10b_init_fifo(struct gpu_ops *gops) | 311 | void gp10b_init_fifo(struct gpu_ops *gops) |
281 | { | 312 | { |
282 | gm20b_init_fifo(gops); | 313 | gm20b_init_fifo(gops); |
314 | gops->fifo.get_mmu_fault_info = gp10b_fifo_get_mmu_fault_info; | ||
283 | gops->fifo.setup_ramfc = channel_gp10b_setup_ramfc; | 315 | gops->fifo.setup_ramfc = channel_gp10b_setup_ramfc; |
284 | gops->fifo.get_pbdma_signature = gp10b_fifo_get_pbdma_signature; | 316 | gops->fifo.get_pbdma_signature = gp10b_fifo_get_pbdma_signature; |
285 | gops->fifo.resetup_ramfc = gp10b_fifo_resetup_ramfc; | 317 | gops->fifo.resetup_ramfc = gp10b_fifo_resetup_ramfc; |