Skip to content

Commit d7c56eb

Browse files
Fix GPU debugging on gen11+
Format of debug mode register changed for gen11+ projects. Without this change, the SIP is never invoked. Change-Id: Ie8314acbee1ead527deeea45cb5689b4a39df24c
1 parent 0efcda4 commit d7c56eb

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

core/helpers/preamble.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,10 @@ struct L3CNTLRegisterOffset {
8181
};
8282

8383
namespace DebugModeRegisterOffset {
84-
static constexpr uint32_t registerOffset = 0x20ec;
85-
static constexpr uint32_t debugEnabledValue = (1 << 6) | (1 << 22);
84+
template <typename GfxFamily>
85+
constexpr uint32_t registerOffset = 0x20ec;
86+
template <typename GfxFamily>
87+
constexpr uint32_t debugEnabledValue = (1 << 6) | (1 << 22);
8688
}; // namespace DebugModeRegisterOffset
8789

8890
namespace TdDebugControlRegisterOffset {

core/helpers/preamble_base.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ template <typename GfxFamily>
8989
void PreambleHelper<GfxFamily>::programKernelDebugging(LinearStream *pCommandStream) {
9090
auto pCmd = reinterpret_cast<MI_LOAD_REGISTER_IMM *>(pCommandStream->getSpace(sizeof(MI_LOAD_REGISTER_IMM)));
9191
*pCmd = GfxFamily::cmdInitLoadRegisterImm;
92-
pCmd->setRegisterOffset(DebugModeRegisterOffset::registerOffset);
93-
pCmd->setDataDword(DebugModeRegisterOffset::debugEnabledValue);
92+
pCmd->setRegisterOffset(DebugModeRegisterOffset::registerOffset<GfxFamily>);
93+
pCmd->setDataDword(DebugModeRegisterOffset::debugEnabledValue<GfxFamily>);
9494

9595
auto pCmd2 = reinterpret_cast<MI_LOAD_REGISTER_IMM *>(pCommandStream->getSpace(sizeof(MI_LOAD_REGISTER_IMM)));
9696
*pCmd2 = GfxFamily::cmdInitLoadRegisterImm;

core/unit_tests/preamble/preamble_tests.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "core/unit_tests/helpers/debug_manager_state_restore.h"
1010
#include "core/utilities/stackvec.h"
1111
#include "runtime/command_stream/preemption.h"
12+
#include "runtime/gen11/reg_configs.h"
1213
#include "runtime/helpers/flat_batch_buffer_helper_hw.h"
1314
#include "test.h"
1415
#include "unit_tests/helpers/hw_parse.h"
@@ -120,9 +121,8 @@ HWTEST_F(PreambleTest, whenKernelDebuggingCommandsAreProgrammedThenCorrectComman
120121
auto it = cmdList.begin();
121122

122123
MI_LOAD_REGISTER_IMM *pCmd = reinterpret_cast<MI_LOAD_REGISTER_IMM *>(*it);
123-
EXPECT_EQ(DebugModeRegisterOffset::registerOffset, pCmd->getRegisterOffset());
124-
EXPECT_EQ(DebugModeRegisterOffset::debugEnabledValue, pCmd->getDataDword());
125-
124+
EXPECT_EQ(DebugModeRegisterOffset::registerOffset<FamilyType>, pCmd->getRegisterOffset());
125+
EXPECT_EQ(DebugModeRegisterOffset::debugEnabledValue<FamilyType>, pCmd->getDataDword());
126126
it++;
127127

128128
pCmd = reinterpret_cast<MI_LOAD_REGISTER_IMM *>(*it);

runtime/gen11/reg_configs.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ struct L3CNTLRegisterOffset<ICLFamily> {
2323
static const uint32_t registerOffset = 0x7034;
2424
};
2525

26+
namespace DebugModeRegisterOffset {
27+
template <>
28+
constexpr uint32_t registerOffset<ICLFamily> = 0x20d8;
29+
template <>
30+
constexpr uint32_t debugEnabledValue<ICLFamily> = (1 << 5) | (1 << 21);
31+
}; // namespace DebugModeRegisterOffset
32+
2633
namespace gen11HdcModeRegister {
2734
const uint32_t address = 0xE5F4;
2835
const uint32_t forceNonCoherentEnableBit = 4;

0 commit comments

Comments
 (0)