From 9c4f3799d1318aeb81d23816f8493d115aff2f86 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Tue, 22 Mar 2016 14:16:40 +0530 Subject: gpu: nvgpu: add notifier for pbcrc mismatch Add below notifier for pbcrc mismatch NVGPU_CHANNEL_PBDMA_PUSHBUFFER_CRC_MISMATCH And use this notifier value when we have pbdma pbcrc interrupt pending Bug 200179981 Change-Id: I289351e990afb0a4e002902881b99023530f6443 Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/1156210 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Konsta Holtta Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/fifo_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index 16ca16d8..92536b36 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c @@ -1689,6 +1689,7 @@ static u32 gk20a_fifo_handle_pbdma_intr(struct device *dev, u32 pbdma_intr_0 = gk20a_readl(g, pbdma_intr_0_r(pbdma_id)); u32 pbdma_intr_1 = gk20a_readl(g, pbdma_intr_1_r(pbdma_id)); u32 handled = 0; + u32 error_notifier = NVGPU_CHANNEL_PBDMA_ERROR; bool reset = false; int i; @@ -1740,6 +1741,12 @@ static u32 gk20a_fifo_handle_pbdma_intr(struct device *dev, reset = true; } + if (pbdma_intr_0 & pbdma_intr_0_pbcrc_pending_f()) { + error_notifier = + NVGPU_CHANNEL_PBDMA_PUSHBUFFER_CRC_MISMATCH; + reset = true; + } + if (pbdma_intr_0 & pbdma_intr_0_device_pending_f()) { gk20a_fifo_reset_pbdma_header(g, pbdma_id); @@ -1773,8 +1780,7 @@ static u32 gk20a_fifo_handle_pbdma_intr(struct device *dev, struct channel_gk20a *ch = &f->channel[id]; if (gk20a_channel_get(ch)) { - gk20a_set_error_notifier(ch, - NVGPU_CHANNEL_PBDMA_ERROR); + gk20a_set_error_notifier(ch, error_notifier); gk20a_fifo_recover_ch(g, id, true); gk20a_channel_put(ch); } @@ -1787,7 +1793,7 @@ static u32 gk20a_fifo_handle_pbdma_intr(struct device *dev, list_for_each_entry(ch, &tsg->ch_list, ch_entry) { if (gk20a_channel_get(ch)) { gk20a_set_error_notifier(ch, - NVGPU_CHANNEL_PBDMA_ERROR); + error_notifier); gk20a_channel_put(ch); } } -- cgit v1.2.2