mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 01:50:07 +03:00
gpu: nvgpu: Add uapi support for NVGPU_GPU_IOCTL_GET_ENGINE_INFO
Implement NVGPU_GPU_IOCTL_GET_ENGINE_INFO for retrieving the list of supported engines and their corresponding run list id:s. JIRA DNVGPU-25 Change-Id: I8703388660190f7dcb509c0676f283ca4b820b6f Signed-off-by: Lakshmanan M <lm@nvidia.com> Reviewed-on: http://git-master/r/1160939 Reviewed-by: Sami Kiminki <skiminki@nvidia.com> Reviewed-by: Konsta Holtta <kholtta@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
committed by
Terje Bergstrom
parent
7f6fede92c
commit
823ba42456
@@ -674,6 +674,69 @@ clean_up:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nvgpu_gpu_get_engine_info(
|
||||||
|
struct gk20a *g,
|
||||||
|
struct nvgpu_gpu_get_engine_info_args *args)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
u32 engine_enum = ENGINE_INVAL_GK20A;
|
||||||
|
u32 report_index = 0;
|
||||||
|
u32 engine_id_idx;
|
||||||
|
const u32 max_buffer_engines = args->engine_info_buf_size /
|
||||||
|
sizeof(struct nvgpu_gpu_get_engine_info_item);
|
||||||
|
struct nvgpu_gpu_get_engine_info_item __user *dst_item_list =
|
||||||
|
(void __user *)(uintptr_t)args->engine_info_buf_addr;
|
||||||
|
|
||||||
|
for (engine_id_idx = 0; engine_id_idx < g->fifo.num_engines;
|
||||||
|
++engine_id_idx) {
|
||||||
|
u32 active_engine_id = g->fifo.active_engines_list[engine_id_idx];
|
||||||
|
const struct fifo_engine_info_gk20a *src_info =
|
||||||
|
&g->fifo.engine_info[active_engine_id];
|
||||||
|
struct nvgpu_gpu_get_engine_info_item dst_info;
|
||||||
|
|
||||||
|
memset(&dst_info, 0, sizeof(dst_info));
|
||||||
|
|
||||||
|
engine_enum = src_info->engine_enum;
|
||||||
|
|
||||||
|
switch (engine_enum) {
|
||||||
|
case ENGINE_GR_GK20A:
|
||||||
|
dst_info.engine_id = NVGPU_GPU_ENGINE_ID_GR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ENGINE_GRCE_GK20A:
|
||||||
|
dst_info.engine_id = NVGPU_GPU_ENGINE_ID_GR_COPY;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ENGINE_ASYNC_CE_GK20A:
|
||||||
|
dst_info.engine_id = NVGPU_GPU_ENGINE_ID_ASYNC_COPY;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
gk20a_err(dev_from_gk20a(g), "Unmapped engine enum %u\n",
|
||||||
|
engine_enum);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
dst_info.engine_instance = src_info->inst_id;
|
||||||
|
dst_info.runlist_id = src_info->runlist_id;
|
||||||
|
|
||||||
|
if (report_index < max_buffer_engines) {
|
||||||
|
err = copy_to_user(&dst_item_list[report_index],
|
||||||
|
&dst_info, sizeof(dst_info));
|
||||||
|
if (err)
|
||||||
|
goto clean_up;
|
||||||
|
}
|
||||||
|
|
||||||
|
++report_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
args->engine_info_buf_size =
|
||||||
|
report_index * sizeof(struct nvgpu_gpu_get_engine_info_item);
|
||||||
|
|
||||||
|
clean_up:
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
long gk20a_ctrl_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
long gk20a_ctrl_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
struct device *dev = filp->private_data;
|
struct device *dev = filp->private_data;
|
||||||
@@ -916,6 +979,11 @@ long gk20a_ctrl_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg
|
|||||||
(struct nvgpu_gpu_get_gpu_time_args *)buf);
|
(struct nvgpu_gpu_get_gpu_time_args *)buf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NVGPU_GPU_IOCTL_GET_ENGINE_INFO:
|
||||||
|
err = nvgpu_gpu_get_engine_info(g,
|
||||||
|
(struct nvgpu_gpu_get_engine_info_args *)buf);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
dev_dbg(dev_from_gk20a(g), "unrecognized gpu ioctl cmd: 0x%x", cmd);
|
dev_dbg(dev_from_gk20a(g), "unrecognized gpu ioctl cmd: 0x%x", cmd);
|
||||||
err = -ENOTTY;
|
err = -ENOTTY;
|
||||||
|
|||||||
@@ -394,6 +394,33 @@ struct nvgpu_gpu_get_gpu_time_args {
|
|||||||
__u64 reserved;
|
__u64 reserved;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct nvgpu_gpu_get_engine_info_item {
|
||||||
|
|
||||||
|
#define NVGPU_GPU_ENGINE_ID_GR 0
|
||||||
|
#define NVGPU_GPU_ENGINE_ID_GR_COPY 1
|
||||||
|
#define NVGPU_GPU_ENGINE_ID_ASYNC_COPY 2
|
||||||
|
__u32 engine_id;
|
||||||
|
|
||||||
|
__u32 engine_instance;
|
||||||
|
|
||||||
|
/* runlist id for opening channels to the engine, or -1 if
|
||||||
|
* channels are not supported */
|
||||||
|
__s32 runlist_id;
|
||||||
|
|
||||||
|
__u32 reserved;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct nvgpu_gpu_get_engine_info_args {
|
||||||
|
/* [in] Buffer size reserved by userspace.
|
||||||
|
*
|
||||||
|
* [out] Full kernel buffer size. Multiple of sizeof(struct
|
||||||
|
* nvgpu_gpu_get_engine_info_item)
|
||||||
|
*/
|
||||||
|
__u32 engine_info_buf_size;
|
||||||
|
__u32 reserved;
|
||||||
|
__u64 engine_info_buf_addr;
|
||||||
|
};
|
||||||
|
|
||||||
#define NVGPU_GPU_IOCTL_ZCULL_GET_CTX_SIZE \
|
#define NVGPU_GPU_IOCTL_ZCULL_GET_CTX_SIZE \
|
||||||
_IOR(NVGPU_GPU_IOCTL_MAGIC, 1, struct nvgpu_gpu_zcull_get_ctx_size_args)
|
_IOR(NVGPU_GPU_IOCTL_MAGIC, 1, struct nvgpu_gpu_zcull_get_ctx_size_args)
|
||||||
#define NVGPU_GPU_IOCTL_ZCULL_GET_INFO \
|
#define NVGPU_GPU_IOCTL_ZCULL_GET_INFO \
|
||||||
@@ -446,8 +473,11 @@ struct nvgpu_gpu_get_gpu_time_args {
|
|||||||
#define NVGPU_GPU_IOCTL_GET_GPU_TIME \
|
#define NVGPU_GPU_IOCTL_GET_GPU_TIME \
|
||||||
_IOWR(NVGPU_GPU_IOCTL_MAGIC, 25, \
|
_IOWR(NVGPU_GPU_IOCTL_MAGIC, 25, \
|
||||||
struct nvgpu_gpu_get_gpu_time_args)
|
struct nvgpu_gpu_get_gpu_time_args)
|
||||||
|
#define NVGPU_GPU_IOCTL_GET_ENGINE_INFO \
|
||||||
|
_IOWR(NVGPU_GPU_IOCTL_MAGIC, 26, \
|
||||||
|
struct nvgpu_gpu_get_engine_info_args)
|
||||||
#define NVGPU_GPU_IOCTL_LAST \
|
#define NVGPU_GPU_IOCTL_LAST \
|
||||||
_IOC_NR(NVGPU_GPU_IOCTL_GET_GPU_TIME)
|
_IOC_NR(NVGPU_GPU_IOCTL_GET_ENGINE_INFO)
|
||||||
#define NVGPU_GPU_IOCTL_MAX_ARG_SIZE \
|
#define NVGPU_GPU_IOCTL_MAX_ARG_SIZE \
|
||||||
sizeof(struct nvgpu_gpu_get_cpu_time_correlation_info_args)
|
sizeof(struct nvgpu_gpu_get_cpu_time_correlation_info_args)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user