summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
diff options
context:
space:
mode:
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;