@@ -705,6 +705,57 @@ bool IoctlHelperPrelim20::getFabricLatency(uint32_t fabricId, uint32_t &latency,
705
705
bandwidth = info.bandwidth ;
706
706
return true ;
707
707
}
708
+ bool IoctlHelperPrelim20::queryHwIpVersion (EngineClassInstance &engineInfo, HardwareIpVersion &ipVersion, int &ret) {
709
+ QueryItem queryItem{};
710
+ queryItem.queryId = PRELIM_DRM_I915_QUERY_HW_IP_VERSION;
711
+
712
+ Query query{};
713
+ query.itemsPtr = reinterpret_cast <uint64_t >(&queryItem);
714
+ query.numItems = 1u ;
715
+ ret = ioctl (DrmIoctl::Query, &query);
716
+
717
+ if (ret != 0 ) {
718
+ return false ;
719
+ }
720
+
721
+ if (queryItem.length != sizeof (prelim_drm_i915_query_hw_ip_version)) {
722
+ PRINT_DEBUG_STRING (DebugManager.flags .PrintDebugMessages .get (), stderr, " %s\n " ,
723
+ " Size got from PRELIM_DRM_I915_QUERY_HW_IP_VERSION query does not match PrelimI915::prelim_drm_i915_query_hw_ip_version size" );
724
+ return false ;
725
+ }
726
+
727
+ prelim_drm_i915_query_hw_ip_version queryHwIpVersion{};
728
+ queryHwIpVersion.engine .engine_class = engineInfo.engineClass ;
729
+ queryHwIpVersion.engine .engine_instance = engineInfo.engineInstance ;
730
+ queryItem.dataPtr = reinterpret_cast <uint64_t >(&queryHwIpVersion);
731
+
732
+ ret = ioctl (DrmIoctl::Query, &query);
733
+ if (ret != 0 ) {
734
+ return false ;
735
+ }
736
+
737
+ ipVersion.architecture = queryHwIpVersion.arch ;
738
+ ipVersion.release = queryHwIpVersion.release ;
739
+ ipVersion.revision = queryHwIpVersion.stepping ;
740
+
741
+ return true ;
742
+ }
743
+
744
+ bool IoctlHelperPrelim20::initialize () {
745
+ auto hwInfo = drm.getRootDeviceEnvironment ().getMutableHardwareInfo ();
746
+ EngineClassInstance engineInfo = {static_cast <uint16_t >(getDrmParamValue (DrmParam::EngineClassRender)), 0 };
747
+ int ret = 0 ;
748
+ bool result = queryHwIpVersion (engineInfo, hwInfo->ipVersion , ret);
749
+ if (result == false &&
750
+ ret != 0 &&
751
+ HwInfoConfig::get (hwInfo->platform .eProductFamily )->isPlatformQuerySupported ()) {
752
+ int err = drm.getErrno ();
753
+ PRINT_DEBUG_STRING (DebugManager.flags .PrintDebugMessages .get (), stderr,
754
+ " ioctl(PRELIM_DRM_I915_QUERY_HW_IP_VERSION) failed with %d. errno=%d(%s)\n " , ret, err, strerror (err));
755
+ }
756
+
757
+ return result;
758
+ }
708
759
709
760
static_assert (sizeof (MemoryClassInstance) == sizeof (prelim_drm_i915_gem_memory_class_instance));
710
761
static_assert (offsetof(MemoryClassInstance, memoryClass) == offsetof(prelim_drm_i915_gem_memory_class_instance, memory_class));
0 commit comments