From 63478808a752be159c795bb820f8ae9ab17b4be5 Mon Sep 17 00:00:00 2001 From: Brandon Yates Date: Mon, 1 Jul 2024 16:59:23 +0000 Subject: [PATCH] feature: implement new registers for debugger Related-to: NEO-8396 Signed-off-by: Brandon Yates --- level_zero/tools/source/debug/CMakeLists.txt | 3 +- level_zero/tools/source/debug/debug_session.h | 8 ++++- .../tools/source/debug/debug_session_imp.cpp | 25 ++++++++++++--- .../tools/source/debug/debug_session_imp.h | 4 +-- .../source/debug/linux/debug_session.cpp | 6 ++++ .../tools/source/debug/linux/debug_session.h | 1 + .../source/debug/thread_scratch_helper.cpp | 16 ++++++++++ .../debug/debug_session_registers_access.cpp | 32 +++++++++++++------ .../sources/debug/debug_session_tests.cpp | 15 ++++----- .../linux/prelim/test_debug_api_linux.cpp | 16 ++++++---- .../sources/debug/mock_debug_session.h | 16 ++++++++++ .../sources/debug/test_debug_api.cpp | 30 ++++------------- shared/test/common/helpers/sip_init.cpp | 2 +- 13 files changed, 118 insertions(+), 56 deletions(-) create mode 100644 level_zero/tools/source/debug/thread_scratch_helper.cpp diff --git a/level_zero/tools/source/debug/CMakeLists.txt b/level_zero/tools/source/debug/CMakeLists.txt index dc041970c5..cb429a4f38 100644 --- a/level_zero/tools/source/debug/CMakeLists.txt +++ b/level_zero/tools/source/debug/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2021-2023 Intel Corporation +# Copyright (C) 2021-2024 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -14,6 +14,7 @@ target_sources(${L0_STATIC_LIB_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/debug_handlers.cpp ${CMAKE_CURRENT_SOURCE_DIR}/eu_thread.h ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt + ${CMAKE_CURRENT_SOURCE_DIR}/${BRANCH_DIR_SUFFIX}thread_scratch_helper.cpp ) add_subdirectories() diff --git a/level_zero/tools/source/debug/debug_session.h b/level_zero/tools/source/debug/debug_session.h index b4d6618a28..d9acceb028 100644 --- a/level_zero/tools/source/debug/debug_session.h +++ b/level_zero/tools/source/debug/debug_session.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2023 Intel Corporation + * Copyright (C) 2021-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -118,6 +118,12 @@ struct DebugSession : _zet_debug_session_handle_t { virtual bool isBindlessSystemRoutine(); virtual bool readModuleDebugArea() = 0; + + struct DebugAreaInfo { + uint64_t gpuVa; + uint64_t size; + }; + virtual DebugAreaInfo getModuleDebugAreaInfo() { return {0, 0}; } virtual ze_result_t readSbaBuffer(EuThread::ThreadId threadId, NEO::SbaTrackedAddresses &sbaBuffer) = 0; void fillDevicesFromThread(ze_device_thread_t thread, std::vector &devices); diff --git a/level_zero/tools/source/debug/debug_session_imp.cpp b/level_zero/tools/source/debug/debug_session_imp.cpp index ef7925006e..1d4a7990f1 100644 --- a/level_zero/tools/source/debug/debug_session_imp.cpp +++ b/level_zero/tools/source/debug/debug_session_imp.cpp @@ -1217,10 +1217,27 @@ ze_result_t DebugSessionImp::readModeFlags(uint32_t start, uint32_t count, void return ZE_RESULT_SUCCESS; } ze_result_t DebugSessionImp::readDebugScratchRegisters(uint32_t start, uint32_t count, void *pRegisterValues) { - return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; -} -ze_result_t DebugSessionImp::readThreadScratchRegisters(EuThread::ThreadId threadId, uint32_t start, uint32_t count, void *pRegisterValues) { - return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + + auto debugScratchRegDesc = DebugSessionImp::getDebugScratchRegsetDesc(); + + if (start >= debugScratchRegDesc->num) { + return ZE_RESULT_ERROR_INVALID_ARGUMENT; + } + + if (start + count > debugScratchRegDesc->num) { + return ZE_RESULT_ERROR_INVALID_ARGUMENT; + } + + auto info = getModuleDebugAreaInfo(); + + std::vector packed; + packed.push_back(info.gpuVa); + packed.push_back(info.size); + + size_t size = count * debugScratchRegDesc->bytes; + memcpy_s(pRegisterValues, size, &packed[start], size); + + return ZE_RESULT_SUCCESS; } ze_result_t DebugSessionImp::readSbaRegisters(EuThread::ThreadId threadId, uint32_t start, uint32_t count, void *pRegisterValues) { diff --git a/level_zero/tools/source/debug/debug_session_imp.h b/level_zero/tools/source/debug/debug_session_imp.h index dc8246123c..f5e9451ad9 100644 --- a/level_zero/tools/source/debug/debug_session_imp.h +++ b/level_zero/tools/source/debug/debug_session_imp.h @@ -102,8 +102,8 @@ struct DebugSessionImp : DebugSession { ze_result_t readSbaRegisters(EuThread::ThreadId thread, uint32_t start, uint32_t count, void *pRegisterValues); ze_result_t readModeFlags(uint32_t start, uint32_t count, void *pRegisterValues); - ze_result_t readDebugScratchRegisters([[maybe_unused]] uint32_t start, [[maybe_unused]] uint32_t count, [[maybe_unused]] void *pRegisterValues); - ze_result_t readThreadScratchRegisters([[maybe_unused]] EuThread::ThreadId thread, [[maybe_unused]] uint32_t start, [[maybe_unused]] uint32_t count, [[maybe_unused]] void *pRegisterValues); + ze_result_t readDebugScratchRegisters(uint32_t start, uint32_t count, void *pRegisterValues); + MOCKABLE_VIRTUAL ze_result_t readThreadScratchRegisters(EuThread::ThreadId thread, uint32_t start, uint32_t count, void *pRegisterValues); MOCKABLE_VIRTUAL bool isForceExceptionOrForceExternalHaltOnlyExceptionReason(uint32_t *cr0); MOCKABLE_VIRTUAL bool isAIPequalToThreadStartIP(uint32_t *cr0, uint32_t *dbg0); diff --git a/level_zero/tools/source/debug/linux/debug_session.cpp b/level_zero/tools/source/debug/linux/debug_session.cpp index 5bf6bc844f..a436632907 100644 --- a/level_zero/tools/source/debug/linux/debug_session.cpp +++ b/level_zero/tools/source/debug/linux/debug_session.cpp @@ -837,6 +837,12 @@ bool DebugSessionLinux::readModuleDebugArea() { return true; } +DebugSessionLinux::DebugAreaInfo DebugSessionLinux::getModuleDebugAreaInfo() { + auto gpuVa = getClientConnection(clientHandle)->vmToModuleDebugAreaBindInfo.begin()->second.gpuVa; + auto size = getClientConnection(clientHandle)->vmToModuleDebugAreaBindInfo.begin()->second.size; + return {gpuVa, size}; +} + ze_result_t DebugSessionLinux::readSbaBuffer(EuThread::ThreadId threadId, NEO::SbaTrackedAddresses &sbaBuffer) { auto vmHandle = allThreads[threadId]->getMemoryHandle(); diff --git a/level_zero/tools/source/debug/linux/debug_session.h b/level_zero/tools/source/debug/linux/debug_session.h index 899dbf97dd..fdda2540d4 100644 --- a/level_zero/tools/source/debug/linux/debug_session.h +++ b/level_zero/tools/source/debug/linux/debug_session.h @@ -94,6 +94,7 @@ struct DebugSessionLinux : DebugSessionImp { ze_result_t readMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, void *buffer) override; ze_result_t writeMemory(ze_device_thread_t thread, const zet_debug_memory_space_desc_t *desc, size_t size, const void *buffer) override; bool readModuleDebugArea() override; + DebugAreaInfo getModuleDebugAreaInfo() override; ze_result_t readSbaBuffer(EuThread::ThreadId, NEO::SbaTrackedAddresses &sbaBuffer) override; uint64_t getContextStateSaveAreaGpuVa(uint64_t memoryHandle) override; size_t getContextStateSaveAreaSize(uint64_t memoryHandle) override; diff --git a/level_zero/tools/source/debug/thread_scratch_helper.cpp b/level_zero/tools/source/debug/thread_scratch_helper.cpp new file mode 100644 index 0000000000..b94d36b917 --- /dev/null +++ b/level_zero/tools/source/debug/thread_scratch_helper.cpp @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2024 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "level_zero/tools/source/debug/debug_session_imp.h" + +namespace L0 { + +ze_result_t DebugSessionImp::readThreadScratchRegisters(EuThread::ThreadId threadId, uint32_t start, uint32_t count, void *pRegisterValues) { + return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; +} + +} // namespace L0 \ No newline at end of file diff --git a/level_zero/tools/test/unit_tests/sources/debug/debug_session_registers_access.cpp b/level_zero/tools/test/unit_tests/sources/debug/debug_session_registers_access.cpp index d6fc426750..ba651393cf 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/debug_session_registers_access.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/debug_session_registers_access.cpp @@ -51,18 +51,32 @@ void DebugSessionRegistersAccess::dumpRegisterState() { if (session->stateSaveAreaHeader.size() == 0) { return; } - auto pStateSaveAreaHeader = reinterpret_cast(session->stateSaveAreaHeader.data()); + auto pStateSaveAreaHeader = reinterpret_cast(session->stateSaveAreaHeader.data()); - for (uint32_t thread = 0; thread < pStateSaveAreaHeader->regHeader.num_threads_per_eu; thread++) { - EuThread::ThreadId threadId(0, 0, 0, 0, thread); - auto threadSlotOffset = session->calculateThreadSlotOffset(threadId); + if (pStateSaveAreaHeader->versionHeader.version.major >= 3) { + for (uint32_t thread = 0; thread < pStateSaveAreaHeader->regHeaderV3.num_threads_per_eu; thread++) { + EuThread::ThreadId threadId(0, 0, 0, 0, thread); + auto threadSlotOffset = session->calculateThreadSlotOffset(threadId); - auto srMagicOffset = threadSlotOffset + pStateSaveAreaHeader->regHeader.sr_magic_offset; - SIP::sr_ident srMagic; - srMagic.count = 1; - srMagic.version.major = pStateSaveAreaHeader->versionHeader.version.major; + auto srMagicOffset = threadSlotOffset + pStateSaveAreaHeader->regHeaderV3.sr_magic_offset; + SIP::sr_ident srMagic; + srMagic.count = 1; + srMagic.version.major = pStateSaveAreaHeader->versionHeader.version.major; - session->writeGpuMemory(0, reinterpret_cast(&srMagic), sizeof(srMagic), reinterpret_cast(pStateSaveAreaHeader) + srMagicOffset); + session->writeGpuMemory(0, reinterpret_cast(&srMagic), sizeof(srMagic), reinterpret_cast(pStateSaveAreaHeader) + srMagicOffset); + } + } else { + for (uint32_t thread = 0; thread < pStateSaveAreaHeader->regHeader.num_threads_per_eu; thread++) { + EuThread::ThreadId threadId(0, 0, 0, 0, thread); + auto threadSlotOffset = session->calculateThreadSlotOffset(threadId); + + auto srMagicOffset = threadSlotOffset + pStateSaveAreaHeader->regHeader.sr_magic_offset; + SIP::sr_ident srMagic; + srMagic.count = 1; + srMagic.version.major = pStateSaveAreaHeader->versionHeader.version.major; + + session->writeGpuMemory(0, reinterpret_cast(&srMagic), sizeof(srMagic), reinterpret_cast(pStateSaveAreaHeader) + srMagicOffset); + } } } diff --git a/level_zero/tools/test/unit_tests/sources/debug/debug_session_tests.cpp b/level_zero/tools/test/unit_tests/sources/debug/debug_session_tests.cpp index 892d7a23df..cd89a2749c 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/debug_session_tests.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/debug_session_tests.cpp @@ -2721,14 +2721,13 @@ TEST_F(DebugSessionRegistersAccessTest, GivenBindlessSipVersion2WhenCallingResum EXPECT_EQ(1u, session->writeResumeCommandCalled); } -TEST_F(DebugSessionRegistersAccessTestV3, WhenReadingDebugScratchRegisterThenUnsupportedFeatureReturned) { - EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, session->readDebugScratchRegisters(0, 0, nullptr)); -} - -TEST_F(DebugSessionRegistersAccessTestV3, WhenReadingThreadScratchRegisterThenUnsupportedFeatureReturned) { - ze_device_thread_t thread = {0, 0, 0, 0}; - EuThread::ThreadId threadId = {0, thread}; - EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, session->readThreadScratchRegisters(threadId, 0, 0, nullptr)); +TEST_F(DebugSessionRegistersAccessTestV3, WhenReadingDebugScratchRegisterThenErrorsHandled) { + uint64_t scratch[2]; + EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, session->readDebugScratchRegisters(5, 0, scratch)); + EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, session->readDebugScratchRegisters(0, 5, scratch)); + EXPECT_EQ(ZE_RESULT_SUCCESS, session->readDebugScratchRegisters(0, 2, scratch)); + EXPECT_EQ(scratch[0], 0u); + EXPECT_EQ(scratch[1], 0u); } TEST_F(DebugSessionRegistersAccessTestV3, WhenReadingModeRegisterThenCorrectResultReturned) { diff --git a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp index dbcb0f79ea..3e6ec4b486 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/linux/prelim/test_debug_api_linux.cpp @@ -7807,16 +7807,18 @@ TEST_F(DebugApiRegistersAccessTest, givenWriteSbaRegistersCalledThenErrorInvalid EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, zetDebugWriteRegisters(session->toHandle(), {0, 0, 0, 0}, ZET_DEBUG_REGSET_TYPE_SBA_INTEL_GPU, 0, 1, nullptr)); } -TEST_F(DebugApiRegistersAccessTest, givenReadDebugScratchRegisterCalledThenUnsupportedFeatureReturned) { +TEST_F(DebugApiRegistersAccessTest, givenReadDebugScratchRegisterCalledThenCorrectValuesReturned) { SIP::version version = {3, 0, 0}; initStateSaveArea(session->stateSaveAreaHeader, version, device); - EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zetDebugReadRegisters(session->toHandle(), {0, 0, 0, 0}, ZET_DEBUG_REGSET_TYPE_DEBUG_SCRATCH_INTEL_GPU, 0, 1, nullptr)); -} + uint64_t debugSurfaceAddress = 0xDEADBEEF; + uint64_t debugSurfaceSize = 0xBEEFDEAD; + uint64_t scratch[2]; -TEST_F(DebugApiRegistersAccessTest, givenReadThreadScratchRegisterCalledThenUnsupportedFeatureReturned) { - SIP::version version = {3, 0, 0}; - initStateSaveArea(session->stateSaveAreaHeader, version, device); - EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zetDebugReadRegisters(session->toHandle(), {0, 0, 0, 0}, ZET_DEBUG_REGSET_TYPE_THREAD_SCRATCH_INTEL_GPU, 0, 1, nullptr)); + session->clientHandleToConnection[MockDebugSessionLinuxi915::mockClientHandle]->vmToModuleDebugAreaBindInfo[0] = {debugSurfaceAddress, debugSurfaceSize}; + + EXPECT_EQ(ZE_RESULT_SUCCESS, zetDebugReadRegisters(session->toHandle(), {0, 0, 0, 0}, ZET_DEBUG_REGSET_TYPE_DEBUG_SCRATCH_INTEL_GPU, 0, 2, scratch)); + EXPECT_EQ(scratch[0], debugSurfaceAddress); + EXPECT_EQ(scratch[1], debugSurfaceSize); } TEST_F(DebugApiRegistersAccessTest, givenReadModeRegisterCalledThenSuccessIsReturned) { diff --git a/level_zero/tools/test/unit_tests/sources/debug/mock_debug_session.h b/level_zero/tools/test/unit_tests/sources/debug/mock_debug_session.h index 9b145727f3..207cfbaa3e 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/mock_debug_session.h +++ b/level_zero/tools/test/unit_tests/sources/debug/mock_debug_session.h @@ -296,6 +296,10 @@ struct MockDebugSession : public L0::DebugSessionImp { } ze_result_t readGpuMemory(uint64_t memoryHandle, char *output, size_t size, uint64_t gpuVa) override { + readGpuMemoryCallCount++; + if (forcereadGpuMemoryFailOnCount == readGpuMemoryCallCount) { + return ZE_RESULT_ERROR_UNKNOWN; + } if (gpuVa != 0 && gpuVa >= reinterpret_cast(stateSaveAreaHeader.data()) && ((gpuVa + size) <= reinterpret_cast(stateSaveAreaHeader.data() + stateSaveAreaHeader.size()))) { [[maybe_unused]] auto offset = ptrDiff(gpuVa, reinterpret_cast(stateSaveAreaHeader.data())); @@ -319,6 +323,14 @@ struct MockDebugSession : public L0::DebugSessionImp { return writeMemoryResult; } + ze_result_t readThreadScratchRegisters(EuThread::ThreadId thread, uint32_t start, uint32_t count, void *pRegisterValues) override { + + if (readThreadScratchRegistersResult != ZE_RESULT_FORCE_UINT32) { + return readThreadScratchRegistersResult; + } + return DebugSessionImp::readThreadScratchRegisters(thread, start, count, pRegisterValues); + } + void resumeAccidentallyStoppedThreads(const std::vector &threadIds) override { resumeAccidentallyStoppedCalled++; return DebugSessionImp::resumeAccidentallyStoppedThreads(threadIds); @@ -516,6 +528,7 @@ struct MockDebugSession : public L0::DebugSessionImp { ze_result_t readMemoryResult = ZE_RESULT_SUCCESS; ze_result_t writeMemoryResult = ZE_RESULT_SUCCESS; ze_result_t writeRegistersResult = ZE_RESULT_FORCE_UINT32; + ze_result_t readThreadScratchRegistersResult = ZE_RESULT_FORCE_UINT32; uint32_t readStateSaveAreaHeaderCalled = 0; uint32_t readRegistersCallCount = 0; @@ -523,6 +536,9 @@ struct MockDebugSession : public L0::DebugSessionImp { uint32_t writeRegistersCallCount = 0; uint32_t writeRegistersReg = 0; + uint32_t readGpuMemoryCallCount = 0; + uint32_t forcereadGpuMemoryFailOnCount = 0; + bool skipWriteResumeCommand = true; uint32_t writeResumeCommandCalled = 0; diff --git a/level_zero/tools/test/unit_tests/sources/debug/test_debug_api.cpp b/level_zero/tools/test/unit_tests/sources/debug/test_debug_api.cpp index c9f256ecbd..4f7737d156 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/test_debug_api.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/test_debug_api.cpp @@ -370,7 +370,7 @@ TEST_F(DebugApiTest, givenGetRegisterSetPropertiesCalledWithV3HeaderCorrectPrope EXPECT_EQ(regsetProps.byteSize, bytes); }; - validateRegsetProps(regsetProps[0], ZET_DEBUG_REGSET_TYPE_GRF_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE | ZET_DEBUG_REGSET_FLAG_WRITEABLE, 128, 256, 32); + validateRegsetProps(regsetProps[0], ZET_DEBUG_REGSET_TYPE_GRF_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE | ZET_DEBUG_REGSET_FLAG_WRITEABLE, 128, 512, 64); validateRegsetProps(regsetProps[1], ZET_DEBUG_REGSET_TYPE_ADDR_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE | ZET_DEBUG_REGSET_FLAG_WRITEABLE, 1, 256, 32); validateRegsetProps(regsetProps[2], ZET_DEBUG_REGSET_TYPE_FLAG_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE | ZET_DEBUG_REGSET_FLAG_WRITEABLE, 2, 32, 4); validateRegsetProps(regsetProps[3], ZET_DEBUG_REGSET_TYPE_CE_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE, 1, 32, 4); @@ -414,7 +414,7 @@ TEST_F(DebugApiTest, givenGetRegisterSetPropertiesCalledWhenV3HeaderHeaplessThen EXPECT_EQ(regsetProps.byteSize, bytes); }; - validateRegsetProps(regsetProps[0], ZET_DEBUG_REGSET_TYPE_GRF_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE | ZET_DEBUG_REGSET_FLAG_WRITEABLE, 128, 256, 32); + validateRegsetProps(regsetProps[0], ZET_DEBUG_REGSET_TYPE_GRF_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE | ZET_DEBUG_REGSET_FLAG_WRITEABLE, 128, 512, 64); validateRegsetProps(regsetProps[1], ZET_DEBUG_REGSET_TYPE_ADDR_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE | ZET_DEBUG_REGSET_FLAG_WRITEABLE, 1, 256, 32); validateRegsetProps(regsetProps[2], ZET_DEBUG_REGSET_TYPE_FLAG_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE | ZET_DEBUG_REGSET_FLAG_WRITEABLE, 2, 32, 4); validateRegsetProps(regsetProps[3], ZET_DEBUG_REGSET_TYPE_CE_INTEL_GPU, ZET_DEBUG_REGSET_FLAG_READABLE, 1, 32, 4); @@ -598,7 +598,7 @@ TEST_F(DebugApiTest, givenZeAffinityMaskAndEnabledDebugMessagesWhenDebugAttachCa EXPECT_EQ(std::string("ZE_AFFINITY_MASK is not recommended while using program debug API\n"), output); } -TEST_F(DebugApiTest, givenReadDebugScratchRegisterCalledThenUnsupportedFeatureReturned) { +TEST_F(DebugApiTest, givenReadDebugScratchRegisterCalledThenSuccessIsReturned) { zet_debug_config_t config = {}; config.pid = 0x1234; @@ -614,26 +614,10 @@ TEST_F(DebugApiTest, givenReadDebugScratchRegisterCalledThenUnsupportedFeatureRe EuThread::ThreadId stoppedThreadId{0, stoppedThread}; session->allThreads[stoppedThreadId]->stopThread(1u); session->allThreads[stoppedThreadId]->reportAsStopped(); - EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zetDebugReadRegisters(session->toHandle(), {0, 0, 0, 0}, ZET_DEBUG_REGSET_TYPE_DEBUG_SCRATCH_INTEL_GPU, 0, 1, nullptr)); -} - -TEST_F(DebugApiTest, givenReadThreadScratchRegisterCalledThenUnsupportedFeatureReturned) { - zet_debug_config_t config = {}; - config.pid = 0x1234; - - neoDevice->executionEnvironment->rootDeviceEnvironments[0]->osInterface.reset(new OsInterfaceWithDebugAttach); - - L0::DeviceImp *deviceImp = static_cast(device); - auto session = new MockDebugSession(config, device, true); - session->initialize(); - deviceImp->setDebugSession(session); - SIP::version version = {3, 0, 0}; - initStateSaveArea(session->stateSaveAreaHeader, version, device); - ze_device_thread_t stoppedThread = {0, 0, 0, 0}; - EuThread::ThreadId stoppedThreadId{0, stoppedThread}; - session->allThreads[stoppedThreadId]->stopThread(1u); - session->allThreads[stoppedThreadId]->reportAsStopped(); - EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zetDebugReadRegisters(session->toHandle(), {0, 0, 0, 0}, ZET_DEBUG_REGSET_TYPE_THREAD_SCRATCH_INTEL_GPU, 0, 1, nullptr)); + uint64_t scratch[2]; + EXPECT_EQ(ZE_RESULT_SUCCESS, zetDebugReadRegisters(session->toHandle(), {0, 0, 0, 0}, ZET_DEBUG_REGSET_TYPE_DEBUG_SCRATCH_INTEL_GPU, 0, 2, scratch)); + EXPECT_EQ(scratch[0], 0u); + EXPECT_EQ(scratch[1], 0u); } TEST_F(DebugApiTest, givenReadModeRegisterCalledThenSuccessIsReturned) { diff --git a/shared/test/common/helpers/sip_init.cpp b/shared/test/common/helpers/sip_init.cpp index 6f3a7af17a..8b00899442 100644 --- a/shared/test/common/helpers/sip_init.cpp +++ b/shared/test/common/helpers/sip_init.cpp @@ -157,7 +157,7 @@ std::vector createStateSaveAreaHeader(uint32_t version, uint16_t grfNum, u 0, // fifo_version; {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // reserved1[10]; SIP::SIP_FLAG_HEAPLESS, // sip_flags; - {0, grfNum, 256, 32}, // grf + {0, grfNum, 512, 64}, // grf {4096, 1, 256, 32}, // addr {4128, 2, 32, 4}, // flag {4156, 1, 32, 4}, // emask