@@ -29,6 +29,9 @@ uint32_t get_prop_length(char *prop) { return std::strlen(prop); }
29
29
class FirmwareZesTest : public lzt ::ZesSysmanCtsClass {
30
30
public:
31
31
bool is_firmware_supported = false ;
32
+ bool is_VRConfig_supported = false ;
33
+ bool is_fantable_supported = false ;
34
+
32
35
};
33
36
#define FIRMWARE_TEST FirmwareZesTest
34
37
#else // USE_ZESINIT
@@ -303,4 +306,108 @@ LZT_TEST_F(
303
306
}
304
307
}
305
308
309
+ LZT_TEST_F (
310
+ FIRMWARE_TEST,
311
+ GivenValidFanTableFirmwareHandleWhenFirmwareIsFlashedThenFlashingIsSuccessful) {
312
+ auto fwDirEnv = getenv (" ZE_LZT_FIRMWARE_DIRECTORY" );
313
+ if (nullptr == fwDirEnv) {
314
+ LOG_INFO << " Skipping test as ZE_LZT_FIRMWARE_DIRECTORY not set" ;
315
+ GTEST_SKIP ();
316
+ }
317
+ std::vector<char > testFwImage;
318
+ std::string fwDir (fwDirEnv);
319
+ for (auto device : devices) {
320
+ uint32_t count = lzt::get_firmware_handle_count (device);
321
+ auto firmware_handles = lzt::get_firmware_handles (device, count);
322
+ zes_firmware_handle_t fan_table_handle = nullptr ;
323
+ for (auto fw_handle : firmware_handles) {
324
+ zes_firmware_properties_t props = {
325
+ ZES_STRUCTURE_TYPE_FIRMWARE_PROPERTIES};
326
+ zesFirmwareGetProperties (fw_handle, &props);
327
+ if (std::string (props.name ) == " FanTable" ) {
328
+ is_fantable_supported = true ;
329
+ fan_table_handle = fw_handle;
330
+ auto propFw = lzt::get_firmware_properties (fw_handle);
331
+ if (propFw.canControl ) {
332
+ std::string fwName (reinterpret_cast <char *>(propFw.name ));
333
+ std::string fwToLoad = fwDir + " /" + fwName + " .bin" ;
334
+ std::ifstream inFileStream (fwToLoad,
335
+ std::ios::binary | std::ios::ate);
336
+ if (!inFileStream.is_open ()) {
337
+ LOG_INFO << " Skipping test as firmware image not found" ;
338
+ GTEST_SKIP ();
339
+ }
340
+ testFwImage.resize (inFileStream.tellg ());
341
+ inFileStream.seekg (0 , inFileStream.beg );
342
+ inFileStream.read (testFwImage.data (), testFwImage.size ());
343
+
344
+ lzt::flash_firmware (fan_table_handle,
345
+ static_cast <void *>(testFwImage.data ()),
346
+ testFwImage.size ());
347
+ }
348
+ }
349
+ }
350
+
351
+ if (!is_fantable_supported) {
352
+ LOG_INFO << " No fan table handles found for this device!" ;
353
+ }
354
+ }
355
+ if (!is_fantable_supported) {
356
+ FAIL () << " No fan table handles found on any of the devices!" ;
357
+ }
358
+ }
359
+
360
+ LZT_TEST_F (
361
+ FIRMWARE_TEST,
362
+ GivenValidVRConfigFirmwareHandleWhenFirmwareIsFlashedThenFlashingIsSuccessful) {
363
+ auto fwDirEnv = getenv (" ZE_LZT_FIRMWARE_DIRECTORY" );
364
+ if (nullptr == fwDirEnv) {
365
+ LOG_INFO << " Skipping test as ZE_LZT_FIRMWARE_DIRECTORY not set" ;
366
+ GTEST_SKIP ();
367
+ }
368
+ std::vector<char > testFwImage;
369
+ std::string fwDir (fwDirEnv);
370
+ for (auto device : devices) {
371
+ uint32_t count = lzt::get_firmware_handle_count (device);
372
+ if (count > 0 ) {
373
+ is_VRConfig_supported = true ;
374
+ LOG_INFO << " VR Config handles are available on this device!" ;
375
+ auto firmware_handles = lzt::get_firmware_handles (device, count);
376
+ zes_firmware_handle_t vr_config_handle = nullptr ;
377
+ for (auto fw_handle : firmware_handles) {
378
+ zes_firmware_properties_t props = {
379
+ ZES_STRUCTURE_TYPE_FIRMWARE_PROPERTIES};
380
+ zesFirmwareGetProperties (fw_handle, &props);
381
+ if (std::string (props.name ) == " VRConfig" ) {
382
+ is_VRConfig_supported = true ;
383
+ vr_config_handle = fw_handle;
384
+ auto propFw = lzt::get_firmware_properties (fw_handle);
385
+ if (propFw.canControl ) {
386
+ std::string fwName (reinterpret_cast <char *>(propFw.name ));
387
+ std::string fwToLoad = fwDir + " /" + fwName + " .bin" ;
388
+ std::ifstream inFileStream (fwToLoad,
389
+ std::ios::binary | std::ios::ate);
390
+ if (!inFileStream.is_open ()) {
391
+ LOG_INFO << " Skipping test as firmware image not found" ;
392
+ GTEST_SKIP ();
393
+ }
394
+ testFwImage.resize (inFileStream.tellg ());
395
+ inFileStream.seekg (0 , inFileStream.beg );
396
+ inFileStream.read (testFwImage.data (), testFwImage.size ());
397
+
398
+ lzt::flash_firmware (vr_config_handle,
399
+ static_cast <void *>(testFwImage.data ()),
400
+ testFwImage.size ());
401
+ }
402
+ }
403
+ }
404
+ } else {
405
+ LOG_INFO << " No VR config handles found for this device!" ;
406
+ }
407
+ }
408
+ if (!is_VRConfig_supported) {
409
+ FAIL () << " No VR Config handles found on any of the devices!" ;
410
+ }
411
+ }
412
+
306
413
} // namespace
0 commit comments