diff options
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 08309f0f..0cb6c933 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c | |||
@@ -4854,6 +4854,22 @@ static int gk20a_gr_handle_illegal_class(struct gk20a *g, | |||
4854 | return -EINVAL; | 4854 | return -EINVAL; |
4855 | } | 4855 | } |
4856 | 4856 | ||
4857 | static int gk20a_gr_handle_fecs_error(struct gk20a *g, | ||
4858 | struct gr_isr_data *isr_data) | ||
4859 | { | ||
4860 | struct fifo_gk20a *f = &g->fifo; | ||
4861 | struct channel_gk20a *ch = &f->channel[isr_data->chid]; | ||
4862 | u32 gr_fecs_intr = gk20a_readl(g, gr_fecs_intr_r()); | ||
4863 | gk20a_dbg_fn(""); | ||
4864 | |||
4865 | gk20a_err(dev_from_gk20a(g), | ||
4866 | "unhandled fecs error interrupt 0x%08x for channel %u", | ||
4867 | gr_fecs_intr, ch->hw_chid); | ||
4868 | |||
4869 | gk20a_writel(g, gr_fecs_intr_r(), gr_fecs_intr); | ||
4870 | return -EINVAL; | ||
4871 | } | ||
4872 | |||
4857 | static int gk20a_gr_handle_class_error(struct gk20a *g, | 4873 | static int gk20a_gr_handle_class_error(struct gk20a *g, |
4858 | struct gr_isr_data *isr_data) | 4874 | struct gr_isr_data *isr_data) |
4859 | { | 4875 | { |
@@ -5341,6 +5357,13 @@ int gk20a_gr_isr(struct gk20a *g) | |||
5341 | gr_intr &= ~gr_intr_illegal_class_pending_f(); | 5357 | gr_intr &= ~gr_intr_illegal_class_pending_f(); |
5342 | } | 5358 | } |
5343 | 5359 | ||
5360 | if (gr_intr & gr_intr_fecs_error_pending_f()) { | ||
5361 | need_reset |= gk20a_gr_handle_fecs_error(g, &isr_data); | ||
5362 | gk20a_writel(g, gr_intr_r(), | ||
5363 | gr_intr_fecs_error_reset_f()); | ||
5364 | gr_intr &= ~gr_intr_fecs_error_pending_f(); | ||
5365 | } | ||
5366 | |||
5344 | if (gr_intr & gr_intr_class_error_pending_f()) { | 5367 | if (gr_intr & gr_intr_class_error_pending_f()) { |
5345 | need_reset |= gk20a_gr_handle_class_error(g, &isr_data); | 5368 | need_reset |= gk20a_gr_handle_class_error(g, &isr_data); |
5346 | gk20a_writel(g, gr_intr_r(), | 5369 | gk20a_writel(g, gr_intr_r(), |