Store hardware IP version in hardware info

Query HW IP version using ioctl helper prelim

Related-To: NEO-7457
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2022-10-31 13:57:24 +00:00
committed by Compute-Runtime-Automation
parent 49c828e481
commit 8ddc889c1d
26 changed files with 189 additions and 90 deletions

View File

@@ -42,7 +42,7 @@ void DebugApiLinuxMultiDeviceFixture::setUp() {
L0::Device *device = driverHandle->devices[0]; L0::Device *device = driverHandle->devices[0];
deviceImp = static_cast<DeviceImp *>(device); deviceImp = static_cast<DeviceImp *>(device);
mockDrm = new DrmQueryMock(*neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0], neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->getHardwareInfo()); mockDrm = new DrmQueryMock(*neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]);
mockDrm->allowDebugAttach = true; mockDrm->allowDebugAttach = true;
// set config from HwInfo to have correct topology requested by tests // set config from HwInfo to have correct topology requested by tests

View File

@@ -137,17 +137,23 @@ inline bool operator==(const RuntimeCapabilityTable &lhs, const RuntimeCapabilit
return result; return result;
} }
struct HardwareIpVersion {
uint8_t architecture;
uint8_t release;
uint8_t revision;
};
struct HardwareInfo { struct HardwareInfo {
HardwareInfo() = default; HardwareInfo() = default;
HardwareInfo(const PLATFORM *platform, const FeatureTable *featureTable, const WorkaroundTable *workaroundTable, HardwareInfo(const PLATFORM *platform, const FeatureTable *featureTable, const WorkaroundTable *workaroundTable,
const GT_SYSTEM_INFO *gtSystemInfo, const RuntimeCapabilityTable &capabilityTable); const GT_SYSTEM_INFO *gtSystemInfo, const RuntimeCapabilityTable &capabilityTable);
PLATFORM platform = {}; PLATFORM platform{};
FeatureTable featureTable = {}; FeatureTable featureTable{};
WorkaroundTable workaroundTable = {}; WorkaroundTable workaroundTable{};
alignas(4) GT_SYSTEM_INFO gtSystemInfo = {}; alignas(4) GT_SYSTEM_INFO gtSystemInfo{};
alignas(8) RuntimeCapabilityTable capabilityTable{};
alignas(8) RuntimeCapabilityTable capabilityTable = {}; HardwareIpVersion ipVersion{};
}; };
template <PRODUCT_FAMILY product> template <PRODUCT_FAMILY product>

View File

@@ -57,7 +57,6 @@ set(NEO_CORE_OS_INTERFACE_LINUX
${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper_prelim.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper_prelim.cpp
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}ioctl_helper_getter.cpp ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}ioctl_helper_getter.cpp
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}ioctl_helper_prelim_init.cpp
${CMAKE_CURRENT_SOURCE_DIR}/engine_info.h ${CMAKE_CURRENT_SOURCE_DIR}/engine_info.h
${CMAKE_CURRENT_SOURCE_DIR}/engine_info.cpp ${CMAKE_CURRENT_SOURCE_DIR}/engine_info.cpp
${CMAKE_CURRENT_SOURCE_DIR}/memory_info.h ${CMAKE_CURRENT_SOURCE_DIR}/memory_info.h

View File

@@ -76,6 +76,7 @@ using NEO::PrelimI915::prelim_drm_i915_gem_vm_prefetch;
using NEO::PrelimI915::prelim_drm_i915_gem_vm_region_ext; using NEO::PrelimI915::prelim_drm_i915_gem_vm_region_ext;
using NEO::PrelimI915::prelim_drm_i915_gem_wait_user_fence; using NEO::PrelimI915::prelim_drm_i915_gem_wait_user_fence;
using NEO::PrelimI915::prelim_drm_i915_query_distance_info; using NEO::PrelimI915::prelim_drm_i915_query_distance_info;
using NEO::PrelimI915::prelim_drm_i915_query_hw_ip_version;
using NEO::PrelimI915::prelim_drm_i915_uuid_control; using NEO::PrelimI915::prelim_drm_i915_uuid_control;
using NEO::PrelimI915::prelim_drm_i915_vm_bind_ext_set_pat; using NEO::PrelimI915::prelim_drm_i915_vm_bind_ext_set_pat;
using NEO::PrelimI915::prelim_drm_i915_vm_bind_ext_user_fence; using NEO::PrelimI915::prelim_drm_i915_vm_bind_ext_user_fence;

