summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
diff options
context:
space:
mode:
authorMahantesh Kumbar <mkumbar@nvidia.com>2017-06-30 02:12:17 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-07-04 02:44:30 -0400
commit2cf964d175abc0f3eae9ed0e01e6eeed5cd6b4da (patch)
treedc91c30fdfcf4ee37ff830dcffc7b15c8b5add14 /drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
parentfbeca4a8414c03a1564d7a370964187be51a3e6c (diff)
gpu: nvgpu: Falcon controller halt interrupt status clear
- Added nvgpu_flcn_clear_halt_intr_status() to Wait for halt interrupt status clear by clear_halt_interrupt_status() HAL within timeout - Added gk20a_flcn_clear_halt_interrupt_status() to clear falcon controller halt interrupt status - Replaced flacon halt interrupt clear with nvgpu_flcn_clear_halt_intr_status() method NVGPU JIRA-99 Change-Id: I762a3c01cd1d02028eb6aaa9898a50be94376619 Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com> Reviewed-on: https://git-master/r/1511333 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/flcn_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/flcn_gk20a.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c b/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
index 328f5bf7..b52652e2 100644
--- a/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
@@ -38,6 +38,26 @@ static int gk20a_flcn_reset(struct nvgpu_falcon *flcn)
38 return status; 38 return status;
39} 39}
40 40
41static bool gk20a_flcn_clear_halt_interrupt_status(struct nvgpu_falcon *flcn)
42{
43 struct gk20a *g = flcn->g;
44 u32 base_addr = flcn->flcn_base;
45 u32 data = 0;
46 bool status = false;
47
48 gk20a_writel(g, base_addr + falcon_falcon_irqsclr_r(),
49 gk20a_readl(g, base_addr + falcon_falcon_irqsclr_r()) |
50 (0x10));
51 data = gk20a_readl(g, (base_addr + falcon_falcon_irqstat_r()));
52
53 if ((data & falcon_falcon_irqstat_halt_true_f()) !=
54 falcon_falcon_irqstat_halt_true_f())
55 /*halt irq is clear*/
56 status = true;
57
58 return status;
59}
60
41static void gk20a_flcn_set_irq(struct nvgpu_falcon *flcn, bool enable) 61static void gk20a_flcn_set_irq(struct nvgpu_falcon *flcn, bool enable)
42{ 62{
43 struct gk20a *g = flcn->g; 63 struct gk20a *g = flcn->g;
@@ -275,6 +295,8 @@ void gk20a_falcon_ops(struct nvgpu_falcon *flcn)
275 295
276 flcn_ops->reset = gk20a_flcn_reset; 296 flcn_ops->reset = gk20a_flcn_reset;
277 flcn_ops->set_irq = gk20a_flcn_set_irq; 297 flcn_ops->set_irq = gk20a_flcn_set_irq;
298 flcn_ops->clear_halt_interrupt_status =
299 gk20a_flcn_clear_halt_interrupt_status;
278 flcn_ops->is_falcon_cpu_halted = gk20a_is_falcon_cpu_halted; 300 flcn_ops->is_falcon_cpu_halted = gk20a_is_falcon_cpu_halted;
279 flcn_ops->is_falcon_idle = gk20a_is_falcon_idle; 301 flcn_ops->is_falcon_idle = gk20a_is_falcon_idle;
280 flcn_ops->is_falcon_scrubbing_done = gk20a_is_falcon_scrubbing_done; 302 flcn_ops->is_falcon_scrubbing_done = gk20a_is_falcon_scrubbing_done;