@@ -1320,8 +1320,10 @@ HWTEST_F(L0DebuggerSimpleTest, givenNonZeroGpuVasWhenProgrammingSbaTrackingThenC
13201320 cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
13211321
13221322 expectedGpuVa = debugger->sbaTrackingGpuVa .address + offsetof (SbaTrackedAddresses, DynamicStateBaseAddress);
1323- EXPECT_EQ (static_cast <uint32_t >(dsba & 0x0000FFFFFFFFULL ), cmdSdi->getDataDword0 ());
1324- EXPECT_EQ (static_cast <uint32_t >(dsba >> 32 ), cmdSdi->getDataDword1 ());
1323+
1324+ auto decanonizedAddress = GmmHelper::decanonize (dsba);
1325+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress & 0x0000FFFFFFFFULL ), cmdSdi->getDataDword0 ());
1326+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress >> 32 ), cmdSdi->getDataDword1 ());
13251327 EXPECT_EQ (expectedGpuVa, cmdSdi->getAddress ());
13261328 EXPECT_TRUE (cmdSdi->getStoreQword ());
13271329
@@ -1353,6 +1355,97 @@ HWTEST_F(L0DebuggerSimpleTest, givenNonZeroGpuVasWhenProgrammingSbaTrackingThenC
13531355 EXPECT_TRUE (cmdSdi->getStoreQword ());
13541356}
13551357
1358+ HWTEST_F (L0DebuggerSimpleTest, givenCanonizedGpuVasWhenProgrammingSbaTrackingThenNonCanonicalAddressesAreStored) {
1359+ using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM;
1360+ auto debugger = std::make_unique<MockDebuggerL0Hw<FamilyType>>(neoDevice);
1361+
1362+ debugger->sbaTrackingGpuVa .address = 0x45670000 ;
1363+ auto expectedGpuVa = debugger->sbaTrackingGpuVa .address + offsetof (SbaTrackedAddresses, GeneralStateBaseAddress);
1364+
1365+ StackVec<char , 4096 > buffer (4096 );
1366+ NEO::LinearStream cmdStream (buffer.begin (), buffer.size ());
1367+ uint64_t gsba = 0xffff800000060000 ;
1368+ uint64_t ssba = 0xffff801234567000 ;
1369+ uint64_t iba = 0xffff8000fff80000 ;
1370+ uint64_t ioba = 0xffff800008100000 ;
1371+ uint64_t dsba = 0xffff8000aaaa0000 ;
1372+
1373+ NEO::Debugger::SbaAddresses sbaAddresses = {};
1374+ sbaAddresses.GeneralStateBaseAddress = gsba;
1375+ sbaAddresses.SurfaceStateBaseAddress = ssba;
1376+ sbaAddresses.InstructionBaseAddress = iba;
1377+ sbaAddresses.IndirectObjectBaseAddress = ioba;
1378+ sbaAddresses.DynamicStateBaseAddress = dsba;
1379+ sbaAddresses.BindlessSurfaceStateBaseAddress = ssba;
1380+
1381+ debugger->programSbaTrackingCommands (cmdStream, sbaAddresses);
1382+
1383+ GenCmdList cmdList;
1384+ ASSERT_TRUE (FamilyType::PARSE::parseCommandBuffer (cmdList, cmdStream.getCpuBase (), cmdStream.getUsed ()));
1385+
1386+ EXPECT_EQ (6 * sizeof (MI_STORE_DATA_IMM), cmdStream.getUsed ());
1387+
1388+ auto sdiItor = find<MI_STORE_DATA_IMM *>(cmdList.begin (), cmdList.end ());
1389+ ASSERT_NE (cmdList.end (), sdiItor);
1390+ auto cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
1391+
1392+ auto decanonizedAddress = GmmHelper::decanonize (gsba);
1393+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress & 0x0000FFFFFFFFULL ), cmdSdi->getDataDword0 ());
1394+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress >> 32 ), cmdSdi->getDataDword1 ());
1395+ EXPECT_EQ (expectedGpuVa, cmdSdi->getAddress ());
1396+ EXPECT_TRUE (cmdSdi->getStoreQword ());
1397+
1398+ sdiItor++;
1399+ cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
1400+
1401+ expectedGpuVa = debugger->sbaTrackingGpuVa .address + offsetof (SbaTrackedAddresses, SurfaceStateBaseAddress);
1402+ decanonizedAddress = GmmHelper::decanonize (ssba);
1403+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress & 0x0000FFFFFFFFULL ), cmdSdi->getDataDword0 ());
1404+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress >> 32 ), cmdSdi->getDataDword1 ());
1405+ EXPECT_EQ (expectedGpuVa, cmdSdi->getAddress ());
1406+ EXPECT_TRUE (cmdSdi->getStoreQword ());
1407+
1408+ sdiItor++;
1409+ cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
1410+
1411+ expectedGpuVa = debugger->sbaTrackingGpuVa .address + offsetof (SbaTrackedAddresses, DynamicStateBaseAddress);
1412+ decanonizedAddress = GmmHelper::decanonize (dsba);
1413+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress & 0x0000FFFFFFFFULL ), cmdSdi->getDataDword0 ());
1414+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress >> 32 ), cmdSdi->getDataDword1 ());
1415+ EXPECT_EQ (expectedGpuVa, cmdSdi->getAddress ());
1416+ EXPECT_TRUE (cmdSdi->getStoreQword ());
1417+
1418+ sdiItor++;
1419+ cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
1420+
1421+ expectedGpuVa = debugger->sbaTrackingGpuVa .address + offsetof (SbaTrackedAddresses, IndirectObjectBaseAddress);
1422+ decanonizedAddress = GmmHelper::decanonize (ioba);
1423+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress & 0x0000FFFFFFFFULL ), cmdSdi->getDataDword0 ());
1424+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress >> 32 ), cmdSdi->getDataDword1 ());
1425+ EXPECT_EQ (expectedGpuVa, cmdSdi->getAddress ());
1426+ EXPECT_TRUE (cmdSdi->getStoreQword ());
1427+
1428+ sdiItor++;
1429+ cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
1430+
1431+ expectedGpuVa = debugger->sbaTrackingGpuVa .address + offsetof (SbaTrackedAddresses, InstructionBaseAddress);
1432+ decanonizedAddress = GmmHelper::decanonize (iba);
1433+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress & 0x0000FFFFFFFFULL ), cmdSdi->getDataDword0 ());
1434+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress >> 32 ), cmdSdi->getDataDword1 ());
1435+ EXPECT_EQ (expectedGpuVa, cmdSdi->getAddress ());
1436+ EXPECT_TRUE (cmdSdi->getStoreQword ());
1437+
1438+ sdiItor++;
1439+ cmdSdi = genCmdCast<MI_STORE_DATA_IMM *>(*sdiItor);
1440+
1441+ expectedGpuVa = debugger->sbaTrackingGpuVa .address + offsetof (SbaTrackedAddresses, BindlessSurfaceStateBaseAddress);
1442+ decanonizedAddress = GmmHelper::decanonize (ssba);
1443+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress & 0x0000FFFFFFFFULL ), cmdSdi->getDataDword0 ());
1444+ EXPECT_EQ (static_cast <uint32_t >(decanonizedAddress >> 32 ), cmdSdi->getDataDword1 ());
1445+ EXPECT_EQ (expectedGpuVa, cmdSdi->getAddress ());
1446+ EXPECT_TRUE (cmdSdi->getStoreQword ());
1447+ }
1448+
13561449HWTEST_F (L0DebuggerSimpleTest, givenZeroGpuVasWhenProgrammingSbaTrackingThenStreamIsNotUsed) {
13571450 using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM;
13581451 auto debugger = std::make_unique<MockDebuggerL0Hw<FamilyType>>(neoDevice);
0 commit comments