mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
Enable xe_hp_sdv i915 config
Related-To: NEO-6149
Source location of Linux kernel DRM/i915 interface headers:
9641c49adb
Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
90bf2b29cc
commit
d1e38d2370
18
shared/source/os_interface/linux/local/dg1/CMakeLists.txt
Normal file
18
shared/source/os_interface/linux/local/dg1/CMakeLists.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# Copyright (C) 2021 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
if(SUPPORT_DG1 AND "${BRANCH_TYPE}" STREQUAL "")
|
||||
set(NEO_CORE_OS_INTERFACE_LINUX_LOCAL_DG1
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/local_memory_helper_dg1.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/drm_tip_helper.cpp
|
||||
)
|
||||
set(CORE_SRCS_LINK_LINUX_LOCAL_DG1
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/enable_local_memory_helper_dg1.cpp
|
||||
)
|
||||
set_property(GLOBAL APPEND PROPERTY NEO_CORE_OS_INTERFACE_LINUX ${NEO_CORE_OS_INTERFACE_LINUX_LOCAL_DG1})
|
||||
set_property(GLOBAL APPEND PROPERTY NEO_CORE_SRCS_LINK ${CORE_SRCS_LINK_LINUX_LOCAL_DG1})
|
||||
endif()
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/os_interface/linux/local_memory_helper.h"
|
||||
|
||||
#include "third_party/uapi/drm_tip/drm/i915_drm.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace NEO {
|
||||
|
||||
uint32_t createGemExtMemoryRegions(Drm *drm, void *data, uint32_t dataSize, size_t allocSize, uint32_t &handle) {
|
||||
drm_i915_gem_create_ext_memory_regions extRegions{};
|
||||
extRegions.base.name = I915_GEM_CREATE_EXT_MEMORY_REGIONS;
|
||||
extRegions.num_regions = dataSize;
|
||||
extRegions.regions = reinterpret_cast<uintptr_t>(data);
|
||||
|
||||
drm_i915_gem_create_ext createExt{};
|
||||
createExt.size = allocSize;
|
||||
createExt.extensions = reinterpret_cast<uintptr_t>(&extRegions);
|
||||
|
||||
auto ret = LocalMemoryHelper::ioctl(drm, DRM_IOCTL_I915_GEM_CREATE_EXT, &createExt);
|
||||
|
||||
handle = createExt.handle;
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool isQueryDrmTip(uint8_t *dataQuery, int32_t length) {
|
||||
auto dataOnDrmTip = reinterpret_cast<drm_i915_query_memory_regions *>(dataQuery);
|
||||
auto lengthOnDrmTip = static_cast<int32_t>(sizeof(drm_i915_query_memory_regions) + dataOnDrmTip->num_regions * sizeof(drm_i915_memory_region_info));
|
||||
return length == lengthOnDrmTip;
|
||||
}
|
||||
|
||||
namespace DG1_INTERNAL {
|
||||
#undef DRM_IOCTL_I915_GEM_CREATE_EXT
|
||||
#undef __I915_EXEC_UNKNOWN_FLAGS
|
||||
#include "third_party/uapi/dg1/drm/i915_drm.h"
|
||||
} // namespace DG1_INTERNAL
|
||||
|
||||
std::unique_ptr<uint8_t[]> translateToDrmTip(uint8_t *dataQuery, int32_t &length) {
|
||||
auto dataOnInternalDrm = reinterpret_cast<DG1_INTERNAL::drm_i915_query_memory_regions *>(dataQuery);
|
||||
auto lengthTranslated = static_cast<int32_t>(sizeof(drm_i915_query_memory_regions) + dataOnInternalDrm->num_regions * sizeof(drm_i915_memory_region_info));
|
||||
auto dataQueryTranslated = std::make_unique<uint8_t[]>(lengthTranslated);
|
||||
auto dataTranslated = reinterpret_cast<drm_i915_query_memory_regions *>(dataQueryTranslated.get());
|
||||
dataTranslated->num_regions = dataOnInternalDrm->num_regions;
|
||||
for (uint32_t i = 0; i < dataTranslated->num_regions; i++) {
|
||||
dataTranslated->regions[i].region.memory_class = dataOnInternalDrm->regions[i].region.memory_class;
|
||||
dataTranslated->regions[i].region.memory_instance = dataOnInternalDrm->regions[i].region.memory_instance;
|
||||
dataTranslated->regions[i].probed_size = dataOnInternalDrm->regions[i].probed_size;
|
||||
dataTranslated->regions[i].unallocated_size = dataOnInternalDrm->regions[i].unallocated_size;
|
||||
}
|
||||
length = lengthTranslated;
|
||||
return dataQueryTranslated;
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/os_interface/linux/local_memory_helper.h"
|
||||
|
||||
namespace NEO {
|
||||
|
||||
static EnableProductLocalMemoryHelper<IGFX_DG1> enableLocalMemHelperDG1;
|
||||
|
||||
} // namespace NEO
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/debug_settings/debug_settings_manager.h"
|
||||
#include "shared/source/os_interface/linux/local_memory_helper.h"
|
||||
|
||||
#include "third_party/uapi/dg1/drm/i915_drm.h"
|
||||
|
||||
namespace NEO {
|
||||
constexpr static auto gfxProduct = IGFX_DG1;
|
||||
|
||||
extern uint32_t createGemExtMemoryRegions(Drm *drm, void *data, uint32_t dataSize, size_t allocSize, uint32_t &handle);
|
||||
extern bool isQueryDrmTip(uint8_t *dataQuery, int32_t length);
|
||||
extern std::unique_ptr<uint8_t[]> translateToDrmTip(uint8_t *dataQuery, int32_t &length);
|
||||
|
||||
template <>
|
||||
uint32_t LocalMemoryHelperImpl<gfxProduct>::createGemExt(Drm *drm, void *data, uint32_t dataSize, size_t allocSize, uint32_t &handle) {
|
||||
printDebugString(DebugManager.flags.PrintBOCreateDestroyResult.get(), stdout, "Performing GEM_CREATE_EXT with { size: %lu", allocSize);
|
||||
|
||||
if (DebugManager.flags.PrintBOCreateDestroyResult.get()) {
|
||||
for (uint32_t i = 0; i < dataSize; i++) {
|
||||
auto region = reinterpret_cast<drm_i915_gem_memory_class_instance *>(data)[i];
|
||||
printDebugString(DebugManager.flags.PrintBOCreateDestroyResult.get(), stdout, ", memory class: %d, memory instance: %d",
|
||||
region.memory_class, region.memory_instance);
|
||||
}
|
||||
printDebugString(DebugManager.flags.PrintBOCreateDestroyResult.get(), stdout, "%s", " }\n");
|
||||
}
|
||||
|
||||
if (createGemExtMemoryRegions(drm, data, dataSize, allocSize, handle) == 0) {
|
||||
printDebugString(DebugManager.flags.PrintBOCreateDestroyResult.get(), stdout, "GEM_CREATE_EXT with EXT_MEMORY_REGIONS has returned: %d BO-%u with size: %lu\n", 0, handle, allocSize);
|
||||
return 0;
|
||||
}
|
||||
handle = 0u;
|
||||
|
||||
drm_i915_gem_object_param regionParam{};
|
||||
regionParam.size = dataSize;
|
||||
regionParam.data = reinterpret_cast<uintptr_t>(data);
|
||||
regionParam.param = I915_OBJECT_PARAM | I915_PARAM_MEMORY_REGIONS;
|
||||
|
||||
drm_i915_gem_create_ext_setparam setparamRegion{};
|
||||
setparamRegion.base.name = I915_GEM_CREATE_EXT_SETPARAM;
|
||||
setparamRegion.param = regionParam;
|
||||
|
||||
drm_i915_gem_create_ext createExt{};
|
||||
createExt.size = allocSize;
|
||||
createExt.extensions = reinterpret_cast<uintptr_t>(&setparamRegion);
|
||||
|
||||
auto ret = LocalMemoryHelper::ioctl(drm, DRM_IOCTL_I915_GEM_CREATE_EXT, &createExt);
|
||||
|
||||
handle = createExt.handle;
|
||||
printDebugString(DebugManager.flags.PrintBOCreateDestroyResult.get(), stdout, "GEM_CREATE_EXT with EXT_SETPARAM has returned: %d BO-%u with size: %lu\n", ret, createExt.handle, createExt.size);
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <>
|
||||
std::unique_ptr<uint8_t[]> LocalMemoryHelperImpl<gfxProduct>::translateIfRequired(uint8_t *dataQuery, int32_t length) {
|
||||
if (isQueryDrmTip(dataQuery, length)) {
|
||||
return std::unique_ptr<uint8_t[]>(dataQuery);
|
||||
}
|
||||
auto data = std::unique_ptr<uint8_t[]>(dataQuery);
|
||||
return translateToDrmTip(data.get(), length);
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
Reference in New Issue
Block a user