Skip to content

Commit 2f15ca0

Browse files
pwilmaCompute-Runtime-Automation
authored andcommitted
Add AUB registry key for additional MMIO registers list
Change-Id: Ib478e91d8df21c48f83bfa97a4ea72c41c2f065d Signed-off-by: Pawel Wilma <pawel.wilma@intel.com>
1 parent 469fe40 commit 2f15ca0

File tree

6 files changed

+123
-16
lines changed

6 files changed

+123
-16
lines changed

runtime/command_stream/command_stream_receiver_simulated_common_hw.h

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

88
#pragma once
99
#include "runtime/command_stream/command_stream_receiver_hw.h"
10+
#include "runtime/gen_common/aub_mapper.h"
1011
#include "runtime/memory_manager/memory_banks.h"
1112
#include "runtime/memory_manager/physical_address_allocator.h"
1213

@@ -30,6 +31,7 @@ class CommandStreamReceiverSimulatedCommonHw : public CommandStreamReceiverHw<Gf
3031
AubMemDump::AubStream *stream;
3132

3233
protected:
34+
MMIOList splitMMIORegisters(const std::string &registers, char delimiter);
3335
PhysicalAddressAllocator *createPhysicalAddressAllocator();
3436
};
3537
} // namespace OCLRT

runtime/command_stream/command_stream_receiver_simulated_common_hw.inl

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,50 @@ void CommandStreamReceiverSimulatedCommonHw<GfxFamily>::initGlobalMMIO() {
1818
}
1919
}
2020

