Skip to content

Commit 6175a3e

Browse files
Debug flag to force stateless mocs encryption bit
Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
1 parent 878d646 commit 6175a3e

File tree

8 files changed

+44
-6
lines changed

8 files changed

+44
-6
lines changed

opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_1_tests.cpp

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandStreamReceiverFlushTaskTests, givenCsrInBatch
122122
mockCsr.getCS(1024u);
123123
auto &csrCommandStream = mockCsr.commandStream;
124124

125-
//we do level change that will emit PPC, fill all the space so only BB end fits.
125+
// we do level change that will emit PPC, fill all the space so only BB end fits.
126126
taskLevel++;
127127
auto ppcSize = MemorySynchronizationCommands<FamilyType>::getSizeForSingleBarrier(false);
128128
auto fillSize = MemoryConstants::cacheLineSize - ppcSize - sizeof(typename FamilyType::MI_BATCH_BUFFER_END);
@@ -516,7 +516,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, whenSamplerCacheFlushAfterThenSend
516516

517517
HWTEST_F(CommandStreamReceiverFlushTaskTests, GivenStaleCqWhenFlushingTaskThenCompletionStampIsValid) {
518518
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
519-
//simulate our CQ is stale for 10 TL's
519+
// simulate our CQ is stale for 10 TL's
520520
commandStreamReceiver.taskLevel = taskLevel + 10;
521521

522522
auto completionStamp = flushTask(commandStreamReceiver);
@@ -574,6 +574,25 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandStreamReceiverFlushTaskTests, WhenFlushingTas
574574
EXPECT_EQ(stateHeapMocs, cmd.getInstructionMemoryObjectControlState());
575575
}
576576

