File tree Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Original file line number Diff line number Diff line change @@ -77,6 +77,8 @@ impl drv::Driver for AsahiDriver {
7777 ioctl:: AUTH | ioctl:: RENDER_ALLOW , crate :: file:: File :: queue_destroy) ,
7878 ( ASAHI_SUBMIT , drm_asahi_submit,
7979 ioctl:: AUTH | ioctl:: RENDER_ALLOW , crate :: file:: File :: submit) ,
80+ ( ASAHI_GET_TIME , drm_asahi_get_time,
81+ ioctl:: AUTH | ioctl:: RENDER_ALLOW , crate :: file:: File :: get_time) ,
8082 }
8183}
8284
Original file line number Diff line number Diff line change @@ -925,6 +925,39 @@ impl File {
925925 Ok ( _) => Ok ( 0 ) ,
926926 }
927927 }
928+
929+ /// IOCTL: get_time: Get the current GPU timer value.
930+ pub ( crate ) fn get_time (
931+ device : & AsahiDevice ,
932+ data : & mut uapi:: drm_asahi_get_time ,
933+ file : & DrmFile ,
934+ ) -> Result < u32 > {
935+
936+ if data. extensions != 0 || data. flags != 0 {
937+ cls_pr_debug ! ( Errors , "get_time: Unexpected extensions or flags\n " ) ;
938+ return Err ( EINVAL ) ;
939+ }
940+
941+ let mut tp: kernel:: bindings:: timespec64 = Default :: default ( ) ;
942+ let mut gputime: u64 = 0 ;
943+
944+ // TODO: bindings
945+ // SAFETY: These functions are safe to call as long as the argument pointer is valid
946+ unsafe {
947+ core:: arch:: asm!(
948+ "mrs {x}, CNTPCT_EL0" ,
949+ x = out( reg) gputime
950+ ) ;
951+ kernel:: bindings:: ktime_get_raw_ts64 ( & mut tp) ;
952+ kernel:: bindings:: timens_add_monotonic ( & mut tp) ;
953+ }
954+
955+ data. gpu_timestamp = gputime;
956+ data. tv_sec = tp. tv_sec ;
957+ data. tv_nsec = tp. tv_nsec ;
958+
959+ Ok ( 0 )
960+ }
928961}
929962
930963impl Drop for File {
You can’t perform that action at this time.
0 commit comments