diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2017-05-11 16:12:03 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-05-26 06:34:08 -0400 |
commit | 726900b8433294fd89a6d730d2fec9de8e33afda (patch) | |
tree | 6d6aa5b6e07a792441e43b74ea273f85933eebe0 /drivers/gpu/nvgpu/gk20a/gk20a.h | |
parent | 0bb47c3675d2030545d40353931e2b8120541de4 (diff) |
gpu: nvgpu: Split stalling interrupt handling
Split handling of stalling interrupt to Linux specific chip
agnostic and OS independent chip specific parts.
Linux specific chip independent part contains handler for ISR
and passing the control to a bottom half. It uses the new MC HALs
intr_stall (query interrupt status), intr_pause (pause interrupts)
and intr_resume (resume interrupts).
MC HAL isr_stall now returns void and gets called in thread context
and thus remove isr_thread_stall and replace the implementation with
isr_stall.
JIRA NVGPU-26
Change-Id: I206f330f6fc4a1f4def47c5f986585ac4080216d
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/1480243
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gk20a.h')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index ceadbae2..29ac4763 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -812,13 +812,15 @@ struct gpu_ops { | |||
812 | void (*intr_enable)(struct gk20a *g); | 812 | void (*intr_enable)(struct gk20a *g); |
813 | void (*intr_unit_config)(struct gk20a *g, | 813 | void (*intr_unit_config)(struct gk20a *g, |
814 | bool enable, bool is_stalling, u32 unit); | 814 | bool enable, bool is_stalling, u32 unit); |
815 | irqreturn_t (*isr_stall)(struct gk20a *g); | 815 | void (*isr_stall)(struct gk20a *g); |
816 | irqreturn_t (*isr_nonstall)(struct gk20a *g); | 816 | irqreturn_t (*isr_nonstall)(struct gk20a *g); |
817 | irqreturn_t (*isr_thread_stall)(struct gk20a *g); | ||
818 | void (*isr_thread_nonstall)(struct gk20a *g, u32 intr); | 817 | void (*isr_thread_nonstall)(struct gk20a *g, u32 intr); |
819 | void (*isr_nonstall_cb)(struct work_struct *work); | 818 | void (*isr_nonstall_cb)(struct work_struct *work); |
820 | bool (*is_intr_hub_pending)(struct gk20a *g, u32 mc_intr); | 819 | bool (*is_intr_hub_pending)(struct gk20a *g, u32 mc_intr); |
821 | u32 intr_mask_restore[4]; | 820 | u32 intr_mask_restore[4]; |
821 | u32 (*intr_stall)(struct gk20a *g); | ||
822 | void (*intr_stall_pause)(struct gk20a *g); | ||
823 | void (*intr_stall_resume)(struct gk20a *g); | ||
822 | void (*enable)(struct gk20a *g, u32 units); | 824 | void (*enable)(struct gk20a *g, u32 units); |
823 | void (*disable)(struct gk20a *g, u32 units); | 825 | void (*disable)(struct gk20a *g, u32 units); |
824 | void (*reset)(struct gk20a *g, u32 units); | 826 | void (*reset)(struct gk20a *g, u32 units); |