summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/linux/intr.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/common/linux/intr.c')
-rw-r--r--drivers/gpu/nvgpu/common/linux/intr.c35
1 files changed, 4 insertions, 31 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/intr.c b/drivers/gpu/nvgpu/common/linux/intr.c
index 6b4b2dc9..05dd3f2a 100644
--- a/drivers/gpu/nvgpu/common/linux/intr.c
+++ b/drivers/gpu/nvgpu/common/linux/intr.c
@@ -69,11 +69,8 @@ irqreturn_t nvgpu_intr_thread_stall(struct gk20a *g)
69 69
70irqreturn_t nvgpu_intr_nonstall(struct gk20a *g) 70irqreturn_t nvgpu_intr_nonstall(struct gk20a *g)
71{ 71{
72 u32 mc_intr_1; 72 u32 non_stall_intr_val;
73 u32 hw_irq_count; 73 u32 hw_irq_count;
74 u32 engine_id_idx;
75 u32 active_engine_id = 0;
76 u32 engine_enum = ENGINE_INVAL_GK20A;
77 int ops_old, ops_new, ops = 0; 74 int ops_old, ops_new, ops = 0;
78 struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); 75 struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
79 76
@@ -81,37 +78,13 @@ irqreturn_t nvgpu_intr_nonstall(struct gk20a *g)
81 return IRQ_NONE; 78 return IRQ_NONE;
82 79
83 /* not from gpu when sharing irq with others */ 80 /* not from gpu when sharing irq with others */
84 mc_intr_1 = g->ops.mc.intr_nonstall(g); 81 non_stall_intr_val = g->ops.mc.intr_nonstall(g);
85 if (unlikely(!mc_intr_1)) 82 if (unlikely(!non_stall_intr_val))
86 return IRQ_NONE; 83 return IRQ_NONE;
87 84
88 g->ops.mc.intr_nonstall_pause(g); 85 g->ops.mc.intr_nonstall_pause(g);
89 86
90 if (g->ops.mc.is_intr1_pending(g, NVGPU_UNIT_FIFO, mc_intr_1)) 87 ops = g->ops.mc.isr_nonstall(g);
91 ops |= gk20a_fifo_nonstall_isr(g);
92
93 for (engine_id_idx = 0; engine_id_idx < g->fifo.num_engines;
94 engine_id_idx++) {
95 struct fifo_engine_info_gk20a *engine_info;
96
97 active_engine_id = g->fifo.active_engines_list[engine_id_idx];
98 engine_info = &g->fifo.engine_info[active_engine_id];
99
100 if (mc_intr_1 & engine_info->intr_mask) {
101 engine_enum = engine_info->engine_enum;
102 /* GR Engine */
103 if (engine_enum == ENGINE_GR_GK20A)
104 ops |= gk20a_gr_nonstall_isr(g);
105
106 /* CE Engine */
107 if (((engine_enum == ENGINE_GRCE_GK20A) ||
108 (engine_enum == ENGINE_ASYNC_CE_GK20A)) &&
109 g->ops.ce2.isr_nonstall)
110 ops |= g->ops.ce2.isr_nonstall(g,
111 engine_info->inst_id,
112 engine_info->pri_base);
113 }
114 }
115 if (ops) { 88 if (ops) {
116 do { 89 do {
117 ops_old = atomic_read(&l->nonstall_ops); 90 ops_old = atomic_read(&l->nonstall_ops);