From 19763db9a2928a9a014706c478f34094d6fc84fb Mon Sep 17 00:00:00 2001 From: "Cencelewska, Katarzyna" Date: Wed, 4 Jan 2023 17:15:35 +0000 Subject: [PATCH] fix: Move setupHardwareInfo to avoid overwrriten values from blob device setupHardwareInfo should be called before setupSystemInfo to not override queried systemInfo values Signed-off-by: Cencelewska, Katarzyna --- shared/source/os_interface/linux/drm_neo.cpp | 9 ++--- .../linux/drm_system_info_tests.cpp | 39 ++++++++++++++++++- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index e9b73c1e60..459fefbf60 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -460,7 +460,10 @@ int Drm::setupHardwareInfo(const DeviceDescriptor *device, bool setupFeatureTabl } status = querySystemInfo(); + device->setupHardwareInfo(hwInfo, setupFeatureTableAndWorkaroundTable); + if (status) { + systemInfo->checkSysInfoMismatch(hwInfo); setupSystemInfo(hwInfo, systemInfo.get()); uint32_t bankCount = (hwInfo->gtSystemInfo.L3BankCount > 0) ? hwInfo->gtSystemInfo.L3BankCount : hwInfo->gtSystemInfo.MaxDualSubSlicesSupported; @@ -468,12 +471,6 @@ int Drm::setupHardwareInfo(const DeviceDescriptor *device, bool setupFeatureTabl hwInfo->gtSystemInfo.L3CacheSizeInKb = systemInfo->getL3BankSizeInKb() * bankCount; } - device->setupHardwareInfo(hwInfo, setupFeatureTableAndWorkaroundTable); - - if (systemInfo) { - systemInfo->checkSysInfoMismatch(hwInfo); - } - setupCacheInfo(*hwInfo); return 0; diff --git a/shared/test/unit_test/os_interface/linux/drm_system_info_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_system_info_tests.cpp index 017218920a..97032f9453 100644 --- a/shared/test/unit_test/os_interface/linux/drm_system_info_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_system_info_tests.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2022 Intel Corporation + * Copyright (C) 2020-2023 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -175,6 +175,43 @@ TEST(DrmSystemInfoTest, givenSetupHardwareInfoWhenQuerySystemInfoSucceedsThenSys EXPECT_GT(gtSystemInfo.MemoryType, 0u); } +TEST(DrmSystemInfoTest, givenSetupHardwareInfoWhenQuerySystemInfoSucceedsThenSystemInfoIsCreatedAndHardwareInfoSetProperlyBasedOnBlobData) { + auto executionEnvironment = std::make_unique(); + executionEnvironment->rootDeviceEnvironments[0]->initGmm(); + + DrmMockEngine drm(*executionEnvironment->rootDeviceEnvironments[0]); + + HardwareInfo hwInfo = *defaultHwInfo; + + hwInfo.gtSystemInfo.MaxSlicesSupported = 0u; + hwInfo.gtSystemInfo.MaxSubSlicesSupported = 0u; + hwInfo.gtSystemInfo.MaxEuPerSubSlice = 0u; + drm.storedSVal = 0u; + drm.storedSSVal = 1u; + drm.storedEUVal = 1u; + + auto expectedMaxSlicesSupported = dummyDeviceBlobData[2]; + auto expectedMaxSubslicesSupported = dummyDeviceBlobData[5]; + auto expectedMaxEusPerSubsliceSupported = dummyDeviceBlobData[8]; + + auto setupHardwareInfo = [](HardwareInfo *, bool) {}; + DeviceDescriptor device = {0, &hwInfo, setupHardwareInfo}; + + int ret = drm.setupHardwareInfo(&device, false); + EXPECT_EQ(ret, 0); + EXPECT_NE(nullptr, drm.getSystemInfo()); + const auto >SystemInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo()->gtSystemInfo; + + EXPECT_EQ(expectedMaxSlicesSupported, gtSystemInfo.MaxSlicesSupported); + EXPECT_NE(0u, gtSystemInfo.MaxSlicesSupported); + + EXPECT_EQ(expectedMaxSubslicesSupported, gtSystemInfo.MaxSubSlicesSupported); + EXPECT_NE(0u, gtSystemInfo.MaxSubSlicesSupported); + + EXPECT_EQ(expectedMaxEusPerSubsliceSupported, gtSystemInfo.MaxEuPerSubSlice); + EXPECT_NE(0u, gtSystemInfo.MaxEuPerSubSlice); +} + TEST(DrmSystemInfoTest, givenZeroBankCountWhenCreatingSystemInfoThenUseDualSubslicesToCalculateL3Size) { auto executionEnvironment = std::make_unique(); executionEnvironment->rootDeviceEnvironments[0]->initGmm();