summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp10b/fifo_gp10b.c
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2017-05-22 17:34:08 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-05-30 14:04:10 -0400
commitb817e9e207cca88698d28b6b4ab410f03d715171 (patch)
tree76e794e46a3276ab22776735a4d6c0f5f96b4165 /drivers/gpu/nvgpu/gp10b/fifo_gp10b.c
parentc3192b5acc03bf4e65aa1cbefb3a9ea88d87d9bd (diff)
gpu: nvgpu: add fifo ops get_mmu_fault_info
This is needed to take care of gp10b h/w header changes. gp10b changes as compared to legacy gpu chips -fault_info_fault_type field width is changed -fault_info_write field is removed -fault_info_access_type field is added -fault_info_engine_subid is removed -fault_info_client_type is added -fault_info_client field width has changed JIRA GPUT19X-7 JIRA GPUT19X-12 Change-Id: Iebf28cc6c851830524049b67a71cd72fb4a28948 Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: http://git-master/r/1487319 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b/fifo_gp10b.c')
-rw-r--r--drivers/gpu/nvgpu/gp10b/fifo_gp10b.c32
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
280static 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
280void gp10b_init_fifo(struct gpu_ops *gops) 311void 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;