diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2014-11-10 03:34:24 -0500 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:12:14 -0400 |
commit | c0668f05ea1e2429444d6aad2a40dda81aba7ec8 (patch) | |
tree | e022679a8f6690d16d3c47ebd77021075ce914d3 /drivers/gpu/nvgpu/gk20a/mc_gk20a.c | |
parent | 3a504842cd2696bd2feb496f4f4555ace82b4ab1 (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.c | 15 |
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 | ||
120 | void mc_gk20a_intr_enable(struct gk20a *g) | 120 | void 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 | } |