feature: Add support for V3 state save header

Related-to: NEO-8396

Signed-off-by: Brandon Yates <brandon.yates@intel.com>
This commit is contained in:
Brandon Yates
2024-06-25 03:03:26 +00:00
committed by Compute-Runtime-Automation
parent ef37b140de
commit ab92499b56
16 changed files with 744 additions and 101 deletions

View File

@@ -10,6 +10,7 @@
#include "shared/source/built_ins/built_ins.h"
#include "shared/source/debug_settings/debug_settings_manager.h"
#include "shared/source/debugger/debugger.h"
#include "shared/source/debugger/debugger_l0.h"
#include "shared/source/device/device.h"
#include "shared/source/execution_environment/execution_environment.h"
#include "shared/source/execution_environment/root_device_environment.h"
@@ -93,16 +94,26 @@ size_t SipKernel::getStateSaveAreaSize(Device *device) const {
return maxDbgSurfaceSize;
}
auto hdr = reinterpret_cast<const SIP::StateSaveAreaHeader *>(stateSaveAreaHeader.data());
DEBUG_BREAK_IF(hdr->versionHeader.size * 8 != sizeof(SIP::StateSaveAreaHeader));
auto hdr = reinterpret_cast<const NEO::StateSaveAreaHeader *>(stateSaveAreaHeader.data());
auto numSlices = NEO::GfxCoreHelper::getHighestEnabledSlice(hwInfo);
auto stateSaveAreaSize = numSlices *
hdr->regHeader.num_subslices_per_slice *
hdr->regHeader.num_eus_per_subslice *
hdr->regHeader.num_threads_per_eu *
hdr->regHeader.state_save_size +
hdr->versionHeader.size * 8 + hdr->regHeader.state_area_offset;
size_t stateSaveAreaSize = 0;
if (hdr->versionHeader.version.major >= 3) {
stateSaveAreaSize = numSlices *
hdr->regHeaderV3.num_subslices_per_slice *
hdr->regHeaderV3.num_eus_per_subslice *
hdr->regHeaderV3.num_threads_per_eu *
hdr->regHeaderV3.state_save_size +
hdr->versionHeader.size * 8 + hdr->regHeaderV3.state_area_offset;
} else {
stateSaveAreaSize = numSlices *
hdr->regHeader.num_subslices_per_slice *
hdr->regHeader.num_eus_per_subslice *
hdr->regHeader.num_threads_per_eu *
hdr->regHeader.state_save_size +
hdr->versionHeader.size * 8 + hdr->regHeader.state_area_offset;
}
return alignUp(stateSaveAreaSize, MemoryConstants::pageSize);
}

View File

@@ -10,6 +10,8 @@
#include "shared/source/helpers/non_copyable_or_moveable.h"
#include "shared/source/memory_manager/memory_manager.h"
#include "common/StateSaveAreaHeader.h"
#include <cstdint>
#include <memory>
#include <type_traits>
@@ -21,6 +23,17 @@ class GraphicsAllocation;
class LinearStream;
class OSInterface;
// NOLINTBEGIN
struct StateSaveAreaHeader {
struct SIP::StateSaveArea versionHeader;
union {
struct SIP::intelgt_state_save_area regHeader;
struct SIP::intelgt_state_save_area_V3 regHeaderV3;
};
};
// NOLINTEND
#pragma pack(1)
struct SbaTrackedAddresses {
char magic[8] = "sbaarea";
@@ -55,19 +68,6 @@ struct DebugAreaHeader {
};
static_assert(sizeof(DebugAreaHeader) == 32u * sizeof(uint8_t));
struct alignas(4) DebuggerVersion {
uint8_t major;
uint8_t minor;
uint16_t patch;
};
struct alignas(8) StateSaveAreaHeader {
char magic[8] = "tssarea";
uint64_t reserved1;
struct DebuggerVersion version;
uint8_t size;
uint8_t reserved2[3];
};
#pragma pack()
class DebuggerL0 : public NEO::Debugger, NEO::NonCopyableOrMovableClass {