Skip to content

Commit 175ceb9

Browse files
feature: Add support for media freq domain on linux
Related-To: LOCI-4552 Signed-off-by: Mayank Raghuwanshi <[email protected]>
1 parent e3a408f commit 175ceb9

File tree

17 files changed

+229
-5
lines changed

17 files changed

+229
-5
lines changed

level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,19 @@ OsFrequency *OsFrequency::create(OsSysman *pOsSysman, ze_bool_t onSubdevice, uin
422422
}
423423

424424
std::vector<zes_freq_domain_t> OsFrequency::getNumberOfFreqDomainsSupported(OsSysman *pOsSysman) {
425-
std::vector<zes_freq_domain_t> freqDomains = {ZES_FREQ_DOMAIN_GPU};
425+
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
426+
auto &productHelper = pLinuxSysmanImp->getParentSysmanDeviceImp()->getRootDeviceEnvironment().getHelper<NEO::ProductHelper>();
427+
auto releaseHelper = pLinuxSysmanImp->getParentSysmanDeviceImp()->getRootDeviceEnvironment().getReleaseHelper();
428+
std::vector<zes_freq_domain_t> freqDomains = {};
429+
uint32_t mediaFreqTileIndex;
430+
if (productHelper.getMediaFrequencyTileIndex(releaseHelper, mediaFreqTileIndex) == true) {
431+
auto pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess();
432+
const std::string baseDir = "gt/gt" + std::to_string(mediaFreqTileIndex) + "/";
433+
if (pSysfsAccess->directoryExists(baseDir)) {
434+
freqDomains.push_back(ZES_FREQ_DOMAIN_MEDIA);
435+
}
436+
}
437+
freqDomains.push_back(ZES_FREQ_DOMAIN_GPU);
426438
return freqDomains;
427439
}
428440

