11/*
2- * Copyright (C) 2020-2021 Intel Corporation
2+ * Copyright (C) 2020-2022 Intel Corporation
33 *
44 * SPDX-License-Identifier: MIT
55 *
1616
1717namespace L0 {
1818
19- template <typename GfxFamily>
20- size_t DebuggerL0Hw<GfxFamily>::getSbaTrackingCommandsSize(size_t trackedAddressCount) {
21- return trackedAddressCount * NEO::EncodeStoreMemory<GfxFamily>::getStoreDataImmSize ();
22- }
23-
2419template <typename GfxFamily>
2520void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdStream, const SbaAddresses &sba) {
26- auto gpuAddress = NEO::GmmHelper::decanonize (sbaTrackingGpuVa.address );
21+ using MI_STORE_DATA_IMM = typename GfxFamily::MI_STORE_DATA_IMM;
22+ using MI_STORE_REGISTER_MEM = typename GfxFamily::MI_STORE_REGISTER_MEM;
23+ using MI_BATCH_BUFFER_START = typename GfxFamily::MI_BATCH_BUFFER_START;
24+ using MI_ARB_CHECK = typename GfxFamily::MI_ARB_CHECK;
25+ const auto gpuAddress = NEO::GmmHelper::decanonize (sbaTrackingGpuVa.address );
2726
2827 PRINT_DEBUGGER_INFO_LOG (" Debugger: SBA stored ssh = %" SCNx64
2928 " gsba = %" SCNx64
@@ -34,59 +33,63 @@ void DebuggerL0Hw<GfxFamily>::programSbaTrackingCommands(NEO::LinearStream &cmdS
3433 sba.SurfaceStateBaseAddress , sba.GeneralStateBaseAddress , sba.DynamicStateBaseAddress ,
3534 sba.IndirectObjectBaseAddress , sba.InstructionBaseAddress , sba.BindlessSurfaceStateBaseAddress );
3635
37- if (sba.GeneralStateBaseAddress ) {
38- auto generalStateBaseAddress = NEO::GmmHelper::decanonize (sba.GeneralStateBaseAddress );
39- NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
40- gpuAddress + offsetof (SbaTrackedAddresses, GeneralStateBaseAddress),
41- static_cast <uint32_t >(generalStateBaseAddress & 0x0000FFFFFFFFULL ),
42- static_cast <uint32_t >(generalStateBaseAddress >> 32 ),
43- true ,
44- false );
45- }
46- if (sba.SurfaceStateBaseAddress ) {
47- auto surfaceStateBaseAddress = NEO::GmmHelper::decanonize (sba.SurfaceStateBaseAddress );
48- NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
49- gpuAddress + offsetof (SbaTrackedAddresses, SurfaceStateBaseAddress),
50- static_cast <uint32_t >(surfaceStateBaseAddress & 0x0000FFFFFFFFULL ),
51- static_cast <uint32_t >(surfaceStateBaseAddress >> 32 ),
52- true ,
53- false );
54- }
55- if (sba.DynamicStateBaseAddress ) {
56- auto dynamicStateBaseAddress = NEO::GmmHelper::decanonize (sba.DynamicStateBaseAddress );
57- NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
58- gpuAddress + offsetof (SbaTrackedAddresses, DynamicStateBaseAddress),
59- static_cast <uint32_t >(dynamicStateBaseAddress & 0x0000FFFFFFFFULL ),
60- static_cast <uint32_t >(dynamicStateBaseAddress >> 32 ),
61- true ,
62- false );
63- }
64- if (sba.IndirectObjectBaseAddress ) {
65- auto indirectObjectBaseAddress = NEO::GmmHelper::decanonize (sba.IndirectObjectBaseAddress );
66- NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
67- gpuAddress + offsetof (SbaTrackedAddresses, IndirectObjectBaseAddress),
68- static_cast <uint32_t >(indirectObjectBaseAddress & 0x0000FFFFFFFFULL ),
69- static_cast <uint32_t >(indirectObjectBaseAddress >> 32 ),
70- true ,
71- false );
72- }
73- if (sba.InstructionBaseAddress ) {
74- auto instructionBaseAddress = NEO::GmmHelper::decanonize (sba.InstructionBaseAddress );
75- NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
76- gpuAddress + offsetof (SbaTrackedAddresses, InstructionBaseAddress),
77- static_cast <uint32_t >(instructionBaseAddress & 0x0000FFFFFFFFULL ),
78- static_cast <uint32_t >(instructionBaseAddress >> 32 ),
79- true ,
80- false );
81- }
82- if (sba.BindlessSurfaceStateBaseAddress ) {
83- auto bindlessSurfaceStateBaseAddress = NEO::GmmHelper::decanonize (sba.BindlessSurfaceStateBaseAddress );
84- NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
85- gpuAddress + offsetof (SbaTrackedAddresses, BindlessSurfaceStateBaseAddress),
86- static_cast <uint32_t >(bindlessSurfaceStateBaseAddress & 0x0000FFFFFFFFULL ),
87- static_cast <uint32_t >(bindlessSurfaceStateBaseAddress >> 32 ),
88- true ,
89- false );
36+ if (singleAddressSpaceSbaTracking) {
37+ programSbaTrackingCommandsSingleAddressSpace (cmdStream, sba);
38+ } else {
39+ if (sba.GeneralStateBaseAddress ) {
40+ auto generalStateBaseAddress = NEO::GmmHelper::decanonize (sba.GeneralStateBaseAddress );
41+ NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
42+ gpuAddress + offsetof (SbaTrackedAddresses, GeneralStateBaseAddress),
43+ static_cast <uint32_t >(generalStateBaseAddress & 0x0000FFFFFFFFULL ),
44+ static_cast <uint32_t >(generalStateBaseAddress >> 32 ),
45+ true ,
46+ false );
47+ }
48+ if (sba.SurfaceStateBaseAddress ) {
49+ auto surfaceStateBaseAddress = NEO::GmmHelper::decanonize (sba.SurfaceStateBaseAddress );
50+ NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
51+ gpuAddress + offsetof (SbaTrackedAddresses, SurfaceStateBaseAddress),
52+ static_cast <uint32_t >(surfaceStateBaseAddress & 0x0000FFFFFFFFULL ),
53+ static_cast <uint32_t >(surfaceStateBaseAddress >> 32 ),
54+ true ,
55+ false );
56+ }
57+ if (sba.DynamicStateBaseAddress ) {
58+ auto dynamicStateBaseAddress = NEO::GmmHelper::decanonize (sba.DynamicStateBaseAddress );
59+ NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
60+ gpuAddress + offsetof (SbaTrackedAddresses, DynamicStateBaseAddress),
61+ static_cast <uint32_t >(dynamicStateBaseAddress & 0x0000FFFFFFFFULL ),
62+ static_cast <uint32_t >(dynamicStateBaseAddress >> 32 ),
63+ true ,
64+ false );
65+ }
66+ if (sba.IndirectObjectBaseAddress ) {
67+ auto indirectObjectBaseAddress = NEO::GmmHelper::decanonize (sba.IndirectObjectBaseAddress );
68+ NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
69+ gpuAddress + offsetof (SbaTrackedAddresses, IndirectObjectBaseAddress),
70+ static_cast <uint32_t >(indirectObjectBaseAddress & 0x0000FFFFFFFFULL ),
71+ static_cast <uint32_t >(indirectObjectBaseAddress >> 32 ),
72+ true ,
73+ false );
74+ }
75+ if (sba.InstructionBaseAddress ) {
76+ auto instructionBaseAddress = NEO::GmmHelper::decanonize (sba.InstructionBaseAddress );
77+ NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
78+ gpuAddress + offsetof (SbaTrackedAddresses, InstructionBaseAddress),
79+ static_cast <uint32_t >(instructionBaseAddress & 0x0000FFFFFFFFULL ),
80+ static_cast <uint32_t >(instructionBaseAddress >> 32 ),
81+ true ,
82+ false );
83+ }
84+ if (sba.BindlessSurfaceStateBaseAddress ) {
85+ auto bindlessSurfaceStateBaseAddress = NEO::GmmHelper::decanonize (sba.BindlessSurfaceStateBaseAddress );
86+ NEO::EncodeStoreMemory<GfxFamily>::programStoreDataImm (cmdStream,
87+ gpuAddress + offsetof (SbaTrackedAddresses, BindlessSurfaceStateBaseAddress),
88+ static_cast <uint32_t >(bindlessSurfaceStateBaseAddress & 0x0000FFFFFFFFULL ),
89+ static_cast <uint32_t >(bindlessSurfaceStateBaseAddress >> 32 ),
90+ true ,
91+ false );
92+ }
9093 }
9194}
9295
@@ -95,4 +98,31 @@ DebuggerL0 *DebuggerL0Hw<GfxFamily>::allocate(NEO::Device *device) {
9598 return new DebuggerL0Hw<GfxFamily>(device);
9699}
97100
101+ template <typename GfxFamily>
102+ size_t DebuggerL0Hw<GfxFamily>::getSbaAddressLoadCommandsSize() {
103+ if (!singleAddressSpaceSbaTracking) {
104+ return 0 ;
105+ }
106+ return 2 * sizeof (typename GfxFamily::MI_LOAD_REGISTER_IMM);
107+ }
108+
109+ template <typename GfxFamily>
110+ void DebuggerL0Hw<GfxFamily>::programSbaAddressLoad(NEO::LinearStream &cmdStream, uint64_t sbaGpuVa) {
111+ if (!singleAddressSpaceSbaTracking) {
112+ return ;
113+ }
114+ uint32_t low = sbaGpuVa & 0xffffffff ;
115+ uint32_t high = (sbaGpuVa >> 32 ) & 0xffffffff ;
116+
117+ NEO::LriHelper<GfxFamily>::program (&cmdStream,
118+ CS_GPR_R15,
119+ low,
120+ true );
121+
122+ NEO::LriHelper<GfxFamily>::program (&cmdStream,
123+ CS_GPR_R15 + 4 ,
124+ high,
125+ true );
126+ }
127+
98128} // namespace L0
0 commit comments