Skip to content

Commit 8ddc889

Browse files
Store hardware IP version in hardware info
Query HW IP version using ioctl helper prelim Related-To: NEO-7457 Signed-off-by: Mateusz Jablonski <[email protected]>
1 parent 49c828e commit 8ddc889

26 files changed

+189
-90
lines changed

level_zero/tools/test/unit_tests/sources/debug/linux/debug_session_fixtures_linux.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void DebugApiLinuxMultiDeviceFixture::setUp() {
4242
L0::Device *device = driverHandle->devices[0];
4343
deviceImp = static_cast<DeviceImp *>(device);
4444

45-
mockDrm = new DrmQueryMock(*neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0], neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->getHardwareInfo());
45+
mockDrm = new DrmQueryMock(*neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]);
4646
mockDrm->allowDebugAttach = true;
4747

4848
// set config from HwInfo to have correct topology requested by tests

shared/source/helpers/hw_info.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,17 +137,23 @@ inline bool operator==(const RuntimeCapabilityTable &lhs, const RuntimeCapabilit
137137
return result;
138138
}
139139

140+
struct HardwareIpVersion {
141+
uint8_t architecture;
142+
uint8_t release;
143+
uint8_t revision;
144+
};
145+
140146
struct HardwareInfo {
141147
HardwareInfo() = default;
142148
HardwareInfo(const PLATFORM *platform, const FeatureTable *featureTable, const WorkaroundTable *workaroundTable,
143149
const GT_SYSTEM_INFO *gtSystemInfo, const RuntimeCapabilityTable &capabilityTable);
144150

145-
PLATFORM platform = {};
146-
FeatureTable featureTable = {};
147-
WorkaroundTable workaroundTable = {};
148-
alignas(4) GT_SYSTEM_INFO gtSystemInfo = {};
149-
150-
alignas(8) RuntimeCapabilityTable capabilityTable = {};
151+
PLATFORM platform{};
152+
FeatureTable featureTable{};
153+
WorkaroundTable workaroundTable{};
154+
alignas(4) GT_SYSTEM_INFO gtSystemInfo{};
155+
alignas(8) RuntimeCapabilityTable capabilityTable{};
156+
HardwareIpVersion ipVersion{};
151157
};
152158

153159
template <PRODUCT_FAMILY product>

shared/source/os_interface/linux/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ set(NEO_CORE_OS_INTERFACE_LINUX
5757
${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper.cpp
5858
${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper_prelim.cpp
5959
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}ioctl_helper_getter.cpp
60-
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}ioctl_helper_prelim_init.cpp
6160
${CMAKE_CURRENT_SOURCE_DIR}/engine_info.h
6261
${CMAKE_CURRENT_SOURCE_DIR}/engine_info.cpp
6362
${CMAKE_CURRENT_SOURCE_DIR}/memory_info.h

shared/source/os_interface/linux/i915_prelim.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ using NEO::PrelimI915::prelim_drm_i915_gem_vm_prefetch;
7676
using NEO::PrelimI915::prelim_drm_i915_gem_vm_region_ext;
7777
using NEO::PrelimI915::prelim_drm_i915_gem_wait_user_fence;
7878
using NEO::PrelimI915::prelim_drm_i915_query_distance_info;
79+
using NEO::PrelimI915::prelim_drm_i915_query_hw_ip_version;
7980
using NEO::PrelimI915::prelim_drm_i915_uuid_control;
8081
using NEO::PrelimI915::prelim_drm_i915_vm_bind_ext_set_pat;
8182
using NEO::PrelimI915::prelim_drm_i915_vm_bind_ext_user_fence;

shared/source/os_interface/linux/ioctl_helper.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class OsContextLinux;
2424
class IoctlHelper;
2525
enum class CacheRegion : uint16_t;
2626
struct HardwareInfo;
27+
struct HardwareIpVersion;
2728

2829
struct MemoryRegion {
2930
MemoryClassInstance region;
@@ -261,6 +262,8 @@ class IoctlHelperPrelim20 : public IoctlHelper {
261262
bool getFabricLatency(uint32_t fabricId, uint32_t &latency, uint32_t &bandwidth) override;
262263

263264
protected:
265+
bool queryHwIpVersion(EngineClassInstance &engineInfo, HardwareIpVersion &ipVersion, int &ret);
266+
264267
bool handleExecBufferInNonBlockMode = false;
265268
};
266269

shared/source/os_interface/linux/ioctl_helper_prelim.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,57 @@ bool IoctlHelperPrelim20::getFabricLatency(uint32_t fabricId, uint32_t &latency,
705705
bandwidth = info.bandwidth;
706706
return true;
707707
}
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+
}
708759

709760
static_assert(sizeof(MemoryClassInstance) == sizeof(prelim_drm_i915_gem_memory_class_instance));
710761
static_assert(offsetof(MemoryClassInstance, memoryClass) == offsetof(prelim_drm_i915_gem_memory_class_instance, memory_class));

shared/source/os_interface/linux/ioctl_helper_prelim_init.cpp

Lines changed: 0 additions & 16 deletions
This file was deleted.

shared/source/os_interface/windows/wddm/wddm.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ bool Wddm::init() {
108108
setPlatformSupportEvictIfNecessaryFlag(*hwConfig);
109109

110110
auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*hardwareInfo);
111+
populateIpVersion(*hardwareInfo);
111112
rootDeviceEnvironment.setHwInfo(hardwareInfo.get());
112113
rootDeviceEnvironment.initGmm();
113114
this->rootDeviceEnvironment.getGmmClientContext()->setHandleAllocator(this->hwDeviceId->getUmKmDataTranslator()->createGmmHandleAllocator());

shared/source/os_interface/windows/wddm/wddm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ class Wddm : public DriverModel {
237237
}
238238
void setPlatformSupportEvictIfNecessaryFlag(const HwInfoConfig &hwInfoConfig);
239239
void populateAdditionalAdapterInfoOptions(const ADAPTER_INFO_KMD &adapterInfo);
240+
void populateIpVersion(HardwareInfo &hwInfo);
240241

241242
GMM_GFX_PARTITIONING gfxPartition{};
242243
ADAPTER_BDF adapterBDF{};

shared/source/os_interface/windows/wddm/wddm_additional_adapter_info_options.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ namespace NEO {
1111

1212
void Wddm::populateAdditionalAdapterInfoOptions(const ADAPTER_INFO_KMD &adapterInfo) {
1313
}
14-
14+
void Wddm::populateIpVersion(HardwareInfo &hwInfo) {
15+
}
1516
} // namespace NEO

0 commit comments

Comments
 (0)