diff options
author | Seema Khowala <seemaj@nvidia.com> | 2017-02-24 19:14:03 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-03-07 03:10:44 -0500 |
commit | 35f0cf0efefe4a64ee25a5b118338b15e552dcb0 (patch) | |
tree | c23c4a62e154d83d1558d9d50681cf5bfd1b1899 /drivers/gpu/nvgpu/gk20a/mc_gk20a.c | |
parent | d6ff5ef649ead7cf7caded5c7742efd7ad569a8a (diff) |
gpu: nvgpu: change stall intr handling order
-Handle pbus and priv stall interrupts first.
In general critical interrupts should be
handled before any other non critical ones.
-Dump info enabled with gpu_dbg_intr if priv_ring
interrupt is flagged by fmodel.
JIRA NVGPU-25
Change-Id: Iee767d8c9c933ceb57532c1b5a7fd7812daf1b6d
Signed-off-by: Seema Khowala <seemaj@nvidia.com>
Reviewed-on: http://git-master/r/1311273
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com>
Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mc_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mc_gk20a.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c index 107c851c..65f1a119 100644 --- a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * GK20A Master Control | 2 | * GK20A Master Control |
3 | * | 3 | * |
4 | * Copyright (c) 2014-2016, NVIDIA CORPORATION. All rights reserved. | 4 | * Copyright (c) 2014-2017, NVIDIA CORPORATION. All rights reserved. |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify it | 6 | * This program is free software; you can redistribute it and/or modify it |
7 | * under the terms and conditions of the GNU General Public License, | 7 | * under the terms and conditions of the GNU General Public License, |
@@ -88,6 +88,12 @@ irqreturn_t mc_gk20a_intr_thread_stall(struct gk20a *g) | |||
88 | 88 | ||
89 | gk20a_dbg(gpu_dbg_intr, "stall intr %08x\n", mc_intr_0); | 89 | gk20a_dbg(gpu_dbg_intr, "stall intr %08x\n", mc_intr_0); |
90 | 90 | ||
91 | /* handle critical interrupts first */ | ||
92 | if (mc_intr_0 & mc_intr_0_pbus_pending_f()) | ||
93 | gk20a_pbus_isr(g); | ||
94 | if (mc_intr_0 & mc_intr_0_priv_ring_pending_f()) | ||
95 | gk20a_priv_ring_isr(g); | ||
96 | |||
91 | for (engine_id_idx = 0; engine_id_idx < g->fifo.num_engines; engine_id_idx++) { | 97 | for (engine_id_idx = 0; engine_id_idx < g->fifo.num_engines; engine_id_idx++) { |
92 | active_engine_id = g->fifo.active_engines_list[engine_id_idx]; | 98 | active_engine_id = g->fifo.active_engines_list[engine_id_idx]; |
93 | 99 | ||
@@ -112,12 +118,8 @@ irqreturn_t mc_gk20a_intr_thread_stall(struct gk20a *g) | |||
112 | gk20a_fifo_isr(g); | 118 | gk20a_fifo_isr(g); |
113 | if (mc_intr_0 & mc_intr_0_pmu_pending_f()) | 119 | if (mc_intr_0 & mc_intr_0_pmu_pending_f()) |
114 | gk20a_pmu_isr(g); | 120 | gk20a_pmu_isr(g); |
115 | if (mc_intr_0 & mc_intr_0_priv_ring_pending_f()) | ||
116 | gk20a_priv_ring_isr(g); | ||
117 | if (mc_intr_0 & mc_intr_0_ltc_pending_f()) | 121 | if (mc_intr_0 & mc_intr_0_ltc_pending_f()) |
118 | g->ops.ltc.isr(g); | 122 | g->ops.ltc.isr(g); |
119 | if (mc_intr_0 & mc_intr_0_pbus_pending_f()) | ||
120 | gk20a_pbus_isr(g); | ||
121 | 123 | ||
122 | /* sync handled irq counter before re-enabling interrupts */ | 124 | /* sync handled irq counter before re-enabling interrupts */ |
123 | atomic_set(&g->sw_irq_stall_last_handled, hw_irq_count); | 125 | atomic_set(&g->sw_irq_stall_last_handled, hw_irq_count); |