Skip to content

Commit f6aafdb

Browse files
DebuggerL0: Track all addresses from SBA
Signed-off-by: Mateusz Hoppe <[email protected]>
1 parent 4cf3bb6 commit f6aafdb

File tree

4 files changed

+92
-9
lines changed

4 files changed

+92
-9
lines changed

level_zero/core/source/cmdqueue/cmdqueue_hw_base.inl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdSize() {
103103
size_t size = sizeof(STATE_BASE_ADDRESS) + sizeof(PIPE_CONTROL) + NEO::EncodeWA<GfxFamily>::getAdditionalPipelineSelectSize(*device->getNEODevice());
104104

105105
if (NEO::Debugger::isDebugEnabled(internalUsage) && device->getL0Debugger() != nullptr) {
106-
size += device->getL0Debugger()->getSbaTrackingCommandsSize(1);
106+
const size_t trackedAddressesCount = 6;
107+
size += device->getL0Debugger()->getSbaTrackingCommandsSize(trackedAddressesCount);
107108
}
108109
return size;
109110
}

level_zero/core/source/debugger/debugger_l0.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020 Intel Corporation
2+
* Copyright (C) 2020-2021 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -79,9 +79,12 @@ void DebuggerL0::printTrackedAddresses(uint32_t contextId) {
7979
PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stdout,
8080
"Debugger: SBA ssh = %" SCNx64
8181
" gsba = %" SCNx64
82+
" dsba = %" SCNx64
83+
" ioba = %" SCNx64
84+
" iba = %" SCNx64
8285
" bsurfsba = %" SCNx64 "\n",
83-
sba->SurfaceStateBaseAddress, sba->GeneralStateBaseAddress,
84-
sba->BindlessSurfaceStateBaseAddress);
86+
sba->SurfaceStateBaseAddress, sba->GeneralStateBaseAddress, sba->DynamicStateBaseAddress,
87+
sba->IndirectObjectBaseAddress, sba->InstructionBaseAddress, sba->BindlessSurfaceStateBaseAddress);
8588
}
8689

8790
DebuggerL0 ::~DebuggerL0() {

level_zero/core/source/debugger/debugger_l0.inl

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020 Intel Corporation
2+
* Copyright (C) 2020-2021 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -28,9 +28,12 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdS
2828
PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stdout,
2929
"Debugger: SBA stored ssh = %" SCNx64
3030
" gsba = %" SCNx64
31-
" bsurfsba = %" SCNx64 "\n",
32-
sba.SurfaceStateBaseAddress, sba.GeneralStateBaseAddress,
33-
sba.BindlessSurfaceStateBaseAddress);
31+
" dsba = %" SCNx64
32+
" ioba = %" SCNx64
33+
" iba = %" SCNx64
34+
" bsurfsba = %" SCNx64 "\n",
35+
sba.SurfaceStateBaseAddress, sba.GeneralStateBaseAddress, sba.DynamicStateBaseAddress,
36+
sba.IndirectObjectBaseAddress, sba.InstructionBaseAddress, sba.BindlessSurfaceStateBaseAddress);
3437

