summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2013-05-17 13:52:01 +0300
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 13:25:30 -0700
commit5a3ebed5e07905c714b47c8a0569cb24b1e2ece3 (patch)
tree8346063420a6dfb806354d9db7f3a1a1997a79eb /drivers/video
parent1b6906a78a4324c3d109c0fbbc35b97f744b5621 (diff)
video: tegra: host: Do not loop in gk20a isr
gk20a isr looped three times for every asserted interrupt. This causes hardware to crash, so remove the iteration. Any remaining interrupts will just reassert and will be handled in next isr. Bug 1174509 Change-Id: I33798249568d802469dd6c92bc9f6eab2e06136f Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/229767 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Juha Tukkinen <jtukkinen@nvidia.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/tegra/host/gk20a/gk20a.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/drivers/video/tegra/host/gk20a/gk20a.c b/drivers/video/tegra/host/gk20a/gk20a.c
index 54a68fcb8e80..bb877503a327 100644
--- a/drivers/video/tegra/host/gk20a/gk20a.c
+++ b/drivers/video/tegra/host/gk20a/gk20a.c
@@ -482,20 +482,14 @@ static irqreturn_t gk20a_intr_thread(int irq, void *dev_id)
mc_intr_0 = gk20a_readl(g, mc_intr_0_r());
- /* loop as many as three more times in case new interrupts come up
- * while we're processing current ones */
- while (mc_intr_0 && loop++ < 3) {
- if (mc_intr_0 & mc_intr_0_pgraph_pending_f())
- gk20a_gr_isr(g);
- if (mc_intr_0 & mc_intr_0_pfifo_pending_f())
- gk20a_fifo_isr(g);
- if (mc_intr_0 & mc_intr_0_pmu_pending_f())
- gk20a_pmu_isr(g);
- if (mc_intr_0 & mc_intr_0_priv_ring_pending_f())
- gk20a_priv_ring_isr(g);
- mc_intr_0 = gk20a_readl(g, mc_intr_0_r());
- }
-
+ if (mc_intr_0 & mc_intr_0_pgraph_pending_f())
+ gk20a_gr_isr(g);
+ if (mc_intr_0 & mc_intr_0_pfifo_pending_f())
+ gk20a_fifo_isr(g);
+ if (mc_intr_0 & mc_intr_0_pmu_pending_f())
+ gk20a_pmu_isr(g);
+ if (mc_intr_0 & mc_intr_0_priv_ring_pending_f())
+ gk20a_priv_ring_isr(g);
if (mc_intr_0)
nvhost_dbg_info("leaving isr with interrupt pending 0x%08x",
mc_intr_0);