mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-18 22:08:53 +08:00
Do not decanonize SBA addresses when tracking
- use cannonized addresses for debugger Resolves: NEO-6997 Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
ddd8a08fac
commit
fb40e8d1a6
@@ -39,7 +39,7 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdS
|
||||
programSbaTrackingCommandsSingleAddressSpace(cmdStream, sba);
|
||||
} else {
|
||||
if (sba.GeneralStateBaseAddress) {
|
||||
auto generalStateBaseAddress = gmmHelper->decanonize(sba.GeneralStateBaseAddress);
|
||||
auto generalStateBaseAddress = sba.GeneralStateBaseAddress;
|
||||
NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm(cmdStream,
|
||||
gpuAddress + offsetof(SbaTrackedAddresses, GeneralStateBaseAddress),
|
||||
static_cast<uint32_t>(generalStateBaseAddress & 0x0000FFFFFFFFULL),
|
||||
@@ -48,7 +48,7 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdS
|
||||
false);
|
||||
}
|
||||
if (sba.SurfaceStateBaseAddress) {
|
||||
auto surfaceStateBaseAddress = gmmHelper->decanonize(sba.SurfaceStateBaseAddress);
|
||||
auto surfaceStateBaseAddress = sba.SurfaceStateBaseAddress;
|
||||
NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm(cmdStream,
|
||||
gpuAddress + offsetof(SbaTrackedAddresses, SurfaceStateBaseAddress),
|
||||
static_cast<uint32_t>(surfaceStateBaseAddress & 0x0000FFFFFFFFULL),
|
||||
@@ -57,7 +57,7 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdS
|
||||
false);
|
||||
}
|
||||
if (sba.DynamicStateBaseAddress) {
|
||||
auto dynamicStateBaseAddress = gmmHelper->decanonize(sba.DynamicStateBaseAddress);
|
||||
auto dynamicStateBaseAddress = sba.DynamicStateBaseAddress;
|
||||
NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm(cmdStream,
|
||||
gpuAddress + offsetof(SbaTrackedAddresses, DynamicStateBaseAddress),
|
||||
static_cast<uint32_t>(dynamicStateBaseAddress & 0x0000FFFFFFFFULL),
|
||||
@@ -66,7 +66,7 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdS
|
||||
false);
|
||||
}
|
||||
if (sba.IndirectObjectBaseAddress) {
|
||||
auto indirectObjectBaseAddress = gmmHelper->decanonize(sba.IndirectObjectBaseAddress);
|
||||
auto indirectObjectBaseAddress = sba.IndirectObjectBaseAddress;
|
||||
NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm(cmdStream,
|
||||
gpuAddress + offsetof(SbaTrackedAddresses, IndirectObjectBaseAddress),
|
||||
static_cast<uint32_t>(indirectObjectBaseAddress & 0x0000FFFFFFFFULL),
|
||||
@@ -75,7 +75,7 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdS
|
||||
false);
|
||||
}
|
||||
if (sba.InstructionBaseAddress) {
|
||||
auto instructionBaseAddress = gmmHelper->decanonize(sba.InstructionBaseAddress);
|
||||
auto instructionBaseAddress = sba.InstructionBaseAddress;
|
||||
NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm(cmdStream,
|
||||
gpuAddress + offsetof(SbaTrackedAddresses, InstructionBaseAddress),
|
||||
static_cast<uint32_t>(instructionBaseAddress & 0x0000FFFFFFFFULL),
|
||||
@@ -84,7 +84,7 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdS
|
||||
false);
|
||||
}
|
||||
if (sba.BindlessSurfaceStateBaseAddress) {
|
||||
auto bindlessSurfaceStateBaseAddress = gmmHelper->decanonize(sba.BindlessSurfaceStateBaseAddress);
|
||||
auto bindlessSurfaceStateBaseAddress = sba.BindlessSurfaceStateBaseAddress;
|
||||
NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm(cmdStream,
|
||||
gpuAddress + offsetof(SbaTrackedAddresses, BindlessSurfaceStateBaseAddress),
|
||||
static_cast<uint32_t>(bindlessSurfaceStateBaseAddress & 0x0000FFFFFFFFULL),
|
||||
|
||||
@@ -34,25 +34,24 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommandsSingleAddressSpace(NEO::
|
||||
UNRECOVERABLE_IF(!singleAddressSpaceSbaTracking);
|
||||
|
||||
std::vector<std::pair<size_t, uint64_t>> fieldOffsetAndValue;
|
||||
auto gmmHelper = device->getGmmHelper();
|
||||
|
||||
if (sba.GeneralStateBaseAddress) {
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, GeneralStateBaseAddress), gmmHelper->decanonize(sba.GeneralStateBaseAddress)});
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, GeneralStateBaseAddress), sba.GeneralStateBaseAddress});
|
||||
}
|
||||
if (sba.SurfaceStateBaseAddress) {
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, SurfaceStateBaseAddress), gmmHelper->decanonize(sba.SurfaceStateBaseAddress)});
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, SurfaceStateBaseAddress), sba.SurfaceStateBaseAddress});
|
||||
}
|
||||
if (sba.DynamicStateBaseAddress) {
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, DynamicStateBaseAddress), gmmHelper->decanonize(sba.DynamicStateBaseAddress)});
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, DynamicStateBaseAddress), sba.DynamicStateBaseAddress});
|
||||
}
|
||||
if (sba.IndirectObjectBaseAddress) {
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, IndirectObjectBaseAddress), gmmHelper->decanonize(sba.IndirectObjectBaseAddress)});
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, IndirectObjectBaseAddress), sba.IndirectObjectBaseAddress});
|
||||
}
|
||||
if (sba.InstructionBaseAddress) {
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, InstructionBaseAddress), gmmHelper->decanonize(sba.InstructionBaseAddress)});
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, InstructionBaseAddress), sba.InstructionBaseAddress});
|
||||
}
|
||||
if (sba.BindlessSurfaceStateBaseAddress) {
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, BindlessSurfaceStateBaseAddress), gmmHelper->decanonize(sba.BindlessSurfaceStateBaseAddress)});
|
||||
fieldOffsetAndValue.push_back({offsetof(SbaTrackedAddresses, BindlessSurfaceStateBaseAddress), sba.BindlessSurfaceStateBaseAddress});
|
||||
}
|
||||
const auto cmdStreamGpuBase = cmdStream.getGpuBase();
|
||||
const auto cmdStreamCpuBase = reinterpret_cast<uint64_t>(cmdStream.getCpuBase());
|
||||
|
||||
@@ -126,9 +126,8 @@ HWTEST2_F(DebuggerSingleAddressSpaceAub, GivenSingleAddressSpaceWhenCmdListIsExe
|
||||
expectMMIO<FamilyType>(CS_GPR_R15 + 4, high);
|
||||
|
||||
auto instructionHeapBaseAddress = neoDevice->getMemoryManager()->getInternalHeapBaseAddress(device->getRootDeviceIndex(), neoDevice->getMemoryManager()->isLocalMemoryUsedForIsa(neoDevice->getRootDeviceIndex()));
|
||||
auto gmmHelper = neoDevice->getGmmHelper();
|
||||
auto dynamicStateBaseAddress = gmmHelper->decanonize(commandList->commandContainer.getIndirectHeap(HeapType::DYNAMIC_STATE)->getGraphicsAllocation()->getGpuAddress());
|
||||
auto surfaceStateBaseAddress = gmmHelper->decanonize(commandList->commandContainer.getIndirectHeap(HeapType::SURFACE_STATE)->getGraphicsAllocation()->getGpuAddress());
|
||||
auto dynamicStateBaseAddress = commandList->commandContainer.getIndirectHeap(HeapType::DYNAMIC_STATE)->getGraphicsAllocation()->getGpuAddress();
|
||||
auto surfaceStateBaseAddress = commandList->commandContainer.getIndirectHeap(HeapType::SURFACE_STATE)->getGraphicsAllocation()->getGpuAddress();
|
||||
|
||||
expectMemory<FamilyType>(reinterpret_cast<void *>(sbaAddress + offsetof(SbaTrackedAddresses, SurfaceStateBaseAddress)),
|
||||
&surfaceStateBaseAddress, sizeof(surfaceStateBaseAddress));
|
||||
|
||||
@@ -426,10 +426,8 @@ HWTEST_F(L0DebuggerSimpleTest, givenNonZeroGpuVasWhenProgrammingSbaTrackingThenC
|
||||
|
||||
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, DynamicStateBaseAddress);
|
||||
|
||||
auto gmmHelper = neoDevice->getGmmHelper();
|
||||
auto decanonizedAddress = gmmHelper->decanonize(dsba);
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(static_cast<uint32_t>(dsba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(dsba >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
|
||||
EXPECT_TRUE(cmdSdi->getStoreQword());
|
||||
|
||||
@@ -495,10 +493,8 @@ HWTEST_F(L0DebuggerSimpleTest, givenCanonizedGpuVasWhenProgrammingSbaTrackingThe
|
||||
ASSERT_NE(cmdList.end(), sdiItor);
|
||||
auto cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
|
||||
|
||||
auto gmmHelper = neoDevice->getGmmHelper();
|
||||
auto decanonizedAddress = gmmHelper->decanonize(gsba);
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(static_cast<uint32_t>(gsba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(gsba >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
|
||||
EXPECT_TRUE(cmdSdi->getStoreQword());
|
||||
|
||||
@@ -507,9 +503,8 @@ HWTEST_F(L0DebuggerSimpleTest, givenCanonizedGpuVasWhenProgrammingSbaTrackingThe
|
||||
|
||||
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, SurfaceStateBaseAddress);
|
||||
|
||||
decanonizedAddress = gmmHelper->decanonize(ssba);
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(static_cast<uint32_t>(ssba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(ssba >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
|
||||
EXPECT_TRUE(cmdSdi->getStoreQword());
|
||||
|
||||
@@ -517,9 +512,8 @@ HWTEST_F(L0DebuggerSimpleTest, givenCanonizedGpuVasWhenProgrammingSbaTrackingThe
|
||||
cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
|
||||
|
||||
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, DynamicStateBaseAddress);
|
||||
decanonizedAddress = gmmHelper->decanonize(dsba);
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(static_cast<uint32_t>(dsba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(dsba >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
|
||||
EXPECT_TRUE(cmdSdi->getStoreQword());
|
||||
|
||||
@@ -527,9 +521,8 @@ HWTEST_F(L0DebuggerSimpleTest, givenCanonizedGpuVasWhenProgrammingSbaTrackingThe
|
||||
cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
|
||||
|
||||
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, IndirectObjectBaseAddress);
|
||||
decanonizedAddress = gmmHelper->decanonize(ioba);
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(static_cast<uint32_t>(ioba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(ioba >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
|
||||
EXPECT_TRUE(cmdSdi->getStoreQword());
|
||||
|
||||
@@ -537,9 +530,8 @@ HWTEST_F(L0DebuggerSimpleTest, givenCanonizedGpuVasWhenProgrammingSbaTrackingThe
|
||||
cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
|
||||
|
||||
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, InstructionBaseAddress);
|
||||
decanonizedAddress = gmmHelper->decanonize(iba);
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(static_cast<uint32_t>(iba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(iba >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
|
||||
EXPECT_TRUE(cmdSdi->getStoreQword());
|
||||
|
||||
@@ -547,9 +539,8 @@ HWTEST_F(L0DebuggerSimpleTest, givenCanonizedGpuVasWhenProgrammingSbaTrackingThe
|
||||
cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
|
||||
|
||||
expectedGpuVa = debugger->sbaTrackingGpuVa.address + offsetof(SbaTrackedAddresses, BindlessSurfaceStateBaseAddress);
|
||||
decanonizedAddress = gmmHelper->decanonize(ssba);
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(decanonizedAddress >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(static_cast<uint32_t>(ssba & 0x0000FFFFFFFFULL), cmdSdi->getDataDword0());
|
||||
EXPECT_EQ(static_cast<uint32_t>(ssba >> 32), cmdSdi->getDataDword1());
|
||||
EXPECT_EQ(expectedGpuVa, cmdSdi->getAddress());
|
||||
EXPECT_TRUE(cmdSdi->getStoreQword());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user