From ee66559a0b3b82b3dc9be684261ddd0954731ff5 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Wed, 18 Jun 2014 18:32:03 +0530 Subject: gpu: nvgpu: add TSG support for engine context All channels in a TSG need to share same engine context i.e. pointer in RAMFC of all channels in a TSG must point to same NV_RAMIN_GR_WFI_TARGET To get this, add a pointer to gr_ctx inside TSG struct so that TSG can maintain its own unique gr_ctx Also, change the type of gr_ctx in a channel to pointer variable so that if channel is part of TSG it can point to TSG's gr_ctx otherwise it will point to its own gr_ctx In gk20a_alloc_obj_ctx(), allocate gr_ctx as below : 1) If channel is not part of any TSG - allocate its own gr_ctx buffer if it is already not allocated 2) If channel is part of TSG - Check if TSG has already allocated gr_ctx (as part of TSG) - If yes, channel's gr_ctx will point to that of TSG's - If not, then it means channels is first to be bounded to this TSG - And in this case we will allocate new gr_ctx on TSG first and then make channel's gr_ctx to point to this gr_ctx Also, gr_ctx will be released as below ; 1) If channels is not part of TSG, then it will be released when channels is closed 2) Otherwise, it will be released when TSG itself is closed Bug 1470692 Change-Id: Id347217d5b462e0e972cd3d79d17795b37034a50 Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/417065 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/gr_gk20a.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.h') diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h index 05c27ffd..cae69ba6 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h @@ -20,6 +20,7 @@ #include +#include "tsg_gk20a.h" #include "gr_ctx_gk20a.h" #define GR_IDLE_CHECK_DEFAULT 100 /* usec */ @@ -414,4 +415,6 @@ void gr_gk20a_get_sm_dsm_perf_ctrl_regs(struct gk20a *g, u32 **sm_dsm_perf_regs, u32 *perf_register_stride); int gr_gk20a_setup_rop_mapping(struct gk20a *g, struct gr_gk20a *gr); + +void gr_gk20a_free_tsg_gr_ctx(struct tsg_gk20a *c); #endif /*__GR_GK20A_H__*/ -- cgit v1.2.2