args->flags, &args->handle);
 }
 
-#define TS(t) ((struct timespec){ \
-       .tv_sec = (t).tv_sec, \
-       .tv_nsec = (t).tv_nsec \
-})
-
 static int etnaviv_ioctl_gem_cpu_prep(struct drm_device *dev, void *data,
                struct drm_file *file)
 {
        if (!obj)
                return -ENOENT;
 
-       ret = etnaviv_gem_cpu_prep(obj, args->op, &TS(args->timeout));
+       ret = etnaviv_gem_cpu_prep(obj, args->op, &args->timeout);
 
        drm_gem_object_put_unlocked(obj);
 
 {
        struct drm_etnaviv_wait_fence *args = data;
        struct etnaviv_drm_private *priv = dev->dev_private;
-       struct timespec *timeout = &TS(args->timeout);
+       struct drm_etnaviv_timespec *timeout = &args->timeout;
        struct etnaviv_gpu *gpu;
 
        if (args->flags & ~(ETNA_WAIT_NONBLOCK))
 {
        struct etnaviv_drm_private *priv = dev->dev_private;
        struct drm_etnaviv_gem_wait *args = data;
-       struct timespec *timeout = &TS(args->timeout);
+       struct drm_etnaviv_timespec *timeout = &args->timeout;
        struct drm_gem_object *obj;
        struct etnaviv_gpu *gpu;
        int ret;
 
 void etnaviv_gem_prime_unpin(struct drm_gem_object *obj);
 void *etnaviv_gem_vmap(struct drm_gem_object *obj);
 int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op,
-               struct timespec *timeout);
+               struct drm_etnaviv_timespec *timeout);
 int etnaviv_gem_cpu_fini(struct drm_gem_object *obj);
 void etnaviv_gem_free_object(struct drm_gem_object *obj);
 int etnaviv_gem_new_handle(struct drm_device *dev, struct drm_file *file,
  * between the specified timeout and the current CLOCK_MONOTONIC time.
  */
 static inline unsigned long etnaviv_timeout_to_jiffies(
-       const struct timespec *timeout)
+       const struct drm_etnaviv_timespec *timeout)
 {
-       struct timespec64 ts, to;
-
-       to = timespec_to_timespec64(*timeout);
+       struct timespec64 ts, to = {
+               .tv_sec = timeout->tv_sec,
+               .tv_nsec = timeout->tv_nsec,
+       };
 
        ktime_get_ts64(&ts);
 
 
 }
 
 int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op,
-               struct timespec *timeout)
+               struct drm_etnaviv_timespec *timeout)
 {
        struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
        struct drm_device *dev = obj->dev;
 }
 
 int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
-       struct timespec *timeout)
+       struct drm_etnaviv_timespec *timeout)
 {
        struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
 
 
 void etnaviv_submit_put(struct etnaviv_gem_submit * submit);
 
 int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
-       struct timespec *timeout);
+       struct drm_etnaviv_timespec *timeout);
 int etnaviv_gem_new_private(struct drm_device *dev, size_t size, u32 flags,
        const struct etnaviv_gem_ops *ops, struct etnaviv_gem_object **res);
 void etnaviv_gem_obj_add(struct drm_device *dev, struct drm_gem_object *obj);
 
  * Cmdstream submission/retirement:
  */
 int etnaviv_gpu_wait_fence_interruptible(struct etnaviv_gpu *gpu,
-       u32 id, struct timespec *timeout)
+       u32 id, struct drm_etnaviv_timespec *timeout)
 {
        struct dma_fence *fence;
        int ret;
  * that lock in this function while waiting.
  */
 int etnaviv_gpu_wait_obj_inactive(struct etnaviv_gpu *gpu,
-       struct etnaviv_gem_object *etnaviv_obj, struct timespec *timeout)
+       struct etnaviv_gem_object *etnaviv_obj,
+       struct drm_etnaviv_timespec *timeout)
 {
        unsigned long remaining;
        long ret;
 
 void etnaviv_gpu_recover_hang(struct etnaviv_gpu *gpu);
 void etnaviv_gpu_retire(struct etnaviv_gpu *gpu);
 int etnaviv_gpu_wait_fence_interruptible(struct etnaviv_gpu *gpu,
-       u32 fence, struct timespec *timeout);
+       u32 fence, struct drm_etnaviv_timespec *timeout);
 int etnaviv_gpu_wait_obj_inactive(struct etnaviv_gpu *gpu,
-       struct etnaviv_gem_object *etnaviv_obj, struct timespec *timeout);
+       struct etnaviv_gem_object *etnaviv_obj,
+       struct drm_etnaviv_timespec *timeout);
 struct dma_fence *etnaviv_gpu_submit(struct etnaviv_gem_submit *submit);
 int etnaviv_gpu_pm_get_sync(struct etnaviv_gpu *gpu);
 void etnaviv_gpu_pm_put(struct etnaviv_gpu *gpu);