3538
if (sba.GeneralStateBaseAddress) {
3639
MI_STORE_DATA_IMM storeDataImmediate = GfxFamily::cmdInitStoreDataImm;
@@ -54,6 +57,39 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdS
5457
auto storeDataImmediateSpace = cmdStream.getSpaceForCmd<MI_STORE_DATA_IMM>();
5558
*storeDataImmediateSpace = storeDataImmediate;
5659
}
60+
if (sba.DynamicStateBaseAddress) {
61+
MI_STORE_DATA_IMM storeDataImmediate = GfxFamily::cmdInitStoreDataImm;
62+
storeDataImmediate.setAddress(gpuAddress + offsetof(SbaTrackedAddresses, DynamicStateBaseAddress));
63+
storeDataImmediate.setStoreQword(true);
64+
storeDataImmediate.setDwordLength(MI_STORE_DATA_IMM::DWORD_LENGTH::DWORD_LENGTH_STORE_QWORD);
65+
storeDataImmediate.setDataDword0(static_cast<uint32_t>(sba.DynamicStateBaseAddress & 0x0000FFFFFFFFULL));
66+
storeDataImmediate.setDataDword1(static_cast<uint32_t>(sba.DynamicStateBaseAddress >> 32));
67+
68+
auto storeDataImmediateSpace = cmdStream.getSpaceForCmd<MI_STORE_DATA_IMM>();
69+
*storeDataImmediateSpace = storeDataImmediate;
70+
}
71+
if (sba.IndirectObjectBaseAddress) {
72+
MI_STORE_DATA_IMM storeDataImmediate = GfxFamily::cmdInitStoreDataImm;
73+
storeDataImmediate.setAddress(gpuAddress + offsetof(SbaTrackedAddresses, IndirectObjectBaseAddress));
74+
storeDataImmediate.setStoreQword(true);
75+
storeDataImmediate.setDwordLength(MI_STORE_DATA_IMM::DWORD_LENGTH::DWORD_LENGTH_STORE_QWORD);
76+
storeDataImmediate.setDataDword0(static_cast<uint32_t>(sba.IndirectObjectBaseAddress & 0x0000FFFFFFFFULL));
77+
storeDataImmediate.setDataDword1(static_cast<uint32_t>(sba.IndirectObjectBaseAddress >> 32));
78+
79+
auto storeDataImmediateSpace = cmdStream.getSpaceForCmd<MI_STORE_DATA_IMM>();
80+
*storeDataImmediateSpace = storeDataImmediate;
81+
}
82+
if (sba.InstructionBaseAddress) {
83+
MI_STORE_DATA_IMM storeDataImmediate = GfxFamily::cmdInitStoreDataImm;
84+
storeDataImmediate.setAddress(gpuAddress + offsetof(SbaTrackedAddresses, InstructionBaseAddress));
85+
storeDataImmediate.setStoreQword(true);
86+
storeDataImmediate.setDwordLength(MI_STORE_DATA_IMM::DWORD_LENGTH::DWORD_LENGTH_STORE_QWORD);
87+
storeDataImmediate.setDataDword0(static_cast<uint32_t>(sba.InstructionBaseAddress & 0x0000FFFFFFFFULL));
88+
storeDataImmediate.setDataDword1(static_cast<uint32_t>(sba.InstructionBaseAddress >> 32));
89+
90+
auto storeDataImmediateSpace = cmdStream.getSpaceForCmd<MI_STORE_DATA_IMM>();
91+
*storeDataImmediateSpace = storeDataImmediate;
92+
}
5793
if (sba.BindlessSurfaceStateBaseAddress) {
5894
MI_STORE_DATA_IMM storeDataImmediate = GfxFamily::cmdInitStoreDataImm;
5995
storeDataImmediate.setAddress(gpuAddress + offsetof(SbaTrackedAddresses, BindlessSurfaceStateBaseAddress));

level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger.cpp

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,17 +517,24 @@ HWTEST_F(L0DebuggerSimpleTest, givenNonZeroGpuVasWhenProgrammingSbaTrackingThenC
517517
NEO::LinearStream cmdStream(buffer.begin(), buffer.size());
518518
uint64_t gsba = 0x60000;
519519
uint64_t ssba = 0x1234567000;
520+
uint64_t iba = 0xfff80000;
521+
uint64_t ioba = 0x8100000;
522+
uint64_t dsba = 0xffff0000aaaa0000;
520523

521524
NEO::Debugger::SbaAddresses sbaAddresses = {};
522525
sbaAddresses.GeneralStateBaseAddress = gsba;
523526
sbaAddresses.SurfaceStateBaseAddress = ssba;
527+
sbaAddresses.InstructionBaseAddress = iba;
528+
sbaAddresses.IndirectObjectBaseAddress = ioba;
529+
sbaAddresses.DynamicStateBaseAddress = dsba;
530+
sbaAddresses.BindlessSurfaceStateBaseAddress = ssba;
524531

525532
debugger->programSbaTrackingCommands(cmdStream, sbaAddresses);
526533

527534
GenCmdList cmdList;
528535
ASSERT_TRUE(FamilyType::PARSE::parseCommandBuffer(cmdList, cmdStream.getCpuBase(), cmdStream.getUsed()));
529536

530-
EXPECT_EQ(2 * sizeof(MI_STORE_DATA_IMM), cmdStream.getUsed());
537+
EXPECT_EQ(6 * sizeof(MI_STORE_DATA_IMM), cmdStream.getUsed());
531538

532539
auto sdiItor = find<MI_STORE_DATA_IMM *>(cmdList.begin(), cmdList.end());
533540
ASSERT_NE(cmdList.end(), sdiItor);
@@ -546,6 +553,42 @@ HWTEST_F(L0DebuggerSimpleTest, givenNonZeroGpuVasWhenProgrammingSbaTrackingThenC
546553
EXPECT_EQ(static_cast<uint32_t>(ssba >> 32), cmdSdi->getDataDword1());
547554
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
548555
EXPECT_TRUE(cmdSdi->getStoreQword());
556+
557+
sdiItor++;
558+
cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
559+
560+
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, DynamicStateBaseAddress);
561+
EXPECT_EQ(static_cast<uint32_t>(dsba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
562+
EXPECT_EQ(static_cast<uint32_t>(dsba >> 32), cmdSdi->getDataDword1());
563+
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
564+
EXPECT_TRUE(cmdSdi->getStoreQword());
565+
566+
sdiItor++;
567+
cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
568+
569+
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, IndirectObjectBaseAddress);
570+
EXPECT_EQ(static_cast<uint32_t>(ioba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
571+
EXPECT_EQ(static_cast<uint32_t>(ioba >> 32), cmdSdi->getDataDword1());
572+
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
573+
EXPECT_TRUE(cmdSdi->getStoreQword());
574+
575+
sdiItor++;
576+
cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
577+
578+
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, InstructionBaseAddress);
579+
EXPECT_EQ(static_cast<uint32_t>(iba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
580+
EXPECT_EQ(static_cast<uint32_t>(iba >> 32), cmdSdi->getDataDword1());
581+
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
582+
EXPECT_TRUE(cmdSdi->getStoreQword());
583+
584+
sdiItor++;
585+
cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
586+
587+
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, BindlessSurfaceStateBaseAddress);
588+
EXPECT_EQ(static_cast<uint32_t>(ssba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
589+
EXPECT_EQ(static_cast<uint32_t>(ssba >> 32), cmdSdi->getDataDword1());
590+
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
591+
EXPECT_TRUE(cmdSdi->getStoreQword());
549592
}
550593

551594
HWTEST_F(L0DebuggerSimpleTest, givenZeroGpuVasWhenProgrammingSbaTrackingThenStreamIsNotUsed) {

0 commit comments

Comments
 (0)