diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h | 4 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 6 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h | 9 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/ctxsw_trace.c | 20 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c | 4 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h | 6 |
7 files changed, 37 insertions, 17 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c index e775c10b..453d5b2f 100644 --- a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #ifdef CONFIG_DEBUG_FS | 23 | #ifdef CONFIG_DEBUG_FS |
24 | #include <linux/debugfs.h> | 24 | #include <linux/debugfs.h> |
25 | #endif | 25 | #endif |
26 | #include <uapi/linux/nvgpu.h> | ||
27 | 26 | ||
28 | #include <nvgpu/kmem.h> | 27 | #include <nvgpu/kmem.h> |
29 | #include <nvgpu/dma.h> | 28 | #include <nvgpu/dma.h> |
@@ -738,14 +737,14 @@ int gk20a_fecs_trace_deinit(struct gk20a *g) | |||
738 | } | 737 | } |
739 | 738 | ||
740 | int gk20a_gr_max_entries(struct gk20a *g, | 739 | int gk20a_gr_max_entries(struct gk20a *g, |
741 | struct nvgpu_ctxsw_trace_filter *filter) | 740 | struct nvgpu_gpu_ctxsw_trace_filter *filter) |
742 | { | 741 | { |
743 | int n; | 742 | int n; |
744 | int tag; | 743 | int tag; |
745 | 744 | ||
746 | /* Compute number of entries per record, with given filter */ | 745 | /* Compute number of entries per record, with given filter */ |
747 | for (n = 0, tag = 0; tag < gk20a_fecs_trace_num_ts(); tag++) | 746 | for (n = 0, tag = 0; tag < gk20a_fecs_trace_num_ts(); tag++) |
748 | n += (NVGPU_CTXSW_FILTER_ISSET(tag, filter) != 0); | 747 | n += (NVGPU_GPU_CTXSW_FILTER_ISSET(tag, filter) != 0); |
749 | 748 | ||
750 | /* Return max number of entries generated for the whole ring */ | 749 | /* Return max number of entries generated for the whole ring */ |
751 | return n * GK20A_FECS_TRACE_NUM_RECORDS; | 750 | return n * GK20A_FECS_TRACE_NUM_RECORDS; |
diff --git a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h index acac14c6..8e723107 100644 --- a/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/fecs_trace_gk20a.h | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | struct gk20a; | 26 | struct gk20a; |
27 | struct channel_gk20a; | 27 | struct channel_gk20a; |
28 | struct nvgpu_ctxsw_trace_filter; | 28 | struct nvgpu_gpu_ctxsw_trace_filter; |
29 | 29 | ||
30 | int gk20a_fecs_trace_poll(struct gk20a *g); | 30 | int gk20a_fecs_trace_poll(struct gk20a *g); |
31 | int gk20a_fecs_trace_init(struct gk20a *g); | 31 | int gk20a_fecs_trace_init(struct gk20a *g); |
@@ -35,7 +35,7 @@ int gk20a_fecs_trace_unbind_channel(struct gk20a *g, struct channel_gk20a *ch); | |||
35 | int gk20a_fecs_trace_reset(struct gk20a *g); | 35 | int gk20a_fecs_trace_reset(struct gk20a *g); |
36 | int gk20a_fecs_trace_deinit(struct gk20a *g); | 36 | int gk20a_fecs_trace_deinit(struct gk20a *g); |
37 | int gk20a_gr_max_entries(struct gk20a *g, | 37 | int gk20a_gr_max_entries(struct gk20a *g, |
38 | struct nvgpu_ctxsw_trace_filter *filter); | 38 | struct nvgpu_gpu_ctxsw_trace_filter *filter); |
39 | int gk20a_fecs_trace_enable(struct gk20a *g); | 39 | int gk20a_fecs_trace_enable(struct gk20a *g); |
40 | int gk20a_fecs_trace_disable(struct gk20a *g); | 40 | int gk20a_fecs_trace_disable(struct gk20a *g); |
41 | bool gk20a_fecs_trace_is_enabled(struct gk20a *g); | 41 | bool gk20a_fecs_trace_is_enabled(struct gk20a *g); |
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 8fc88677..93a5bb23 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -43,7 +43,7 @@ struct nvgpu_mem_sgt; | |||
43 | struct nvgpu_warpstate; | 43 | struct nvgpu_warpstate; |
44 | struct nvgpu_clk_arb; | 44 | struct nvgpu_clk_arb; |
45 | #ifdef CONFIG_GK20A_CTXSW_TRACE | 45 | #ifdef CONFIG_GK20A_CTXSW_TRACE |
46 | struct nvgpu_ctxsw_trace_filter; | 46 | struct nvgpu_gpu_ctxsw_trace_filter; |
47 | #endif | 47 | #endif |
48 | struct priv_cmd_entry; | 48 | struct priv_cmd_entry; |
49 | 49 | ||
@@ -894,7 +894,7 @@ struct gpu_ops { | |||
894 | struct { | 894 | struct { |
895 | int (*init)(struct gk20a *g); | 895 | int (*init)(struct gk20a *g); |
896 | int (*max_entries)(struct gk20a *, | 896 | int (*max_entries)(struct gk20a *, |
897 | struct nvgpu_ctxsw_trace_filter *filter); | 897 | struct nvgpu_gpu_ctxsw_trace_filter *filter); |
898 | int (*flush)(struct gk20a *g); | 898 | int (*flush)(struct gk20a *g); |
899 | int (*poll)(struct gk20a *g); | 899 | int (*poll)(struct gk20a *g); |
900 | int (*enable)(struct gk20a *g); | 900 | int (*enable)(struct gk20a *g); |
@@ -911,7 +911,7 @@ struct gpu_ops { | |||
911 | int (*mmap_user_buffer)(struct gk20a *g, | 911 | int (*mmap_user_buffer)(struct gk20a *g, |
912 | struct vm_area_struct *vma); | 912 | struct vm_area_struct *vma); |
913 | int (*set_filter)(struct gk20a *g, | 913 | int (*set_filter)(struct gk20a *g, |
914 | struct nvgpu_ctxsw_trace_filter *filter); | 914 | struct nvgpu_gpu_ctxsw_trace_filter *filter); |
915 | } fecs_trace; | 915 | } fecs_trace; |
916 | #endif | 916 | #endif |
917 | struct { | 917 | struct { |
diff --git a/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h b/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h index 9dd6833f..4eaf9bf0 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h +++ b/drivers/gpu/nvgpu/include/nvgpu/ctxsw_trace.h | |||
@@ -44,6 +44,15 @@ struct channel_gk20a; | |||
44 | #define NVGPU_GPU_CTXSW_TAG_LAST \ | 44 | #define NVGPU_GPU_CTXSW_TAG_LAST \ |
45 | NVGPU_GPU_CTXSW_TAG_INVALID_TIMESTAMP | 45 | NVGPU_GPU_CTXSW_TAG_INVALID_TIMESTAMP |
46 | 46 | ||
47 | #define NVGPU_GPU_CTXSW_FILTER_ISSET(n, p) \ | ||
48 | ((p)->tag_bits[(n) / 64] & (1 << ((n) & 63))) | ||
49 | |||
50 | #define NVGPU_GPU_CTXSW_FILTER_SIZE (NVGPU_GPU_CTXSW_TAG_LAST + 1) | ||
51 | |||
52 | struct nvgpu_gpu_ctxsw_trace_filter { | ||
53 | u64 tag_bits[(NVGPU_GPU_CTXSW_FILTER_SIZE + 63) / 64]; | ||
54 | }; | ||
55 | |||
47 | /* | 56 | /* |
48 | * The binary format of 'struct nvgpu_gpu_ctxsw_trace_entry' introduced here | 57 | * The binary format of 'struct nvgpu_gpu_ctxsw_trace_entry' introduced here |
49 | * should match that of 'struct nvgpu_ctxsw_trace_entry' defined in uapi | 58 | * should match that of 'struct nvgpu_ctxsw_trace_entry' defined in uapi |
diff --git a/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c b/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c index 4983061b..16b040da 100644 --- a/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c +++ b/drivers/gpu/nvgpu/os/linux/ctxsw_trace.c | |||
@@ -46,7 +46,7 @@ struct gk20a_ctxsw_dev { | |||
46 | 46 | ||
47 | struct nvgpu_ctxsw_ring_header *hdr; | 47 | struct nvgpu_ctxsw_ring_header *hdr; |
48 | struct nvgpu_gpu_ctxsw_trace_entry *ents; | 48 | struct nvgpu_gpu_ctxsw_trace_entry *ents; |
49 | struct nvgpu_ctxsw_trace_filter filter; | 49 | struct nvgpu_gpu_ctxsw_trace_filter filter; |
50 | bool write_enabled; | 50 | bool write_enabled; |
51 | struct nvgpu_cond readout_wq; | 51 | struct nvgpu_cond readout_wq; |
52 | size_t size; | 52 | size_t size; |
@@ -244,13 +244,25 @@ static int gk20a_ctxsw_dev_ioctl_ring_setup(struct gk20a_ctxsw_dev *dev, | |||
244 | return ret; | 244 | return ret; |
245 | } | 245 | } |
246 | 246 | ||
247 | static void nvgpu_set_ctxsw_trace_filter_args(struct nvgpu_gpu_ctxsw_trace_filter *filter_dst, | ||
248 | struct nvgpu_ctxsw_trace_filter *filter_src) | ||
249 | { | ||
250 | memcpy(filter_dst->tag_bits, filter_src->tag_bits, (NVGPU_CTXSW_FILTER_SIZE + 63) / 64); | ||
251 | } | ||
252 | |||
253 | static void nvgpu_get_ctxsw_trace_filter_args(struct nvgpu_ctxsw_trace_filter *filter_dst, | ||
254 | struct nvgpu_gpu_ctxsw_trace_filter *filter_src) | ||
255 | { | ||
256 | memcpy(filter_dst->tag_bits, filter_src->tag_bits, (NVGPU_CTXSW_FILTER_SIZE + 63) / 64); | ||
257 | } | ||
258 | |||
247 | static int gk20a_ctxsw_dev_ioctl_set_filter(struct gk20a_ctxsw_dev *dev, | 259 | static int gk20a_ctxsw_dev_ioctl_set_filter(struct gk20a_ctxsw_dev *dev, |
248 | struct nvgpu_ctxsw_trace_filter_args *args) | 260 | struct nvgpu_ctxsw_trace_filter_args *args) |
249 | { | 261 | { |
250 | struct gk20a *g = dev->g; | 262 | struct gk20a *g = dev->g; |
251 | 263 | ||
252 | nvgpu_mutex_acquire(&dev->write_lock); | 264 | nvgpu_mutex_acquire(&dev->write_lock); |
253 | dev->filter = args->filter; | 265 | nvgpu_set_ctxsw_trace_filter_args(&dev->filter, &args->filter); |
254 | nvgpu_mutex_release(&dev->write_lock); | 266 | nvgpu_mutex_release(&dev->write_lock); |
255 | 267 | ||
256 | if (g->ops.fecs_trace.set_filter) | 268 | if (g->ops.fecs_trace.set_filter) |
@@ -262,7 +274,7 @@ static int gk20a_ctxsw_dev_ioctl_get_filter(struct gk20a_ctxsw_dev *dev, | |||
262 | struct nvgpu_ctxsw_trace_filter_args *args) | 274 | struct nvgpu_ctxsw_trace_filter_args *args) |
263 | { | 275 | { |
264 | nvgpu_mutex_acquire(&dev->write_lock); | 276 | nvgpu_mutex_acquire(&dev->write_lock); |
265 | args->filter = dev->filter; | 277 | nvgpu_get_ctxsw_trace_filter_args(&args->filter, &dev->filter); |
266 | nvgpu_mutex_release(&dev->write_lock); | 278 | nvgpu_mutex_release(&dev->write_lock); |
267 | 279 | ||
268 | return 0; | 280 | return 0; |
@@ -650,7 +662,7 @@ int gk20a_ctxsw_trace_write(struct gk20a *g, | |||
650 | goto drop; | 662 | goto drop; |
651 | } | 663 | } |
652 | 664 | ||
653 | if (!NVGPU_CTXSW_FILTER_ISSET(entry->tag, &dev->filter)) { | 665 | if (!NVGPU_GPU_CTXSW_FILTER_ISSET(entry->tag, &dev->filter)) { |
654 | reason = "filtered out"; | 666 | reason = "filtered out"; |
655 | goto filter; | 667 | goto filter; |
656 | } | 668 | } |
diff --git a/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c b/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c index 255ee2bd..c878316a 100644 --- a/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c +++ b/drivers/gpu/nvgpu/os/linux/vgpu/fecs_trace_vgpu.c | |||
@@ -190,7 +190,7 @@ int vgpu_mmap_user_buffer(struct gk20a *g, struct vm_area_struct *vma) | |||
190 | 190 | ||
191 | #ifdef CONFIG_GK20A_CTXSW_TRACE | 191 | #ifdef CONFIG_GK20A_CTXSW_TRACE |
192 | int vgpu_fecs_trace_max_entries(struct gk20a *g, | 192 | int vgpu_fecs_trace_max_entries(struct gk20a *g, |
193 | struct nvgpu_ctxsw_trace_filter *filter) | 193 | struct nvgpu_gpu_ctxsw_trace_filter *filter) |
194 | { | 194 | { |
195 | struct vgpu_fecs_trace *vcst = (struct vgpu_fecs_trace *)g->fecs_trace; | 195 | struct vgpu_fecs_trace *vcst = (struct vgpu_fecs_trace *)g->fecs_trace; |
196 | 196 | ||
@@ -202,7 +202,7 @@ int vgpu_fecs_trace_max_entries(struct gk20a *g, | |||
202 | #endif | 202 | #endif |
203 | 203 | ||
204 | int vgpu_fecs_trace_set_filter(struct gk20a *g, | 204 | int vgpu_fecs_trace_set_filter(struct gk20a *g, |
205 | struct nvgpu_ctxsw_trace_filter *filter) | 205 | struct nvgpu_gpu_ctxsw_trace_filter *filter) |
206 | { | 206 | { |
207 | struct tegra_vgpu_cmd_msg msg = { | 207 | struct tegra_vgpu_cmd_msg msg = { |
208 | .cmd = TEGRA_VGPU_CMD_FECS_TRACE_SET_FILTER, | 208 | .cmd = TEGRA_VGPU_CMD_FECS_TRACE_SET_FILTER, |
diff --git a/drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h b/drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h index b957a363..496e1892 100644 --- a/drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h +++ b/drivers/gpu/nvgpu/vgpu/fecs_trace_vgpu.h | |||
@@ -27,7 +27,7 @@ | |||
27 | 27 | ||
28 | struct gk20a; | 28 | struct gk20a; |
29 | struct vm_area_struct; | 29 | struct vm_area_struct; |
30 | struct nvgpu_ctxsw_trace_filter; | 30 | struct nvgpu_gpu_ctxsw_trace_filter; |
31 | 31 | ||
32 | void vgpu_fecs_trace_data_update(struct gk20a *g); | 32 | void vgpu_fecs_trace_data_update(struct gk20a *g); |
33 | int vgpu_fecs_trace_init(struct gk20a *g); | 33 | int vgpu_fecs_trace_init(struct gk20a *g); |
@@ -40,8 +40,8 @@ int vgpu_alloc_user_buffer(struct gk20a *g, void **buf, size_t *size); | |||
40 | int vgpu_free_user_buffer(struct gk20a *g); | 40 | int vgpu_free_user_buffer(struct gk20a *g); |
41 | int vgpu_mmap_user_buffer(struct gk20a *g, struct vm_area_struct *vma); | 41 | int vgpu_mmap_user_buffer(struct gk20a *g, struct vm_area_struct *vma); |
42 | int vgpu_fecs_trace_max_entries(struct gk20a *g, | 42 | int vgpu_fecs_trace_max_entries(struct gk20a *g, |
43 | struct nvgpu_ctxsw_trace_filter *filter); | 43 | struct nvgpu_gpu_ctxsw_trace_filter *filter); |
44 | int vgpu_fecs_trace_set_filter(struct gk20a *g, | 44 | int vgpu_fecs_trace_set_filter(struct gk20a *g, |
45 | struct nvgpu_ctxsw_trace_filter *filter); | 45 | struct nvgpu_gpu_ctxsw_trace_filter *filter); |
46 | 46 | ||
47 | #endif /* __FECS_TRACE_VGPU_H */ | 47 | #endif /* __FECS_TRACE_VGPU_H */ |