aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/mali400/r3p2/mali/linux
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/mali400/r3p2/mali/linux')
-rw-r--r--drivers/gpu/mali400/r3p2/mali/linux/mali_kernel_linux.c5
-rw-r--r--drivers/gpu/mali400/r3p2/mali/linux/mali_sync.h1
-rw-r--r--drivers/gpu/mali400/r3p2/mali/linux/mali_sync_user.c19
-rw-r--r--drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_core.c20
-rw-r--r--drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_wrappers.h1
5 files changed, 46 insertions, 0 deletions
diff --git a/drivers/gpu/mali400/r3p2/mali/linux/mali_kernel_linux.c b/drivers/gpu/mali400/r3p2/mali/linux/mali_kernel_linux.c
index f337d09..f0265e3 100644
--- a/drivers/gpu/mali400/r3p2/mali/linux/mali_kernel_linux.c
+++ b/drivers/gpu/mali400/r3p2/mali/linux/mali_kernel_linux.c
@@ -697,6 +697,11 @@ static int mali_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
err = sync_fence_create_empty_wrapper(session_data, (_mali_uk_fence_create_empty_s __user *)arg);
break;
#endif
+ case MALI_IOC_FENCE_CREATE_SIGNALLED:
+#if defined(CONFIG_SYNC)
+ err = sync_fence_create_signalled_wrapper(session_data, (_mali_uk_fence_create_signalled_s __user *)arg);
+ break;
+#endif
case MALI_IOC_FENCE_VALIDATE:
#if defined(CONFIG_SYNC)
err = sync_fence_validate_wrapper(session_data, (_mali_uk_fence_validate_s __user *)arg);
diff --git a/drivers/gpu/mali400/r3p2/mali/linux/mali_sync.h b/drivers/gpu/mali400/r3p2/mali/linux/mali_sync.h
index 4415ec6..2da66df 100644
--- a/drivers/gpu/mali400/r3p2/mali/linux/mali_sync.h
+++ b/drivers/gpu/mali400/r3p2/mali/linux/mali_sync.h
@@ -39,6 +39,7 @@ _mali_osk_errcode_t mali_stream_create(const char * name, int * out_fd);
struct sync_pt *mali_stream_create_point(int tl_fd);
int mali_stream_create_fence(struct sync_pt *pt);
int mali_stream_create_empty_fence(int tl_fd);
+int mali_stream_create_signalled_fence(int tl_fd);
/**
* Commit an empty timed fence
diff --git a/drivers/gpu/mali400/r3p2/mali/linux/mali_sync_user.c b/drivers/gpu/mali400/r3p2/mali/linux/mali_sync_user.c
index 7f0fddfc..ba07f30 100644
--- a/drivers/gpu/mali400/r3p2/mali/linux/mali_sync_user.c
+++ b/drivers/gpu/mali400/r3p2/mali/linux/mali_sync_user.c
@@ -165,6 +165,25 @@ int mali_stream_create_empty_fence(int tl_fd)
return fd;
}
+int mali_stream_create_signalled_fence(int tl_fd)
+{
+ int fd;
+ mali_sync_pt *pt;
+
+ pt = mali_stream_create_point_internal(tl_fd, MALI_FALSE);
+
+ if (NULL == pt) return -ENOMEM;
+
+ fd = mali_stream_create_fence(pt);
+
+ if (0 <= fd)
+ {
+ mali_sync_signal_pt(pt, 0);
+ }
+
+ return fd;
+}
+
_mali_osk_errcode_t mali_fence_validate(int fd)
{
struct sync_fence * fence;
diff --git a/drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_core.c b/drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_core.c
index 1768ff2..6eaea79 100644
--- a/drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_core.c
+++ b/drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_core.c
@@ -152,6 +152,26 @@ int sync_fence_create_empty_wrapper(struct mali_session_data *session_data, _mal
return 0;
}
+int sync_fence_create_signalled_wrapper(struct mali_session_data *session_data, _mali_uk_fence_create_signalled_s __user *uargs)
+{
+ _mali_uk_fence_create_signalled_s kargs;
+
+ MALI_CHECK_NON_NULL(uargs, -EINVAL);
+
+ if (0 != get_user(kargs.stream, &uargs->stream)) return -EFAULT;
+
+ kargs.fence = mali_stream_create_signalled_fence(kargs.stream);
+ if (0 > kargs.fence)
+ {
+ return kargs.fence;
+ }
+
+ kargs.ctx = NULL; /* prevent kernel address to be returned to user space */
+ if (0 != copy_to_user(uargs, &kargs, sizeof(_mali_uk_fence_create_signalled_s))) return -EFAULT;
+
+ return 0;
+}
+
int sync_fence_validate_wrapper(struct mali_session_data *session, _mali_uk_fence_validate_s __user *uargs)
{
int fd;
diff --git a/drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_wrappers.h b/drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_wrappers.h
index 08bdae4..8bec818 100644
--- a/drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_wrappers.h
+++ b/drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_wrappers.h
@@ -30,6 +30,7 @@ int get_user_settings_wrapper(struct mali_session_data *session_data, _mali_uk_g
#if defined(CONFIG_SYNC)
int stream_create_wrapper(struct mali_session_data *session_data, _mali_uk_stream_create_s __user *uargs);
int sync_fence_create_empty_wrapper(struct mali_session_data *session_data, _mali_uk_fence_create_empty_s __user *uargs);
+int sync_fence_create_signalled_wrapper(struct mali_session_data *session_data, _mali_uk_fence_create_signalled_s __user *uargs);
int sync_fence_validate_wrapper(struct mali_session_data *session, _mali_uk_fence_validate_s __user *uargs);
#endif
int post_notification_wrapper(struct mali_session_data *session_data, _mali_uk_post_notification_s __user *uargs);