From bea61001a3827462c817f8a39b26d78e31a4fa2a Mon Sep 17 00:00:00 2001 From: Ketut Putu Kumajaya Date: Mon, 1 Sep 2014 16:06:16 +0700 Subject: Mali r3p2-01rel3 API version 29 from T311XXUBNH6 update Change-Id: I08d1c6f8920de63ab7cd10ff36c34032c7240f84 --- .../r3p2/mali/include/linux/mali/mali_utgard_ioctl.h | 1 + .../mali/include/linux/mali/mali_utgard_uk_types.h | 12 +++++++++++- .../gpu/mali400/r3p2/mali/linux/mali_kernel_linux.c | 5 +++++ drivers/gpu/mali400/r3p2/mali/linux/mali_sync.h | 1 + drivers/gpu/mali400/r3p2/mali/linux/mali_sync_user.c | 19 +++++++++++++++++++ drivers/gpu/mali400/r3p2/mali/linux/mali_ukk_core.c | 20 ++++++++++++++++++++ .../gpu/mali400/r3p2/mali/linux/mali_ukk_wrappers.h | 1 + drivers/gpu/mali400/r3p2/ump/Kbuild | 2 +- 8 files changed, 59 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/mali400/r3p2/mali/include/linux/mali/mali_utgard_ioctl.h b/drivers/gpu/mali400/r3p2/mali/include/linux/mali/mali_utgard_ioctl.h index 6043a7d..8a90421 100644 --- a/drivers/gpu/mali400/r3p2/mali/include/linux/mali/mali_utgard_ioctl.h +++ b/drivers/gpu/mali400/r3p2/mali/include/linux/mali/mali_utgard_ioctl.h @@ -46,6 +46,7 @@ extern "C" #define MALI_IOC_GET_USER_SETTINGS _IOWR(MALI_IOC_CORE_BASE, _MALI_UK_GET_USER_SETTINGS, _mali_uk_get_user_settings_s *) #define MALI_IOC_STREAM_CREATE _IOWR(MALI_IOC_CORE_BASE, _MALI_UK_STREAM_CREATE, _mali_uk_stream_create_s *) #define MALI_IOC_FENCE_CREATE_EMPTY _IOWR(MALI_IOC_CORE_BASE, _MALI_UK_FENCE_CREATE_EMPTY, _mali_uk_fence_create_empty_s *) +#define MALI_IOC_FENCE_CREATE_SIGNALLED _IOWR(MALI_IOC_CORE_BASE, _MALI_UK_FENCE_CREATE_SIGNALLED, _mali_uk_fence_create_signalled_s *) #define MALI_IOC_FENCE_VALIDATE _IOR(MALI_IOC_CORE_BASE, _MALI_UK_FENCE_VALIDATE, _mali_uk_fence_validate_s *) #define MALI_IOC_MEM_GET_BIG_BLOCK _IOWR(MALI_IOC_MEMORY_BASE, _MALI_UK_GET_BIG_BLOCK, void *) diff --git a/drivers/gpu/mali400/r3p2/mali/include/linux/mali/mali_utgard_uk_types.h b/drivers/gpu/mali400/r3p2/mali/include/linux/mali/mali_utgard_uk_types.h index 4957095..b78e6e2 100644 --- a/drivers/gpu/mali400/r3p2/mali/include/linux/mali/mali_utgard_uk_types.h +++ b/drivers/gpu/mali400/r3p2/mali/include/linux/mali/mali_utgard_uk_types.h @@ -70,6 +70,7 @@ typedef enum _MALI_UK_GET_USER_SETTINGS, /**< _mali_ukk_get_user_settings() *//**< [out] */ _MALI_UK_STREAM_CREATE, /**< _mali_ukk_stream_create() */ _MALI_UK_FENCE_CREATE_EMPTY, /**< _mali_ukk_fence_create_empty() */ + _MALI_UK_FENCE_CREATE_SIGNALLED, /**< _mali_ukk_fence_create_signalled() */ _MALI_UK_FENCE_VALIDATE, /**< _mali_ukk_fence_validate() */ /** Memory functions */ @@ -721,7 +722,7 @@ typedef struct * The 16bit integer is stored twice in a 32bit integer * For example, for version 1 the value would be 0x00010001 */ -#define _MALI_API_VERSION 23 +#define _MALI_API_VERSION 29 #define _MALI_UK_API_VERSION _MAKE_VERSION_ID(_MALI_API_VERSION) /** @@ -1144,6 +1145,15 @@ typedef struct s32 fence; /**< [out] file descriptor describing fence */ } _mali_uk_fence_create_empty_s; +/** @brief Create signalled fence + */ +typedef struct +{ + void *ctx; /**< [in,out] user-kernel context (trashed on output) */ + s32 stream; /**< [in] stream to create fence on */ + s32 fence; /**< [out] file descriptor describing fence */ +} _mali_uk_fence_create_signalled_s; + /** @brief Check fence validity */ typedef struct 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); diff --git a/drivers/gpu/mali400/r3p2/ump/Kbuild b/drivers/gpu/mali400/r3p2/ump/Kbuild index 4ca1aae..f6bf61e 100644 --- a/drivers/gpu/mali400/r3p2/ump/Kbuild +++ b/drivers/gpu/mali400/r3p2/ump/Kbuild @@ -37,7 +37,7 @@ ccflags-y += -I$(srctree)/$(src) -I$(srctree)/$(src)/common -I$(srctree)/$(src)/ # MALI_SEC ccflags-y += -I$(srctree)/$(src)/include -ccflags-y += -DUSING_MEMORY=1 -DUMP_MEM_SIZE=512 +ccflags-y += -DUSING_MEMORY=1 -DUMP_MEM_SIZE=1024 ccflags-y += -DMALI_STATE_TRACKING=0 ccflags-$(CONFIG_UMP_DEBUG) += -DDEBUG -- cgit v1.1