Extended DRM interface with function to set memory regions
Related-To: NEO-3008 Change-Id: I3f2d5571d670b43225e77e4f80e121aee215d61a Signed-off-by: Milczarek, Slawomir <slawomir.milczarek@intel.com>
This commit is contained in:
parent
6b21ae07ad
commit
030945bcd3
|
@ -189,6 +189,7 @@ Drm *Drm::create(int32_t deviceOrdinal) {
|
|||
drmObject->queryEngineInfo();
|
||||
if (HwHelper::get(device->pHwInfo->platform.eRenderCoreFamily).getEnableLocalMemory(*device->pHwInfo)) {
|
||||
drmObject->queryMemoryInfo();
|
||||
drmObject->setMemoryRegions();
|
||||
}
|
||||
|
||||
drms[deviceOrdinal % drms.size()] = drmObject.release();
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
|
||||
#pragma once
|
||||
#include "core/helpers/basic_math.h"
|
||||
#include "runtime/os_interface/linux/engine_info.h"
|
||||
#include "runtime/os_interface/linux/memory_info.h"
|
||||
#include "runtime/utilities/api_intercept.h"
|
||||
|
@ -74,6 +75,7 @@ class Drm {
|
|||
bool getSimplifiedMocsTableUsage() const;
|
||||
void queryEngineInfo();
|
||||
void queryMemoryInfo();
|
||||
void setMemoryRegions();
|
||||
|
||||
MemoryInfo *getMemoryInfo() const {
|
||||
return memoryInfo.get();
|
||||
|
@ -99,6 +101,9 @@ class Drm {
|
|||
std::string getSysFsPciPath(int deviceID);
|
||||
void *query(uint32_t queryId);
|
||||
|
||||
static inline uint16_t getMemoryTypeFromRegion(uint32_t region) { return Math::log2(region >> 16); };
|
||||
static inline uint16_t getInstanceFromRegion(uint32_t region) { return Math::log2(region & 0xFFFF); };
|
||||
|
||||
#pragma pack(1)
|
||||
struct PCIConfig {
|
||||
uint16_t VendorID;
|
||||
|
|
|
@ -21,6 +21,9 @@ void Drm::queryEngineInfo() {
|
|||
void Drm::queryMemoryInfo() {
|
||||
}
|
||||
|
||||
void Drm::setMemoryRegions() {
|
||||
}
|
||||
|
||||
unsigned int Drm::bindDrmContext(uint32_t drmContextId, uint32_t deviceIndex, aub_stream::EngineType engineType) {
|
||||
return DrmEngineMapper::engineNodeMap(engineType);
|
||||
}
|
||||
|
|
|
@ -27,6 +27,15 @@ TEST(DrmTest, whenQueryingMemoryInfoThenMemoryInfoIsNotCreatedAndNoIoctlIsCalled
|
|||
EXPECT_EQ(0u, drm->ioctlCallsCount);
|
||||
}
|
||||
|
||||
TEST(DrmTest, whenSettingMemoryRegionsThenNoIoctlIsCalled) {
|
||||
std::unique_ptr<DrmMock> drm = std::make_unique<DrmMock>();
|
||||
EXPECT_NE(nullptr, drm);
|
||||
|
||||
drm->setMemoryRegions();
|
||||
|
||||
EXPECT_EQ(0u, drm->ioctlCallsCount);
|
||||
}
|
||||
|
||||
TEST(DrmTest, givenMemoryInfoWhenGetMemoryInfoIsCalledThenValidPtrIsReturned) {
|
||||
std::unique_ptr<DrmMock> drm = std::make_unique<DrmMock>();
|
||||
EXPECT_NE(nullptr, drm);
|
||||
|
@ -39,3 +48,28 @@ TEST(DrmTest, givenMemoryInfoWhenGetMemoryInfoIsCalledThenValidPtrIsReturned) {
|
|||
TEST(MemoryInfo, givenMemoryInfoImplementationWhenDestructingThenDestructorIsCalled) {
|
||||
MemoryInfoImpl memoryInfoImpl;
|
||||
}
|
||||
|
||||
TEST(MemoryInfo, givenMemoryRegionIdWhenGetMemoryTypeFromRegionAndGetInstanceFromRegionAreCalledThenMemoryTypeAndInstanceAreReturned) {
|
||||
std::unique_ptr<DrmMock> drm = std::make_unique<DrmMock>();
|
||||
EXPECT_NE(nullptr, drm);
|
||||
|
||||
auto regionSmem = drm->createMemoryRegionId(0, 0);
|
||||
EXPECT_EQ(0u, drm->getMemoryTypeFromRegion(regionSmem));
|
||||
EXPECT_EQ(0u, drm->getInstanceFromRegion(regionSmem));
|
||||
|
||||
auto regionLmem = drm->createMemoryRegionId(1, 0);
|
||||
EXPECT_EQ(1u, drm->getMemoryTypeFromRegion(regionLmem));
|
||||
EXPECT_EQ(0u, drm->getInstanceFromRegion(regionLmem));
|
||||
|
||||
auto regionLmem1 = drm->createMemoryRegionId(1, 1);
|
||||
EXPECT_EQ(1u, drm->getMemoryTypeFromRegion(regionLmem1));
|
||||
EXPECT_EQ(1u, drm->getInstanceFromRegion(regionLmem1));
|
||||
|
||||
auto regionLmem2 = drm->createMemoryRegionId(1, 2);
|
||||
EXPECT_EQ(1u, drm->getMemoryTypeFromRegion(regionLmem2));
|
||||
EXPECT_EQ(2u, drm->getInstanceFromRegion(regionLmem2));
|
||||
|
||||
auto regionLmem3 = drm->createMemoryRegionId(1, 3);
|
||||
EXPECT_EQ(1u, drm->getMemoryTypeFromRegion(regionLmem3));
|
||||
EXPECT_EQ(3u, drm->getInstanceFromRegion(regionLmem3));
|
||||
}
|
||||
|
|
|
@ -20,6 +20,8 @@ using namespace NEO;
|
|||
// Mock DRM class that responds to DRM_IOCTL_I915_GETPARAMs
|
||||
class DrmMock : public Drm {
|
||||
public:
|
||||
using Drm::getInstanceFromRegion;
|
||||
using Drm::getMemoryTypeFromRegion;
|
||||
using Drm::memoryInfo;
|
||||
using Drm::preemptionSupported;
|
||||
using Drm::query;
|
||||
|
@ -65,6 +67,10 @@ class DrmMock : public Drm {
|
|||
void setDeviceID(int deviceId) { this->deviceId = deviceId; }
|
||||
void setDeviceRevID(int revisionId) { this->revisionId = revisionId; }
|
||||
|
||||
inline uint32_t createMemoryRegionId(uint16_t type, uint16_t instance) const {
|
||||
return (1u << (type + 16)) | (1u << instance);
|
||||
}
|
||||
|
||||
static const int mockFd = 33;
|
||||
|
||||
int StoredEUVal = -1;
|
||||
|
|
Loading…
Reference in New Issue