From 837ceffcab417865db8adbdf1a2038ebde8ec1a5 Mon Sep 17 00:00:00 2001 From: Leonid Moiseichuk Date: Fri, 8 May 2015 15:06:42 +0300 Subject: gpu: nvgpu: cyclestats mode E snapshots support That is a kernel supporting code for cyclestats mode E. Cyclestats mode E implemented following Windows-design in user-space and required the following operations to be implemented: - attach a client for shared hardware buffer of device - detach client from shared hardware buffer - flush means copy of available data from hardware buffer to private client buffers according to perfmon IDs assigned for clients - perfmon IDs management for user-space clients - a NVGPU_GPU_FLAGS_SUPPORT_CYCLE_STATS_SNAPSHOT capability added Bug 1573150 Change-Id: I9e09f0fbb2be5a95c47e6d80a2e23fa839b46f9a Signed-off-by: Leonid Moiseichuk Reviewed-on: http://git-master/r/740653 (cherry picked from commit 79fe89fd4cea39d8ab9dbef0558cd806ddfda87f) Reviewed-on: http://git-master/r/753274 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/gr_gk20a.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 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 b2213739..0909b660 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h @@ -170,6 +170,11 @@ struct sm_info { u8 tpc_index; }; +#if defined(CONFIG_GK20A_CYCLE_STATS) +struct gk20a_cs_snapshot_client; +struct gk20a_cs_snapshot; +#endif + struct gr_gk20a { struct gk20a *g; struct { @@ -294,6 +299,10 @@ struct gr_gk20a { u32 fbp_en_mask; u32 no_of_sm; struct sm_info *sm_to_cluster; +#if defined(CONFIG_GK20A_CYCLE_STATS) + struct mutex cs_lock; + struct gk20a_cs_snapshot *cs_data; +#endif }; void gk20a_fecs_dump_falcon_stats(struct gk20a *g); @@ -497,4 +506,27 @@ void gr_gk20a_free_gr_ctx(struct gk20a *g, int gr_gk20a_halt_pipe(struct gk20a *g); int gr_gk20a_debugfs_init(struct gk20a *g); +#if defined(CONFIG_GK20A_CYCLE_STATS) +int gr_gk20a_css_attach(struct gk20a *g, /* in - main hw structure */ + u32 dmabuf_fd, /* in - dma mapped memory */ + u32 perfmon_id_count, /* in - number of perfmons*/ + u32 *perfmon_id_start, /* out- index of first pm */ + /* out - pointer to client data used in later */ + struct gk20a_cs_snapshot_client **css_client); + +int gr_gk20a_css_detach(struct gk20a *g, + struct gk20a_cs_snapshot_client *css_client); +int gr_gk20a_css_flush(struct gk20a *g, + struct gk20a_cs_snapshot_client *css_client); + +void gr_gk20a_free_cyclestats_snapshot_data(struct gk20a *g); + +#else +/* fake empty cleanup function if no cyclestats snapshots enabled */ +static inline void gr_gk20a_free_cyclestats_snapshot_data(struct gk20a *g) +{ + (void)g; +} +#endif + #endif /*__GR_GK20A_H__*/ -- cgit v1.2.2