From c1b78dd65d6d3269c4b25d38fc57975acca02a1a Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Tue, 8 May 2018 06:07:09 -0700 Subject: gpu: nvgpu: add HALs to enable/disable hub interrupts Add below two new HALs gops.fb.enable_hub_intr() to enable hub interrupts gops.fb.disable_hub_intr() to disable hub interrupts Set existing APIs gv11b_fb_enable/disable_hub_intr() to these HALs Call the HALs everywhere instead of calling the APIs directly Jira NVGPUT-44 Change-Id: Id299c6d228733ed365a71be6b180186776cc1306 Signed-off-by: Deepak Nibade Reviewed-on: https://git-master.nvidia.com/r/1725977 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/gk20a.h | 4 ++++ drivers/gpu/nvgpu/gv100/hal_gv100.c | 2 ++ drivers/gpu/nvgpu/gv100/mc_gv100.c | 4 ++-- drivers/gpu/nvgpu/gv11b/fb_gv11b.c | 8 ++++---- drivers/gpu/nvgpu/gv11b/hal_gv11b.c | 2 ++ drivers/gpu/nvgpu/gv11b/mc_gv11b.c | 4 ++-- drivers/gpu/nvgpu/gv11b/mm_gv11b.c | 4 ++-- 7 files changed, 18 insertions(+), 10 deletions(-) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index f6318257..01e0511d 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -515,6 +515,10 @@ struct gpu_ops { int (*mem_unlock)(struct gk20a *g); int (*init_nvlink)(struct gk20a *g); int (*enable_nvlink)(struct gk20a *g); + void (*enable_hub_intr)(struct gk20a *g, unsigned int index, + unsigned int intr_type); + void (*disable_hub_intr)(struct gk20a *g, unsigned int index, + unsigned int intr_type); } 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 a4dd09ec..23a3d78f 100644 --- a/drivers/gpu/nvgpu/gv100/hal_gv100.c +++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c @@ -464,6 +464,8 @@ static const struct gpu_ops gv100_ops = { .mem_unlock = gv100_fb_memory_unlock, .init_nvlink = gv100_fb_init_nvlink, .enable_nvlink = gv100_fb_enable_nvlink, + .enable_hub_intr = gv11b_fb_enable_hub_intr, + .disable_hub_intr = gv11b_fb_disable_hub_intr, }, .clock_gating = { .slcg_bus_load_gating_prod = diff --git a/drivers/gpu/nvgpu/gv100/mc_gv100.c b/drivers/gpu/nvgpu/gv100/mc_gv100.c index 31dc97d9..7ed9e6da 100644 --- a/drivers/gpu/nvgpu/gv100/mc_gv100.c +++ b/drivers/gpu/nvgpu/gv100/mc_gv100.c @@ -41,7 +41,7 @@ void mc_gv100_intr_enable(struct gk20a *g) 0xffffffffU); gk20a_writel(g, mc_intr_en_clear_r(NVGPU_MC_INTR_NONSTALLING), 0xffffffffU); - gv11b_fb_disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_ALL); + g->ops.fb.disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_ALL); g->mc_intr_mask_restore[NVGPU_MC_INTR_STALLING] = mc_intr_pfifo_pending_f() | @@ -57,7 +57,7 @@ void mc_gv100_intr_enable(struct gk20a *g) | eng_intr_mask; /* TODO: Enable PRI faults for HUB ECC err intr */ - gv11b_fb_enable_hub_intr(g, STALL_REG_INDEX, g->mm.hub_intr_types); + g->ops.fb.enable_hub_intr(g, STALL_REG_INDEX, g->mm.hub_intr_types); gk20a_writel(g, mc_intr_en_set_r(NVGPU_MC_INTR_STALLING), g->mc_intr_mask_restore[NVGPU_MC_INTR_STALLING]); diff --git a/drivers/gpu/nvgpu/gv11b/fb_gv11b.c b/drivers/gpu/nvgpu/gv11b/fb_gv11b.c index 47369523..bba47471 100644 --- a/drivers/gpu/nvgpu/gv11b/fb_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/fb_gv11b.c @@ -1214,7 +1214,7 @@ void gv11b_fb_handle_nonreplay_fault_overflow(struct gk20a *g, static void gv11b_fb_handle_bar2_fault(struct gk20a *g, struct mmu_fault_info *mmfault, u32 fault_status) { - gv11b_fb_disable_hub_intr(g, STALL_REG_INDEX, + g->ops.fb.disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_NONREPLAY | HUB_INTR_TYPE_REPLAY); @@ -1235,7 +1235,7 @@ static void gv11b_fb_handle_bar2_fault(struct gk20a *g, gk20a_channel_put(mmfault->refch); mmfault->refch = NULL; } - gv11b_fb_enable_hub_intr(g, STALL_REG_INDEX, + g->ops.fb.enable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_NONREPLAY | HUB_INTR_TYPE_REPLAY); } @@ -1372,7 +1372,7 @@ void gv11b_fb_hub_isr(struct gk20a *g) nvgpu_info(g, "ecc uncorrected error notify"); /* disable interrupts during handling */ - gv11b_fb_disable_hub_intr(g, STALL_REG_INDEX, + g->ops.fb.disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_ECC_UNCORRECTED); status = gk20a_readl(g, fb_mmu_l2tlb_ecc_status_r()); @@ -1388,7 +1388,7 @@ void gv11b_fb_hub_isr(struct gk20a *g) gv11b_handle_fillunit_ecc_isr(g, status); /* re-enable interrupts after handling */ - gv11b_fb_enable_hub_intr(g, STALL_REG_INDEX, + g->ops.fb.enable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_ECC_UNCORRECTED); } diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c index be8ea76e..5a5aed8e 100644 --- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c @@ -429,6 +429,8 @@ static const struct gpu_ops gv11b_ops = { .tlb_invalidate = gk20a_fb_tlb_invalidate, .hub_isr = gv11b_fb_hub_isr, .mem_unlock = NULL, + .enable_hub_intr = gv11b_fb_enable_hub_intr, + .disable_hub_intr = gv11b_fb_disable_hub_intr, }, .clock_gating = { .slcg_bus_load_gating_prod = diff --git a/drivers/gpu/nvgpu/gv11b/mc_gv11b.c b/drivers/gpu/nvgpu/gv11b/mc_gv11b.c index 6c118ceb..31600828 100644 --- a/drivers/gpu/nvgpu/gv11b/mc_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/mc_gv11b.c @@ -41,7 +41,7 @@ void mc_gv11b_intr_enable(struct gk20a *g) 0xffffffffU); gk20a_writel(g, mc_intr_en_clear_r(NVGPU_MC_INTR_NONSTALLING), 0xffffffffU); - gv11b_fb_disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_ALL); + g->ops.fb.disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_ALL); g->mc_intr_mask_restore[NVGPU_MC_INTR_STALLING] = mc_intr_pfifo_pending_f() | @@ -56,7 +56,7 @@ void mc_gv11b_intr_enable(struct gk20a *g) | eng_intr_mask; /* TODO: Enable PRI faults for HUB ECC err intr */ - gv11b_fb_enable_hub_intr(g, STALL_REG_INDEX, g->mm.hub_intr_types); + g->ops.fb.enable_hub_intr(g, STALL_REG_INDEX, g->mm.hub_intr_types); gk20a_writel(g, mc_intr_en_set_r(NVGPU_MC_INTR_STALLING), g->mc_intr_mask_restore[NVGPU_MC_INTR_STALLING]); diff --git a/drivers/gpu/nvgpu/gv11b/mm_gv11b.c b/drivers/gpu/nvgpu/gv11b/mm_gv11b.c index f4084ad6..357b15d7 100644 --- a/drivers/gpu/nvgpu/gv11b/mm_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/mm_gv11b.c @@ -76,7 +76,7 @@ void gv11b_mm_fault_info_mem_destroy(struct gk20a *g) nvgpu_mutex_acquire(&g->mm.hub_isr_mutex); - gv11b_fb_disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_OTHER | + g->ops.fb.disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_OTHER | HUB_INTR_TYPE_NONREPLAY | HUB_INTR_TYPE_REPLAY); nvgpu_kfree(g, g->mm.fault_info[FAULT_TYPE_OTHER_AND_NONREPLAY]); @@ -163,7 +163,7 @@ static void gv11b_mm_mmu_hw_fault_buf_deinit(struct gk20a *g) nvgpu_log_fn(g, " "); - gv11b_fb_disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_NONREPLAY | + g->ops.fb.disable_hub_intr(g, STALL_REG_INDEX, HUB_INTR_TYPE_NONREPLAY | HUB_INTR_TYPE_REPLAY); g->mm.hub_intr_types &= (~(HUB_INTR_TYPE_NONREPLAY | -- cgit v1.2.2