Skip to content

Commit f833dc0

Browse files
Add sysman Firmware support for windows
Related-To: LOCI-3226 Signed-off-by: Mayank Raghuwanshi <[email protected]>
1 parent ba24463 commit f833dc0

File tree

5 files changed

+77
-13
lines changed

5 files changed

+77
-13
lines changed

level_zero/tools/source/sysman/firmware/firmware_imp.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020-2021 Intel Corporation
2+
* Copyright (C) 2020-2022 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -17,7 +17,11 @@ namespace L0 {
1717

1818
ze_result_t FirmwareImp::firmwareGetProperties(zes_firmware_properties_t *pProperties) {
1919
pOsFirmware->osGetFwProperties(pProperties);
20-
strncpy_s(pProperties->name, ZES_STRING_PROPERTY_SIZE, fwType.c_str(), fwType.size());
20+
std::string fwName = fwType;
21+
if (fwName == "GSC") {
22+
fwName = "GFX";
23+
}
24+
strncpy_s(pProperties->name, ZES_STRING_PROPERTY_SIZE, fwName.c_str(), fwName.size());
2125
return ZE_RESULT_SUCCESS;
2226
}
2327

level_zero/tools/source/sysman/firmware/windows/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#
2-
# Copyright (C) 2020 Intel Corporation
2+
# Copyright (C) 2020-2022 Intel Corporation
33
#
44
# SPDX-License-Identifier: MIT
55
#
66

77
set(L0_SRCS_TOOLS_SYSMAN_FIRMWARE_WINDOWS
88
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
99
${CMAKE_CURRENT_SOURCE_DIR}/os_firmware_imp.cpp
10+
${CMAKE_CURRENT_SOURCE_DIR}/os_firmware_imp.h
1011
)
1112

1213
if(WIN32)

level_zero/tools/source/sysman/firmware/windows/os_firmware_imp.cpp

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,62 @@
11
/*
2-
* Copyright (C) 2020-2021 Intel Corporation
2+
* Copyright (C) 2020-2022 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
66
*/
77

88
#include "level_zero/tools/source/sysman/firmware/windows/os_firmware_imp.h"
99

10+
#include "level_zero/tools/source/sysman/firmware_util/firmware_util.h"
11+
#include "level_zero/tools/source/sysman/windows/os_sysman_imp.h"
12+
1013
namespace L0 {
14+
const std::vector<std ::string> deviceSupportedFwTypes = {"GSC", "OptionROM"};
15+
16+
ze_result_t WddmFirmwareImp::getFirmwareVersion(std::string fwType, zes_firmware_properties_t *pProperties) {
17+
std::string fwVersion;
18+
ze_result_t result = pFwInterface->getFwVersion(fwType, fwVersion);
19+
if (ZE_RESULT_SUCCESS == result) {
20+
strncpy_s(static_cast<char *>(pProperties->version), ZES_STRING_PROPERTY_SIZE, fwVersion.c_str(), ZES_STRING_PROPERTY_SIZE);
21+
}
22+
return result;
23+
}
24+
25+
void WddmFirmwareImp::osGetFwProperties(zes_firmware_properties_t *pProperties) {
26+
if (ZE_RESULT_SUCCESS != getFirmwareVersion(osFwType, pProperties)) {
27+
strncpy_s(static_cast<char *>(pProperties->version), ZES_STRING_PROPERTY_SIZE, unknown.c_str(), ZES_STRING_PROPERTY_SIZE);
28+
}
29+
pProperties->canControl = true; // Assuming that user has permission to flash the firmware
30+
}
31+
ze_result_t WddmFirmwareImp::osFirmwareFlash(void *pImage, uint32_t size) {
32+
return pFwInterface->flashFirmware(osFwType, pImage, size);
33+
}
1134

1235
bool WddmFirmwareImp::isFirmwareSupported(void) {
36+
if (pFwInterface != nullptr) {
37+
isFWInitialized = ((ZE_RESULT_SUCCESS == pFwInterface->fwDeviceInit()) ? true : false);
38+
return this->isFWInitialized;
39+
}
1340
return false;
1441
}
1542

16-
void WddmFirmwareImp::osGetFwProperties(zes_firmware_properties_t *pProperties){};
17-
ze_result_t WddmFirmwareImp::osFirmwareFlash(void *pImage, uint32_t size) {
18-
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
19-
};
43+
WddmFirmwareImp::WddmFirmwareImp(OsSysman *pOsSysman, const std::string &fwType) : osFwType(fwType) {
44+
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
45+
pFwInterface = pWddmSysmanImp->getFwUtilInterface();
46+
}
2047

2148
std::unique_ptr<OsFirmware> OsFirmware::create(OsSysman *pOsSysman, const std::string &fwType) {
22-
std::unique_ptr<WddmFirmwareImp> pWddmFirmwareImp = std::make_unique<WddmFirmwareImp>();
49+
std::unique_ptr<WddmFirmwareImp> pWddmFirmwareImp = std::make_unique<WddmFirmwareImp>(pOsSysman, fwType);
2350
return pWddmFirmwareImp;
2451
}
2552

2653
ze_result_t OsFirmware::getSupportedFwTypes(std::vector<std::string> &supportedFwTypes, OsSysman *pOsSysman) {
54+
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
55+
FirmwareUtil *pFwInterface = pWddmSysmanImp->getFwUtilInterface();
56+
if (pFwInterface != nullptr) {
57+
supportedFwTypes = deviceSupportedFwTypes;
58+
return ZE_RESULT_SUCCESS;
59+
}
2760
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
2861
}
2962

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020-2021 Intel Corporation
2+
* Copyright (C) 2020-2022 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -9,14 +9,23 @@
99
#include "shared/source/helpers/non_copyable_or_moveable.h"
1010

1111
#include "sysman/firmware/os_firmware.h"
12-
#include "sysman/windows/os_sysman_imp.h"
1312

1413
namespace L0 {
14+
class FirmwareUtil;
1515
class WddmFirmwareImp : public OsFirmware {
1616
public:
1717
bool isFirmwareSupported(void) override;
1818
void osGetFwProperties(zes_firmware_properties_t *pProperties) override;
1919
ze_result_t osFirmwareFlash(void *pImage, uint32_t size) override;
20+
ze_result_t getFirmwareVersion(std::string fwType, zes_firmware_properties_t *pProperties);
21+
WddmFirmwareImp() = default;
22+
WddmFirmwareImp(OsSysman *pOsSysman, const std::string &fwType);
23+
~WddmFirmwareImp() override = default;
24+
25+
protected:
26+
FirmwareUtil *pFwInterface = nullptr;
27+
bool isFWInitialized = false;
28+
std::string osFwType;
2029
};
2130

2231
} // namespace L0

level_zero/tools/test/unit_tests/sources/sysman/firmware/linux/test_zes_sysman_firmware.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,30 @@ TEST_F(ZesFirmwareFixture, GivenValidFirmwareHandleWhenGettingFirmwareProperties
111111

112112
zes_firmware_properties_t properties = {};
113113
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFirmwareGetProperties(handles[0], &properties));
114-
EXPECT_STREQ(mockSupportedFwTypes[0].c_str(), properties.name);
114+
EXPECT_STREQ("GFX", properties.name);
115115
EXPECT_STREQ(mockFwVersion.c_str(), properties.version);
116116

117117
pSysmanDeviceImp->pFirmwareHandleContext->handleList.pop_back();
118118
delete ptestFirmwareImp;
119119
}
120120

121+
TEST_F(ZesFirmwareFixture, GivenValidFirmwareHandleWhenGettingOptionRomPropertiesThenVersionIsReturned) {
122+
initFirmware();
123+
124+
FirmwareImp *pTestFirmwareImp = new FirmwareImp(pSysmanDeviceImp->pFirmwareHandleContext->pOsSysman, mockSupportedFwTypes[1]);
125+
pSysmanDeviceImp->pFirmwareHandleContext->handleList.push_back(pTestFirmwareImp);
126+
127+
auto handles = getFirmwareHandles(mockHandleCount);
128+
129+
zes_firmware_properties_t properties = {};
130+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFirmwareGetProperties(handles[1], &properties));
131+
EXPECT_STREQ(mockSupportedFwTypes[1].c_str(), properties.name);
132+
EXPECT_STREQ(mockOpromVersion.c_str(), properties.version);
133+
134+
pSysmanDeviceImp->pFirmwareHandleContext->handleList.pop_back();
135+
delete pTestFirmwareImp;
136+
}
137+
121138
TEST_F(ZesFirmwareFixture, GivenValidFirmwareHandleWhenGettingOpromPropertiesThenVersionIsReturned) {
122139
initFirmware();
123140

@@ -232,7 +249,7 @@ TEST_F(ZesFirmwareFixture, GivenValidFirmwareHandleFirmwareLibraryCallFailureWhe
232249

233250
zes_firmware_properties_t properties = {};
234251
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFirmwareGetProperties(handles[0], &properties));
235-
EXPECT_STREQ(mockSupportedFwTypes[0].c_str(), properties.name);
252+
EXPECT_STREQ("GFX", properties.name);
236253
EXPECT_STREQ("unknown", properties.version);
237254

238255
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFirmwareGetProperties(handles[1], &properties));

0 commit comments

Comments
 (0)