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 {
77
77
ioctl:: AUTH | ioctl:: RENDER_ALLOW , crate :: file:: File :: queue_destroy) ,
78
78
( ASAHI_SUBMIT , drm_asahi_submit,
79
79
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) ,
80
82
}
81
83
}
82
84
Original file line number Diff line number Diff line change @@ -925,6 +925,39 @@ impl File {
925
925
Ok ( _) => Ok ( 0 ) ,
926
926
}
927
927
}
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
+ }
928
961
}
929
962
930
963
impl Drop for File {
You can’t perform that action at this time.
0 commit comments