From a17a938a48af462ccf89195196a13b9623af2e21 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Wed, 8 Nov 2017 06:05:41 -0800 Subject: gpu: nvgpu: remove NVGPU_ALLOC_GPFIFO_EX_FLAGS_* from common code In gk20a_channel_alloc_gpfifo(), we use linux specific flags NVGPU_ALLOC_GPFIFO_EX_FLAGS_* Since common code should be independent of linux specific code, define new flags NVGPU_GPFIFO_FLAGS_SUPPORT_* in common code and use them in gk20a_channel_alloc_gpfifo() Linux code will parse the user flags and send appropriate flags to gk20a_channel_alloc_gpfifo() Jira NVGPU-381 Change-Id: Ibec51903b3407175fbba727208483b0dc36a5772 Signed-off-by: Deepak Nibade Reviewed-on: https://git-master.nvidia.com/r/1594422 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/linux/ioctl_channel.c | 29 +++++++++++++++++++------- drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 4 ++-- drivers/gpu/nvgpu/gk20a/channel_gk20a.h | 4 ++++ 3 files changed, 28 insertions(+), 9 deletions(-) (limited to 'drivers/gpu') diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c index 781a803e..0c8bff43 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_channel.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_channel.c @@ -455,12 +455,27 @@ clean_up: return err; } -int nvgpu_channel_ioctl_alloc_gpfifo(struct channel_gk20a *c, - struct nvgpu_alloc_gpfifo_ex_args *args) +static u32 nvgpu_gpfifo_user_flags_to_common_flags(u32 user_flags) { - return gk20a_channel_alloc_gpfifo(c, args->num_entries, - args->num_inflight_jobs, - args->flags); + u32 flags = 0; + + if (user_flags & NVGPU_ALLOC_GPFIFO_EX_FLAGS_VPR_ENABLED) + flags |= NVGPU_GPFIFO_FLAGS_SUPPORT_VPR; + + if (user_flags & NVGPU_ALLOC_GPFIFO_EX_FLAGS_DETERMINISTIC) + flags |= NVGPU_GPFIFO_FLAGS_SUPPORT_DETERMINISTIC; + + return flags; +} + +static int nvgpu_channel_ioctl_alloc_gpfifo(struct channel_gk20a *c, + unsigned int num_entries, + unsigned int num_inflight_jobs, + u32 user_flags) +{ + return gk20a_channel_alloc_gpfifo(c, num_entries, + num_inflight_jobs, + nvgpu_gpfifo_user_flags_to_common_flags(user_flags)); } @@ -1031,7 +1046,7 @@ long gk20a_channel_ioctl(struct file *filp, gk20a_idle(ch->g); break; } - err = gk20a_channel_alloc_gpfifo(ch, + err = nvgpu_channel_ioctl_alloc_gpfifo(ch, alloc_gpfifo_ex_args->num_entries, alloc_gpfifo_ex_args->num_inflight_jobs, alloc_gpfifo_ex_args->flags); @@ -1056,7 +1071,7 @@ long gk20a_channel_ioctl(struct file *filp, * submitted gpfifos and another one after, for internal usage. * Triple the requested size. */ - err = gk20a_channel_alloc_gpfifo(ch, + err = nvgpu_channel_ioctl_alloc_gpfifo(ch, alloc_gpfifo_args->num_entries * 3, 0, alloc_gpfifo_args->flags); diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index 229e3782..9a8130ba 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c @@ -1242,10 +1242,10 @@ int gk20a_channel_alloc_gpfifo(struct channel_gk20a *c, gpfifo_size = num_entries; gpfifo_entry_size = nvgpu_get_gpfifo_entry_size(); - if (flags & NVGPU_ALLOC_GPFIFO_EX_FLAGS_VPR_ENABLED) + if (flags & NVGPU_GPFIFO_FLAGS_SUPPORT_VPR) c->vpr = true; - if (flags & NVGPU_ALLOC_GPFIFO_EX_FLAGS_DETERMINISTIC) { + if (flags & NVGPU_GPFIFO_FLAGS_SUPPORT_DETERMINISTIC) { nvgpu_rwsem_down_read(&g->deterministic_busy); /* * Railgating isn't deterministic; instead of disallowing diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index 0cb60200..58a8aa97 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h @@ -48,6 +48,10 @@ struct fifo_profile_gk20a; #include "channel_t19x.h" #endif +/* Flags to be passed to gk20a_channel_alloc_gpfifo() */ +#define NVGPU_GPFIFO_FLAGS_SUPPORT_VPR (1 << 0) +#define NVGPU_GPFIFO_FLAGS_SUPPORT_DETERMINISTIC (1 << 1) + struct notification { struct { u32 nanoseconds[2]; -- cgit v1.2.2