diff --git a/src/intel/common/intel_gem.h b/src/intel/common/intel_gem.h index 12481e2dad6..0df2a070287 100644 --- a/src/intel/common/intel_gem.h +++ b/src/intel/common/intel_gem.h @@ -76,6 +76,19 @@ intel_ioctl(int fd, unsigned long request, void *arg) return ret; } +static inline uint64_t +intel_read_gpu_timestamp(int fd) +{ + struct drm_i915_reg_read reg_read = {}; + const uint64_t render_ring_timestamp = 0x2358; + reg_read.offset = render_ring_timestamp | I915_REG_READ_8B_WA; + + if (intel_ioctl(fd, DRM_IOCTL_I915_REG_READ, ®_read) < 0) + return 0; + + return reg_read.val; +} + /** * A wrapper around DRM_IOCTL_I915_QUERY * diff --git a/src/intel/ds/intel_pps_driver.cc b/src/intel/ds/intel_pps_driver.cc index c0cbec8f134..2cd399a12b6 100644 --- a/src/intel/ds/intel_pps_driver.cc +++ b/src/intel/ds/intel_pps_driver.cc @@ -18,6 +18,7 @@ #include +#include "common/intel_gem.h" #include "dev/intel_device_info.h" #include "perf/intel_perf.h" #include "perf/intel_perf_query.h" @@ -40,21 +41,6 @@ uint64_t IntelDriver::get_min_sampling_period_ns() return (2.f * perf->devinfo.timestamp_frequency) / 1000000000ull; } -uint64_t read_gpu_timestamp(int drm_fd) -{ - drm_i915_reg_read reg_read = {}; - const uint64_t render_ring_timestamp = 0x2358; - reg_read.offset = render_ring_timestamp | I915_REG_READ_8B_WA; - - if (perf_ioctl(drm_fd, DRM_IOCTL_I915_REG_READ, ®_read) < 0) { - PPS_LOG_ERROR("Unable to read GPU clock"); - return 0; - } - - return reg_read.val; - -} - IntelDriver::IntelDriver() { /* Note: clock_id's below 128 are reserved.. for custom clock sources, @@ -219,7 +205,7 @@ std::vector IntelDriver::parse_perf_records(const std::vectordevinfo, - read_gpu_timestamp(drm_device.fd)); + intel_read_gpu_timestamp(drm_device.fd)); } } // namespace pps diff --git a/src/intel/ds/intel_pps_perf.cc b/src/intel/ds/intel_pps_perf.cc index 7053e89bead..441d06cd584 100644 --- a/src/intel/ds/intel_pps_perf.cc +++ b/src/intel/ds/intel_pps_perf.cc @@ -18,17 +18,6 @@ namespace pps { -int perf_ioctl(int fd, unsigned long request, void *arg) -{ - int ret; - - do { - ret = ioctl(fd, request, arg); - } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); - - return ret; -} - IntelPerf::IntelPerf(const int drm_fd) : drm_fd {drm_fd} , ralloc_ctx {ralloc_context(nullptr)} diff --git a/src/intel/ds/intel_pps_perf.h b/src/intel/ds/intel_pps_perf.h index 641fd4dec9d..0c2831577a5 100644 --- a/src/intel/ds/intel_pps_perf.h +++ b/src/intel/ds/intel_pps_perf.h @@ -17,8 +17,6 @@ namespace pps { -int perf_ioctl(int fd, unsigned long request, void *arg); - class IntelPerf { public: