diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2013-05-17 13:52:01 +0300 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 13:25:30 -0700 |
commit | 5a3ebed5e07905c714b47c8a0569cb24b1e2ece3 (patch) | |
tree | 8346063420a6dfb806354d9db7f3a1a1997a79eb /drivers | |
parent | 1b6906a78a4324c3d109c0fbbc35b97f744b5621 (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')
-rw-r--r-- | drivers/video/tegra/host/gk20a/gk20a.c | 22 |
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); |