From 9f7f2318bd0b87f1ed9b85b60c67ca3f587f8cad Mon Sep 17 00:00:00 2001 From: Krystian Chmielewski Date: Wed, 1 Mar 2023 13:30:13 +0000 Subject: [PATCH] fix(ocloc): fallback to deprecated acronyms When revision_id argument is passed fallback to using initHardwareInfoForDeprecatedAcronyms. * initHardwareInfoForProductConfig returns INVALID_DEVICE if device acronym and revision id is passed. * initHardwareInfoForDeprecatedAcronyms sets aot config revision to revisionId. Resolves: NEO-7738 Signed-off-by: Krystian Chmielewski --- .../offline_compiler_tests.cpp | 31 +++++++++++++++++-- .../source/offline_compiler.cpp | 3 +- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp index 7f001b7fb0..3b17d64bb1 100644 --- a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp +++ b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp @@ -581,11 +581,38 @@ TEST_F(MockOfflineCompilerTests, givenDeprecatedAcronymsWithRevisionWhenInitHwIn for (const auto &acronym : deprecatedAcronyms) { mockOfflineCompiler.deviceName = acronym.str(); mockOfflineCompiler.revisionId = 0x3; - EXPECT_EQ(mockOfflineCompiler.initHardwareInfo(mockOfflineCompiler.deviceName), OclocErrorCode::SUCCESS); - EXPECT_EQ(mockOfflineCompiler.hwInfo.platform.usRevId, mockOfflineCompiler.revisionId); + EXPECT_EQ(OclocErrorCode::SUCCESS, mockOfflineCompiler.initHardwareInfo(mockOfflineCompiler.deviceName)); + EXPECT_EQ(mockOfflineCompiler.revisionId, static_cast(mockOfflineCompiler.hwInfo.platform.usRevId)); + EXPECT_EQ(mockOfflineCompiler.revisionId, static_cast(mockOfflineCompiler.hwInfo.ipVersion.revision)); } } +TEST_F(MockOfflineCompilerTests, givenValidAcronymAndRevisionIdWhenInitHardwareInfoForProductConfigThenInvalidDeviceIsReturned) { + MockOfflineCompiler mockOfflineCompiler; + auto &allEnabledDeviceConfigs = mockOfflineCompiler.argHelper->productConfigHelper->getDeviceAotInfo(); + if (allEnabledDeviceConfigs.empty()) { + GTEST_SKIP(); + } + + for (const auto &deviceMapConfig : allEnabledDeviceConfigs) { + if (productFamily == deviceMapConfig.hwInfo->platform.eProductFamily) { + if (!deviceMapConfig.deviceAcronyms.empty()) { + mockOfflineCompiler.deviceName = deviceMapConfig.deviceAcronyms.front().str(); + break; + } else if (!deviceMapConfig.rtlIdAcronyms.empty()) { + mockOfflineCompiler.deviceName = deviceMapConfig.rtlIdAcronyms.front().str(); + break; + } + } + } + if (mockOfflineCompiler.deviceName.empty()) { + GTEST_SKIP(); + } + + mockOfflineCompiler.revisionId = 0x3; + EXPECT_EQ(OclocErrorCode::INVALID_DEVICE, mockOfflineCompiler.initHardwareInfoForProductConfig(mockOfflineCompiler.deviceName)); +} + TEST_F(MockOfflineCompilerTests, givenHwInfoConfigWhenSetHwInfoForProductConfigThenCorrectValuesAreSet) { MockOfflineCompiler mockOfflineCompiler; auto enabledProductAcronyms = mockOfflineCompiler.argHelper->productConfigHelper->getRepresentativeProductAcronyms(); diff --git a/shared/offline_compiler/source/offline_compiler.cpp b/shared/offline_compiler/source/offline_compiler.cpp index df3e09013b..16f57d44d7 100644 --- a/shared/offline_compiler/source/offline_compiler.cpp +++ b/shared/offline_compiler/source/offline_compiler.cpp @@ -435,6 +435,7 @@ int OfflineCompiler::initHardwareInfoForDeprecatedAcronyms(std::string deviceNam hwInfo = *hardwareInfoTable[product]; if (revisionId != -1) { hwInfo.platform.usRevId = revisionId; + hwInfo.ipVersion.revision = revisionId; } compilerProductHelper = NEO::CompilerProductHelper::create(hwInfo.platform.eProductFamily); uint64_t config = hwInfoConfig ? hwInfoConfig : compilerProductHelper->getHwInfoConfig(hwInfo); @@ -463,7 +464,7 @@ int OfflineCompiler::initHardwareInfoForProductConfig(std::string deviceName) { } else if (isArgumentDeviceId(deviceName)) { deviceID = std::stoi(deviceName, 0, 16); productConfig = argHelper->productConfigHelper->getProductConfigForDeviceId(deviceID); - } else if (argHelper->productConfigHelper->isProductConfig(deviceName)) { + } else if (argHelper->productConfigHelper->isProductConfig(deviceName) && (revisionId == -1)) { productConfig = ProductConfigHelper::getProductConfigForAcronym(deviceName); } else { return INVALID_DEVICE;