From 416ca5938e7a4de58a46acae2c5c2bee4bfcca2b Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Wed, 27 Jul 2022 08:32:08 +0000 Subject: [PATCH] Create enum values for i915 context param values Related-To: NEO-6999 Signed-off-by: Mateusz Jablonski --- shared/source/os_interface/linux/drm_neo.cpp | 20 +++++++++---------- .../source/os_interface/linux/drm_wrappers.h | 7 +++++++ .../os_interface/linux/ioctl_helper.cpp | 14 +++++++++++++ .../linux/ioctl_helper_tests_prelim.cpp | 7 +++++++ .../linux/ioctl_helper_tests_upstream.cpp | 7 +++++++ 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index 40880685e6..a8b3ae47a7 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -196,7 +196,7 @@ bool Drm::readSysFsAsString(const std::string &relativeFilePath, std::string &re int Drm::queryGttSize(uint64_t >tSizeOutput) { GemContextParam contextParam = {0}; - contextParam.param = I915_CONTEXT_PARAM_GTT_SIZE; + contextParam.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamGttSize); int ret = ioctlHelper->ioctl(DrmIoctl::GemContextGetparam, &contextParam); if (ret == 0) { @@ -239,7 +239,7 @@ void Drm::checkQueueSliceSupport() { void Drm::setLowPriorityContextParam(uint32_t drmContextId) { GemContextParam gcp = {}; gcp.contextId = drmContextId; - gcp.param = I915_CONTEXT_PARAM_PRIORITY; + gcp.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamPriority); gcp.value = -1023; auto retVal = ioctlHelper->ioctl(DrmIoctl::GemContextSetparam, &gcp); @@ -248,7 +248,7 @@ void Drm::setLowPriorityContextParam(uint32_t drmContextId) { int Drm::getQueueSliceCount(GemContextParamSseu *sseu) { GemContextParam contextParam = {}; - contextParam.param = I915_CONTEXT_PARAM_SSEU; + contextParam.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamSseu); sseu->engine.engineClass = ioctlHelper->getDrmParamValue(DrmParam::EngineClassRender); sseu->engine.engineInstance = ioctlHelper->getDrmParamValue(DrmParam::ExecDefault); contextParam.value = reinterpret_cast(sseu); @@ -265,7 +265,7 @@ bool Drm::setQueueSliceCount(uint64_t sliceCount) { GemContextParam contextParam = {}; sseu.sliceMask = getSliceMask(sliceCount); - contextParam.param = I915_CONTEXT_PARAM_SSEU; + contextParam.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamSseu); contextParam.contextId = 0; contextParam.value = reinterpret_cast(&sseu); contextParam.size = sizeof(struct GemContextParamSseu); @@ -279,7 +279,7 @@ bool Drm::setQueueSliceCount(uint64_t sliceCount) { void Drm::checkNonPersistentContextsSupport() { GemContextParam contextParam = {}; - contextParam.param = I915_CONTEXT_PARAM_PERSISTENCE; + contextParam.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamPersistence); auto retVal = ioctlHelper->ioctl(DrmIoctl::GemContextGetparam, &contextParam); if (retVal == 0 && contextParam.value == 1) { @@ -292,7 +292,7 @@ void Drm::checkNonPersistentContextsSupport() { void Drm::setNonPersistentContext(uint32_t drmContextId) { GemContextParam contextParam = {}; contextParam.contextId = drmContextId; - contextParam.param = I915_CONTEXT_PARAM_PERSISTENCE; + contextParam.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamPersistence); ioctlHelper->ioctl(DrmIoctl::GemContextSetparam, &contextParam); } @@ -300,7 +300,7 @@ void Drm::setNonPersistentContext(uint32_t drmContextId) { void Drm::setUnrecoverableContext(uint32_t drmContextId) { GemContextParam contextParam = {}; contextParam.contextId = drmContextId; - contextParam.param = I915_CONTEXT_PARAM_RECOVERABLE; + contextParam.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamRecoverable); contextParam.value = 0; contextParam.size = 0; @@ -321,7 +321,7 @@ uint32_t Drm::createDrmContext(uint32_t drmVmId, bool isDirectSubmissionRequeste if (drmVmId > 0) { extSetparam.base.name = I915_CONTEXT_CREATE_EXT_SETPARAM; - extSetparam.param.param = I915_CONTEXT_PARAM_VM; + extSetparam.param.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamVm); extSetparam.param.value = drmVmId; gcc.extensions = reinterpret_cast(&extSetparam); gcc.flags |= I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS; @@ -361,7 +361,7 @@ int Drm::queryVmId(uint32_t drmContextId, uint32_t &vmId) { GemContextParam param{}; param.contextId = drmContextId; param.value = 0; - param.param = I915_CONTEXT_PARAM_VM; + param.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamVm); auto retVal = ioctlHelper->ioctl(DrmIoctl::GemContextGetparam, ¶m); vmId = static_cast(param.value); @@ -1236,7 +1236,7 @@ unsigned int Drm::bindDrmContext(uint32_t drmContextId, uint32_t deviceIndex, au GemContextParam param{}; param.contextId = drmContextId; param.size = static_cast(ptrDiff(contextEngines.engines + numEnginesInContext, &contextEngines)); - param.param = I915_CONTEXT_PARAM_ENGINES; + param.param = ioctlHelper->getDrmParamValue(DrmParam::ContextParamEngines); param.value = castToUint64(&contextEngines); auto ioctlValue = ioctlHelper->ioctl(DrmIoctl::GemContextSetparam, ¶m); diff --git a/shared/source/os_interface/linux/drm_wrappers.h b/shared/source/os_interface/linux/drm_wrappers.h index 1a64e33117..f0ce3fa9eb 100644 --- a/shared/source/os_interface/linux/drm_wrappers.h +++ b/shared/source/os_interface/linux/drm_wrappers.h @@ -227,6 +227,13 @@ enum class DrmIoctl { }; enum class DrmParam { + ContextParamEngines, + ContextParamGttSize, + ContextParamPersistence, + ContextParamPriority, + ContextParamRecoverable, + ContextParamSseu, + ContextParamVm, EngineClassRender, EngineClassCompute, EngineClassCopy, diff --git a/shared/source/os_interface/linux/ioctl_helper.cpp b/shared/source/os_interface/linux/ioctl_helper.cpp index 1326a9a937..8a64e9df85 100644 --- a/shared/source/os_interface/linux/ioctl_helper.cpp +++ b/shared/source/os_interface/linux/ioctl_helper.cpp @@ -197,6 +197,20 @@ unsigned int IoctlHelper::getIoctlRequestValueBase(DrmIoctl ioctlRequest) const int IoctlHelper::getDrmParamValueBase(DrmParam drmParam) const { switch (drmParam) { + case DrmParam::ContextParamEngines: + return I915_CONTEXT_PARAM_ENGINES; + case DrmParam::ContextParamGttSize: + return I915_CONTEXT_PARAM_GTT_SIZE; + case DrmParam::ContextParamPersistence: + return I915_CONTEXT_PARAM_PERSISTENCE; + case DrmParam::ContextParamPriority: + return I915_CONTEXT_PARAM_PRIORITY; + case DrmParam::ContextParamRecoverable: + return I915_CONTEXT_PARAM_RECOVERABLE; + case DrmParam::ContextParamSseu: + return I915_CONTEXT_PARAM_SSEU; + case DrmParam::ContextParamVm: + return I915_CONTEXT_PARAM_VM; case DrmParam::EngineClassRender: return drm_i915_gem_engine_class::I915_ENGINE_CLASS_RENDER; case DrmParam::EngineClassCopy: diff --git a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp index d91b41cec5..7feddf96ba 100644 --- a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp +++ b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_prelim.cpp @@ -115,6 +115,13 @@ TEST_F(IoctlPrelimHelperTests, whenGettingIoctlRequestStringThenProperStringIsRe } TEST_F(IoctlPrelimHelperTests, whenGettingDrmParamValueThenPropertValueIsReturned) { + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamEngines), static_cast(I915_CONTEXT_PARAM_ENGINES)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamGttSize), static_cast(I915_CONTEXT_PARAM_GTT_SIZE)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamPersistence), static_cast(I915_CONTEXT_PARAM_PERSISTENCE)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamPriority), static_cast(I915_CONTEXT_PARAM_PRIORITY)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamRecoverable), static_cast(I915_CONTEXT_PARAM_RECOVERABLE)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamSseu), static_cast(I915_CONTEXT_PARAM_SSEU)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamVm), static_cast(I915_CONTEXT_PARAM_VM)); EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::EngineClassCompute), static_cast(prelim_drm_i915_gem_engine_class::PRELIM_I915_ENGINE_CLASS_COMPUTE)); EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::EngineClassRender), static_cast(drm_i915_gem_engine_class::I915_ENGINE_CLASS_RENDER)); EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::EngineClassCopy), static_cast(drm_i915_gem_engine_class::I915_ENGINE_CLASS_COPY)); diff --git a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp index 1c12fba7f8..39925e3adb 100644 --- a/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp +++ b/shared/test/unit_test/os_interface/linux/ioctl_helper_tests_upstream.cpp @@ -99,6 +99,13 @@ TEST(IoctlHelperUpstreamTest, whenGettingDrmParamValueThenPropertValueIsReturned auto executionEnvironment = std::make_unique(); auto drm = std::make_unique(*executionEnvironment->rootDeviceEnvironments[0]); IoctlHelperUpstream ioctlHelper{*drm}; + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamEngines), static_cast(I915_CONTEXT_PARAM_ENGINES)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamGttSize), static_cast(I915_CONTEXT_PARAM_GTT_SIZE)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamPersistence), static_cast(I915_CONTEXT_PARAM_PERSISTENCE)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamPriority), static_cast(I915_CONTEXT_PARAM_PRIORITY)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamRecoverable), static_cast(I915_CONTEXT_PARAM_RECOVERABLE)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamSseu), static_cast(I915_CONTEXT_PARAM_SSEU)); + EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::ContextParamVm), static_cast(I915_CONTEXT_PARAM_VM)); EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::EngineClassCompute), 4); EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::EngineClassRender), static_cast(drm_i915_gem_engine_class::I915_ENGINE_CLASS_RENDER)); EXPECT_EQ(ioctlHelper.getDrmParamValue(DrmParam::EngineClassCopy), static_cast(drm_i915_gem_engine_class::I915_ENGINE_CLASS_COPY));