level_zero/sysman/source/sysman_device_imp.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ struct SysmanDeviceImp : SysmanDevice, NEO::NonCopyableOrMovableClass {
3232
const NEO::RootDeviceEnvironment &getRootDeviceEnvironment() const {
3333
return *executionEnvironment->rootDeviceEnvironments[rootDeviceIndex];
3434
}
35+
NEO::RootDeviceEnvironment &getRootDeviceEnvironmentRef() const {
36+
return *executionEnvironment->rootDeviceEnvironments[rootDeviceIndex];
37+
}
3538
const NEO::HardwareInfo &getHardwareInfo() const override { return *getRootDeviceEnvironment().getHardwareInfo(); }
3639
PRODUCT_FAMILY getProductFamily() const { return getHardwareInfo().platform.eProductFamily; }
3740
NEO::ExecutionEnvironment *getExecutionEnvironment() const { return executionEnvironment; }

level_zero/sysman/test/unit_tests/sources/frequency/linux/mock_sysfs_frequency_prelim.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
#pragma once
99

10+
#include "shared/source/os_interface/product_helper_hw.h"
11+
#include "shared/source/release_helper/release_helper.h"
1012
#include "shared/test/common/test_macros/mock_method_macros.h"
1113

1214
#include "level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.h"
@@ -346,6 +348,15 @@ struct MockFrequencySysfsAccess : public L0::Sysman::SysfsAccess {
346348
~MockFrequencySysfsAccess() override = default;
347349
};
348350

351+
struct MockProductHelperFreq : NEO::ProductHelperHw<IGFX_UNKNOWN> {
352+
MockProductHelperFreq() = default;
353+
bool isMediaFreqDomainPresent = false;
354+
bool getMediaFrequencyTileIndex(const NEO::ReleaseHelper *releaseHelper, uint32_t &tileIndex) const override {
355+
tileIndex = 1;
356+
return isMediaFreqDomainPresent;
357+
}
358+
};
359+
349360
class PublicLinuxFrequencyImp : public L0::Sysman::LinuxFrequencyImp {
350361
public:
351362
PublicLinuxFrequencyImp(L0::Sysman::OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId, zes_freq_domain_t type) : L0::Sysman::LinuxFrequencyImp(pOsSysman, onSubdevice, subdeviceId, type) {}

level_zero/sysman/test/unit_tests/sources/frequency/linux/test_zes_frequency_prelim.cpp

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture {
3131
L0::Sysman::SysmanDevice *device = nullptr;
3232
std::unique_ptr<MockFrequencySysfsAccess> pSysfsAccess;
3333
L0::Sysman::SysfsAccess *pSysfsAccessOld = nullptr;
34+
std::unique_ptr<ProductHelper> pProductHelper;
35+
std::unique_ptr<ProductHelper> pProductHelperOld;
3436
uint32_t numClocks = 0;
3537
double step = 0;
3638
PRODUCT_FAMILY productFamily{};
@@ -41,6 +43,9 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture {
4143
pSysfsAccessOld = pLinuxSysmanImp->pSysfsAccess;
4244
pSysfsAccess = std::make_unique<MockFrequencySysfsAccess>();
4345
pLinuxSysmanImp->pSysfsAccess = pSysfsAccess.get();
46+
pProductHelper = std::make_unique<MockProductHelperFreq>();
47+
auto &rootDeviceEnvironment = pLinuxSysmanImp->getParentSysmanDeviceImp()->getRootDeviceEnvironmentRef();
48+
std::swap(rootDeviceEnvironment.productHelper, pProductHelper);
4449
productFamily = pLinuxSysmanImp->getProductFamily();
4550
if (productFamily >= IGFX_XE_HP_SDV) {
4651
step = 50.0;
@@ -62,11 +67,12 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture {
6267
delete handle;
6368
}
6469
pSysmanDeviceImp->pFrequencyHandleContext->handleList.clear();
65-
getFreqHandles(0);
6670
}
6771

6872
void TearDown() override {
6973
pLinuxSysmanImp->pSysfsAccess = pSysfsAccessOld;
74+
auto &rootDeviceEnvironment = pLinuxSysmanImp->getParentSysmanDeviceImp()->getRootDeviceEnvironmentRef();
75+
std::swap(rootDeviceEnvironment.productHelper, pProductHelper);
7076
SysmanDeviceFixture::TearDown();
7177
}
7278

@@ -153,6 +159,51 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroAndValidPtrWhenEnume
153159
EXPECT_EQ(handle, static_cast<zes_freq_handle_t>(0UL));
154160
}
155161

162+
TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroWhenEnumeratingFrequencyHandlesAndMediaFreqDomainIsPresentThenNonZeroCountIsReturnedAndCallSucceds) {
163+
auto mockProductHelper = std::make_unique<MockProductHelperFreq>();
164+
mockProductHelper->isMediaFreqDomainPresent = true;
165+
std::unique_ptr<ProductHelper> productHelper = std::move(mockProductHelper);
166+
auto &rootDeviceEnvironment = pLinuxSysmanImp->getParentSysmanDeviceImp()->getRootDeviceEnvironmentRef();
167+
std::swap(rootDeviceEnvironment.productHelper, productHelper);
168+
uint32_t count = 0U;
169+
170+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEnumFrequencyDomains(device->toHandle(), &count, nullptr));
171+
EXPECT_EQ(count, 2U);
172+
173+
uint32_t testCount = count + 1;
174+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEnumFrequencyDomains(device->toHandle(), &testCount, nullptr));
175+
EXPECT_EQ(count, testCount);
176+
177+
auto handles = getFreqHandles(count);
178+
for (auto handle : handles) {
179+
EXPECT_NE(handle, nullptr);
180+
}
181+
std::swap(rootDeviceEnvironment.productHelper, productHelper);
182+
}
183+
184+
TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroWhenEnumeratingFrequencyHandlesAndMediaDomainIsAbsentThenNonZeroCountIsReturnedAndCallSucceds) {
185+
pSysfsAccess->directoryExistsResult = false;
186+
auto mockProductHelper = std::make_unique<MockProductHelperFreq>();
187+
mockProductHelper->isMediaFreqDomainPresent = true;
188+
std::unique_ptr<ProductHelper> productHelper = std::move(mockProductHelper);
189+
auto &rootDeviceEnvironment = pLinuxSysmanImp->getParentSysmanDeviceImp()->getRootDeviceEnvironmentRef();
190+
std::swap(rootDeviceEnvironment.productHelper, productHelper);
191+
uint32_t count = 0U;
192+
193+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEnumFrequencyDomains(device->toHandle(), &count, nullptr));
194+
EXPECT_EQ(count, 1U);
195+
196+
uint32_t testCount = count + 1;
197+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEnumFrequencyDomains(device->toHandle(), &testCount, nullptr));
198+
EXPECT_EQ(count, testCount);
199+
200+
auto handles = getFreqHandles(count);
201+
for (auto handle : handles) {
202+
EXPECT_NE(handle, nullptr);
203+
}
204+
std::swap(rootDeviceEnvironment.productHelper, productHelper);
205+
}
206+
156207
TEST_F(SysmanDeviceFrequencyFixture, GivenActualComponentCountTwoWhenTryingToGetOneComponentOnlyThenOneComponentIsReturnedAndCountUpdated) {
157208
auto subDeviceCount = pLinuxSysmanImp->getSubDeviceCount();
158209
ze_bool_t onSubdevice = (subDeviceCount == 0) ? false : true;
@@ -174,7 +225,8 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFreq
174225
zes_freq_properties_t properties;
175226
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFrequencyGetProperties(handle, &properties));
176227
EXPECT_EQ(nullptr, properties.pNext);
177-
EXPECT_EQ(ZES_FREQ_DOMAIN_GPU, properties.type);
228+
EXPECT_GE(properties.type, ZES_FREQ_DOMAIN_GPU);
229+
EXPECT_LE(properties.type, ZES_FREQ_DOMAIN_MEDIA);
178230
EXPECT_FALSE(properties.onSubdevice);
179231
EXPECT_DOUBLE_EQ(maxFreq, properties.max);
180232
EXPECT_DOUBLE_EQ(minFreq, properties.min);
@@ -857,13 +909,17 @@ class FreqMultiDeviceFixture : public SysmanMultiDeviceFixture {
857909
L0::Sysman::SysmanDevice *device = nullptr;
858910
std::unique_ptr<MockFrequencySysfsAccess> pSysfsAccess;
859911
L0::Sysman::SysfsAccess *pSysfsAccessOld = nullptr;
912+
std::unique_ptr<ProductHelper> pProductHelper;
860913

861914
void SetUp() override {
862915
SysmanMultiDeviceFixture::SetUp();
863916
device = pSysmanDevice;
864917
pSysfsAccessOld = pLinuxSysmanImp->pSysfsAccess;
865918
pSysfsAccess = std::make_unique<MockFrequencySysfsAccess>();
866919
pLinuxSysmanImp->pSysfsAccess = pSysfsAccess.get();
920+
pProductHelper = std::make_unique<MockProductHelperFreq>();
921+
auto &rootDeviceEnvironment = pLinuxSysmanImp->getParentSysmanDeviceImp()->getRootDeviceEnvironmentRef();
922+
std::swap(rootDeviceEnvironment.productHelper, pProductHelper);
867923
// delete handles created in initial SysmanDeviceHandleContext::init() call
868924
for (auto handle : pSysmanDeviceImp->pFrequencyHandleContext->handleList) {
869925
delete handle;
@@ -874,6 +930,8 @@ class FreqMultiDeviceFixture : public SysmanMultiDeviceFixture {
874930

875931
void TearDown() override {
876932
pLinuxSysmanImp->pSysfsAccess = pSysfsAccessOld;
933+
auto &rootDeviceEnvironment = pLinuxSysmanImp->getParentSysmanDeviceImp()->getRootDeviceEnvironmentRef();
934+
std::swap(rootDeviceEnvironment.productHelper, pProductHelper);
877935
SysmanMultiDeviceFixture::TearDown();
878936
}
879937

level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,20 @@ OsFrequency *OsFrequency::create(OsSysman *pOsSysman, ze_bool_t onSubdevice, uin
427427
}
428428

429429
std::vector<zes_freq_domain_t> OsFrequency::getNumberOfFreqDomainsSupported(OsSysman *pOsSysman) {
430-
std::vector<zes_freq_domain_t> freqDomains = {ZES_FREQ_DOMAIN_GPU};
430+
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
431+
auto pDevice = Device::fromHandle(pLinuxSysmanImp->getSysmanDeviceImp()->hCoreDevice);
432+
auto &productHelper = pDevice->getNEODevice()->getProductHelper();
433+
auto releaseHelper = pDevice->getNEODevice()->getReleaseHelper();
434+
std::vector<zes_freq_domain_t> freqDomains = {};
435+
uint32_t mediaFreqTileIndex;
436+
if (productHelper.getMediaFrequencyTileIndex(releaseHelper, mediaFreqTileIndex) == true) {
437+
auto pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess();
438+
const std::string baseDir = "gt/gt" + std::to_string(mediaFreqTileIndex) + "/";
439+
if (pSysfsAccess->directoryExists(baseDir)) {
440+
freqDomains.push_back(ZES_FREQ_DOMAIN_MEDIA);
441+
}
442+
}
443+
freqDomains.push_back(ZES_FREQ_DOMAIN_GPU);
431444
return freqDomains;
432445
}
433446

level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/mock_sysfs_frequency_prelim.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77

88
#pragma once
9+
#include "shared/source/os_interface/product_helper_hw.h"
10+
#include "shared/source/release_helper/release_helper.h"
911
#include "shared/test/common/test_macros/mock_method_macros.h"
1012

1113
#include "level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.h"
@@ -341,6 +343,15 @@ struct MockFrequencySysfsAccess : public SysfsAccess {
341343
~MockFrequencySysfsAccess() override = default;
342344
};
343345

346+
struct MockProductHelperFreq : NEO::ProductHelperHw<IGFX_UNKNOWN> {
347+
MockProductHelperFreq() = default;
348+
bool isMediaFreqDomainPresent = false;
349+
bool getMediaFrequencyTileIndex(const NEO::ReleaseHelper *releaseHelper, uint32_t &tileIndex) const override {
350+
tileIndex = 1;
351+
return isMediaFreqDomainPresent;
352+
}
353+
};
354+
344355
class PublicLinuxFrequencyImp : public L0::LinuxFrequencyImp {
345356
public:
346357
PublicLinuxFrequencyImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId, zes_freq_domain_t type) : LinuxFrequencyImp(pOsSysman, onSubdevice, subdeviceId, type) {}

level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency_prelim.cpp

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture {
3636
std::vector<ze_device_handle_t> deviceHandles;
3737
std::unique_ptr<MockFrequencySysfsAccess> pSysfsAccess;
3838
SysfsAccess *pSysfsAccessOld = nullptr;
39+
std::unique_ptr<ProductHelper> pProductHelper;
3940
uint32_t numClocks = 0;
4041
double step = 0;
4142

@@ -54,6 +55,9 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture {
5455
pSysfsAccessOld = pLinuxSysmanImp->pSysfsAccess;
5556
pSysfsAccess = std::make_unique<MockFrequencySysfsAccess>();
5657
pLinuxSysmanImp->pSysfsAccess = pSysfsAccess.get();
58+
pProductHelper = std::make_unique<MockProductHelperFreq>();
59+
auto &rootDeviceEnvironment = neoDevice->getRootDeviceEnvironmentRef();
60+
std::swap(rootDeviceEnvironment.productHelper, pProductHelper);
5761

5862
pSysfsAccess->setVal(minFreqFile, minFreq);
5963
pSysfsAccess->setVal(maxFreqFile, maxFreq);
@@ -78,14 +82,15 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture {
7882
deviceHandles.resize(subDeviceCount, nullptr);
7983
Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data());
8084
}
81-
getFreqHandles(0);
8285
}
8386

8487
void TearDown() override {
8588
if (!sysmanUltsEnable) {
8689
GTEST_SKIP();
8790
}
8891
pLinuxSysmanImp->pSysfsAccess = pSysfsAccessOld;
92+
auto &rootDeviceEnvironment = neoDevice->getRootDeviceEnvironmentRef();
93+
std::swap(rootDeviceEnvironment.productHelper, pProductHelper);
8994
SysmanDeviceFixture::TearDown();
9095
}
9196

@@ -163,6 +168,51 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroWhenEnumeratingFrequ
163168
}
164169
}
165170

171+
TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroWhenEnumeratingFrequencyHandlesAndMediaFreqDomainIsPresentThenNonZeroCountIsReturnedAndCallSucceds) {
172+
auto mockProductHelper = std::make_unique<MockProductHelperFreq>();
173+
mockProductHelper->isMediaFreqDomainPresent = true;
174+
std::unique_ptr<ProductHelper> productHelper = std::move(mockProductHelper);
175+
auto &rootDeviceEnvironment = neoDevice->getRootDeviceEnvironmentRef();
176+
std::swap(rootDeviceEnvironment.productHelper, productHelper);
177+
uint32_t count = 0U;
178+
179+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEnumFrequencyDomains(device->toHandle(), &count, nullptr));
180+
EXPECT_EQ(count, 2U);
181+
182+
uint32_t testCount = count + 1;
183+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEnumFrequencyDomains(device->toHandle(), &testCount, nullptr));
184+
EXPECT_EQ(count, testCount);
185+
186+
auto handles = getFreqHandles(count);
187+
for (auto handle : handles) {
188+
EXPECT_NE(handle, nullptr);
189+
}
190+
std::swap(rootDeviceEnvironment.productHelper, productHelper);
191+
}
192+
193+
TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroWhenEnumeratingFrequencyHandlesAndMediaDomainIsAbsentThenNonZeroCountIsReturnedAndCallSucceds) {
194+
pSysfsAccess->directoryExistsResult = false;
195+
auto mockProductHelper = std::make_unique<MockProductHelperFreq>();
196+
mockProductHelper->isMediaFreqDomainPresent = true;
197+
std::unique_ptr<ProductHelper> productHelper = std::move(mockProductHelper);
198+
auto &rootDeviceEnvironment = neoDevice->getRootDeviceEnvironmentRef();
199+
std::swap(rootDeviceEnvironment.productHelper, productHelper);
200+
uint32_t count = 0U;
201+
202+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEnumFrequencyDomains(device->toHandle(), &count, nullptr));
203+
EXPECT_EQ(count, 1U);
204+
205+
uint32_t testCount = count + 1;
206+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesDeviceEnumFrequencyDomains(device->toHandle(), &testCount, nullptr));
207+
EXPECT_EQ(count, testCount);
208+
209+
auto handles = getFreqHandles(count);
210+
for (auto handle : handles) {
211+
EXPECT_NE(handle, nullptr);
212+
}
213+
std::swap(rootDeviceEnvironment.productHelper, productHelper);
214+
}
215+
166216
TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroAndValidPtrWhenEnumeratingFrequencyHandlesThenNonZeroCountAndNoHandlesAreReturnedAndCallSucceds) {
167217
uint32_t count = 0U;
168218
zes_freq_handle_t handle = static_cast<zes_freq_handle_t>(0UL);
@@ -855,6 +905,7 @@ class FreqMultiDeviceFixture : public SysmanMultiDeviceFixture {
855905
std::unique_ptr<MockFrequencySysfsAccess> pSysfsAccess;
856906
SysfsAccess *pSysfsAccessOld = nullptr;
857907
std::vector<ze_device_handle_t> deviceHandles;
908+
std::unique_ptr<ProductHelper> pProductHelper;
858909

859910
void SetUp() override {
860911
if (!sysmanUltsEnable) {
@@ -865,6 +916,9 @@ class FreqMultiDeviceFixture : public SysmanMultiDeviceFixture {
865916
pSysfsAccessOld = pLinuxSysmanImp->pSysfsAccess;
866917
pSysfsAccess = std::make_unique<MockFrequencySysfsAccess>();
867918
pLinuxSysmanImp->pSysfsAccess = pSysfsAccess.get();
919+
pProductHelper = std::make_unique<MockProductHelperFreq>();
920+
auto &rootDeviceEnvironment = neoDevice->getRootDeviceEnvironmentRef();
921+
std::swap(rootDeviceEnvironment.productHelper, pProductHelper);
868922
// delete handles created in initial SysmanDeviceHandleContext::init() call
869923
for (auto handle : pSysmanDeviceImp->pFrequencyHandleContext->handleList) {
870924
delete handle;
@@ -887,6 +941,8 @@ class FreqMultiDeviceFixture : public SysmanMultiDeviceFixture {
887941
GTEST_SKIP();
888942
}
889943
pLinuxSysmanImp->pSysfsAccess = pSysfsAccessOld;
944+
auto &rootDeviceEnvironment = neoDevice->getRootDeviceEnvironmentRef();
945+
std::swap(rootDeviceEnvironment.productHelper, pProductHelper);
890946
SysmanMultiDeviceFixture::TearDown();
891947
}
892948

shared/source/os_interface/product_helper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ class ProductHelper {
208208
virtual bool disableL3CacheForDebug(const HardwareInfo &hwInfo) const = 0;
209209
virtual bool isCachingOnCpuAvailable() const = 0;
210210
virtual bool isSkippingStatefulInformationRequired(const KernelDescriptor &kernelDescriptor) const = 0;
211+
virtual bool getMediaFrequencyTileIndex(const ReleaseHelper *releaseHelper, uint32_t &tileIndex) const = 0;
211212

212213
virtual ~ProductHelper() = default;
213214

shared/source/os_interface/product_helper.inl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,14 @@ bool ProductHelperHw<gfxProduct>::isDummyBlitWaRequired() const {
752752
return false;
753753
}
754754

755+
template <PRODUCT_FAMILY gfxProduct>
756+
bool ProductHelperHw<gfxProduct>::getMediaFrequencyTileIndex(const ReleaseHelper *releaseHelper, uint32_t &tileIndex) const {
757+
if (releaseHelper) {
758+
return releaseHelper->getMediaFrequencyTileIndex(tileIndex);
759+
}
760+
return false;
761+
}
762+
755763
template <PRODUCT_FAMILY gfxProduct>
756764
bool ProductHelperHw<gfxProduct>::is48bResourceNeededForRayTracing() const {
757765
return true;

shared/source/os_interface/product_helper_hw.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ class ProductHelperHw : public ProductHelper {
160160
bool disableL3CacheForDebug(const HardwareInfo &hwInfo) const override;
161161
bool isCachingOnCpuAvailable() const override;
162162
bool isSkippingStatefulInformationRequired(const KernelDescriptor &kernelDescriptor) const override;
163+
bool getMediaFrequencyTileIndex(const ReleaseHelper *releaseHelper, uint32_t &tileIndex) const override;
163164

164165
~ProductHelperHw() override = default;
165166

0 commit comments

Comments
 (0)