feature(sysman): Add firmware update support for GFX_DATA firmware type

Related-To: NEO-15618

Signed-off-by: Anvesh Bakwad <anvesh.bakwad@intel.com>
This commit is contained in:
Anvesh Bakwad
2025-08-11 22:41:53 +00:00
committed by Compute-Runtime-Automation
parent d8557ff2d3
commit ad774c074e
6 changed files with 185 additions and 8 deletions

View File

@@ -23,10 +23,12 @@ static const std::map<std::string, csc_late_binding_type> lateBindingTypeToEnumM
const std::string fwDeviceInitByDevice = "igsc_device_init_by_device_info"; const std::string fwDeviceInitByDevice = "igsc_device_init_by_device_info";
const std::string fwDeviceGetDeviceInfo = "igsc_device_get_device_info"; const std::string fwDeviceGetDeviceInfo = "igsc_device_get_device_info";
const std::string fwDeviceFwVersion = "igsc_device_fw_version"; const std::string fwDeviceFwVersion = "igsc_device_fw_version";
const std::string fwDeviceFwDataVersion = "igsc_device_fwdata_version";
const std::string fwDeviceIteratorCreate = "igsc_device_iterator_create"; const std::string fwDeviceIteratorCreate = "igsc_device_iterator_create";
const std::string fwDeviceIteratorNext = "igsc_device_iterator_next"; const std::string fwDeviceIteratorNext = "igsc_device_iterator_next";
const std::string fwDeviceIteratorDestroy = "igsc_device_iterator_destroy"; const std::string fwDeviceIteratorDestroy = "igsc_device_iterator_destroy";
const std::string fwDeviceFwUpdate = "igsc_device_fw_update"; const std::string fwDeviceFwUpdate = "igsc_device_fw_update";
const std::string fwDeviceFwDataUpdate = "igsc_device_fwdata_update";
const std::string fwImageOpromInit = "igsc_image_oprom_init"; const std::string fwImageOpromInit = "igsc_image_oprom_init";
const std::string fwImageOpromType = "igsc_image_oprom_type"; const std::string fwImageOpromType = "igsc_image_oprom_type";
const std::string fwDeviceOpromUpdate = "igsc_device_oprom_update"; const std::string fwDeviceOpromUpdate = "igsc_device_oprom_update";
@@ -38,10 +40,12 @@ const std::string fwDeviceUpdateLateBindingConfig = "igsc_device_update_late_bin
pIgscDeviceInitByDevice deviceInitByDevice; pIgscDeviceInitByDevice deviceInitByDevice;
pIgscDeviceGetDeviceInfo deviceGetDeviceInfo; pIgscDeviceGetDeviceInfo deviceGetDeviceInfo;
pIgscDeviceFwVersion deviceGetFwVersion; pIgscDeviceFwVersion deviceGetFwVersion;
pIgscDeviceFwDataVersion deviceGetFwDataVersion;
pIgscDeviceIteratorCreate deviceIteratorCreate; pIgscDeviceIteratorCreate deviceIteratorCreate;
pIgscDeviceIteratorNext deviceItreatorNext; pIgscDeviceIteratorNext deviceItreatorNext;
pIgscDeviceIteratorDestroy deviceItreatorDestroy; pIgscDeviceIteratorDestroy deviceItreatorDestroy;
pIgscDeviceFwUpdate deviceFwUpdate; pIgscDeviceFwUpdate deviceFwUpdate;
pIgscDeviceFwDataUpdate deviceFwDataUpdate;
pIgscImageOpromInit imageOpromInit; pIgscImageOpromInit imageOpromInit;
pIgscImageOpromType imageOpromType; pIgscImageOpromType imageOpromType;
pIgscDeviceOpromUpdate deviceOpromUpdate; pIgscDeviceOpromUpdate deviceOpromUpdate;
@@ -54,10 +58,12 @@ bool FirmwareUtilImp::loadEntryPoints() {
bool ok = getSymbolAddr(fwDeviceInitByDevice, deviceInitByDevice); bool ok = getSymbolAddr(fwDeviceInitByDevice, deviceInitByDevice);
ok = ok && getSymbolAddr(fwDeviceGetDeviceInfo, deviceGetDeviceInfo); ok = ok && getSymbolAddr(fwDeviceGetDeviceInfo, deviceGetDeviceInfo);
ok = ok && getSymbolAddr(fwDeviceFwVersion, deviceGetFwVersion); ok = ok && getSymbolAddr(fwDeviceFwVersion, deviceGetFwVersion);
ok = ok && getSymbolAddr(fwDeviceFwDataVersion, deviceGetFwDataVersion);
ok = ok && getSymbolAddr(fwDeviceIteratorCreate, deviceIteratorCreate); ok = ok && getSymbolAddr(fwDeviceIteratorCreate, deviceIteratorCreate);
ok = ok && getSymbolAddr(fwDeviceIteratorNext, deviceItreatorNext); ok = ok && getSymbolAddr(fwDeviceIteratorNext, deviceItreatorNext);
ok = ok && getSymbolAddr(fwDeviceIteratorDestroy, deviceItreatorDestroy); ok = ok && getSymbolAddr(fwDeviceIteratorDestroy, deviceItreatorDestroy);
ok = ok && getSymbolAddr(fwDeviceFwUpdate, deviceFwUpdate); ok = ok && getSymbolAddr(fwDeviceFwUpdate, deviceFwUpdate);
ok = ok && getSymbolAddr(fwDeviceFwDataUpdate, deviceFwDataUpdate);
ok = ok && getSymbolAddr(fwImageOpromInit, imageOpromInit); ok = ok && getSymbolAddr(fwImageOpromInit, imageOpromInit);
ok = ok && getSymbolAddr(fwImageOpromType, imageOpromType); ok = ok && getSymbolAddr(fwImageOpromType, imageOpromType);
ok = ok && getSymbolAddr(fwDeviceOpromUpdate, deviceOpromUpdate); ok = ok && getSymbolAddr(fwDeviceOpromUpdate, deviceOpromUpdate);
@@ -147,6 +153,23 @@ ze_result_t FirmwareUtilImp::fwGetVersion(std::string &fwVersion) {
return ZE_RESULT_SUCCESS; return ZE_RESULT_SUCCESS;
} }
ze_result_t FirmwareUtilImp::fwDataGetVersion(std::string &fwDataVersion) {
const std::lock_guard<std::mutex> lock(this->fwLock);
igsc_fwdata_version deviceFwDataVersion;
memset(&deviceFwDataVersion, 0, sizeof(deviceFwDataVersion));
int ret = deviceGetFwDataVersion(&fwDeviceHandle, &deviceFwDataVersion);
if (ret != IGSC_SUCCESS) {
return ZE_RESULT_ERROR_UNINITIALIZED;
}
fwDataVersion.append("Major : ");
fwDataVersion.append(std::to_string(deviceFwDataVersion.major_version));
fwDataVersion.append(", OEM Manufacturing Data : ");
fwDataVersion.append(std::to_string(deviceFwDataVersion.oem_manuf_data_version));
fwDataVersion.append(", Major VCN : ");
fwDataVersion.append(std::to_string(deviceFwDataVersion.major_vcn));
return ZE_RESULT_SUCCESS;
}
ze_result_t FirmwareUtilImp::opromGetVersion(std::string &fwVersion) { ze_result_t FirmwareUtilImp::opromGetVersion(std::string &fwVersion) {
const std::lock_guard<std::mutex> lock(this->fwLock); const std::lock_guard<std::mutex> lock(this->fwLock);
igsc_oprom_version opromVersion; igsc_oprom_version opromVersion;
@@ -181,6 +204,15 @@ ze_result_t FirmwareUtilImp::fwFlashGSC(void *pImage, uint32_t size) {
return ZE_RESULT_SUCCESS; return ZE_RESULT_SUCCESS;
} }
ze_result_t FirmwareUtilImp::fwFlashGfxData(void *pImage, uint32_t size) {
const std::lock_guard<std::mutex> lock(this->fwLock);
int ret = deviceFwDataUpdate(&fwDeviceHandle, static_cast<const uint8_t *>(pImage), size, firmwareFlashProgressFunc, this);
if (ret != IGSC_SUCCESS) {
return ZE_RESULT_ERROR_UNINITIALIZED;
}
return ZE_RESULT_SUCCESS;
}
ze_result_t FirmwareUtilImp::fwFlashOprom(void *pImage, uint32_t size) { ze_result_t FirmwareUtilImp::fwFlashOprom(void *pImage, uint32_t size) {
const std::lock_guard<std::mutex> lock(this->fwLock); const std::lock_guard<std::mutex> lock(this->fwLock);
struct igsc_oprom_image *opromImg = nullptr; struct igsc_oprom_image *opromImg = nullptr;

View File

@@ -26,6 +26,8 @@ typedef int (*pIgscDeviceGetDeviceInfo)(struct igsc_device_handle *handle,
struct igsc_info_device *info); struct igsc_info_device *info);
typedef int (*pIgscDeviceFwVersion)(struct igsc_device_handle *handle, typedef int (*pIgscDeviceFwVersion)(struct igsc_device_handle *handle,
struct igsc_fw_version *version); struct igsc_fw_version *version);
typedef int (*pIgscDeviceFwDataVersion)(struct igsc_device_handle *handle,
struct igsc_fwdata_version *version);
typedef int (*pIgscDeviceIteratorCreate)(struct igsc_device_iterator **iter); typedef int (*pIgscDeviceIteratorCreate)(struct igsc_device_iterator **iter);
typedef int (*pIgscDeviceIteratorNext)(struct igsc_device_iterator *iter, typedef int (*pIgscDeviceIteratorNext)(struct igsc_device_iterator *iter,
IgscDeviceInfo *info); IgscDeviceInfo *info);
@@ -35,6 +37,11 @@ typedef int (*pIgscDeviceFwUpdate)(struct igsc_device_handle *handle,
const uint32_t bufferLen, const uint32_t bufferLen,
igsc_progress_func_t progressFunc, igsc_progress_func_t progressFunc,
void *ctx); void *ctx);
typedef int (*pIgscDeviceFwDataUpdate)(struct igsc_device_handle *handle,
const uint8_t *buffer,
const uint32_t bufferLen,
igsc_progress_func_t progressFunc,
void *ctx);
typedef int (*pIgscImageOpromInit)(struct igsc_oprom_image **img, typedef int (*pIgscImageOpromInit)(struct igsc_oprom_image **img,
const uint8_t *buffer, const uint8_t *buffer,
uint32_t bufferLen); uint32_t bufferLen);
@@ -93,16 +100,19 @@ typedef int (*pIgscGfspHeciCmd)(struct igsc_device_handle *handle,
size_t *actualOutBufferSize); size_t *actualOutBufferSize);
extern const std::string fwDeviceFwVersion; extern const std::string fwDeviceFwVersion;
extern const std::string fwDeviceFwDataVersion;
extern const std::string fwDeviceOpromVersion; extern const std::string fwDeviceOpromVersion;
extern const std::string fwDevicePscVersion; extern const std::string fwDevicePscVersion;
extern pIgscDeviceInitByDevice deviceInitByDevice; extern pIgscDeviceInitByDevice deviceInitByDevice;
extern pIgscDeviceGetDeviceInfo deviceGetDeviceInfo; extern pIgscDeviceGetDeviceInfo deviceGetDeviceInfo;
extern pIgscDeviceFwVersion deviceGetFwVersion; extern pIgscDeviceFwVersion deviceGetFwVersion;
extern pIgscDeviceFwDataVersion deviceGetFwDataVersion;
extern pIgscDeviceIteratorCreate deviceIteratorCreate; extern pIgscDeviceIteratorCreate deviceIteratorCreate;
extern pIgscDeviceIteratorNext deviceItreatorNext; extern pIgscDeviceIteratorNext deviceItreatorNext;
extern pIgscDeviceIteratorDestroy deviceItreatorDestroy; extern pIgscDeviceIteratorDestroy deviceItreatorDestroy;
extern pIgscDeviceFwUpdate deviceFwUpdate; extern pIgscDeviceFwUpdate deviceFwUpdate;
extern pIgscDeviceFwDataUpdate deviceFwDataUpdate;
extern pIgscImageOpromInit imageOpromInit; extern pIgscImageOpromInit imageOpromInit;
extern pIgscImageOpromType imageOpromType; extern pIgscImageOpromType imageOpromType;
extern pIgscDeviceOpromUpdate deviceOpromUpdate; extern pIgscDeviceOpromUpdate deviceOpromUpdate;
@@ -157,9 +167,11 @@ class FirmwareUtilImp : public FirmwareUtil, NEO::NonCopyableAndNonMovableClass
protected: protected:
ze_result_t getFirstDevice(IgscDeviceInfo *); ze_result_t getFirstDevice(IgscDeviceInfo *);
ze_result_t fwGetVersion(std::string &fwVersion); ze_result_t fwGetVersion(std::string &fwVersion);
ze_result_t fwDataGetVersion(std::string &fwDataVersion);
ze_result_t opromGetVersion(std::string &fwVersion); ze_result_t opromGetVersion(std::string &fwVersion);
ze_result_t pscGetVersion(std::string &fwVersion); ze_result_t pscGetVersion(std::string &fwVersion);
ze_result_t fwFlashGSC(void *pImage, uint32_t size); ze_result_t fwFlashGSC(void *pImage, uint32_t size);
ze_result_t fwFlashGfxData(void *pImage, uint32_t size);
ze_result_t fwFlashOprom(void *pImage, uint32_t size); ze_result_t fwFlashOprom(void *pImage, uint32_t size);
ze_result_t fwFlashIafPsc(void *pImage, uint32_t size); ze_result_t fwFlashIafPsc(void *pImage, uint32_t size);
ze_result_t fwFlashLateBinding(void *pImage, uint32_t size, std::string fwType); ze_result_t fwFlashLateBinding(void *pImage, uint32_t size, std::string fwType);