577+
HWTEST_F(CommandStreamReceiverFlushTaskTests, givenDebugVariableSetWhenProgrammingSbaThenSetStatelessMocsEncryptionBit) {
578+
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
579+
580+
DebugManagerStateRestore restorer;
581+
DebugManager.flags.ForceStatelessMocsEncryptionBit.set(1);
582+
583+
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
584+
flushTask(commandStreamReceiver);
585+
586+
auto &commandStreamCSR = commandStreamReceiver.commandStream;
587+
parseCommands<FamilyType>(commandStreamCSR, 0);
588+
HardwareParse::findHardwareCommands<FamilyType>();
589+
590+
ASSERT_NE(nullptr, cmdStateBaseAddress);
591+
auto cmd = reinterpret_cast<STATE_BASE_ADDRESS *>(cmdStateBaseAddress);
592+
593+
EXPECT_EQ(1u, cmd->getStatelessDataPortAccessMemoryObjectControlState() & 1);
594+
}
595+
577596
HWTEST_F(CommandStreamReceiverFlushTaskTests, givenStateBaseAddressWhenItIsRequiredThenThereIsPipeControlPriorToItWithTextureCacheFlush) {
578597
typedef typename FamilyType::STATE_BASE_ADDRESS STATE_BASE_ADDRESS;
579598
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
@@ -1072,7 +1091,7 @@ HWTEST_F(CommandStreamReceiverCQFlushTaskTests, WhenGettingCsThenReturnCsWithEno
10721091
auto currentUsed = commandStream.getUsed();
10731092
EXPECT_EQ(0u, currentUsed % MemoryConstants::cacheLineSize);
10741093

1075-
//depending on the size of commands we may need whole additional cacheline for alignment
1094+
// depending on the size of commands we may need whole additional cacheline for alignment
10761095
if (currentUsed != expectedSize) {
10771096
EXPECT_EQ(expectedSize - MemoryConstants::cacheLineSize, currentUsed);
10781097
} else {

shared/source/debug_settings/debug_variables_base.inl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, OverrideCmdListCmdBufferSizeInKb, -1, "-1: defau
219219
DECLARE_DEBUG_VARIABLE(int32_t, OverrideL1CachePolicyInSurfaceStateAndStateless, -1, "-1: default, >=0 : following policy will be programmed in render surface state (for regular buffers) and stateless L1 caching")
220220
DECLARE_DEBUG_VARIABLE(int32_t, PlaformSupportEvictIfNecessaryFlag, -1, "-1: default - platform specific, 0: disable, 1: enable")
221221
DECLARE_DEBUG_VARIABLE(int32_t, ForceEvictOnlyIfNecessaryFlag, -1, "-1: default - driver selects when to use, 0: force never use this flag, 1: force always use this flag")
222+
DECLARE_DEBUG_VARIABLE(int32_t, ForceStatelessMocsEncryptionBit, -1, "-1: default - 1: set encryption bit")
222223

223224
/*LOGGING FLAGS*/
224225
DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level")

shared/source/gen8/state_base_address_gen8.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ void StateBaseAddressHelper<Gen8Family>::programStateBaseAddress(
6464

6565
args.statelessMocsIndex = args.statelessMocsIndex << 1;
6666

67+
GmmHelper::applyMocsEncryptionBit(args.statelessMocsIndex);
68+
6769
args.stateBaseAddressCmd->setStatelessDataPortAccessMemoryObjectControlState(args.statelessMocsIndex);
6870

6971
appendStateBaseAddressParameters(args, true);

shared/source/gmm_helper/gmm_helper.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ uint32_t GmmHelper::getMOCS(uint32_t type) const {
3838
return static_cast<uint32_t>(mocs.DwordValue);
3939
}
4040

41+
void GmmHelper::applyMocsEncryptionBit(uint32_t &index) {
42+
if (DebugManager.flags.ForceStatelessMocsEncryptionBit.get() == 1) {
43+
index |= 1;
44+
}
45+
}
46+
4147
GmmHelper::GmmHelper(OSInterface *osInterface, const HardwareInfo *pHwInfo) : hwInfo(pHwInfo) {
4248
auto hwInfoAddressWidth = Math::log2(hwInfo->capabilityTable.gpuAddressSpace + 1);
4349
addressWidth = std::max(hwInfoAddressWidth, 48u);

shared/source/gmm_helper/gmm_helper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class GmmHelper {
2222

2323
const HardwareInfo *getHardwareInfo();
2424
uint32_t getMOCS(uint32_t type) const;
25+
static void applyMocsEncryptionBit(uint32_t &index);
2526
void forceAllResourcesUncached() { allResourcesUncached = true; };
2627

2728
static constexpr uint64_t maxPossiblePitch = (1ull << 31);

shared/source/helpers/state_base_address_base.inl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
9393

9494
args.statelessMocsIndex = args.statelessMocsIndex << 1;
9595

96+
GmmHelper::applyMocsEncryptionBit(args.statelessMocsIndex);
97+
9698
args.stateBaseAddressCmd->setStatelessDataPortAccessMemoryObjectControlState(args.statelessMocsIndex);
9799

98100
appendStateBaseAddressParameters(args, overrideBindlessSurfaceStateBase);

shared/source/helpers/state_base_address_xehp_and_later.inl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,14 @@ void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
8686
setSbaStatelessCompressionParams<GfxFamily>(args.stateBaseAddressCmd, args.memoryCompressionState);
8787
}
8888

89-
if (args.stateBaseAddressCmd->getStatelessDataPortAccessMemoryObjectControlState() == args.gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER) && DebugManager.flags.ForceL1Caching.get() != 0) {
90-
args.stateBaseAddressCmd->setStatelessDataPortAccessMemoryObjectControlState(args.gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CONST));
89+
bool l3MocsEnabled = (args.stateBaseAddressCmd->getStatelessDataPortAccessMemoryObjectControlState() >> 1) == (args.gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER) >> 1);
90+
bool constMocsAllowed = (l3MocsEnabled && (DebugManager.flags.ForceL1Caching.get() != 0));
91+
92+
if (constMocsAllowed) {
93+
auto constMocsIndex = args.gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CONST);
94+
GmmHelper::applyMocsEncryptionBit(constMocsIndex);
95+
96+
args.stateBaseAddressCmd->setStatelessDataPortAccessMemoryObjectControlState(constMocsIndex);
9197
}
9298

9399
appendExtraCacheSettings(args);

shared/test/common/test_files/igdrcl.config

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,4 +457,5 @@ ForceCsrLockInBcsEnqueueOnlyForGpgpuSubmission = -1
457457
ExperimentalEnableTileAttach = 0
458458
DirectSubmissionDisablePrefetcher = -1
459459
ForceDefaultGrfCompilationMode = 0
460-
ForceLargeGrfCompilationMode = 0
460+
ForceLargeGrfCompilationMode = 0
461+
ForceStatelessMocsEncryptionBit = -1

0 commit comments

Comments
 (0)