mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
nvdla: kmd: Expose full set of limits for task parameters
- Certain task parameter limits were not exposed to UMD / Users - Expose these limits and rename to provide consistent KMD interface across linux / qnx Jira DLA-4467 Change-Id: Ibcf1de5f4d442d9b1f3fefaf71195bc6e58fff5c Signed-off-by: Anup Mahindre <amahindre@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2546453 Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2558254 Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
Laxman Dewangan
parent
584f8bd83d
commit
911977d5dd
@@ -118,16 +118,6 @@
|
||||
*/
|
||||
#define CMD_TIMEOUT_MSEC (1000)
|
||||
|
||||
/**
|
||||
* Max number of fences supported
|
||||
*/
|
||||
#define MAX_NUM_NVDLA_PREFENCES 32
|
||||
#define MAX_NUM_NVDLA_POSTFENCES 32
|
||||
#define MAX_NUM_NVDLA_EMU_PREFENCES 16
|
||||
#define MAX_NUM_NVDLA_EMU_POSTFENCES 16
|
||||
#define MAX_NUM_NVDLA_IN_TASK_STATUS MAX_NUM_NVDLA_PREFENCES
|
||||
#define MAX_NUM_NVDLA_OUT_TASK_STATUS MAX_NUM_NVDLA_POSTFENCES
|
||||
#define MAX_NUM_NVDLA_OUT_TIMESTAMP 32
|
||||
#define NUM_PROFILING_POSTACTION 1
|
||||
|
||||
#define MAX_COMMANDS_PER_DEVICE 1
|
||||
@@ -257,8 +247,8 @@ struct nvdla_device {
|
||||
struct nvdla_emu_task {
|
||||
struct nvdla_queue *queue;
|
||||
struct nvhost_syncpt *sp;
|
||||
struct nvdev_fence prefences[MAX_NUM_NVDLA_EMU_PREFENCES];
|
||||
struct nvdev_fence postfences[MAX_NUM_NVDLA_EMU_POSTFENCES];
|
||||
struct nvdev_fence prefences[MAX_NVDLA_EMU_PREFENCES_PER_TASK];
|
||||
struct nvdev_fence postfences[MAX_NVDLA_EMU_POSTFENCES_PER_TASK];
|
||||
u32 num_prefences;
|
||||
u32 num_postfences;
|
||||
u32 fence;
|
||||
@@ -287,13 +277,13 @@ struct nvdla_task {
|
||||
struct nvdla_queue *queue;
|
||||
struct nvdla_buffers *buffers;
|
||||
struct nvhost_syncpt *sp;
|
||||
struct nvdev_fence prefences[MAX_NUM_NVDLA_PREFENCES];
|
||||
struct nvdev_fence postfences[MAX_NUM_NVDLA_POSTFENCES];
|
||||
struct nvdla_status_notify in_task_status[MAX_NUM_NVDLA_IN_TASK_STATUS];
|
||||
struct nvdla_status_notify sof_task_status[MAX_NUM_NVDLA_OUT_TASK_STATUS];
|
||||
struct nvdla_status_notify eof_task_status[MAX_NUM_NVDLA_OUT_TASK_STATUS];
|
||||
struct nvdla_mem_handle sof_timestamps[MAX_NUM_NVDLA_OUT_TIMESTAMP];
|
||||
struct nvdla_mem_handle eof_timestamps[MAX_NUM_NVDLA_OUT_TIMESTAMP];
|
||||
struct nvdev_fence prefences[MAX_NVDLA_PREFENCES_PER_TASK];
|
||||
struct nvdev_fence postfences[MAX_NVDLA_POSTFENCES_PER_TASK];
|
||||
struct nvdla_status_notify in_task_status[MAX_NVDLA_IN_STATUS_PER_TASK];
|
||||
struct nvdla_status_notify sof_task_status[MAX_NVDLA_OUT_STATUS_PER_TASK];
|
||||
struct nvdla_status_notify eof_task_status[MAX_NVDLA_OUT_STATUS_PER_TASK];
|
||||
struct nvdla_mem_handle sof_timestamps[MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK];
|
||||
struct nvdla_mem_handle eof_timestamps[MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK];
|
||||
struct nvdla_mem_handle memory_handles[MAX_NVDLA_BUFFERS_PER_TASK];
|
||||
u8 num_prefences;
|
||||
u8 num_postfences;
|
||||
@@ -314,13 +304,13 @@ struct nvdla_task {
|
||||
int pool_index;
|
||||
|
||||
struct dma_buf *memory_dmabuf[MAX_NVDLA_BUFFERS_PER_TASK];
|
||||
struct dma_buf *prefences_sem_dmabuf[MAX_NUM_NVDLA_PREFENCES];
|
||||
struct dma_buf *in_task_status_dmabuf[MAX_NUM_NVDLA_IN_TASK_STATUS];
|
||||
struct dma_buf *postfences_sem_dmabuf[MAX_NUM_NVDLA_POSTFENCES];
|
||||
struct dma_buf *sof_task_status_dmabuf[MAX_NUM_NVDLA_OUT_TASK_STATUS];
|
||||
struct dma_buf *eof_task_status_dmabuf[MAX_NUM_NVDLA_OUT_TASK_STATUS];
|
||||
struct dma_buf *sof_timestamps_dmabuf[MAX_NUM_NVDLA_OUT_TIMESTAMP];
|
||||
struct dma_buf *eof_timestamps_dmabuf[MAX_NUM_NVDLA_OUT_TIMESTAMP];
|
||||
struct dma_buf *prefences_sem_dmabuf[MAX_NVDLA_PREFENCES_PER_TASK];
|
||||
struct dma_buf *in_task_status_dmabuf[MAX_NVDLA_IN_STATUS_PER_TASK];
|
||||
struct dma_buf *postfences_sem_dmabuf[MAX_NVDLA_POSTFENCES_PER_TASK];
|
||||
struct dma_buf *sof_task_status_dmabuf[MAX_NVDLA_OUT_STATUS_PER_TASK];
|
||||
struct dma_buf *eof_task_status_dmabuf[MAX_NVDLA_OUT_STATUS_PER_TASK];
|
||||
struct dma_buf *sof_timestamps_dmabuf[MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK];
|
||||
struct dma_buf *eof_timestamps_dmabuf[MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK];
|
||||
};
|
||||
|
||||
struct dla_mem_addr {
|
||||
|
||||
@@ -652,44 +652,44 @@ size_t nvdla_get_max_task_size(void)
|
||||
|
||||
static int nvdla_val_task_submit_input(struct nvdla_ioctl_submit_task *in_task)
|
||||
{
|
||||
if (in_task->num_prefences > MAX_NUM_NVDLA_PREFENCES) {
|
||||
if (in_task->num_prefences > MAX_NVDLA_PREFENCES_PER_TASK) {
|
||||
pr_err("num_prefences[%u] crossing expected[%d]\n",
|
||||
in_task->num_prefences, MAX_NUM_NVDLA_PREFENCES);
|
||||
in_task->num_prefences, MAX_NVDLA_PREFENCES_PER_TASK);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (in_task->num_postfences > MAX_NUM_NVDLA_POSTFENCES) {
|
||||
if (in_task->num_postfences > MAX_NVDLA_POSTFENCES_PER_TASK) {
|
||||
pr_err("num_postfences[%u] crossing expected[%d]\n",
|
||||
in_task->num_postfences, MAX_NUM_NVDLA_POSTFENCES);
|
||||
in_task->num_postfences, MAX_NVDLA_POSTFENCES_PER_TASK);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (in_task->num_input_task_status > MAX_NUM_NVDLA_IN_TASK_STATUS) {
|
||||
if (in_task->num_input_task_status > MAX_NVDLA_IN_STATUS_PER_TASK) {
|
||||
pr_err("in task status[%u] crossing expected[%d]\n",
|
||||
in_task->num_input_task_status,
|
||||
MAX_NUM_NVDLA_IN_TASK_STATUS);
|
||||
MAX_NVDLA_IN_STATUS_PER_TASK);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (in_task->num_sof_task_status > MAX_NUM_NVDLA_OUT_TASK_STATUS) {
|
||||
if (in_task->num_sof_task_status > MAX_NVDLA_OUT_STATUS_PER_TASK) {
|
||||
pr_err("sof task status[%u] crossing expected[%d]\n",
|
||||
in_task->num_sof_task_status,
|
||||
MAX_NUM_NVDLA_OUT_TASK_STATUS);
|
||||
MAX_NVDLA_OUT_STATUS_PER_TASK);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (in_task->num_eof_task_status > MAX_NUM_NVDLA_OUT_TASK_STATUS) {
|
||||
if (in_task->num_eof_task_status > MAX_NVDLA_OUT_STATUS_PER_TASK) {
|
||||
pr_err("eof task status[%u] crossing expected[%d]\n",
|
||||
in_task->num_eof_task_status,
|
||||
MAX_NUM_NVDLA_OUT_TASK_STATUS);
|
||||
MAX_NVDLA_OUT_STATUS_PER_TASK);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (in_task->num_sof_timestamps > MAX_NUM_NVDLA_OUT_TIMESTAMP) {
|
||||
if (in_task->num_sof_timestamps > MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK) {
|
||||
pr_err("sof timestamps[%u] crossing expected[%d]\n",
|
||||
in_task->num_sof_timestamps,
|
||||
MAX_NUM_NVDLA_OUT_TIMESTAMP);
|
||||
MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (in_task->num_eof_timestamps > MAX_NUM_NVDLA_OUT_TIMESTAMP) {
|
||||
if (in_task->num_eof_timestamps > MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK) {
|
||||
pr_err("eof timestamps[%u] crossing expected[%d]\n",
|
||||
in_task->num_eof_timestamps,
|
||||
MAX_NUM_NVDLA_OUT_TIMESTAMP);
|
||||
MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (in_task->num_addresses < 1) {
|
||||
@@ -867,7 +867,7 @@ static int nvdla_emu_task_submit(struct nvdla_private *priv, void *arg)
|
||||
struct nvdla_submit_args *args =
|
||||
(struct nvdla_submit_args *)arg;
|
||||
struct nvdla_ioctl_emu_submit_task __user *user_tasks;
|
||||
struct nvdla_ioctl_emu_submit_task local_tasks[MAX_TASKS_PER_SUBMIT];
|
||||
struct nvdla_ioctl_emu_submit_task local_tasks[MAX_NVDLA_TASKS_PER_SUBMIT];
|
||||
struct platform_device *pdev;
|
||||
struct nvdla_queue *queue;
|
||||
struct nvdla_emu_task task;
|
||||
@@ -893,7 +893,7 @@ static int nvdla_emu_task_submit(struct nvdla_private *priv, void *arg)
|
||||
return -EINVAL;
|
||||
|
||||
num_tasks = args->num_tasks;
|
||||
if (num_tasks == 0 || num_tasks > MAX_TASKS_PER_SUBMIT)
|
||||
if (num_tasks == 0 || num_tasks > MAX_NVDLA_TASKS_PER_SUBMIT)
|
||||
return -EINVAL;
|
||||
|
||||
nvdla_dbg_info(pdev, "num of emulator tasks [%d]", num_tasks);
|
||||
@@ -1022,7 +1022,7 @@ static int nvdla_submit(struct nvdla_private *priv, void *arg)
|
||||
struct nvdla_submit_args *args =
|
||||
(struct nvdla_submit_args *)arg;
|
||||
struct nvdla_ioctl_submit_task __user *user_tasks;
|
||||
struct nvdla_ioctl_submit_task local_tasks[MAX_TASKS_PER_SUBMIT];
|
||||
struct nvdla_ioctl_submit_task local_tasks[MAX_NVDLA_TASKS_PER_SUBMIT];
|
||||
struct platform_device *pdev;
|
||||
struct nvdla_queue *queue;
|
||||
struct nvdla_buffers *buffers;
|
||||
@@ -1048,7 +1048,7 @@ static int nvdla_submit(struct nvdla_private *priv, void *arg)
|
||||
return -EINVAL;
|
||||
|
||||
num_tasks = args->num_tasks;
|
||||
if (num_tasks == 0 || num_tasks > MAX_TASKS_PER_SUBMIT)
|
||||
if (num_tasks == 0 || num_tasks > MAX_NVDLA_TASKS_PER_SUBMIT)
|
||||
return -EINVAL;
|
||||
|
||||
nvdla_dbg_info(pdev, "num of tasks [%d]", num_tasks);
|
||||
|
||||
@@ -297,32 +297,32 @@ static void nvdla_task_syncpt_reset(struct nvhost_syncpt *syncpt,
|
||||
|
||||
static inline int nvdla_get_max_preaction_size(void)
|
||||
{
|
||||
return (((MAX_NUM_NVDLA_PREFENCES + MAX_NUM_NVDLA_IN_TASK_STATUS +
|
||||
MAX_NUM_NVDLA_OUT_TASK_STATUS +
|
||||
MAX_NUM_NVDLA_OUT_TIMESTAMP) *
|
||||
return (((MAX_NVDLA_PREFENCES_PER_TASK + MAX_NVDLA_IN_STATUS_PER_TASK +
|
||||
MAX_NVDLA_OUT_STATUS_PER_TASK +
|
||||
MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK) *
|
||||
sizeof(struct dla_action_opcode)) +
|
||||
(MAX_NUM_NVDLA_PREFENCES *
|
||||
(MAX_NVDLA_PREFENCES_PER_TASK *
|
||||
sizeof(struct dla_action_semaphore)) +
|
||||
((MAX_NUM_NVDLA_IN_TASK_STATUS + MAX_NUM_NVDLA_OUT_TASK_STATUS) *
|
||||
((MAX_NVDLA_IN_STATUS_PER_TASK + MAX_NVDLA_OUT_STATUS_PER_TASK) *
|
||||
sizeof(struct dla_action_task_status)) +
|
||||
(MAX_NUM_NVDLA_OUT_TIMESTAMP *
|
||||
(MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK *
|
||||
sizeof(struct dla_action_timestamp)) +
|
||||
sizeof(struct dla_action_opcode));
|
||||
}
|
||||
|
||||
static inline int nvdla_get_max_postaction_size(void)
|
||||
{
|
||||
return (((MAX_NUM_NVDLA_POSTFENCES +
|
||||
MAX_NUM_NVDLA_OUT_TASK_STATUS +
|
||||
MAX_NUM_NVDLA_OUT_TIMESTAMP +
|
||||
return (((MAX_NVDLA_POSTFENCES_PER_TASK +
|
||||
MAX_NVDLA_OUT_STATUS_PER_TASK +
|
||||
MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK +
|
||||
NUM_PROFILING_POSTACTION) *
|
||||
sizeof(struct dla_action_opcode)) +
|
||||
(MAX_NUM_NVDLA_POSTFENCES *
|
||||
(MAX_NVDLA_POSTFENCES_PER_TASK *
|
||||
sizeof(struct dla_action_semaphore)) +
|
||||
((MAX_NUM_NVDLA_OUT_TASK_STATUS +
|
||||
((MAX_NVDLA_OUT_STATUS_PER_TASK +
|
||||
NUM_PROFILING_POSTACTION) *
|
||||
sizeof(struct dla_action_task_status)) +
|
||||
(MAX_NUM_NVDLA_OUT_TIMESTAMP *
|
||||
(MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK *
|
||||
sizeof(struct dla_action_timestamp)) +
|
||||
sizeof(struct dla_action_opcode));
|
||||
}
|
||||
@@ -1328,8 +1328,8 @@ static int nvdla_send_cmd_channel(struct platform_device *pdev,
|
||||
uint32_t method_id = cmd_data->method_id;
|
||||
uint32_t method_data = cmd_data->method_data;
|
||||
bool wait = cmd_data->wait;
|
||||
u32 syncpt_wait_ids[MAX_NUM_NVDLA_PREFENCES];
|
||||
u32 syncpt_wait_thresh[MAX_NUM_NVDLA_PREFENCES];
|
||||
u32 syncpt_wait_ids[MAX_NVDLA_PREFENCES_PER_TASK];
|
||||
u32 syncpt_wait_thresh[MAX_NVDLA_PREFENCES_PER_TASK];
|
||||
u32 cmdbuf[3];
|
||||
int err = 0, i;
|
||||
|
||||
|
||||
@@ -28,6 +28,17 @@
|
||||
#define __user
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Limits exposed to userspace
|
||||
*/
|
||||
#define MAX_NVDLA_PREFENCES_PER_TASK 32
|
||||
#define MAX_NVDLA_POSTFENCES_PER_TASK 32
|
||||
#define MAX_NVDLA_EMU_PREFENCES_PER_TASK 16
|
||||
#define MAX_NVDLA_EMU_POSTFENCES_PER_TASK 16
|
||||
#define MAX_NVDLA_IN_STATUS_PER_TASK MAX_NVDLA_PREFENCES_PER_TASK
|
||||
#define MAX_NVDLA_OUT_STATUS_PER_TASK MAX_NVDLA_POSTFENCES_PER_TASK
|
||||
#define MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK 32
|
||||
|
||||
/**
|
||||
* struct nvdla_queue_stat_args strcture
|
||||
*
|
||||
@@ -94,7 +105,7 @@ struct nvdla_pin_unpin_args {
|
||||
struct nvdla_submit_args {
|
||||
__u64 tasks;
|
||||
__u16 num_tasks;
|
||||
#define MAX_TASKS_PER_SUBMIT 16
|
||||
#define MAX_NVDLA_TASKS_PER_SUBMIT 16
|
||||
#define NVDLA_SUBMIT_FLAGS_ATOMIC (1 << 0)
|
||||
#define NVDLA_SUBMIT_FLAGS_BYPASS_EXEC (1 << 1)
|
||||
__u16 flags;
|
||||
|
||||
Reference in New Issue
Block a user