View File

@@ -24,6 +24,7 @@ class OsContextLinux;
class IoctlHelper; class IoctlHelper;
enum class CacheRegion : uint16_t; enum class CacheRegion : uint16_t;
struct HardwareInfo; struct HardwareInfo;
struct HardwareIpVersion;
struct MemoryRegion { struct MemoryRegion {
MemoryClassInstance region; MemoryClassInstance region;
@@ -261,6 +262,8 @@ class IoctlHelperPrelim20 : public IoctlHelper {
bool getFabricLatency(uint32_t fabricId, uint32_t &latency, uint32_t &bandwidth) override; bool getFabricLatency(uint32_t fabricId, uint32_t &latency, uint32_t &bandwidth) override;
protected: protected:
bool queryHwIpVersion(EngineClassInstance &engineInfo, HardwareIpVersion &ipVersion, int &ret);
bool handleExecBufferInNonBlockMode = false; bool handleExecBufferInNonBlockMode = false;
}; };

View File

@@ -705,6 +705,57 @@ bool IoctlHelperPrelim20::getFabricLatency(uint32_t fabricId, uint32_t &latency,
bandwidth = info.bandwidth; bandwidth = info.bandwidth;
return true; return true;
} }
bool IoctlHelperPrelim20::queryHwIpVersion(EngineClassInstance &engineInfo, HardwareIpVersion &ipVersion, int &ret) {
QueryItem queryItem{};
queryItem.queryId = PRELIM_DRM_I915_QUERY_HW_IP_VERSION;
Query query{};
query.itemsPtr = reinterpret_cast<uint64_t>(&queryItem);
query.numItems = 1u;
ret = ioctl(DrmIoctl::Query, &query);
if (ret != 0) {
return false;
}
if (queryItem.length != sizeof(prelim_drm_i915_query_hw_ip_version)) {
PRINT_DEBUG_STRING(DebugManager.flags.PrintDebugMessages.get(), stderr, "%s\n",
"Size got from PRELIM_DRM_I915_QUERY_HW_IP_VERSION query does not match PrelimI915::prelim_drm_i915_query_hw_ip_version size");
return false;
}
prelim_drm_i915_query_hw_ip_version queryHwIpVersion{};
queryHwIpVersion.engine.engine_class = engineInfo.engineClass;
queryHwIpVersion.engine.engine_instance = engineInfo.engineInstance;
queryItem.dataPtr = reinterpret_cast<uint64_t>(&queryHwIpVersion);
ret = ioctl(DrmIoctl::Query, &query);
if (ret != 0) {
return false;
}
ipVersion.architecture = queryHwIpVersion.arch;
ipVersion.release = queryHwIpVersion.release;
ipVersion.revision = queryHwIpVersion.stepping;
return true;
}
bool IoctlHelperPrelim20::initialize() {
auto hwInfo = drm.getRootDeviceEnvironment().getMutableHardwareInfo();
EngineClassInstance engineInfo = {static_cast<uint16_t>(getDrmParamValue(DrmParam::EngineClassRender)), 0};
int ret = 0;
bool result = queryHwIpVersion(engineInfo, hwInfo->ipVersion, ret);
if (result == false &&
ret != 0 &&
HwInfoConfig::get(hwInfo->platform.eProductFamily)->isPlatformQuerySupported()) {
int err = drm.getErrno();
PRINT_DEBUG_STRING(DebugManager.flags.PrintDebugMessages.get(), stderr,
"ioctl(PRELIM_DRM_I915_QUERY_HW_IP_VERSION) failed with %d. errno=%d(%s)\n", ret, err, strerror(err));
}
return result;
}
static_assert(sizeof(MemoryClassInstance) == sizeof(prelim_drm_i915_gem_memory_class_instance)); static_assert(sizeof(MemoryClassInstance) == sizeof(prelim_drm_i915_gem_memory_class_instance));
static_assert(offsetof(MemoryClassInstance, memoryClass) == offsetof(prelim_drm_i915_gem_memory_class_instance, memory_class)); static_assert(offsetof(MemoryClassInstance, memoryClass) == offsetof(prelim_drm_i915_gem_memory_class_instance, memory_class));

View File

