From 7f09c477c9cb85c7571bab4bf87dac4a72f25696 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Mon, 2 Jul 2018 16:29:54 +0530 Subject: gpu: nvgpu: add HAL to invalidate replay mmu fault Add new HAL gops.fb.mmu_invalidate_replay() to invalidate replay mmu fault Use existing API gv11b_fb_mmu_invalidate_replay() to set to this HAL on all Volta chips Bug 2228914 Jira NVGPU-838 Jira NVGPUT-73 Change-Id: I394901857d41499f3ea44023393fe271fb664260 Signed-off-by: Deepak Nibade Reviewed-on: https://git-master.nvidia.com/r/1767970 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/gk20a.h | 2 ++ drivers/gpu/nvgpu/gv100/hal_gv100.c | 1 + drivers/gpu/nvgpu/gv11b/fb_gv11b.c | 9 +++------ drivers/gpu/nvgpu/gv11b/fb_gv11b.h | 3 +++ drivers/gpu/nvgpu/gv11b/hal_gv11b.c | 1 + 5 files changed, 10 insertions(+), 6 deletions(-) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index ee1f3304..4aa04139 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -557,6 +557,8 @@ struct gpu_ops { u32 *inst_lo, u32 *inst_hi); u32 (*read_mmu_fault_info)(struct gk20a *g); u32 (*read_mmu_fault_status)(struct gk20a *g); + int (*mmu_invalidate_replay)(struct gk20a *g, + u32 invalidate_replay_val); } fb; struct { void (*slcg_bus_load_gating_prod)(struct gk20a *g, bool prod); diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c index 801a76a3..20f045b2 100644 --- a/drivers/gpu/nvgpu/gv100/hal_gv100.c +++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c @@ -493,6 +493,7 @@ static const struct gpu_ops gv100_ops = { .read_mmu_fault_inst_lo_hi = fb_gv11b_read_mmu_fault_inst_lo_hi, .read_mmu_fault_info = fb_gv11b_read_mmu_fault_info, .read_mmu_fault_status = fb_gv11b_read_mmu_fault_status, + .mmu_invalidate_replay = gv11b_fb_mmu_invalidate_replay, }, .clock_gating = { .slcg_bus_load_gating_prod = diff --git a/drivers/gpu/nvgpu/gv11b/fb_gv11b.c b/drivers/gpu/nvgpu/gv11b/fb_gv11b.c index 54f0d2d8..d50885f9 100644 --- a/drivers/gpu/nvgpu/gv11b/fb_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/fb_gv11b.c @@ -47,9 +47,6 @@ static int gv11b_fb_fix_page_fault(struct gk20a *g, struct mmu_fault_info *mmfault); -static int gv11b_fb_mmu_invalidate_replay(struct gk20a *g, - u32 invalidate_replay_val); - static void gv11b_init_nvlink_soc_credits(struct gk20a *g) { if (nvgpu_is_bpmp_running(g) && (!nvgpu_platform_is_simulation(g))) { @@ -989,12 +986,12 @@ static int gv11b_fb_replay_or_cancel_faults(struct gk20a *g, * cancel faults so that next time it faults as * replayable faults and channel recovery can be done */ - err = gv11b_fb_mmu_invalidate_replay(g, + err = g->ops.fb.mmu_invalidate_replay(g, fb_mmu_invalidate_replay_cancel_global_f()); } else if (invalidate_replay_val & fb_mmu_invalidate_replay_start_ack_all_f()) { /* pte valid is fixed. replay faulting request */ - err = gv11b_fb_mmu_invalidate_replay(g, + err = g->ops.fb.mmu_invalidate_replay(g, fb_mmu_invalidate_replay_start_ack_all_f()); } @@ -1441,7 +1438,7 @@ bool gv11b_fb_mmu_fault_pending(struct gk20a *g) return false; } -static int gv11b_fb_mmu_invalidate_replay(struct gk20a *g, +int gv11b_fb_mmu_invalidate_replay(struct gk20a *g, u32 invalidate_replay_val) { int err = -ETIMEDOUT; diff --git a/drivers/gpu/nvgpu/gv11b/fb_gv11b.h b/drivers/gpu/nvgpu/gv11b/fb_gv11b.h index fef9578a..0431568d 100644 --- a/drivers/gpu/nvgpu/gv11b/fb_gv11b.h +++ b/drivers/gpu/nvgpu/gv11b/fb_gv11b.h @@ -99,4 +99,7 @@ u32 fb_gv11b_read_mmu_fault_info(struct gk20a *g); u32 fb_gv11b_read_mmu_fault_status(struct gk20a *g); void fb_gv11b_write_mmu_fault_status(struct gk20a *g, u32 reg_val); +int gv11b_fb_mmu_invalidate_replay(struct gk20a *g, + u32 invalidate_replay_val); + #endif diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c index 2b58e1c4..a243e81c 100644 --- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c @@ -459,6 +459,7 @@ static const struct gpu_ops gv11b_ops = { .read_mmu_fault_inst_lo_hi = fb_gv11b_read_mmu_fault_inst_lo_hi, .read_mmu_fault_info = fb_gv11b_read_mmu_fault_info, .read_mmu_fault_status = fb_gv11b_read_mmu_fault_status, + .mmu_invalidate_replay = gv11b_fb_mmu_invalidate_replay, }, .clock_gating = { .slcg_bus_load_gating_prod = -- cgit v1.2.2