mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-09 22:43:00 +08:00
sysman: fix firmware device enumeration in firmware Utils
firmware Utils was always enumerating the same firmware device handle for all sysman devices. Related-To:LOCI-2609 Signed-off-by: T J Vivek Vilvaraj <t.j.vivek.vilvaraj@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
091b3ac4f6
commit
f27f430429
@@ -23,7 +23,7 @@ typedef struct igsc_device_info {
|
||||
namespace L0 {
|
||||
class FirmwareUtil {
|
||||
public:
|
||||
static FirmwareUtil *create();
|
||||
static FirmwareUtil *create(const std::string &pciBDF);
|
||||
virtual ze_result_t fwDeviceInit() = 0;
|
||||
virtual ze_result_t getFirstDevice(igsc_device_info *) = 0;
|
||||
virtual ze_result_t fwGetVersion(std::string &fwVersion) = 0;
|
||||
|
||||
@@ -68,13 +68,23 @@ ze_result_t FirmwareUtilImp::getFirstDevice(igsc_device_info *info) {
|
||||
}
|
||||
|
||||
info->name[0] = '\0';
|
||||
ret = deviceItreatorNext(iter, info);
|
||||
if (ret == IGSC_SUCCESS) {
|
||||
deviceItreatorDestroy(iter);
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
do {
|
||||
ret = deviceItreatorNext(iter, info);
|
||||
if (ret != IGSC_SUCCESS) {
|
||||
deviceItreatorDestroy(iter);
|
||||
return ZE_RESULT_ERROR_UNINITIALIZED;
|
||||
}
|
||||
if (info->domain == domain &&
|
||||
info->bus == bus &&
|
||||
info->dev == device &&
|
||||
info->func == function) {
|
||||
fwDevicePath.assign(info->name);
|
||||
break;
|
||||
}
|
||||
} while (1);
|
||||
|
||||
deviceItreatorDestroy(iter);
|
||||
return ZE_RESULT_ERROR_UNKNOWN;
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t FirmwareUtilImp::fwDeviceInit() {
|
||||
@@ -84,8 +94,6 @@ ze_result_t FirmwareUtilImp::fwDeviceInit() {
|
||||
if (result != ZE_RESULT_SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
fwDevicePath.assign(info.name);
|
||||
|
||||
ret = deviceInitByDevice(&fwDeviceHandle, fwDevicePath.c_str());
|
||||
if (ret != 0) {
|
||||
return ZE_RESULT_ERROR_UNINITIALIZED;
|
||||
@@ -164,7 +172,9 @@ ze_result_t FirmwareUtilImp::fwFlashOprom(void *pImage, uint32_t size) {
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
FirmwareUtilImp::FirmwareUtilImp(){};
|
||||
FirmwareUtilImp::FirmwareUtilImp(const std::string &pciBDF) {
|
||||
sscanf(pciBDF.c_str(), "%04" SCNx16 ":%02" SCNx8 ":%02" SCNx8 ".%" SCNx8, &domain, &bus, &device, &function);
|
||||
};
|
||||
|
||||
FirmwareUtilImp::~FirmwareUtilImp() {
|
||||
if (nullptr != libraryHandle) {
|
||||
@@ -173,8 +183,8 @@ FirmwareUtilImp::~FirmwareUtilImp() {
|
||||
}
|
||||
};
|
||||
|
||||
FirmwareUtil *FirmwareUtil::create() {
|
||||
FirmwareUtilImp *pFwUtilImp = new FirmwareUtilImp();
|
||||
FirmwareUtil *FirmwareUtil::create(const std::string &pciBDF) {
|
||||
FirmwareUtilImp *pFwUtilImp = new FirmwareUtilImp(pciBDF);
|
||||
UNRECOVERABLE_IF(nullptr == pFwUtilImp);
|
||||
pFwUtilImp->libraryHandle = NEO::OsLibrary::load(fwUtilLibraryFile);
|
||||
if (pFwUtilImp->libraryHandle == nullptr || pFwUtilImp->loadEntryPoints() == false) {
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "level_zero/core/source/device/device.h"
|
||||
#include "level_zero/tools/source/sysman/linux/firmware_util/firmware_util.h"
|
||||
|
||||
#include <cinttypes>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@@ -59,7 +60,7 @@ extern pIgscDeviceOpromVersion deviceOpromVersion;
|
||||
|
||||
class FirmwareUtilImp : public FirmwareUtil, NEO::NonCopyableOrMovableClass {
|
||||
public:
|
||||
FirmwareUtilImp();
|
||||
FirmwareUtilImp(const std::string &pciBDF);
|
||||
~FirmwareUtilImp();
|
||||
ze_result_t fwDeviceInit() override;
|
||||
ze_result_t getFirstDevice(igsc_device_info *) override;
|
||||
@@ -79,5 +80,11 @@ class FirmwareUtilImp : public FirmwareUtil, NEO::NonCopyableOrMovableClass {
|
||||
bool loadEntryPoints();
|
||||
|
||||
NEO::OsLibrary *libraryHandle = nullptr;
|
||||
|
||||
private:
|
||||
uint16_t domain = 0;
|
||||
uint8_t bus = 0;
|
||||
uint8_t device = 0;
|
||||
uint8_t function = 0;
|
||||
};
|
||||
} // namespace L0
|
||||
} // namespace L0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
#include "level_zero/tools/source/sysman/linux/firmware_util/firmware_util.h"
|
||||
namespace L0 {
|
||||
FirmwareUtil *FirmwareUtil::create() {
|
||||
FirmwareUtil *FirmwareUtil::create(const std::string &pciBDF) {
|
||||
return nullptr;
|
||||
}
|
||||
} // namespace L0
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
namespace L0 {
|
||||
|
||||
ze_result_t LinuxSysmanImp::init() {
|
||||
pFwUtilInterface = FirmwareUtil::create();
|
||||
pFsAccess = FsAccess::create();
|
||||
DEBUG_BREAK_IF(nullptr == pFsAccess);
|
||||
|
||||
@@ -49,7 +48,11 @@ ze_result_t LinuxSysmanImp::init() {
|
||||
PlatformMonitoringTech::create(pParentSysmanDeviceImp->deviceHandles, pFsAccess, rootPciPathOfGpuDevice, mapOfSubDeviceIdToPmtObject);
|
||||
|
||||
pPmuInterface = PmuInterface::create(this);
|
||||
|
||||
DEBUG_BREAK_IF(nullptr == pPmuInterface);
|
||||
auto loc = realRootPath.find_last_of('/');
|
||||
std::string pciBDF = realRootPath.substr(loc + 1, std::string::npos);
|
||||
pFwUtilInterface = FirmwareUtil::create(pciBDF);
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user