diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c | 18 |
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 | ||
246 | static 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 | |||
246 | long gk20a_ctrl_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | 260 | long 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; |