summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
diff options
context:
space:
mode:
authorsujeet baranwal <sbaranwal@nvidia.com>2015-02-19 13:34:51 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 21:08:16 -0400
commit8d1ab756ed8a7f4d3138dc5da9d2de9f52915261 (patch)
tree969a5a5aead991570d8c8c56acd41adb2103b8f5 /drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
parentac205be1d31b00c5641df81d53f2da5f143d3354 (diff)
gpu: nvgpu: ioctl for flushing GPU L2
CUDA devtools need to be able to flush the GPU's cache in a sideband fashion and so cannot use methods. This change implements an nvgpu_gpu_ioctl to flush and optionally invalidate the GPU's L2 cache and flush fb. Change-Id: Ib06a0bc8d8880ffbfe4b056518cc3c3df0cc4988 Signed-off-by: sujeet baranwal <sbaranwal@nvidia.com> Signed-off-by: Mayank Kaushik <mkaushik@nvidia.com> Reviewed-on: http://git-master/r/671809 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c b/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
index 4dee3faf..7b617a03 100644
--- a/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c
@@ -243,6 +243,20 @@ static int gk20a_ctrl_get_tpc_masks(struct gk20a *g,
243 return err; 243 return err;
244} 244}
245 245
246static int nvgpu_gpu_ioctl_l2_fb_ops(struct gk20a *g,
247 struct nvgpu_gpu_l2_fb_args *args)
248{
249 int err = 0;
250
251 if (args->l2_flush)
252 g->ops.mm.l2_flush(g, args->l2_invalidate ? true : false);
253
254 if (args->fb_flush)
255 g->ops.mm.fb_flush(g);
256
257 return err;
258}
259
246long gk20a_ctrl_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) 260long gk20a_ctrl_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
247{ 261{
248 struct platform_device *dev = filp->private_data; 262 struct platform_device *dev = filp->private_data;
@@ -423,6 +437,10 @@ long gk20a_ctrl_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg
423 err = gk20a_channel_open_ioctl(g, 437 err = gk20a_channel_open_ioctl(g,
424 (struct nvgpu_channel_open_args *)buf); 438 (struct nvgpu_channel_open_args *)buf);
425 break; 439 break;
440 case NVGPU_GPU_IOCTL_FLUSH_L2:
441 err = nvgpu_gpu_ioctl_l2_fb_ops(g,
442 (struct nvgpu_gpu_l2_fb_args *)buf);
443 break;
426 default: 444 default:
427 dev_dbg(dev_from_gk20a(g), "unrecognized gpu ioctl cmd: 0x%x", cmd); 445 dev_dbg(dev_from_gk20a(g), "unrecognized gpu ioctl cmd: 0x%x", cmd);
428 err = -ENOTTY; 446 err = -ENOTTY;