21+
template <typename GfxFamily>
22+
MMIOList CommandStreamReceiverSimulatedCommonHw<GfxFamily>::splitMMIORegisters(const std::string &registers, char delimiter) {
23+
MMIOList result;
24+
bool firstElementInPair = false;
25+
std::string token;
26+
uint32_t registerOffset = 0;
27+
uint32_t registerValue = 0;
28+
std::istringstream stream("");
29+
30+
for (std::string::const_iterator i = registers.begin();; i++) {
31+
if (i == registers.end() || *i == delimiter) {
32+
if (token.size() > 0) {
33+
stream.str(token);
34+
stream.clear();
35+
firstElementInPair = !firstElementInPair;
36+
stream >> std::hex >> (firstElementInPair ? registerOffset : registerValue);
37+
if (stream.fail()) {
38+
result.clear();
39+
break;
40+
}
41+
token.clear();
42+
if (!firstElementInPair) {
43+
result.push_back(std::pair<uint32_t, uint32_t>(registerOffset, registerValue));
44+
registerValue = 0;
45+
registerOffset = 0;
46+
}
47+
}
48+
if (i == registers.end()) {
49+
break;
50+
}
51+
} else {
52+
token.push_back(*i);
53+
}
54+
}
55+
return result;
56+
}
57+
2158
template <typename GfxFamily>
2259
void CommandStreamReceiverSimulatedCommonHw<GfxFamily>::initAdditionalMMIO() {
23-
auto newOffset = static_cast<uint32_t>(DebugManager.flags.AubDumpAddMmioRegister.get());
24-
if (newOffset > 0) {
25-
auto value = static_cast<uint32_t>(DebugManager.flags.AubDumpAddMmioRegisterValue.get());
26-
stream->writeMMIO(newOffset, value);
60+
if (DebugManager.flags.AubDumpAddMmioRegistersList.get() != "unk") {
61+
auto mmioList = splitMMIORegisters(DebugManager.flags.AubDumpAddMmioRegistersList.get(), ';');
62+
for (auto &mmioPair : mmioList) {
63+
stream->writeMMIO(mmioPair.first, mmioPair.second);
64+
}
2765
}
2866
}
2967

runtime/os_interface/debug_variables_base.inl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, AUBDumpFilterKernelEndIdx, -1, "End index of ker
2121
DECLARE_DEBUG_VARIABLE(int32_t, AUBDumpToggleCaptureOnOff, 0, "Toggle AUB capture on/off")
2222
DECLARE_DEBUG_VARIABLE(int32_t, AubDumpOverrideMmioRegister, 0, "Override mmio offset from list with new value from AubDumpOverrideMmioRegisterValue")
2323
DECLARE_DEBUG_VARIABLE(int32_t, AubDumpOverrideMmioRegisterValue, 0, "Value to override mmio offset from AubDumpOverrideMmioRegister")
24-
DECLARE_DEBUG_VARIABLE(int32_t, AubDumpAddMmioRegister, 0, "Program mmio offset that is not on default mmio list wtih value AubDumpAddMmioRegisterValue")
25-
DECLARE_DEBUG_VARIABLE(int32_t, AubDumpAddMmioRegisterValue, 0, "Value to add new mmio offset from AubDumpAddMmioRegister")
24+
DECLARE_DEBUG_VARIABLE(std::string, AubDumpAddMmioRegistersList, std::string("unk"), "Semicolon separated sequence of additional MMIO registers offset;values pairs i.e. 0x111;0x123;0x222;0x456")
2625
DECLARE_DEBUG_VARIABLE(int32_t, SetCommandStreamReceiver, 0, "Set command stream receiver to: 0 - HW, 1 - AUB, 2 - TBX, 3 - HW & AUB, 4 - TBX & AUB")
2726
DECLARE_DEBUG_VARIABLE(int32_t, TbxPort, 4321, "TCP-IP port of TBX server")
2827
DECLARE_DEBUG_VARIABLE(bool, FlattenBatchBufferForAUBDump, false, "Dump multi-level batch buffers to AUB as single, flat batch buffer")

unit_tests/command_stream/aub_command_stream_receiver_2_tests.cpp

Lines changed: 75 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenEngineI
714714

715715
HWTEST_F(AubCommandStreamReceiverTests, givenAddMmioKeySetToZeroWhenInitAdditionalMmioCalledThenDoNotWriteMmio) {
716716
DebugManagerStateRestore stateRestore;
717-
DebugManager.flags.AubDumpAddMmioRegister.set(0);
717+
DebugManager.flags.AubDumpAddMmioRegistersList.set("");
718718

719719
auto aubCsr = std::make_unique<MockAubCsrToTestDumpContext<FamilyType>>(**platformDevices, "", true, executionEnvironment);
720720
EXPECT_NE(nullptr, aubCsr);
@@ -726,14 +726,12 @@ HWTEST_F(AubCommandStreamReceiverTests, givenAddMmioKeySetToZeroWhenInitAddition
726726
EXPECT_EQ(0u, stream->mmioList.size());
727727
}
728728

729-
HWTEST_F(AubCommandStreamReceiverTests, givenAddMmioKeySetToNonZeroWhenInitAdditionalMmioCalledThenWriteGivenMmio) {
730-
uint32_t offset = 0xdead;
731-
uint32_t value = 0xbeef;
732-
MMIOPair mmioPair(offset, value);
729+
HWTEST_F(AubCommandStreamReceiverTests, givenAddMmioRegistersListSetWhenInitAdditionalMmioCalledThenWriteGivenMmio) {
730+
std::string registers("0xdead;0xbeef");
731+
MMIOPair mmioPair(0xdead, 0xbeef);
733732

734733
DebugManagerStateRestore stateRestore;
735-
DebugManager.flags.AubDumpAddMmioRegister.set(offset);
736-
DebugManager.flags.AubDumpAddMmioRegisterValue.set(value);
734+
DebugManager.flags.AubDumpAddMmioRegistersList.set(registers);
737735

738736
auto aubCsr = std::make_unique<MockAubCsrToTestDumpContext<FamilyType>>(**platformDevices, "", true, executionEnvironment);
739737
EXPECT_NE(nullptr, aubCsr);
@@ -746,6 +744,76 @@ HWTEST_F(AubCommandStreamReceiverTests, givenAddMmioKeySetToNonZeroWhenInitAddit
746744
EXPECT_TRUE(stream->isOnMmioList(mmioPair));
747745
};
748746

747+
HWTEST_F(AubCommandStreamReceiverTests, givenLongSequenceOfAddMmioRegistersListSetWhenInitAdditionalMmioCalledThenWriteGivenMmio) {
748+
std::string registers("1;1;2;2;3;3");
749+
750+
DebugManagerStateRestore stateRestore;
751+
DebugManager.flags.AubDumpAddMmioRegistersList.set(registers);
752+
753+
auto aubCsr = std::make_unique<MockAubCsrToTestDumpContext<FamilyType>>(**platformDevices, "", true, executionEnvironment);
754+
EXPECT_NE(nullptr, aubCsr);
755+
756+
auto stream = std::make_unique<MockAubFileStreamMockMmioWrite>();
757+
aubCsr->stream = stream.get();
758+
EXPECT_EQ(0u, stream->mmioList.size());
759+
aubCsr->initAdditionalMMIO();
760+
EXPECT_EQ(3u, stream->mmioList.size());
761+
}
762+
763+
HWTEST_F(AubCommandStreamReceiverTests, givenSequenceWithIncompletePairOfAddMmioRegistersListSetWhenInitAdditionalMmioCalledThenWriteGivenMmio) {
764+
std::string registers("0x1;0x1;0x2");
765+
MMIOPair mmioPair0(0x1, 0x1);
766+
MMIOPair mmioPair1(0x2, 0x2);
767+
768+
DebugManagerStateRestore stateRestore;
769+
DebugManager.flags.AubDumpAddMmioRegistersList.set(registers);
770+
771+
auto aubCsr = std::make_unique<MockAubCsrToTestDumpContext<FamilyType>>(**platformDevices, "", true, executionEnvironment);
772+
EXPECT_NE(nullptr, aubCsr);
773+
774+
auto stream = std::make_unique<MockAubFileStreamMockMmioWrite>();
775+
aubCsr->stream = stream.get();
776+
EXPECT_EQ(0u, stream->mmioList.size());
777+
aubCsr->initAdditionalMMIO();
778+
EXPECT_EQ(1u, stream->mmioList.size());
779+
EXPECT_TRUE(stream->isOnMmioList(mmioPair0));
780+
EXPECT_FALSE(stream->isOnMmioList(mmioPair1));
781+
}
782+
783+
HWTEST_F(AubCommandStreamReceiverTests, givenAddMmioRegistersListSetWithSemicolonAtTheEndWhenInitAdditionalMmioCalledThenWriteGivenMmio) {
784+
std::string registers("0xdead;0xbeef;");
785+
MMIOPair mmioPair(0xdead, 0xbeef);
786+
787+
DebugManagerStateRestore stateRestore;
788+
DebugManager.flags.AubDumpAddMmioRegistersList.set(registers);
789+
790+
auto aubCsr = std::make_unique<MockAubCsrToTestDumpContext<FamilyType>>(**platformDevices, "", true, executionEnvironment);
791+
EXPECT_NE(nullptr, aubCsr);
792+
793+
auto stream = std::make_unique<MockAubFileStreamMockMmioWrite>();
794+
aubCsr->stream = stream.get();
795+
EXPECT_EQ(0u, stream->mmioList.size());
796+
aubCsr->initAdditionalMMIO();
797+
EXPECT_EQ(1u, stream->mmioList.size());
798+
EXPECT_TRUE(stream->isOnMmioList(mmioPair));
799+
}
800+
801+
HWTEST_F(AubCommandStreamReceiverTests, givenAddMmioRegistersListSetWithInvalidValueWhenInitAdditionalMmioCalledThenMmioIsNotWritten) {
802+
std::string registers("0xdead;invalid");
803+
804+
DebugManagerStateRestore stateRestore;
805+
DebugManager.flags.AubDumpAddMmioRegistersList.set(registers);
806+
807+
auto aubCsr = std::make_unique<MockAubCsrToTestDumpContext<FamilyType>>(**platformDevices, "", true, executionEnvironment);
808+
EXPECT_NE(nullptr, aubCsr);
809+
810+
auto stream = std::make_unique<MockAubFileStreamMockMmioWrite>();
811+
aubCsr->stream = stream.get();
812+
EXPECT_EQ(0u, stream->mmioList.size());
813+
aubCsr->initAdditionalMMIO();
814+
EXPECT_EQ(0u, stream->mmioList.size());
815+
}
816+
749817
HWTEST_F(AubCommandStreamReceiverTests, givenAubCsrWhenAskedForMemoryExpectationThenPassValidCompareOperationType) {
750818
class MyMockAubCsr : public AUBCommandStreamReceiverHw<FamilyType> {
751819
public:

unit_tests/memory_leak_listener.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "gtest/gtest.h"
1010

1111
namespace OCLRT {
12+
1213
// capture allocations call stacks to print them during memory leak in ULTs
1314
constexpr bool captureCallStacks = false;
1415

unit_tests/test_files/igdrcl.config

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,5 @@ EnableLocalMemory = false
9494
UseAubStream = false
9595
AubDumpOverrideMmioRegister = 0
9696
AubDumpOverrideMmioRegisterValue = 0
97-
AubDumpAddMmioRegister = 0
98-
AubDumpAddMmioRegisterValue = 0
99-
PowerSavingMode = 0
97+
PowerSavingMode = 0
98+
AubDumpAddMmioRegistersList = unk

0 commit comments

Comments
 (0)