Kfdtest: Change and move drm device function into KFDBaseComponentTest

It is for other test to reuse this function.

Change-Id: Ib0dbc1a267a5bbcd8078ab3265677b53531f86f3
Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com>
This commit is contained in:
Eric Huang
2018-08-01 14:18:40 -04:00
کامیت شده توسط JinHuiEric Huang
والد 08b6685dd5
کامیت f8d19104aa
4فایلهای تغییر یافته به همراه79 افزوده شده و 117 حذف شده
@@ -36,6 +36,7 @@ void KFDBaseComponentTest::SetUp() {
ASSERT_SUCCESS(hsaKmtOpenKFD());
EXPECT_SUCCESS(hsaKmtGetVersion(&m_VersionInfo));
memset( &m_SystemProperties, 0, sizeof(m_SystemProperties) );
memset(m_RenderNodes, 0, sizeof(m_RenderNodes));
/** in order to be correctly testing the KFD interfaces and ensure
* that the KFD acknowledges relevant node parameters
@@ -70,6 +71,14 @@ void KFDBaseComponentTest::SetUp() {
void KFDBaseComponentTest::TearDown() {
ROUTINE_START
for (int i = 0; i < MAX_RENDER_NODES; i++) {
if (m_RenderNodes[i].fd <= 0)
continue;
amdgpu_device_deinitialize(m_RenderNodes[i].device_handle);
drmClose(m_RenderNodes[i].fd);
}
ASSERT_SUCCESS(hsaKmtReleaseSystemProperties());
ASSERT_SUCCESS(hsaKmtCloseKFD());
@@ -115,3 +124,52 @@ HSAuint64 KFDBaseComponentTest::GetVramSize(int defaultGPUNode) {
return 0;
}
int KFDBaseComponentTest::FindDRMRenderNode(int gpuNode) {
char path[PATH_MAX], buf[PAGE_SIZE];
snprintf(path, PATH_MAX, "/sys/class/kfd/kfd/topology/nodes/%d/properties", gpuNode);
int fd = open(path, O_RDONLY);
if (fd < 0) {
LOG() << "Failed to open " << path << std::endl;
return -EINVAL;
}
read(fd, buf, PAGE_SIZE);
close(fd);
char *s = strstr(buf, "drm_render_minor");
int minor = atoi(s + 17);
if (minor < 128) {
LOG() << "Failed to get minor number " << minor << std::endl;
return -EINVAL;
}
int index = minor - 128;
if (m_RenderNodes[index].fd == 0) {
m_RenderNodes[index].fd = drmOpenRender(minor);
if (m_RenderNodes[index].fd < 0) {
LOG() << "Failed to open render node" << std::endl;
return -EINVAL;
}
if (amdgpu_device_initialize(m_RenderNodes[index].fd,
&m_RenderNodes[index].major_version,
&m_RenderNodes[index].minor_version,
&m_RenderNodes[index].device_handle) != 0) {
drmClose(m_RenderNodes[index].fd);
m_RenderNodes[index].fd = 0;
LOG() << "Failed to initialize amdgpu device" << std::endl;
return -EINVAL;
}
}
return index;
}