View File

@@ -11,9 +11,9 @@
#include <algorithm> #include <algorithm>
static std::vector<std ::string> deviceSupportedFirmwareTypes = {"GSC", "OptionROM", "PSC"}; static std::vector<std::string> deviceSupportedFirmwareTypes = {"GSC", "OptionROM", "PSC", "GFX_DATA"};
static constexpr uint8_t eccStateNone = 0xFF; static constexpr uint8_t eccStateNone = 0xFF;
static std::vector<std ::string> lateBindingFirmwareTypes = {"FanTable", "VRConfig"}; static std::vector<std::string> lateBindingFirmwareTypes = {"FanTable", "VRConfig"};
namespace L0 { namespace L0 {
namespace Sysman { namespace Sysman {
@@ -345,6 +345,9 @@ ze_result_t FirmwareUtilImp::flashFirmware(std::string fwType, void *pImage, uin
if (fwType == deviceSupportedFirmwareTypes[2]) { // PSC if (fwType == deviceSupportedFirmwareTypes[2]) { // PSC
return fwFlashIafPsc(pImage, size); return fwFlashIafPsc(pImage, size);
} }
if (fwType == deviceSupportedFirmwareTypes[3]) { // GFX_DATA
return fwFlashGfxData(pImage, size);
}
if (std::find(lateBindingFirmwareTypes.begin(), lateBindingFirmwareTypes.end(), fwType) != lateBindingFirmwareTypes.end()) { // FanTable and VRConfig if (std::find(lateBindingFirmwareTypes.begin(), lateBindingFirmwareTypes.end(), fwType) != lateBindingFirmwareTypes.end()) { // FanTable and VRConfig
return fwFlashLateBinding(pImage, size, fwType); return fwFlashLateBinding(pImage, size, fwType);
} }
@@ -381,6 +384,14 @@ void FirmwareUtilImp::getDeviceSupportedFwTypes(std::vector<std::string> &fwType
if (ret == IGSC_SUCCESS) { if (ret == IGSC_SUCCESS) {
fwTypes.push_back(deviceSupportedFirmwareTypes[2]); fwTypes.push_back(deviceSupportedFirmwareTypes[2]);
} }
igsc_fwdata_version deviceFwDataVersion;
memset(&deviceFwDataVersion, 0, sizeof(deviceFwDataVersion));
deviceGetFwDataVersion = reinterpret_cast<pIgscDeviceFwDataVersion>(libraryHandle->getProcAddress(fwDeviceFwDataVersion));
ret = deviceGetFwDataVersion(&fwDeviceHandle, &deviceFwDataVersion);
if (ret == IGSC_SUCCESS) {
fwTypes.push_back(deviceSupportedFirmwareTypes[3]);
}
} }
void FirmwareUtilImp::getLateBindingSupportedFwTypes(std::vector<std::string> &fwTypes) { void FirmwareUtilImp::getLateBindingSupportedFwTypes(std::vector<std::string> &fwTypes) {
@@ -397,6 +408,9 @@ ze_result_t FirmwareUtilImp::getFwVersion(std::string fwType, std::string &firmw
if (fwType == deviceSupportedFirmwareTypes[2]) { // PSC if (fwType == deviceSupportedFirmwareTypes[2]) { // PSC
return pscGetVersion(firmwareVersion); return pscGetVersion(firmwareVersion);
} }
if (fwType == deviceSupportedFirmwareTypes[3]) { // GFX_DATA
return fwDataGetVersion(firmwareVersion);
}
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2022-2024 Intel Corporation * Copyright (C) 2022-2025 Intel Corporation
* *
* SPDX-License-Identifier: MIT * SPDX-License-Identifier: MIT
* *
@@ -11,12 +11,41 @@
#include "level_zero/sysman/source/shared/firmware_util/sysman_firmware_util_imp.h" #include "level_zero/sysman/source/shared/firmware_util/sysman_firmware_util_imp.h"
#include "level_zero/sysman/test/unit_tests/sources/firmware_util/mock_fw_util_fixture.h" #include "level_zero/sysman/test/unit_tests/sources/firmware_util/mock_fw_util_fixture.h"
#include <algorithm>
namespace L0 { namespace L0 {
namespace Sysman { namespace Sysman {
namespace ult { namespace ult {
static uint32_t mockFwUtilDeviceCloseCallCount = 0; static uint32_t mockFwUtilDeviceCloseCallCount = 0;
bool MockFwUtilOsLibrary::mockLoad = true; bool MockFwUtilOsLibrary::mockLoad = true;
constexpr uint32_t fwDataMajorVersion = 10;
constexpr uint16_t fwDataOemVersion = 10;
constexpr uint16_t fwDataVcnVersion = 1;
static int mockIgscDeviceFwVersion(struct igsc_device_handle *handle,
struct igsc_fw_version *version) {
return IGSC_SUCCESS;
}
static int mockIgscDeviceFwDataVersion(struct igsc_device_handle *handle,
struct igsc_fwdata_version *version) {
version->major_version = fwDataMajorVersion;
version->oem_manuf_data_version = fwDataOemVersion;
version->major_vcn = fwDataVcnVersion;
return IGSC_SUCCESS;
}
static int mockIgscDeviceOpromVersion(struct igsc_device_handle *handle,
uint32_t opromType,
struct igsc_oprom_version *version) {
return IGSC_SUCCESS;
}
static int mockIgscDevicePscVersion(struct igsc_device_handle *handle,
struct igsc_psc_version *version) {
return IGSC_SUCCESS;
}
TEST(FwUtilDeleteTest, GivenLibraryWasNotSetWhenFirmwareUtilInterfaceIsDeletedThenLibraryFunctionIsNotAccessed) { TEST(FwUtilDeleteTest, GivenLibraryWasNotSetWhenFirmwareUtilInterfaceIsDeletedThenLibraryFunctionIsNotAccessed) {
@@ -49,25 +78,102 @@ TEST(FwUtilDeleteTest, GivenLibraryWasSetWhenFirmwareUtilInterfaceIsDeletedThenL
EXPECT_EQ(mockFwUtilDeviceCloseCallCount, 1u); EXPECT_EQ(mockFwUtilDeviceCloseCallCount, 1u);
} }
TEST(FwUtilTest, GivenLibraryWasSetWhenCreatingFirmwareUtilInterfaceAndGetProcAddressFailsThenFirmwareUtilInterfaceIsNotCreated) { class FwUtilTestFixture : public ::testing::Test {
protected:
L0::Sysman::FirmwareUtilImp *pFwUtilImp = nullptr;
MockFwUtilOsLibrary *osLibHandle = nullptr;
std::vector<std::string> fwTypes;
void SetUp() override {
pFwUtilImp = new L0::Sysman::FirmwareUtilImp(0, 0, 0, 0);
osLibHandle = new MockFwUtilOsLibrary();
osLibHandle->funcMap["igsc_device_fw_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwVersion);
osLibHandle->funcMap["igsc_device_fwdata_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwDataVersion);
osLibHandle->funcMap["igsc_device_oprom_version"] = reinterpret_cast<void *>(&mockIgscDeviceOpromVersion);
osLibHandle->funcMap["igsc_device_psc_version"] = reinterpret_cast<void *>(&mockIgscDevicePscVersion);
pFwUtilImp->libraryHandle = static_cast<OsLibrary *>(osLibHandle);
pFwUtilImp->getDeviceSupportedFwTypes(fwTypes);
}
void TearDown() override {
delete pFwUtilImp->libraryHandle;
pFwUtilImp->libraryHandle = nullptr;
delete pFwUtilImp;
}
};
TEST_F(FwUtilTestFixture, GivenLibraryWasSetWhenCreatingFirmwareUtilInterfaceAndGetProcAddressFailsThenFirmwareUtilInterfaceIsNotCreated) {
VariableBackup<decltype(NEO::OsLibrary::loadFunc)> funcBackup{&NEO::OsLibrary::loadFunc, MockFwUtilOsLibrary::load}; VariableBackup<decltype(NEO::OsLibrary::loadFunc)> funcBackup{&NEO::OsLibrary::loadFunc, MockFwUtilOsLibrary::load};
L0::Sysman::FirmwareUtil *pFwUtil = L0::Sysman::FirmwareUtil::create(0, 0, 0, 0); L0::Sysman::FirmwareUtil *pFwUtil = L0::Sysman::FirmwareUtil::create(0, 0, 0, 0);
EXPECT_EQ(pFwUtil, nullptr); EXPECT_EQ(pFwUtil, nullptr);
} }
TEST(FwUtilTest, GivenLibraryWasSetWhenCreatingFirmwareUtilInterfaceAndIgscDeviceIterCreateFailsThenFirmwareUtilInterfaceIsNotCreated) { TEST_F(FwUtilTestFixture, GivenLibraryWasSetWhenCreatingFirmwareUtilInterfaceAndIgscDeviceIterCreateFailsThenFirmwareUtilInterfaceIsNotCreated) {
VariableBackup<decltype(NEO::OsLibrary::loadFunc)> funcBackup{&NEO::OsLibrary::loadFunc, MockFwUtilOsLibrary::load}; VariableBackup<decltype(NEO::OsLibrary::loadFunc)> funcBackup{&NEO::OsLibrary::loadFunc, MockFwUtilOsLibrary::load};
L0::Sysman::FirmwareUtil *pFwUtil = L0::Sysman::FirmwareUtil::create(0, 0, 0, 0); L0::Sysman::FirmwareUtil *pFwUtil = L0::Sysman::FirmwareUtil::create(0, 0, 0, 0);
EXPECT_EQ(pFwUtil, nullptr); EXPECT_EQ(pFwUtil, nullptr);
} }
TEST(FwUtilTest, GivenLibraryWasNotSetWhenCreatingFirmwareUtilInterfaceThenFirmwareUtilInterfaceIsNotCreated) { TEST_F(FwUtilTestFixture, GivenLibraryWasNotSetWhenCreatingFirmwareUtilInterfaceThenFirmwareUtilInterfaceIsNotCreated) {
L0::Sysman::ult::MockFwUtilOsLibrary::mockLoad = false; L0::Sysman::ult::MockFwUtilOsLibrary::mockLoad = false;
VariableBackup<decltype(NEO::OsLibrary::loadFunc)> funcBackup{&NEO::OsLibrary::loadFunc, MockFwUtilOsLibrary::load}; VariableBackup<decltype(NEO::OsLibrary::loadFunc)> funcBackup{&NEO::OsLibrary::loadFunc, MockFwUtilOsLibrary::load};
L0::Sysman::FirmwareUtil *pFwUtil = L0::Sysman::FirmwareUtil::create(0, 0, 0, 0); L0::Sysman::FirmwareUtil *pFwUtil = L0::Sysman::FirmwareUtil::create(0, 0, 0, 0);
EXPECT_EQ(pFwUtil, nullptr); EXPECT_EQ(pFwUtil, nullptr);
} }
TEST_F(FwUtilTestFixture, GivenFirmwareUtilInstanceWhenGetVersionIsCalledForGfxDataTypeAndIgscCallFailsThenCallReturnsError) {
VariableBackup<decltype(L0::Sysman::deviceGetFwDataVersion)> mockFirmwareVersionFailure(&L0::Sysman::deviceGetFwDataVersion, [](struct igsc_device_handle *handle, struct igsc_fwdata_version *version) -> int {
return IGSC_ERROR_BAD_IMAGE;
});
auto gfxDataIt = std::find(fwTypes.begin(), fwTypes.end(), std::string("GFX_DATA"));
EXPECT_NE(gfxDataIt, fwTypes.end());
std::string firmwareVersion;
ze_result_t result = pFwUtilImp->getFwVersion(*gfxDataIt, firmwareVersion);
EXPECT_EQ(result, ZE_RESULT_ERROR_UNINITIALIZED);
}
TEST_F(FwUtilTestFixture, GivenFirmwareUtilInstanceWhenGetVersionIsCalledForGfxDataTypeThenProperVersionIsReturned) {
auto gfxDataIt = std::find(fwTypes.begin(), fwTypes.end(), std::string("GFX_DATA"));
EXPECT_NE(gfxDataIt, fwTypes.end());
std::string firmwareVersion;
ze_result_t result = pFwUtilImp->getFwVersion(*gfxDataIt, firmwareVersion);
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
std::string expectedFirmwareVersion = "Major : " + std::to_string(fwDataMajorVersion) + ", OEM Manufacturing Data : " + std::to_string(fwDataOemVersion) + ", Major VCN : " + std::to_string(fwDataVcnVersion);
EXPECT_EQ(expectedFirmwareVersion, firmwareVersion);
}
TEST_F(FwUtilTestFixture, GivenFirmwareUtilInstanceWhenFirmwareFlashIsCalledForGfxDataTypeAndIgscCallFailsThenFlashingFails) {
VariableBackup<decltype(L0::Sysman::deviceFwDataUpdate)> mockFirmwareFlashFailure(&L0::Sysman::deviceFwDataUpdate, [](struct igsc_device_handle *handle, const uint8_t *buffer, const uint32_t bufferLen, igsc_progress_func_t progressFunc, void *ctx) -> int {
return IGSC_ERROR_BAD_IMAGE;
});
auto gfxDataIt = std::find(fwTypes.begin(), fwTypes.end(), std::string("GFX_DATA"));
EXPECT_NE(gfxDataIt, fwTypes.end());
uint8_t testImage[ZES_STRING_PROPERTY_SIZE] = {};
memset(testImage, 0xA, ZES_STRING_PROPERTY_SIZE);
auto result = pFwUtilImp->flashFirmware(*gfxDataIt, (void *)testImage, ZES_STRING_PROPERTY_SIZE);
EXPECT_EQ(result, ZE_RESULT_ERROR_UNINITIALIZED);
}
TEST_F(FwUtilTestFixture, GivenFirmwareUtilInstanceWhenFirmwareFlashIsCalledForGfxDataTypeAndIgscCallSucceedsThenFlashingIsSuccessful) {
VariableBackup<decltype(L0::Sysman::deviceFwDataUpdate)> mockFirmwareFlashSuccess(&L0::Sysman::deviceFwDataUpdate, [](struct igsc_device_handle *handle, const uint8_t *buffer, const uint32_t bufferLen, igsc_progress_func_t progressFunc, void *ctx) -> int {
return IGSC_SUCCESS;
});
auto gfxDataIt = std::find(fwTypes.begin(), fwTypes.end(), std::string("GFX_DATA"));
EXPECT_NE(gfxDataIt, fwTypes.end());
uint8_t testImage[ZES_STRING_PROPERTY_SIZE] = {};
memset(testImage, 0xA, ZES_STRING_PROPERTY_SIZE);
auto result = pFwUtilImp->flashFirmware(*gfxDataIt, (void *)testImage, ZES_STRING_PROPERTY_SIZE);
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
}
} // namespace ult } // namespace ult
} // namespace Sysman } // namespace Sysman
} // namespace L0 } // namespace L0

View File

@@ -26,6 +26,7 @@ namespace ult {
constexpr static uint32_t mockMaxTileCount = 2; constexpr static uint32_t mockMaxTileCount = 2;
static int mockMemoryHealthIndicator = IGSC_HEALTH_INDICATOR_HEALTHY; static int mockMemoryHealthIndicator = IGSC_HEALTH_INDICATOR_HEALTHY;
static int mockGetFwVersion = IGSC_SUCCESS; static int mockGetFwVersion = IGSC_SUCCESS;
static int mockGetFwDataVersion = IGSC_SUCCESS;
static int mockGetOpromCodeVersion = IGSC_SUCCESS; static int mockGetOpromCodeVersion = IGSC_SUCCESS;
static int mockGetOpromDataVersion = IGSC_SUCCESS; static int mockGetOpromDataVersion = IGSC_SUCCESS;
static int mockGetPscVersion = IGSC_SUCCESS; static int mockGetPscVersion = IGSC_SUCCESS;
@@ -157,6 +158,11 @@ static int mockIgscDeviceFwVersion(struct igsc_device_handle *handle,
return mockGetFwVersion; return mockGetFwVersion;
} }
static int mockIgscDeviceFwDataVersion(struct igsc_device_handle *handle,
struct igsc_fwdata_version *version) {
return mockGetFwDataVersion;
}
static int mockIgscDeviceOpromVersion(struct igsc_device_handle *handle, static int mockIgscDeviceOpromVersion(struct igsc_device_handle *handle,
uint32_t opromType, uint32_t opromType,
struct igsc_oprom_version *version) { struct igsc_oprom_version *version) {
@@ -965,18 +971,20 @@ TEST(FwGetSupportedFwTypesTest, GivenFirmwareUtilAndAllFwTypesSupportedWhenCalli
L0::Sysman::FirmwareUtilImp *pFwUtilImp = new L0::Sysman::FirmwareUtilImp(0, 0, 0, 0); L0::Sysman::FirmwareUtilImp *pFwUtilImp = new L0::Sysman::FirmwareUtilImp(0, 0, 0, 0);
MockFwUtilOsLibrary *osLibHandle = new MockFwUtilOsLibrary(); MockFwUtilOsLibrary *osLibHandle = new MockFwUtilOsLibrary();
osLibHandle->funcMap["igsc_device_fw_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwVersion); osLibHandle->funcMap["igsc_device_fw_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwVersion);
osLibHandle->funcMap["igsc_device_fwdata_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwDataVersion);
osLibHandle->funcMap["igsc_device_oprom_version"] = reinterpret_cast<void *>(&mockIgscDeviceOpromVersion); osLibHandle->funcMap["igsc_device_oprom_version"] = reinterpret_cast<void *>(&mockIgscDeviceOpromVersion);
osLibHandle->funcMap["igsc_device_psc_version"] = reinterpret_cast<void *>(&mockIgscDevicePscVersion); osLibHandle->funcMap["igsc_device_psc_version"] = reinterpret_cast<void *>(&mockIgscDevicePscVersion);
pFwUtilImp->libraryHandle = static_cast<OsLibrary *>(osLibHandle); pFwUtilImp->libraryHandle = static_cast<OsLibrary *>(osLibHandle);
mockGetFwVersion = IGSC_SUCCESS; mockGetFwVersion = IGSC_SUCCESS;
mockGetFwDataVersion = IGSC_SUCCESS;
mockGetOpromCodeVersion = IGSC_SUCCESS; mockGetOpromCodeVersion = IGSC_SUCCESS;
mockGetOpromDataVersion = IGSC_SUCCESS; mockGetOpromDataVersion = IGSC_SUCCESS;
mockGetPscVersion = IGSC_SUCCESS; mockGetPscVersion = IGSC_SUCCESS;
std::vector<std::string> fwTypes{}; std::vector<std::string> fwTypes{};
pFwUtilImp->getDeviceSupportedFwTypes(fwTypes); pFwUtilImp->getDeviceSupportedFwTypes(fwTypes);
EXPECT_EQ(fwTypes.size(), 3u); EXPECT_EQ(fwTypes.size(), 4u);
delete pFwUtilImp->libraryHandle; delete pFwUtilImp->libraryHandle;
pFwUtilImp->libraryHandle = nullptr; pFwUtilImp->libraryHandle = nullptr;
@@ -987,11 +995,13 @@ TEST(FwGetSupportedFwTypesTest, GivenFirmwareUtilAndAllFwTypesUnsupportedWhenCal
L0::Sysman::FirmwareUtilImp *pFwUtilImp = new L0::Sysman::FirmwareUtilImp(0, 0, 0, 0); L0::Sysman::FirmwareUtilImp *pFwUtilImp = new L0::Sysman::FirmwareUtilImp(0, 0, 0, 0);
MockFwUtilOsLibrary *osLibHandle = new MockFwUtilOsLibrary(); MockFwUtilOsLibrary *osLibHandle = new MockFwUtilOsLibrary();
osLibHandle->funcMap["igsc_device_fw_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwVersion); osLibHandle->funcMap["igsc_device_fw_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwVersion);
osLibHandle->funcMap["igsc_device_fwdata_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwDataVersion);
osLibHandle->funcMap["igsc_device_oprom_version"] = reinterpret_cast<void *>(&mockIgscDeviceOpromVersion); osLibHandle->funcMap["igsc_device_oprom_version"] = reinterpret_cast<void *>(&mockIgscDeviceOpromVersion);
osLibHandle->funcMap["igsc_device_psc_version"] = reinterpret_cast<void *>(&mockIgscDevicePscVersion); osLibHandle->funcMap["igsc_device_psc_version"] = reinterpret_cast<void *>(&mockIgscDevicePscVersion);
pFwUtilImp->libraryHandle = static_cast<OsLibrary *>(osLibHandle); pFwUtilImp->libraryHandle = static_cast<OsLibrary *>(osLibHandle);
mockGetFwVersion = IGSC_ERROR_NOT_SUPPORTED; mockGetFwVersion = IGSC_ERROR_NOT_SUPPORTED;
mockGetFwDataVersion = IGSC_ERROR_NOT_SUPPORTED;
mockGetOpromCodeVersion = IGSC_ERROR_NOT_SUPPORTED; mockGetOpromCodeVersion = IGSC_ERROR_NOT_SUPPORTED;
mockGetOpromDataVersion = IGSC_ERROR_NOT_SUPPORTED; mockGetOpromDataVersion = IGSC_ERROR_NOT_SUPPORTED;
mockGetPscVersion = IGSC_ERROR_NOT_SUPPORTED; mockGetPscVersion = IGSC_ERROR_NOT_SUPPORTED;
@@ -1009,18 +1019,20 @@ TEST(FwGetSupportedFwTypesTest, GivenFirmwareUtilAndOnlyOpromCodeSupportedWhenCa
L0::Sysman::FirmwareUtilImp *pFwUtilImp = new L0::Sysman::FirmwareUtilImp(0, 0, 0, 0); L0::Sysman::FirmwareUtilImp *pFwUtilImp = new L0::Sysman::FirmwareUtilImp(0, 0, 0, 0);
MockFwUtilOsLibrary *osLibHandle = new MockFwUtilOsLibrary(); MockFwUtilOsLibrary *osLibHandle = new MockFwUtilOsLibrary();
osLibHandle->funcMap["igsc_device_fw_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwVersion); osLibHandle->funcMap["igsc_device_fw_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwVersion);
osLibHandle->funcMap["igsc_device_fwdata_version"] = reinterpret_cast<void *>(&mockIgscDeviceFwDataVersion);
osLibHandle->funcMap["igsc_device_oprom_version"] = reinterpret_cast<void *>(&mockIgscDeviceOpromVersion); osLibHandle->funcMap["igsc_device_oprom_version"] = reinterpret_cast<void *>(&mockIgscDeviceOpromVersion);
osLibHandle->funcMap["igsc_device_psc_version"] = reinterpret_cast<void *>(&mockIgscDevicePscVersion); osLibHandle->funcMap["igsc_device_psc_version"] = reinterpret_cast<void *>(&mockIgscDevicePscVersion);
pFwUtilImp->libraryHandle = static_cast<OsLibrary *>(osLibHandle); pFwUtilImp->libraryHandle = static_cast<OsLibrary *>(osLibHandle);
mockGetFwVersion = IGSC_SUCCESS; mockGetFwVersion = IGSC_SUCCESS;
mockGetFwDataVersion = IGSC_SUCCESS;
mockGetOpromCodeVersion = IGSC_SUCCESS; mockGetOpromCodeVersion = IGSC_SUCCESS;
mockGetOpromDataVersion = IGSC_ERROR_NOT_SUPPORTED; mockGetOpromDataVersion = IGSC_ERROR_NOT_SUPPORTED;
mockGetPscVersion = IGSC_SUCCESS; mockGetPscVersion = IGSC_SUCCESS;
std::vector<std::string> fwTypes{}; std::vector<std::string> fwTypes{};
pFwUtilImp->getDeviceSupportedFwTypes(fwTypes); pFwUtilImp->getDeviceSupportedFwTypes(fwTypes);
EXPECT_EQ(fwTypes.size(), 2u); EXPECT_EQ(fwTypes.size(), 3u);
delete pFwUtilImp->libraryHandle; delete pFwUtilImp->libraryHandle;
pFwUtilImp->libraryHandle = nullptr; pFwUtilImp->libraryHandle = nullptr;

View File

@@ -1267,6 +1267,7 @@ void testSysmanFirmware(ze_device_handle_t &device, std::string imagePath) {
} }
if (imagePath.size() != 0 && imgSize > 0) { if (imagePath.size() != 0 && imgSize > 0) {
std::vector<char> img(imgSize); std::vector<char> img(imgSize);
imageFile.seekg(0, std::ios::beg);
imageFile.read(img.data(), imgSize); imageFile.read(img.data(), imgSize);
flashData.flashComplete = false; flashData.flashComplete = false;