summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gv11b/ce_gv11b.c
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2017-05-15 19:33:41 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-07-12 10:44:49 -0400
commit66fb130bfdf12175c117f36737503b1b5f33d42e (patch)
treed6a26dee697fc5e9f16e43328a448705a39ff5d4 /drivers/gpu/nvgpu/gv11b/ce_gv11b.c
parent971c90e3b6b7f1e3f5dff67ccd701c99c1b0f7b5 (diff)
gpu: nvgpu: gv11b: recover from replay and ce mmu fault
Fix pte valid bit for replayable fault and ce fault JIRA GPUT19X-12 Change-Id: I77a7a452d9b5b304f182e120e8d75959d46d4422 Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1515538 GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/ce_gv11b.c')
-rw-r--r--drivers/gpu/nvgpu/gv11b/ce_gv11b.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/ce_gv11b.c b/drivers/gpu/nvgpu/gv11b/ce_gv11b.c
index af87f990..9716c6d6 100644
--- a/drivers/gpu/nvgpu/gv11b/ce_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/ce_gv11b.c
@@ -75,14 +75,23 @@ static void gv11b_ce_isr(struct gk20a *g, u32 inst_id, u32 pri_base)
75 gp10b_ce_isr(g, inst_id, pri_base); 75 gp10b_ce_isr(g, inst_id, pri_base);
76} 76}
77 77
78void gv11b_ce_mthd_buffer_fault_in_bar2_fault(struct gk20a *g) 78u32 gv11b_ce_get_num_lce(struct gk20a *g)
79{ 79{
80 u32 reg_val, num_lce, lce, clear_intr; 80 u32 reg_val, num_lce;
81 81
82 reg_val = gk20a_readl(g, top_num_ces_r()); 82 reg_val = gk20a_readl(g, top_num_ces_r());
83 num_lce = top_num_ces_value_v(reg_val); 83 num_lce = top_num_ces_value_v(reg_val);
84 nvgpu_log_info(g, "num LCE: %d", num_lce); 84 nvgpu_log_info(g, "num LCE: %d", num_lce);
85 85
86 return num_lce;
87}
88
89void gv11b_ce_mthd_buffer_fault_in_bar2_fault(struct gk20a *g)
90{
91 u32 reg_val, num_lce, lce, clear_intr;
92
93 num_lce = gv11b_ce_get_num_lce(g);
94
86 for (lce = 0; lce < num_lce; lce++) { 95 for (lce = 0; lce < num_lce; lce++) {
87 reg_val = gk20a_readl(g, ce_intr_status_r(lce)); 96 reg_val = gk20a_readl(g, ce_intr_status_r(lce));
88 if (reg_val & ce_intr_status_mthd_buffer_fault_pending_f()) { 97 if (reg_val & ce_intr_status_mthd_buffer_fault_pending_f()) {