From 8ee2dea687224e1e5759783abf5046d298bbe167 Mon Sep 17 00:00:00 2001 From: Stephen Boyd Date: Mon, 26 Apr 2021 08:12:51 -0700 Subject: sys/linux: support syncobjs in dev_msm (#2552) * sys/linux: support syncobjs in dev_msm * sys/linux: describe syncpoints and dma fences for dev_dri --- sys/linux/dev_dri.txt | 105 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 81 insertions(+), 24 deletions(-) (limited to 'sys/linux/dev_dri.txt') diff --git a/sys/linux/dev_dri.txt b/sys/linux/dev_dri.txt index 6e30f9e97..823f720aa 100644 --- a/sys/linux/dev_dri.txt +++ b/sys/linux/dev_dri.txt @@ -359,30 +359,82 @@ drm_mode_atomic { drm_mode_atomic_flags = DRM_MODE_PAGE_FLIP_EVENT, DRM_MODE_ATOMIC_TEST_ONLY, DRM_MODE_ATOMIC_NONBLOCK, DRM_MODE_ATOMIC_ALLOW_MODESET -# TODO: describe SYNCOBJ ioctls (but we don't have any DRIVER_SYNCOBJ hardware). -#resource drm_syncobj[int32] - -#ioctl$DRM_IOCTL_SYNCOBJ_CREATE(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_CREATE], arg ptr[in, drm_syncobj_create]) -#ioctl$DRM_IOCTL_SYNCOBJ_DESTROY(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_DESTROY], arg ptr[in, drm_syncobj_destroy]) -#ioctl$DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD], arg ptr[in, XXXXX]) -#ioctl$DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE], arg ptr[in, XXXXX]) -#ioctl$DRM_IOCTL_SYNCOBJ_TRANSFER(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TRANSFER], arg ptr[in, XXXXX]) -#ioctl$DRM_IOCTL_SYNCOBJ_WAIT(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_WAIT], arg ptr[in, XXXXX]) -#ioctl$DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT], arg ptr[in, XXXXX]) -#ioctl$DRM_IOCTL_SYNCOBJ_RESET(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_RESET], arg ptr[in, XXXXX]) -#ioctl$DRM_IOCTL_SYNCOBJ_SIGNAL(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_SIGNAL], arg ptr[in, XXXXX]) -#ioctl$DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL], arg ptr[in, XXXXX]) -#ioctl$DRM_IOCTL_SYNCOBJ_QUERY(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_QUERY], arg ptr[in, XXXXX]) - -#drm_syncobj_create { -# handle drm_syncobj[opt] -# flags bool32 -#} - -#drm_syncobj_destroy { -# handle drm_syncobj -# pad const[0, int32] -#} +resource drm_syncobj_fd[fd] +resource drm_syncobj[int32] +resource drm_syncpoint[int64] + +# See https://www.kernel.org/doc/html/latest/gpu/drm-mm.html#drm-sync-objects +# for more details +ioctl$DRM_IOCTL_SYNCOBJ_CREATE(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_CREATE], arg ptr[inout, drm_syncobj_create]) +ioctl$DRM_IOCTL_SYNCOBJ_DESTROY(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_DESTROY], arg ptr[inout, drm_syncobj_destroy]) +ioctl$DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD], arg ptr[inout, drm_syncobj_handle]) +ioctl$DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE], arg ptr[inout, drm_syncobj_handle]) +ioctl$DRM_IOCTL_SYNCOBJ_TRANSFER(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TRANSFER], arg ptr[inout, drm_syncobj_transfer]) +ioctl$DRM_IOCTL_SYNCOBJ_WAIT(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_WAIT], arg ptr[inout, drm_syncobj_wait]) +ioctl$DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT], arg ptr[inout, drm_syncobj_timeline_wait]) +ioctl$DRM_IOCTL_SYNCOBJ_RESET(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_RESET], arg ptr[in, drm_syncobj_array]) +ioctl$DRM_IOCTL_SYNCOBJ_SIGNAL(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_SIGNAL], arg ptr[in, drm_syncobj_array]) +ioctl$DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL], arg ptr[in, drm_syncobj_timeline_array]) +ioctl$DRM_IOCTL_SYNCOBJ_QUERY(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_QUERY], arg ptr[inout, drm_syncobj_timeline_array]) + +drm_syncobj_create { + handle drm_syncobj[opt] + flags flags[drm_syncobj_create_flags, int32] +} + +drm_syncobj_destroy { + handle drm_syncobj + pad const[0, int32] +} + +drm_syncobj_handle { + handle drm_syncobj[opt] + flags flags[drm_syncobj_handle_flags, int32] + + fd drm_syncobj_fd[opt] + pad const[0, int32] +} + +drm_syncobj_transfer { + src_handle drm_syncobj (in) + dst_handle drm_syncobj (in) + src_point drm_syncpoint[opt] + dst_point drm_syncpoint[opt] + flags flags[drm_syncobj_wait_flags, int32] (in) + pad const[0, int32] +} + +drm_syncobj_wait { + handles ptr64[in, array[drm_syncobj]] + timeout_nsec int64 (in) + count_handles len[handles, int32] + flags flags[drm_syncobj_wait_flags, int32] (in) + first_signaled drm_syncpoint (out) + pad const[0, int32] +} + +drm_syncobj_timeline_wait { + handles ptr64[in, array[drm_syncobj]] + points ptr64[in, array[drm_syncpoint]] + timeout_nsec int64 + count_handles len[handles, int32] + flags flags[drm_syncobj_wait_flags, int32] (in) + first_signaled drm_syncpoint (out) + pad const[0, int32] +} + +drm_syncobj_array { + handles ptr64[in, array[drm_syncobj]] + count_handles len[handles, int32] + pad const[0, int32] +} + +drm_syncobj_timeline_array { + handles ptr64[in, array[drm_syncobj]] + points ptr64[inout, array[drm_syncpoint]] + count_handles len[handles, int32] + flags flags[drm_syncobj_query_flags, int32] (in) +} # TODO: describe SEQUENCE ioctls (but we don't have DRIVER_MODESET hardware). #ioctl$DRM_IOCTL_CRTC_GET_SEQUENCE(fd fd_dri, cmd const[DRM_IOCTL_CRTC_GET_SEQUENCE], arg ptr[in, XXXXX]) @@ -686,3 +738,8 @@ drm_buf_flags = _DRM_PAGE_ALIGN, _DRM_AGP_BUFFER, _DRM_SG_BUFFER, _DRM_FB_BUFFER drm_dma_flags = _DRM_DMA_BLOCK, _DRM_DMA_WHILE_LOCKED, _DRM_DMA_PRIORITY, _DRM_DMA_WAIT, _DRM_DMA_SMALLER_OK, _DRM_DMA_LARGER_OK drm_control_type = DRM_ADD_COMMAND, DRM_RM_COMMAND, DRM_INST_HANDLER, DRM_UNINST_HANDLER drm_vblank_seq_type = _DRM_VBLANK_ABSOLUTE, _DRM_VBLANK_RELATIVE, _DRM_VBLANK_HIGH_CRTC_MASK, _DRM_VBLANK_EVENT, _DRM_VBLANK_FLIP, _DRM_VBLANK_NEXTONMISS, _DRM_VBLANK_SECONDARY, _DRM_VBLANK_SIGNAL +drm_syncobj_create_flags = DRM_SYNCOBJ_CREATE_SIGNALED +# DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE is the same so we just use one +drm_syncobj_handle_flags = DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE +drm_syncobj_wait_flags = DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL, DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT, DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE +drm_syncobj_query_flags = DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED -- cgit mrf-deployment