diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/flcn_gk20a.c | 22 |
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 | ||
41 | static 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 | |||
41 | static void gk20a_flcn_set_irq(struct nvgpu_falcon *flcn, bool enable) | 61 | static 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; |