@@ -1,16 +0,0 @@
/*
* Copyright (C) 2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/os_interface/linux/ioctl_helper.h"
namespace NEO {
bool IoctlHelperPrelim20::initialize() {
return true;
}
} // namespace NEO

View File

@@ -108,6 +108,7 @@ bool Wddm::init() {
setPlatformSupportEvictIfNecessaryFlag(*hwConfig); setPlatformSupportEvictIfNecessaryFlag(*hwConfig);
auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*hardwareInfo); auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*hardwareInfo);
populateIpVersion(*hardwareInfo);
rootDeviceEnvironment.setHwInfo(hardwareInfo.get()); rootDeviceEnvironment.setHwInfo(hardwareInfo.get());
rootDeviceEnvironment.initGmm(); rootDeviceEnvironment.initGmm();
this->rootDeviceEnvironment.getGmmClientContext()->setHandleAllocator(this->hwDeviceId->getUmKmDataTranslator()->createGmmHandleAllocator()); this->rootDeviceEnvironment.getGmmClientContext()->setHandleAllocator(this->hwDeviceId->getUmKmDataTranslator()->createGmmHandleAllocator());

View File

@@ -237,6 +237,7 @@ class Wddm : public DriverModel {
} }
void setPlatformSupportEvictIfNecessaryFlag(const HwInfoConfig &hwInfoConfig); void setPlatformSupportEvictIfNecessaryFlag(const HwInfoConfig &hwInfoConfig);
void populateAdditionalAdapterInfoOptions(const ADAPTER_INFO_KMD &adapterInfo); void populateAdditionalAdapterInfoOptions(const ADAPTER_INFO_KMD &adapterInfo);
void populateIpVersion(HardwareInfo &hwInfo);
GMM_GFX_PARTITIONING gfxPartition{}; GMM_GFX_PARTITIONING gfxPartition{};
ADAPTER_BDF adapterBDF{}; ADAPTER_BDF adapterBDF{};

View File

@@ -11,5 +11,6 @@ namespace NEO {
void Wddm::populateAdditionalAdapterInfoOptions(const ADAPTER_INFO_KMD &adapterInfo) { void Wddm::populateAdditionalAdapterInfoOptions(const ADAPTER_INFO_KMD &adapterInfo) {
} }
void Wddm::populateIpVersion(HardwareInfo &hwInfo) {
}
} // namespace NEO } // namespace NEO

View File

@@ -1,12 +0,0 @@
/*
* Copyright (C) 2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
uint32_t DrmMock::ioctlCallsForHelperInitialization = 0;
int DrmMock::handleRemainingRequests(DrmIoctl request, void *arg) {
return -1;
}

View File

@@ -12,7 +12,6 @@
#include "shared/source/os_interface/linux/i915.h" #include "shared/source/os_interface/linux/i915.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "ioctl_helper_init_calls.inl"
#include <cstring> #include <cstring>
@@ -36,6 +35,11 @@ DrmMock::DrmMock(int fd, RootDeviceEnvironment &rootDeviceEnvironment) : Drm(std
I915_SCHEDULER_CAP_PREEMPTION; I915_SCHEDULER_CAP_PREEMPTION;
} }
int DrmMock::handleRemainingRequests(DrmIoctl request, void *arg) {
ioctlCallsCount--;
return -1;
};
int DrmMock::ioctl(DrmIoctl request, void *arg) { int DrmMock::ioctl(DrmIoctl request, void *arg) {
ioctlCallsCount++; ioctlCallsCount++;
ioctlCount.total++; ioctlCount.total++;

View File

@@ -153,7 +153,7 @@ class DrmMock : public Drm {
} }
uint32_t getBaseIoctlCalls() { uint32_t getBaseIoctlCalls() {
return ioctlCallsForHelperInitialization + static_cast<uint32_t>(virtualMemoryIds.size()); return static_cast<uint32_t>(virtualMemoryIds.size());
} }
static const int mockFd = 33; static const int mockFd = 33;
@@ -193,6 +193,8 @@ class DrmMock : public Drm {
bool callBaseIsSetPairAvailable = false; bool callBaseIsSetPairAvailable = false;
bool callBaseGetSetPairAvailable = false; bool callBaseGetSetPairAvailable = false;
bool unrecoverableContextSet = false; bool unrecoverableContextSet = false;
bool failRetHwIpVersion = false;
bool returnInvalidHwIpVersionLength = false;
bool capturedCooperativeContextRequest = false; bool capturedCooperativeContextRequest = false;
bool incrementVmId = false; bool incrementVmId = false;
@@ -292,7 +294,6 @@ class DrmMock : public Drm {
} }
return storedGetDeviceMemoryPhysicalSizeInBytesStatus; return storedGetDeviceMemoryPhysicalSizeInBytesStatus;
} }
static uint32_t ioctlCallsForHelperInitialization;
}; };
class DrmMockNonFailing : public DrmMock { class DrmMockNonFailing : public DrmMock {

View File

@@ -12,8 +12,7 @@
#include "gtest/gtest.h" #include "gtest/gtest.h"
DrmQueryMock::DrmQueryMock(RootDeviceEnvironment &rootDeviceEnvironment, const HardwareInfo *inputHwInfo) : DrmMock(rootDeviceEnvironment) { DrmQueryMock::DrmQueryMock(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMock(rootDeviceEnvironment) {
rootDeviceEnvironment.setHwInfo(inputHwInfo);
context.hwInfo = rootDeviceEnvironment.getHardwareInfo(); context.hwInfo = rootDeviceEnvironment.getHardwareInfo();
callBaseIsVmBindAvailable = true; callBaseIsVmBindAvailable = true;

View File

@@ -17,8 +17,7 @@ class DrmQueryMock : public DrmMock {
public: public:
using Drm::rootDeviceEnvironment; using Drm::rootDeviceEnvironment;
DrmQueryMock(RootDeviceEnvironment &rootDeviceEnvironment) : DrmQueryMock(rootDeviceEnvironment, defaultHwInfo.get()) {} DrmQueryMock(RootDeviceEnvironment &rootDeviceEnvironment);
DrmQueryMock(RootDeviceEnvironment &rootDeviceEnvironment, const HardwareInfo *inputHwInfo);
DrmMockPrelimContext context{ DrmMockPrelimContext context{
nullptr, nullptr,

View File

@@ -47,6 +47,7 @@ class WddmMock : public Wddm {
using Wddm::pagingQueue; using Wddm::pagingQueue;
using Wddm::platformSupportsEvictIfNecessary; using Wddm::platformSupportsEvictIfNecessary;
using Wddm::populateAdditionalAdapterInfoOptions; using Wddm::populateAdditionalAdapterInfoOptions;
using Wddm::populateIpVersion;
using Wddm::residencyLogger; using Wddm::residencyLogger;
using Wddm::rootDeviceEnvironment; using Wddm::rootDeviceEnvironment;
using Wddm::setPlatformSupportEvictIfNecessaryFlag; using Wddm::setPlatformSupportEvictIfNecessaryFlag;

View File

@@ -56,7 +56,6 @@ if(NEO_ENABLE_i915_PRELIM_DETECTION)
${CMAKE_CURRENT_SOURCE_DIR}/drm_with_prelim_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_with_prelim_tests.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper_tests_prelim.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ioctl_helper_tests_prelim.cpp
${CMAKE_CURRENT_SOURCE_DIR}/prelim_helper_func.cpp ${CMAKE_CURRENT_SOURCE_DIR}/prelim_helper_func.cpp
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}ioctl_helper_prelim_init_tests.cpp
) )
if(TESTS_DG1 AND "${BRANCH_TYPE}" STREQUAL "") if(TESTS_DG1 AND "${BRANCH_TYPE}" STREQUAL "")
list(APPEND NEO_CORE_OS_INTERFACE_TESTS_LINUX list(APPEND NEO_CORE_OS_INTERFACE_TESTS_LINUX

View File

@@ -214,7 +214,9 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DrmTestXeHPAndLater, givenLinkBcsEngineWhenBindingS
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0], &localHwInfo);
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&localHwInfo);
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]);
drm->supportedCopyEnginesMask = maxNBitValue(9); drm->supportedCopyEnginesMask = maxNBitValue(9);
drm->queryEngineInfo(); drm->queryEngineInfo();
@@ -242,7 +244,8 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DrmTestXeHPAndLater, givenLinkBcsEngineWithoutMainC
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0], &localHwInfo); executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&localHwInfo);
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]);
drm->supportedCopyEnginesMask = maxNBitValue(9); drm->supportedCopyEnginesMask = maxNBitValue(9);
drm->supportedCopyEnginesMask.set(0, false); drm->supportedCopyEnginesMask.set(0, false);
@@ -290,7 +293,8 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DrmTestXeHPAndLater, giveNotAllLinkBcsEnginesWhenBi
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0], &localHwInfo); executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&localHwInfo);
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]);
drm->supportedCopyEnginesMask = maxNBitValue(9); drm->supportedCopyEnginesMask = maxNBitValue(9);
drm->supportedCopyEnginesMask.set(2, false); drm->supportedCopyEnginesMask.set(2, false);
drm->supportedCopyEnginesMask.set(7, false); drm->supportedCopyEnginesMask.set(7, false);
@@ -338,7 +342,8 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DrmTestXeHPAndLater, givenLinkBcsEngineWhenBindingM
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0b1111; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0b1111;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0], &localHwInfo); executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&localHwInfo);
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]);
drm->supportedCopyEnginesMask = maxNBitValue(9); drm->supportedCopyEnginesMask = maxNBitValue(9);
drm->queryEngineInfo(); drm->queryEngineInfo();
@@ -368,7 +373,8 @@ HWTEST2_F(DrmTestXeHPCAndLater, givenBcsVirtualEnginesEnabledWhenCreatingContext
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 0; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 0;
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0], &localHwInfo); executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&localHwInfo);
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]);
drm->supportedCopyEnginesMask = maxNBitValue(9); drm->supportedCopyEnginesMask = maxNBitValue(9);
drm->queryEngineInfo(); drm->queryEngineInfo();
EXPECT_NE(nullptr, drm->engineInfo); EXPECT_NE(nullptr, drm->engineInfo);
@@ -396,7 +402,8 @@ HWTEST2_F(DrmTestXeHPCAndLater, givenBcsVirtualEnginesEnabledWhenCreatingContext
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 0; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 0;
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0], &localHwInfo); executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&localHwInfo);
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]);
drm->supportedCopyEnginesMask = maxNBitValue(9); drm->supportedCopyEnginesMask = maxNBitValue(9);
drm->queryEngineInfo(); drm->queryEngineInfo();
EXPECT_NE(nullptr, drm->engineInfo); EXPECT_NE(nullptr, drm->engineInfo);
@@ -424,7 +431,8 @@ HWTEST2_F(DrmTestXeHPCAndLater, givenBcsVirtualEnginesDisabledWhenCreatingContex
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 0; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 0;
localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0; localHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0;
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0], &localHwInfo); executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&localHwInfo);
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]);
ASSERT_NE(nullptr, drm); ASSERT_NE(nullptr, drm);
drm->supportedCopyEnginesMask = maxNBitValue(9); drm->supportedCopyEnginesMask = maxNBitValue(9);
drm->queryEngineInfo(); drm->queryEngineInfo();
@@ -799,7 +807,7 @@ struct DistanceQueryDrmTests : ::testing::Test {
} }
std::unique_ptr<MyDrm> createDrm(bool supportDistanceInfoQuery) { std::unique_ptr<MyDrm> createDrm(bool supportDistanceInfoQuery) {
auto drm = std::make_unique<MyDrm>(*rootDeviceEnvironment, rootDeviceEnvironment->getHardwareInfo()); auto drm = std::make_unique<MyDrm>(*rootDeviceEnvironment);
drm->supportDistanceInfoQuery = supportDistanceInfoQuery; drm->supportDistanceInfoQuery = supportDistanceInfoQuery;
return drm; return drm;
} }

View File

@@ -18,9 +18,9 @@ TEST(DrmTest, whenQueryingEngineInfoThenSingleIoctlIsCalled) {
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
std::unique_ptr<DrmMock> drm = std::make_unique<DrmMock>(*executionEnvironment->rootDeviceEnvironments[0]); std::unique_ptr<DrmMock> drm = std::make_unique<DrmMock>(*executionEnvironment->rootDeviceEnvironments[0]);
EXPECT_NE(nullptr, drm); EXPECT_NE(nullptr, drm);
auto ioctlCount = drm->ioctlCount.total.load();
drm->queryEngineInfo(); drm->queryEngineInfo();
EXPECT_EQ(1u + drm->getBaseIoctlCalls(), drm->ioctlCallsCount); EXPECT_EQ(1 + ioctlCount, drm->ioctlCount.total.load());
} }
TEST(EngineInfoTest, givenEngineInfoQuerySupportedWhenQueryingEngineInfoThenEngineInfoIsCreatedWithEngines) { TEST(EngineInfoTest, givenEngineInfoQuerySupportedWhenQueryingEngineInfoThenEngineInfoIsCreatedWithEngines) {

View File

@@ -93,7 +93,7 @@ struct DrmVmTestFixture {
testHwInfo->gtSystemInfo.MultiTileArchInfo.TileMask = 0b1111; testHwInfo->gtSystemInfo.MultiTileArchInfo.TileMask = 0b1111;
executionEnvironment->rootDeviceEnvironments[0]->initGmm(); executionEnvironment->rootDeviceEnvironments[0]->initGmm();
drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0], testHwInfo); drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]);
ASSERT_NE(nullptr, drm); ASSERT_NE(nullptr, drm);
} }
@@ -193,7 +193,7 @@ struct MultiTileMemoryInfoFixture : public ::testing::Test {
multiTileArch.TileCount = tileCount; multiTileArch.TileCount = tileCount;
multiTileArch.TileMask = static_cast<uint8_t>(maxNBitValue(tileCount)); multiTileArch.TileMask = static_cast<uint8_t>(maxNBitValue(tileCount));
drm = std::make_unique<DrmQueryMock>(*rootDeviceEnvironment, rootDeviceEnvironment->getHardwareInfo()); drm = std::make_unique<DrmQueryMock>(*rootDeviceEnvironment);
memoryInfo = new MemoryInfo(regionInfo, *drm); memoryInfo = new MemoryInfo(regionInfo, *drm);
drm->memoryInfo.reset(memoryInfo); drm->memoryInfo.reset(memoryInfo);
@@ -417,7 +417,7 @@ TEST(MemoryInfo, givenMemoryInfoWithRegionsWhenCreatingGemExtWithPairHandleThenR
regionInfo[1].region = {drm_i915_gem_memory_class::I915_MEMORY_CLASS_DEVICE, 0}; regionInfo[1].region = {drm_i915_gem_memory_class::I915_MEMORY_CLASS_DEVICE, 0};
regionInfo[1].probedSize = 16 * GB; regionInfo[1].probedSize = 16 * GB;
auto executionEnvironment = std::make_unique<ExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
executionEnvironment->prepareRootDeviceEnvironments(1); executionEnvironment->prepareRootDeviceEnvironments(1);
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]); auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment->rootDeviceEnvironments[0]);
drm->context.setPairQueryValue = 1; drm->context.setPairQueryValue = 1;

View File

@@ -2025,7 +2025,7 @@ TEST_F(DrmMemoryManagerTestPrelim, givenDrmMemoryManagerWhenGetLocalMemorySizeIs
MockExecutionEnvironment executionEnvironment(&hwInfo, true, 4u); MockExecutionEnvironment executionEnvironment(&hwInfo, true, 4u);
for (auto i = 0u; i < 4u; i++) { for (auto i = 0u; i < 4u; i++) {
auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment.rootDeviceEnvironments[i], &hwInfo); auto drm = std::make_unique<DrmQueryMock>(*executionEnvironment.rootDeviceEnvironments[i]);
ASSERT_NE(nullptr, drm); ASSERT_NE(nullptr, drm);
executionEnvironment.rootDeviceEnvironments[i]->osInterface = std::make_unique<OSInterface>(); executionEnvironment.rootDeviceEnvironments[i]->osInterface = std::make_unique<OSInterface>();

View File

@@ -313,7 +313,8 @@ TEST(DrmBufferObjectTestPrelim, givenLocalMemoryEnabledWhenCreateDrmVirtualMemor
testHwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 1; testHwInfo.gtSystemInfo.MultiTileArchInfo.TileCount = 1;
testHwInfo.gtSystemInfo.MultiTileArchInfo.Tile0 = 1; testHwInfo.gtSystemInfo.MultiTileArchInfo.Tile0 = 1;
testHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0b1; testHwInfo.gtSystemInfo.MultiTileArchInfo.TileMask = 0b1;
DrmQueryMock drm(*executionEnvironment->rootDeviceEnvironments[0], &testHwInfo); executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&testHwInfo);
DrmQueryMock drm(*executionEnvironment->rootDeviceEnvironments[0]);
uint32_t vmId = 0; uint32_t vmId = 0;
drm.createDrmVirtualMemory(vmId); drm.createDrmVirtualMemory(vmId);

View File

@@ -96,7 +96,7 @@ struct QueryTopologyTests : ::testing::Test {
multiTileArch.TileCount = tileCount; multiTileArch.TileCount = tileCount;
multiTileArch.TileMask = static_cast<uint8_t>(maxNBitValue(tileCount)); multiTileArch.TileMask = static_cast<uint8_t>(maxNBitValue(tileCount));
drmMock = std::make_unique<MyDrmQueryMock>(*rootDeviceEnvironment, rootDeviceEnvironment->getHardwareInfo()); drmMock = std::make_unique<MyDrmQueryMock>(*rootDeviceEnvironment);
drmMock->storedSVal = 8; drmMock->storedSVal = 8;
drmMock->storedSSVal = 32; drmMock->storedSSVal = 32;

View File

@@ -21,10 +21,11 @@ TEST(DrmSystemInfoTest, whenQueryingSystemInfoThenSystemInfoIsNotCreatedAndIoctl
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>(); auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
DrmMock drm(*executionEnvironment->rootDeviceEnvironments[0]); DrmMock drm(*executionEnvironment->rootDeviceEnvironments[0]);
auto ioctlCount = drm.ioctlCount.total.load();
EXPECT_FALSE(drm.querySystemInfo()); EXPECT_FALSE(drm.querySystemInfo());
EXPECT_EQ(nullptr, drm.getSystemInfo()); EXPECT_EQ(nullptr, drm.getSystemInfo());
EXPECT_EQ(1u + drm.getBaseIoctlCalls(), drm.ioctlCallsCount); EXPECT_EQ(1 + ioctlCount, drm.ioctlCount.total.load());
} }
TEST(DrmSystemInfoTest, givenSystemInfoCreatedWhenQueryingSpecificAtrributesThenReturnZero) { TEST(DrmSystemInfoTest, givenSystemInfoCreatedWhenQueryingSpecificAtrributesThenReturnZero) {

View File

@@ -5,7 +5,7 @@
* *
*/ */
#include "shared/source/os_interface/linux/i915.h" #include "shared/source/os_interface/linux/i915_prelim.h"
#include "shared/source/os_interface/linux/ioctl_helper.h" #include "shared/source/os_interface/linux/ioctl_helper.h"
#include "shared/source/os_interface/linux/os_context_linux.h" #include "shared/source/os_interface/linux/os_context_linux.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h" #include "shared/test/common/helpers/debug_manager_state_restore.h"
@@ -23,11 +23,7 @@ extern int handlePrelimRequests(DrmIoctl request, void *arg, int ioctlRetVal, in
class DrmPrelimMock : public DrmMock { class DrmPrelimMock : public DrmMock {
public: public:
DrmPrelimMock(RootDeviceEnvironment &rootDeviceEnvironment) : DrmPrelimMock(rootDeviceEnvironment, defaultHwInfo.get()) {} using DrmMock::DrmMock;
DrmPrelimMock(RootDeviceEnvironment &rootDeviceEnvironment, HardwareInfo *inputHwInfo) : DrmMock(rootDeviceEnvironment) {
rootDeviceEnvironment.setHwInfo(inputHwInfo);
rootDeviceEnvironment.getMutableHardwareInfo()->platform.eProductFamily = IGFX_UNKNOWN;
}
int ioctlRetVal = 0; int ioctlRetVal = 0;
int queryDistanceIoctlRetVal = 0; int queryDistanceIoctlRetVal = 0;
@@ -37,6 +33,30 @@ class DrmPrelimMock : public DrmMock {
} }
int handleRemainingRequests(DrmIoctl request, void *arg) override { int handleRemainingRequests(DrmIoctl request, void *arg) override {
if (request == DrmIoctl::Query && arg != nullptr) {
auto queryArg = static_cast<Query *>(arg);
for (auto i = 0u; i < queryArg->numItems; i++) {
auto queryItemArg = (reinterpret_cast<QueryItem *>(queryArg->itemsPtr) + i);
if (queryItemArg->queryId == PRELIM_DRM_I915_QUERY_HW_IP_VERSION) {
ioctlCallsCount--;
if (queryItemArg->length == 0) {
queryItemArg->length = static_cast<int32_t>(sizeof(prelim_drm_i915_query_hw_ip_version));
if (this->returnInvalidHwIpVersionLength) {
queryItemArg->length -= 1;
}
} else {
if (this->failRetHwIpVersion) {
return EINVAL;
}
auto hwIpVersion = reinterpret_cast<prelim_drm_i915_query_hw_ip_version *>(queryItemArg->dataPtr);
hwIpVersion->stepping = 1;
hwIpVersion->release = 2;
hwIpVersion->arch = 3;
}
return 0;
}
}
}
return handlePrelimRequests(request, arg, ioctlRetVal, queryDistanceIoctlRetVal); return handlePrelimRequests(request, arg, ioctlRetVal, queryDistanceIoctlRetVal);
} }
}; };
@@ -493,3 +513,56 @@ TEST_F(IoctlHelperPrelimFixture, givenProgramDebuggingAndContextDebugSupportedWh
EXPECT_NE(static_cast<uint32_t>(-1), drm->passedContextDebugId); EXPECT_NE(static_cast<uint32_t>(-1), drm->passedContextDebugId);
EXPECT_TRUE(drm->capturedCooperativeContextRequest); EXPECT_TRUE(drm->capturedCooperativeContextRequest);
} }
TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenInitializatedThenIpVersionIsSet) {
auto &ipVersion = executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo()->ipVersion;
ipVersion = {};
EXPECT_TRUE(drm->ioctlHelper->initialize());
EXPECT_EQ(ipVersion.revision, 1u);
EXPECT_EQ(ipVersion.release, 2u);
EXPECT_EQ(ipVersion.architecture, 3u);
}
TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenFailOnInitializationThenIpVersionIsNotSet) {
auto &ipVersion = executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo()->ipVersion;
ipVersion = {};
drm->failRetHwIpVersion = true;
EXPECT_FALSE(drm->ioctlHelper->initialize());
EXPECT_EQ(ipVersion.revision, 0u);
EXPECT_EQ(ipVersion.release, 0u);
EXPECT_EQ(ipVersion.architecture, 0u);
}
TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenInvalidHwIpVersionSizeOnInitializationThenErrorIsPrinted) {
DebugManagerStateRestore restore;
DebugManager.flags.PrintDebugMessages.set(true);
testing::internal::CaptureStderr();
drm->returnInvalidHwIpVersionLength = true;
EXPECT_FALSE(drm->ioctlHelper->initialize());
DebugManager.flags.PrintDebugMessages.set(false);
std::string output = testing::internal::GetCapturedStderr();
std::string expectedOutput = "Size got from PRELIM_DRM_I915_QUERY_HW_IP_VERSION query does not match PrelimI915::prelim_drm_i915_query_hw_ip_version size\n";
EXPECT_STREQ(output.c_str(), expectedOutput.c_str());
}
TEST_F(IoctlHelperPrelimFixture, givenIoctlHelperWhenFailOnInitializationAndPlatformQueryIsSupportedThenErrorIsPrinted) {
DebugManagerStateRestore restore;
DebugManager.flags.PrintDebugMessages.set(true);
testing::internal::CaptureStderr();
drm->failRetHwIpVersion = true;
EXPECT_FALSE(drm->ioctlHelper->initialize());
DebugManager.flags.PrintDebugMessages.set(false);
std::string output = testing::internal::GetCapturedStderr();
if (HwInfoConfig::get(executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo()->platform.eProductFamily)->isPlatformQuerySupported()) {
EXPECT_STRNE(output.c_str(), "");
} else {
EXPECT_STREQ(output.c_str(), "");
}
}

View File

@@ -1,22 +0,0 @@
/*
* Copyright (C) 2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/os_interface/linux/ioctl_helper.h"
#include "shared/test/common/libult/linux/drm_mock.h"
#include "shared/test/common/mocks/mock_execution_environment.h"
#include "shared/test/common/test_macros/test.h"
using namespace NEO;
TEST(IoctlHelperPrelimInitializationTests, givenPrelimWhenInitializingThenTrueIsReturned) {
auto executionEnvironment = std::make_unique<MockExecutionEnvironment>();
auto drm = std::make_unique<DrmMock>(*executionEnvironment->rootDeviceEnvironments[0]);
ASSERT_NE(nullptr, drm);
IoctlHelperPrelim20 ioctlHelper{*drm};
EXPECT_EQ(true, ioctlHelper.initialize());
}