summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/mc_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2014-11-10 03:34:24 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:12:14 -0400
commitc0668f05ea1e2429444d6aad2a40dda81aba7ec8 (patch)
treee022679a8f6690d16d3c47ebd77021075ce914d3 /drivers/gpu/nvgpu/gk20a/mc_gk20a.c
parent3a504842cd2696bd2feb496f4f4555ace82b4ab1 (diff)
gpu: nvgpu: Retrieve intr & reset id from HW
Query interrupt number and reset id from HW. Use the number from HW when enabling and detecting interrupts. Bug 200036089 Bug 1567274 Change-Id: If9cb4db79a19dcb193ba7ad9db7081f4fe1ab433 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/600988
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mc_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/mc_gk20a.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c
index 53701605..4d176403 100644
--- a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c
@@ -71,7 +71,7 @@ irqreturn_t mc_gk20a_intr_thread_stall(struct gk20a *g)
71 71
72 gk20a_dbg(gpu_dbg_intr, "stall intr %08x\n", mc_intr_0); 72 gk20a_dbg(gpu_dbg_intr, "stall intr %08x\n", mc_intr_0);
73 73
74 if (mc_intr_0 & mc_intr_0_pgraph_pending_f()) 74 if (mc_intr_0 & BIT(g->fifo.engine_info[ENGINE_GR_GK20A].intr_id))
75 gr_gk20a_elpg_protected_call(g, gk20a_gr_isr(g)); 75 gr_gk20a_elpg_protected_call(g, gk20a_gr_isr(g));
76 if (mc_intr_0 & mc_intr_0_pfifo_pending_f()) 76 if (mc_intr_0 & mc_intr_0_pfifo_pending_f())
77 gk20a_fifo_isr(g); 77 gk20a_fifo_isr(g);
@@ -105,7 +105,7 @@ irqreturn_t mc_gk20a_intr_thread_nonstall(struct gk20a *g)
105 105
106 if (mc_intr_1 & mc_intr_0_pfifo_pending_f()) 106 if (mc_intr_1 & mc_intr_0_pfifo_pending_f())
107 gk20a_fifo_nonstall_isr(g); 107 gk20a_fifo_nonstall_isr(g);
108 if (mc_intr_1 & mc_intr_0_pgraph_pending_f()) 108 if (mc_intr_1 & BIT(g->fifo.engine_info[ENGINE_GR_GK20A].intr_id))
109 gk20a_gr_nonstall_isr(g); 109 gk20a_gr_nonstall_isr(g);
110 110
111 gk20a_writel(g, mc_intr_en_1_r(), 111 gk20a_writel(g, mc_intr_en_1_r(),
@@ -119,9 +119,20 @@ irqreturn_t mc_gk20a_intr_thread_nonstall(struct gk20a *g)
119 119
120void mc_gk20a_intr_enable(struct gk20a *g) 120void mc_gk20a_intr_enable(struct gk20a *g)
121{ 121{
122 u32 eng_intr_mask = gk20a_fifo_engine_interrupt_mask(g);
123
124 gk20a_writel(g, mc_intr_mask_1_r(),
125 mc_intr_0_pfifo_pending_f()
126 | eng_intr_mask);
122 gk20a_writel(g, mc_intr_en_1_r(), 127 gk20a_writel(g, mc_intr_en_1_r(),
123 mc_intr_en_1_inta_hardware_f()); 128 mc_intr_en_1_inta_hardware_f());
124 129
130 gk20a_writel(g, mc_intr_mask_0_r(),
131 mc_intr_0_pfifo_pending_f()
132 | mc_intr_0_priv_ring_pending_f()
133 | mc_intr_0_ltc_pending_f()
134 | mc_intr_0_pbus_pending_f()
135 | eng_intr_mask);
125 gk20a_writel(g, mc_intr_en_0_r(), 136 gk20a_writel(g, mc_intr_en_0_r(),
126 mc_intr_en_0_inta_hardware_f()); 137 mc_intr_en_0_inta_hardware_f());
127} 138}