mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
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:
committed by
Compute-Runtime-Automation
parent
24906b3639
commit
5d4c23c4fb
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1709,11 +1709,6 @@ bool SysmanProductHelperHw<gfxProduct>::isEccConfigurationSupported() {
|
||||
return true;
|
||||
}
|
||||
|
||||
template <>
|
||||
bool SysmanProductHelperHw<gfxProduct>::isLateBindingSupported() {
|
||||
return true;
|
||||
}
|
||||
|
||||
template <>
|
||||
bool SysmanProductHelperHw<gfxProduct>::isPcieDowngradeSupported() {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user