@@ -1034,13 +1034,7 @@ void DebugSessionImp::validateAndSetStateSaveAreaHeader(uint64_t vmHandle, uint6
10341034 if (0 == strcmp (pStateSaveArea->versionHeader .magic , " tssarea" )) {
10351035 size_t size = pStateSaveArea->versionHeader .size * 8u ;
10361036 size_t regHeaderSize = 0 ;
1037- if (pStateSaveArea->versionHeader .version .major == 3 ) {
1038- DEBUG_BREAK_IF (size != sizeof (NEO::StateSaveAreaHeader));
1039- regHeaderSize = sizeof (SIP::intelgt_state_save_area_V3);
1040- } else if (pStateSaveArea->versionHeader .version .major < 3 ) {
1041- DEBUG_BREAK_IF (size != sizeof (NEO::StateSaveAreaHeader::regHeader) + sizeof (NEO::StateSaveAreaHeader::versionHeader));
1042- regHeaderSize = sizeof (SIP::intelgt_state_save_area);
1043- } else {
1037+ if (!getRegHeaderSize (pStateSaveArea, size, regHeaderSize)) {
10441038 PRINT_DEBUGGER_ERROR_LOG (" Setting Context State Save Area: unsupported version == %d.%d.%d\n " , (int )pStateSaveArea->versionHeader .version .major , (int )pStateSaveArea->versionHeader .version .minor , (int )pStateSaveArea->versionHeader .version .patch );
10451039 DEBUG_BREAK_IF (true );
10461040 return ;
@@ -1104,12 +1098,14 @@ const SIP::regset_desc *DebugSessionImp::getSbaRegsetDesc(L0::Device *device, co
11041098
11051099 static const SIP::regset_desc sbaHeapless = {0 , 0 , 0 , 0 };
11061100 static const SIP::regset_desc sba = {0 , ZET_DEBUG_SBA_COUNT_INTEL_GPU, 64 , 8 };
1107- if (ssah.versionHeader .version .major > 3 ) {
1101+ if (ssah.versionHeader .version .major > 5 ) {
11081102 DEBUG_BREAK_IF (true );
11091103 PRINT_DEBUGGER_ERROR_LOG (" Unsupported version of State Save Area Header\n " , " " );
11101104 return nullptr ;
11111105 } else if (ssah.versionHeader .version .major == 3 && isHeaplessMode (device, ssah.regHeaderV3 )) {
11121106 return &sbaHeapless;
1107+ } else if (ssah.versionHeader .version .major == 5 ) {
1108+ return &sbaHeapless;
11131109 } else {
11141110 return &sba;
11151111 }
@@ -1522,14 +1518,14 @@ ze_result_t DebugSession::getRegisterSetProperties(Device *device, uint32_t *pCo
15221518 ZET_DEBUG_REGSET_TYPE_DBG_INTEL_GPU,
15231519 ZET_DEBUG_REGSET_TYPE_FC_INTEL_GPU};
15241520
1525- // Add V3-specific register types
1526- if (pStateSaveArea->versionHeader .version .major = = 3 ) {
1521+ // Add V3/V5 -specific register types
1522+ if (pStateSaveArea->versionHeader .version .major > = 3 ) {
15271523 regsetTypes.insert (regsetTypes.end (), {ZET_DEBUG_REGSET_TYPE_MSG_INTEL_GPU,
15281524 ZET_DEBUG_REGSET_TYPE_MODE_FLAGS_INTEL_GPU,
15291525 ZET_DEBUG_REGSET_TYPE_DEBUG_SCRATCH_INTEL_GPU});
15301526
15311527 // Conditionally add thread scratch for heapless mode
1532- if (DebugSessionImp::isHeaplessMode (device, pStateSaveArea->regHeaderV3 )) {
1528+ if (DebugSessionImp::isHeaplessMode (device, pStateSaveArea->regHeaderV3 ) || pStateSaveArea-> versionHeader . version . major == 5 ) {
15331529 regsetTypes.push_back (ZET_DEBUG_REGSET_TYPE_THREAD_SCRATCH_INTEL_GPU);
15341530 }
15351531
@@ -1545,7 +1541,7 @@ ze_result_t DebugSession::getRegisterSetProperties(Device *device, uint32_t *pCo
15451541 }
15461542
15471543 // Handle unsupported version case
1548- if (pStateSaveArea->versionHeader .version .major > 3 ) {
1544+ if (pStateSaveArea->versionHeader .version .major > 5 ) {
15491545 PRINT_DEBUGGER_ERROR_LOG (" Unsupported version of State Save Area Header\n " , " " );
15501546 DEBUG_BREAK_IF (true );
15511547 return ZE_RESULT_ERROR_UNKNOWN;
@@ -1606,14 +1602,8 @@ ze_result_t DebugSessionImp::registersAccessHelper(const EuThread *thread, const
16061602
16071603ze_result_t DebugSessionImp::cmdRegisterAccessHelper (const EuThread::ThreadId &threadId, SIP::sip_command &command, bool write) {
16081604 auto stateSaveAreaHeader = getStateSaveAreaHeader ();
1609- const SIP::regset_desc *regdesc = nullptr ;
1610- if (stateSaveAreaHeader->versionHeader .version .major == 3 ) {
1611- regdesc = &stateSaveAreaHeader->regHeaderV3 .cmd ;
1612- } else if (stateSaveAreaHeader->versionHeader .version .major < 3 ) {
1613- regdesc = &stateSaveAreaHeader->regHeader .cmd ;
1614- } else {
1615- PRINT_DEBUGGER_ERROR_LOG (" %s: Unsupported version of State Save Area Header\n " , __func__);
1616- DEBUG_BREAK_IF (true );
1605+ SIP::regset_desc regdesc;
1606+ if (getCommandRegisterDescriptor (stateSaveAreaHeader, ®desc) != ZE_RESULT_SUCCESS) {
16171607 return ZE_RESULT_ERROR_UNKNOWN;
16181608 }
16191609
@@ -1622,7 +1612,7 @@ ze_result_t DebugSessionImp::cmdRegisterAccessHelper(const EuThread::ThreadId &t
16221612 if (connectedDevice->getNEODevice ()->getSipExternalLibInterface ()) {
16231613 type = connectedDevice->getNEODevice ()->getSipExternalLibInterface ()->getSipLibCommandRegisterType ();
16241614 }
1625- ze_result_t result = registersAccessHelper (allThreads[threadId].get (), regdesc, 0 , 1 , type, &command, write);
1615+ ze_result_t result = registersAccessHelper (allThreads[threadId].get (), & regdesc, 0 , 1 , type, &command, write);
16261616 if (result != ZE_RESULT_SUCCESS) {
16271617 PRINT_DEBUGGER_ERROR_LOG (" Failed to access CMD for thread %s\n " , EuThread::toString (threadId).c_str ());
16281618 }
@@ -1788,17 +1778,19 @@ ze_result_t DebugSessionImp::readFifo(uint64_t vmHandle, std::vector<EuThread::T
17881778 auto stateSaveAreaHeader = getStateSaveAreaHeader ();
17891779 if (!stateSaveAreaHeader) {
17901780 return ZE_RESULT_ERROR_UNKNOWN;
1791- } else if (stateSaveAreaHeader->versionHeader .version .major != 3 ) {
1781+ } else if (stateSaveAreaHeader->versionHeader .version .major < 3 ) {
17921782 return ZE_RESULT_SUCCESS;
17931783 }
17941784
17951785 auto gpuVa = getContextStateSaveAreaGpuVa (vmHandle);
17961786
17971787 // Drain the fifo
17981788 uint32_t drainRetries = 2 , lastHead = ~0u ;
1799- const uint64_t offsetTail = (sizeof (SIP::StateSaveArea)) + offsetof (struct SIP ::intelgt_state_save_area_V3, fifo_tail);
1800- const uint64_t offsetFifoSize = (sizeof (SIP::StateSaveArea)) + offsetof (struct SIP ::intelgt_state_save_area_V3, fifo_size);
1801- const uint64_t offsetFifo = gpuVa + (stateSaveAreaHeader->versionHeader .size * 8 ) + stateSaveAreaHeader->regHeaderV3 .fifo_offset ;
1789+
1790+ uint64_t offsetTail;
1791+ uint64_t offsetFifoSize;
1792+ uint64_t offsetFifo;
1793+ getFifoOffsets (stateSaveAreaHeader, offsetTail, offsetFifoSize, offsetFifo, gpuVa);
18021794
18031795 while (drainRetries--) {
18041796 constexpr uint32_t failsafeTimeoutWait = 50 ;
0 commit comments