From c6b846d34c1a3a92a856eed33c5a5175885a273a Mon Sep 17 00:00:00 2001 From: Richard Zhao Date: Thu, 1 Mar 2018 14:47:35 -0800 Subject: gpu: nvgpu: add gops.semaphore_wakeup HAL vserver handles semaphore differently from native, so it needs a callback to differentiate from native. Also created common function mc_gk20a_handle_intr_nonstall to handle all nonstall interrupts. Jira VQRM-2982 Change-Id: I1b3821717a4005ca4bf2a4dac5dcd335872f48f1 Signed-off-by: Richard Zhao Reviewed-on: https://git-master.nvidia.com/r/1656753 Reviewed-by: svc-mobile-coverity GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/gk20a.h | 2 ++ drivers/gpu/nvgpu/gk20a/mc_gk20a.c | 11 +++++++++++ drivers/gpu/nvgpu/gk20a/mc_gk20a.h | 1 + 3 files changed, 14 insertions(+) (limited to 'drivers/gpu/nvgpu/gk20a') diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 06739eee..178c1200 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -1097,6 +1097,8 @@ struct gpu_ops { int (*shutdown)(struct gk20a *g); int (*early_init)(struct gk20a *g); } nvlink; + + void (*semaphore_wakeup)(struct gk20a *g, bool post_events); }; struct nvgpu_bios_ucode { diff --git a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c index b99fbdb0..e6d81a87 100644 --- a/drivers/gpu/nvgpu/gk20a/mc_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mc_gk20a.c @@ -240,3 +240,14 @@ bool mc_gk20a_is_intr1_pending(struct gk20a *g, return is_pending; } + +void mc_gk20a_handle_intr_nonstall(struct gk20a *g, u32 ops) +{ + bool semaphore_wakeup, post_events; + + semaphore_wakeup = ops & gk20a_nonstall_ops_wakeup_semaphore; + post_events = ops & gk20a_nonstall_ops_post_events; + + if (semaphore_wakeup) + g->ops.semaphore_wakeup(g, post_events); +} diff --git a/drivers/gpu/nvgpu/gk20a/mc_gk20a.h b/drivers/gpu/nvgpu/gk20a/mc_gk20a.h index 1bddab28..870a1d3f 100644 --- a/drivers/gpu/nvgpu/gk20a/mc_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/mc_gk20a.h @@ -40,4 +40,5 @@ void gk20a_mc_reset(struct gk20a *g, u32 units); u32 gk20a_mc_boot_0(struct gk20a *g, u32 *arch, u32 *impl, u32 *rev); bool mc_gk20a_is_intr1_pending(struct gk20a *g, enum nvgpu_unit unit, u32 mc_intr_1); +void mc_gk20a_handle_intr_nonstall(struct gk20a *g, u32 ops); #endif -- cgit v1.2.2