feature: Add support for late binding version on linux

Related-To: NEO-15216

Signed-off-by: shubham kumar <shubham.kumar@intel.com>
This commit is contained in:
shubham kumar
2025-07-28 17:03:52 +00:00
committed by Compute-Runtime-Automation
parent 24906b3639
commit 5d4c23c4fb
17 changed files with 562 additions and 332 deletions

View File

@@ -30,9 +30,9 @@ void OsFirmware::getSupportedFwTypes(std::vector<std::string> &supportedFwTypes,
} else {
auto pSysmanProductHelper = pLinuxSysmanImp->getSysmanProductHelper();
pSysmanProductHelper->getDeviceSupportedFwTypes(pFwInterface, supportedFwTypes);
if (pSysmanProductHelper->isLateBindingSupported()) {
pFwInterface->getLateBindingSupportedFwTypes(supportedFwTypes);
}
// get supported late binding fw handles
auto pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface();
pSysmanKmdInterface->getLateBindingSupportedFwTypes(supportedFwTypes);
}
}
}
@@ -65,7 +65,7 @@ ze_result_t LinuxFirmwareImp::osGetFirmwareFlashProgress(uint32_t *pCompletionPe
}
LinuxFirmwareImp::LinuxFirmwareImp(OsSysman *pOsSysman, const std::string &fwType) : osFwType(fwType) {
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
if (!pLinuxSysmanImp->isDeviceInSurvivabilityMode()) {
pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess();
}

View File

@@ -10,6 +10,7 @@
#include "level_zero/sysman/source/api/firmware/sysman_firmware_imp.h"
#include "level_zero/sysman/source/api/firmware/sysman_os_firmware.h"
#include "level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface.h"
#include "level_zero/sysman/source/shared/linux/zes_os_sysman_imp.h"
namespace L0 {
@@ -17,6 +18,7 @@ namespace Sysman {
class FirmwareUtil;
class SysFsAccessInterface;
class LinuxSysmanImp;
class LinuxFirmwareImp : public OsFirmware, NEO::NonCopyableAndNonMovableClass {
public:
@@ -32,6 +34,7 @@ class LinuxFirmwareImp : public OsFirmware, NEO::NonCopyableAndNonMovableClass {
~LinuxFirmwareImp() override = default;
protected:
LinuxSysmanImp *pLinuxSysmanImp = nullptr;
FirmwareUtil *pFwInterface = nullptr;
SysFsAccessInterface *pSysfsAccess = nullptr;
std::string osFwType;

View File

@@ -54,6 +54,10 @@ ze_result_t LinuxFirmwareImp::getFirmwareVersion(std::string fwType, zes_firmwar
return result;
}
if (std::find(lateBindingFirmwareTypes.begin(), lateBindingFirmwareTypes.end(), fwType) != lateBindingFirmwareTypes.end()) {
if (pLinuxSysmanImp->getSysmanKmdInterface()->isLateBindingVersionAvailable(fwType, fwVersion)) {
strncpy_s(static_cast<char *>(pProperties->version), ZES_STRING_PROPERTY_SIZE, fwVersion.c_str(), ZES_STRING_PROPERTY_SIZE - 1);
return ZE_RESULT_SUCCESS;
}
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
ze_result_t result = pFwInterface->getFwVersion(fwType, fwVersion);

View File

@@ -195,6 +195,8 @@ class SysmanKmdInterface {
const std::string getSysmanDeviceDirName() const;
ze_result_t checkErrorNumberAndReturnStatus();
virtual ze_result_t readPcieDowngradeAttribute(std::string sysfsName, uint32_t &val) { return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; }
virtual void getLateBindingSupportedFwTypes(std::vector<std::string> &fwTypes) {}
virtual bool isLateBindingVersionAvailable(std::string fwType, std::string &fwVersion) { return false; }
protected:
std::unique_ptr<FsAccessInterface> pFsAccess;
@@ -420,6 +422,8 @@ class SysmanKmdInterfaceXe : public SysmanKmdInterface {
std::string getBurstPowerLimitFile(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) override;
std::string getFreqMediaDomainBasePath() override;
ze_result_t readPcieDowngradeAttribute(std::string sysfsName, uint32_t &val) override;
void getLateBindingSupportedFwTypes(std::vector<std::string> &fwTypes) override;
bool isLateBindingVersionAvailable(std::string fwType, std::string &fwVersion) override;
protected:
std::map<SysfsName, valuePair> sysfsNameToFileMap;

View File

@@ -25,6 +25,10 @@ static const std::map<__u16, std::string> xeEngineClassToSysfsEngineMap = {
{DRM_XE_ENGINE_CLASS_VIDEO_DECODE, "vcs"},
{DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE, "vecs"}};
static const std::map<std::string, std::string> lateBindingSysfsFileToNameMap = {
{"VRConfig", "device/lb_voltage_regulator_version"},
{"FanTable", "device/lb_fan_control_version"}};
SysmanKmdInterfaceXe::SysmanKmdInterfaceXe(SysmanProductHelper *pSysmanProductHelper) {
initSysfsNameToFileMap(pSysmanProductHelper);
initSysfsNameToNativeUnitMap(pSysmanProductHelper);
@@ -406,5 +410,22 @@ ze_result_t SysmanKmdInterfaceXe::readPcieDowngradeAttribute(std::string sysfsNa
return result;
}
void SysmanKmdInterfaceXe::getLateBindingSupportedFwTypes(std::vector<std::string> &fwTypes) {
for (auto it = lateBindingSysfsFileToNameMap.begin(); it != lateBindingSysfsFileToNameMap.end(); ++it) {
if (pSysfsAccess->canRead(it->second) == ZE_RESULT_SUCCESS) {
fwTypes.push_back(it->first);
}
}
}
bool SysmanKmdInterfaceXe::isLateBindingVersionAvailable(std::string fwType, std::string &fwVersion) {
auto key = lateBindingSysfsFileToNameMap.find(fwType);
if (key == lateBindingSysfsFileToNameMap.end()) {
return false;
}
ze_result_t result = pSysfsAccess->read(key->second.data(), fwVersion);
return result == ZE_RESULT_SUCCESS ? true : false;
}
} // namespace Sysman
} // namespace L0

View File

@@ -89,7 +89,6 @@ class SysmanProductHelper {
// Firmware
virtual void getDeviceSupportedFwTypes(FirmwareUtil *pFwInterface, std::vector<std::string> &fwTypes) = 0;
virtual bool isLateBindingSupported() = 0;
// Ecc
virtual bool isEccConfigurationSupported() = 0;

View File

@@ -63,7 +63,6 @@ class SysmanProductHelperHw : public SysmanProductHelper {
// Firmware
void getDeviceSupportedFwTypes(FirmwareUtil *pFwInterface, std::vector<std::string> &fwTypes) override;
bool isLateBindingSupported() override;
// Ecc
bool isEccConfigurationSupported() override;

View File

@@ -353,11 +353,6 @@ void SysmanProductHelperHw<gfxProduct>::getDeviceSupportedFwTypes(FirmwareUtil *
pFwInterface->getDeviceSupportedFwTypes(fwTypes);
}
template <PRODUCT_FAMILY gfxProduct>
bool SysmanProductHelperHw<gfxProduct>::isLateBindingSupported() {
return false;
}
template <PRODUCT_FAMILY gfxProduct>
bool SysmanProductHelperHw<gfxProduct>::isEccConfigurationSupported() {
return false;

View File

@@ -1709,11 +1709,6 @@ bool SysmanProductHelperHw<gfxProduct>::isEccConfigurationSupported() {
return true;
}
template <>
bool SysmanProductHelperHw<gfxProduct>::isLateBindingSupported() {
return true;
}
template <>
bool SysmanProductHelperHw<gfxProduct>::isPcieDowngradeSupported() {
return true;