diff --git a/conformance_tests/sysman/test_sysman_firmware/src/test_sysman_firmware.cpp b/conformance_tests/sysman/test_sysman_firmware/src/test_sysman_firmware.cpp index 81e3cdeb6..478d878e6 100644 --- a/conformance_tests/sysman/test_sysman_firmware/src/test_sysman_firmware.cpp +++ b/conformance_tests/sysman/test_sysman_firmware/src/test_sysman_firmware.cpp @@ -29,6 +29,9 @@ uint32_t get_prop_length(char *prop) { return std::strlen(prop); } class FirmwareZesTest : public lzt::ZesSysmanCtsClass { public: bool is_firmware_supported = false; + bool is_VRConfig_supported = false; + bool is_fantable_supported = false; + }; #define FIRMWARE_TEST FirmwareZesTest #else // USE_ZESINIT @@ -303,4 +306,108 @@ LZT_TEST_F( } } +LZT_TEST_F( + FIRMWARE_TEST, + GivenValidFanTableFirmwareHandleWhenFirmwareIsFlashedThenFlashingIsSuccessful) { + auto fwDirEnv = getenv("ZE_LZT_FIRMWARE_DIRECTORY"); + if (nullptr == fwDirEnv) { + LOG_INFO << "Skipping test as ZE_LZT_FIRMWARE_DIRECTORY not set"; + GTEST_SKIP(); + } + std::vector testFwImage; + std::string fwDir(fwDirEnv); + for (auto device : devices) { + uint32_t count = lzt::get_firmware_handle_count(device); + auto firmware_handles = lzt::get_firmware_handles(device, count); + zes_firmware_handle_t fan_table_handle = nullptr; + for (auto fw_handle : firmware_handles) { + zes_firmware_properties_t props = { + ZES_STRUCTURE_TYPE_FIRMWARE_PROPERTIES}; + zesFirmwareGetProperties(fw_handle, &props); + if (std::string(props.name) == "FanTable") { + is_fantable_supported = true; + fan_table_handle = fw_handle; + auto propFw = lzt::get_firmware_properties(fw_handle); + if (propFw.canControl) { + std::string fwName(reinterpret_cast(propFw.name)); + std::string fwToLoad = fwDir + "/" + fwName + ".bin"; + std::ifstream inFileStream(fwToLoad, + std::ios::binary | std::ios::ate); + if (!inFileStream.is_open()) { + LOG_INFO << "Skipping test as firmware image not found"; + GTEST_SKIP(); + } + testFwImage.resize(inFileStream.tellg()); + inFileStream.seekg(0, inFileStream.beg); + inFileStream.read(testFwImage.data(), testFwImage.size()); + + lzt::flash_firmware(fan_table_handle, + static_cast(testFwImage.data()), + testFwImage.size()); + } + } + } + + if (!is_fantable_supported) { + LOG_INFO << "No fan table handles found for this device!"; + } + } + if (!is_fantable_supported) { + FAIL() << "No fan table handles found on any of the devices!"; + } +} + +LZT_TEST_F( + FIRMWARE_TEST, + GivenValidVRConfigFirmwareHandleWhenFirmwareIsFlashedThenFlashingIsSuccessful) { + auto fwDirEnv = getenv("ZE_LZT_FIRMWARE_DIRECTORY"); + if (nullptr == fwDirEnv) { + LOG_INFO << "Skipping test as ZE_LZT_FIRMWARE_DIRECTORY not set"; + GTEST_SKIP(); + } + std::vector testFwImage; + std::string fwDir(fwDirEnv); + for (auto device : devices) { + uint32_t count = lzt::get_firmware_handle_count(device); + if (count > 0) { + is_VRConfig_supported = true; + LOG_INFO << "VR Config handles are available on this device!"; + auto firmware_handles = lzt::get_firmware_handles(device, count); + zes_firmware_handle_t vr_config_handle = nullptr; + for (auto fw_handle : firmware_handles) { + zes_firmware_properties_t props = { + ZES_STRUCTURE_TYPE_FIRMWARE_PROPERTIES}; + zesFirmwareGetProperties(fw_handle, &props); + if (std::string(props.name) == "VRConfig") { + is_VRConfig_supported = true; + vr_config_handle = fw_handle; + auto propFw = lzt::get_firmware_properties(fw_handle); + if (propFw.canControl) { + std::string fwName(reinterpret_cast(propFw.name)); + std::string fwToLoad = fwDir + "/" + fwName + ".bin"; + std::ifstream inFileStream(fwToLoad, + std::ios::binary | std::ios::ate); + if (!inFileStream.is_open()) { + LOG_INFO << "Skipping test as firmware image not found"; + GTEST_SKIP(); + } + testFwImage.resize(inFileStream.tellg()); + inFileStream.seekg(0, inFileStream.beg); + inFileStream.read(testFwImage.data(), testFwImage.size()); + + lzt::flash_firmware(vr_config_handle, + static_cast(testFwImage.data()), + testFwImage.size()); + } + } + } + } else { + LOG_INFO << "No VR config handles found for this device!"; + } + } + if (!is_VRConfig_supported) { + FAIL() << "No VR Config handles found on any of the devices!"; + } +} + } // namespace