Skip to content

Commit a203cd2

Browse files
Add sip kernel as hexadecimal array header
Signed-off-by: Kamil Kopryk <[email protected]> Related-To: NEO-5777
1 parent c051495 commit a203cd2

File tree

21 files changed

+230
-21
lines changed

21 files changed

+230
-21
lines changed

level_zero/core/test/unit_tests/sources/debugger/active_debugger_fixture.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "shared/test/common/mocks/mock_compilers.h"
1111
#include "shared/test/common/mocks/mock_device.h"
1212
#include "shared/test/common/mocks/mock_os_library.h"
13+
#include "shared/test/common/mocks/mock_sip.h"
1314

1415
#include "opencl/test/unit_test/mocks/mock_source_level_debugger.h"
1516

@@ -39,6 +40,11 @@ struct ActiveDebuggerFixture {
3940
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
4041
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
4142

43+
auto isHexadecimalArrayPrefered = HwHelper::get(hwInfo.platform.eRenderCoreFamily).isSipKernelAsHexadecimalArrayPreferred();
44+
if (isHexadecimalArrayPrefered) {
45+
MockSipData::useMockSip = true;
46+
}
47+
4248
debugger = new MockActiveSourceLevelDebugger(new MockOsLibrary);
4349
executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(debugger);
4450
executionEnvironment->initializeMemoryManager();
@@ -70,6 +76,9 @@ struct ActiveDebuggerFixture {
7076
L0::Device *deviceL0;
7177
MockActiveSourceLevelDebugger *debugger = nullptr;
7278
HardwareInfo hwInfo;
79+
VariableBackup<bool> mockSipCalled{&NEO::MockSipData::called};
80+
VariableBackup<NEO::SipKernelType> mockSipCalledType{&NEO::MockSipData::calledType};
81+
VariableBackup<bool> backupSipInitType{&MockSipData::useMockSip};
7382
};
7483
} // namespace ult
7584
} // namespace L0

level_zero/core/test/unit_tests/sources/debugger/l0_debugger_fixture.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "shared/test/common/mocks/mock_compilers.h"
1010
#include "shared/test/common/mocks/mock_device.h"
1111
#include "shared/test/common/mocks/mock_memory_operations_handler.h"
12+
#include "shared/test/common/mocks/mock_sip.h"
1213

1314
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
1415
#include "level_zero/core/test/unit_tests/mocks/mock_built_ins.h"
@@ -30,6 +31,12 @@ struct L0DebuggerFixture {
3031

3132
hwInfo = *NEO::defaultHwInfo.get();
3233
hwInfo.featureTable.ftrLocalMemory = true;
34+
35+
auto isHexadecimalArrayPrefered = HwHelper::get(hwInfo.platform.eRenderCoreFamily).isSipKernelAsHexadecimalArrayPreferred();
36+
if (isHexadecimalArrayPrefered) {
37+
MockSipData::useMockSip = true;
38+
}
39+
3340
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
3441
executionEnvironment->initializeMemoryManager();
3542

@@ -52,6 +59,9 @@ struct L0DebuggerFixture {
5259
L0::Device *device = nullptr;
5360
NEO::HardwareInfo hwInfo;
5461
MockMemoryOperations *memoryOperationsHandler = nullptr;
62+
VariableBackup<bool> mockSipCalled{&NEO::MockSipData::called};
63+
VariableBackup<NEO::SipKernelType> mockSipCalledType{&NEO::MockSipData::calledType};
64+
VariableBackup<bool> backupSipInitType{&MockSipData::useMockSip};
5565
};
5666

5767
struct L0DebuggerHwFixture : public L0DebuggerFixture {

level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger.cpp

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingSipAllocationThenValidSipTypeIs
5353
ASSERT_NE(nullptr, systemRoutine);
5454

5555
auto sipType = SipKernel::getSipKernelType(*neoDevice);
56-
auto expectedSipAllocation = neoDevice->getBuiltIns()->getSipKernel(sipType, *neoDevice).getSipAllocation();
56+
auto isHexadecimalArrayPreferred = HwHelper::get(hwInfo.platform.eRenderCoreFamily).isSipKernelAsHexadecimalArrayPreferred();
57+
58+
auto expectedSipAllocation = isHexadecimalArrayPreferred
59+
? NEO::MockSipData::mockSipKernel->getSipAllocation()
60+
: neoDevice->getBuiltIns()->getSipKernel(sipType, *neoDevice).getSipAllocation();
5761

5862
EXPECT_EQ(expectedSipAllocation, systemRoutine);
5963
}
@@ -69,9 +73,13 @@ TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingStateSaveAreaHeaderThenValidSip
6973

7074
TEST(Debugger, givenL0DebuggerOFFWhenGettingStateSaveAreaHeaderThenValidSipTypeIsReturned) {
7175
auto executionEnvironment = new NEO::ExecutionEnvironment();
72-
auto mockBuiltIns = new MockBuiltins();
7376
executionEnvironment->prepareRootDeviceEnvironments(1);
74-
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
77+
78+
auto isHexadecimalArrayPreferred = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).isSipKernelAsHexadecimalArrayPreferred();
79+
if (!isHexadecimalArrayPreferred) {
80+
auto mockBuiltIns = new MockBuiltins();
81+
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
82+
}
7583
auto hwInfo = *NEO::defaultHwInfo.get();
7684
hwInfo.featureTable.ftrLocalMemory = true;
7785
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
@@ -84,13 +92,20 @@ TEST(Debugger, givenL0DebuggerOFFWhenGettingStateSaveAreaHeaderThenValidSipTypeI
8492
driverHandle->enableProgramDebugging = false;
8593

8694
driverHandle->initialize(std::move(devices));
95+
auto sipType = SipKernel::getSipKernelType(*neoDevice);
8796

97+
if (isHexadecimalArrayPreferred) {
98+
SipKernel::initSipKernel(sipType, *neoDevice);
99+
}
88100
auto &stateSaveAreaHeader = SipKernel::getSipKernel(*neoDevice).getStateSaveAreaHeader();
89101

90-
auto sipType = SipKernel::getSipKernelType(*neoDevice);
91-
auto &expectedStateSaveAreaHeader = neoDevice->getBuiltIns()->getSipKernel(sipType, *neoDevice).getStateSaveAreaHeader();
92-
93-
EXPECT_EQ(expectedStateSaveAreaHeader, stateSaveAreaHeader);
102+
if (isHexadecimalArrayPreferred) {
103+
auto &expectedStateSaveAreaHeader = neoDevice->getRootDeviceEnvironment().sipKernels[static_cast<uint32_t>(sipType)]->getStateSaveAreaHeader();
104+
EXPECT_EQ(expectedStateSaveAreaHeader, stateSaveAreaHeader);
105+
} else {
106+
auto &expectedStateSaveAreaHeader = neoDevice->getBuiltIns()->getSipKernel(sipType, *neoDevice).getStateSaveAreaHeader();
107+
EXPECT_EQ(expectedStateSaveAreaHeader, stateSaveAreaHeader);
108+
}
94109
}
95110

96111
HWTEST_F(L0DebuggerTest, givenL0DebuggerWhenCreatedThenPerContextSbaTrackingBuffersAreAllocated) {
@@ -195,7 +210,7 @@ HWTEST_F(L0DebuggerTest, givenDebuggingEnabledWhenCommandListIsExecutedThenValid
195210

196211
auto systemRoutine = SipKernel::getSipKernel(*neoDevice).getSipAllocation();
197212
ASSERT_NE(nullptr, systemRoutine);
198-
EXPECT_EQ(systemRoutine->getGpuAddress(), stateSip->getSystemInstructionPointer());
213+
EXPECT_EQ(systemRoutine->getGpuAddressToPatch(), stateSip->getSystemInstructionPointer());
199214
}
200215

201216
for (auto i = 0u; i < numCommandLists; i++) {

opencl/test/unit_test/command_queue/command_queue_hw_tests.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,9 @@ struct OOQueueHwTest : public ClDeviceFixture,
8484
HWTEST_F(CommandQueueHwTest, WhenConstructingTwoCommandQueuesThenOnlyOneDebugSurfaceIsAllocated) {
8585
ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment();
8686
executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(new MockActiveSourceLevelDebugger(new MockOsLibrary));
87-
8887
auto device = std::make_unique<MockClDevice>(MockDevice::create<MockDeviceWithDebuggerActive>(executionEnvironment, 0u));
88+
auto sipType = SipKernel::getSipKernelType(device->getDevice());
89+
SipKernel::initSipKernel(sipType, device->getDevice());
8990

9091
MockCommandQueueHw<FamilyType> mockCmdQueueHw1(context, device.get(), nullptr);
9192

opencl/test/unit_test/command_queue/enqueue_debug_kernel_tests.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ class EnqueueDebugKernelTest : public ProgramSimpleFixture,
3636
device = pClDevice;
3737
pDevice->executionEnvironment->rootDeviceEnvironments[pDevice->getRootDeviceIndex()]->debugger.reset(new SourceLevelDebugger(nullptr));
3838

39+
auto sipType = SipKernel::getSipKernelType(*pDevice);
40+
SipKernel::initSipKernel(sipType, *pDevice);
41+
3942
if (pDevice->getHardwareInfo().platform.eRenderCoreFamily >= IGFX_GEN9_CORE) {
4043
pDevice->deviceInfo.debuggerActive = true;
4144
std::string filename;

opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_1_tests.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInBatchingModeAndMidThread
188188

189189
DispatchFlags dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
190190
dispatchFlags.preemptionMode = PreemptionMode::MidThread;
191+
auto sipType = SipKernel::getSipKernelType(*pDevice);
192+
SipKernel::initSipKernel(sipType, *pDevice);
191193

192194
mockCsr.flushTask(commandStream,
193195
0,
@@ -219,6 +221,8 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInDefaultModeAndMidThreadP
219221

220222
DispatchFlags dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
221223
dispatchFlags.preemptionMode = PreemptionMode::MidThread;
224+
auto sipType = SipKernel::getSipKernelType(*pDevice);
225+
SipKernel::initSipKernel(sipType, *pDevice);
222226

223227
mockCsr->flushTask(commandStream,
224228
0,

opencl/test/unit_test/helpers/hw_helper_tests.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1307,6 +1307,30 @@ HWTEST_F(HwHelperTest, whenSetRenderCompressedFlagThenProperFlagSet) {
13071307
EXPECT_EQ(0u, gmm->resourceParams.Flags.Info.RenderCompressed);
13081308
}
13091309

1310+
HWTEST_F(HwHelperTest, whenAdjustPreemptionSurfaceSizeIsCalledThenCsrSizeDoesntChange) {
1311+
auto &hwHelper = HwHelper::get(renderCoreFamily);
1312+
size_t csrSize = 1024;
1313+
size_t oldCsrSize = csrSize;
1314+
hwHelper.adjustPreemptionSurfaceSize(csrSize);
1315+
EXPECT_EQ(oldCsrSize, csrSize);
1316+
}
1317+
1318+
HWTEST_F(HwHelperTest, whenSetSipKernelDataIsCalledThenSipKernelDataDoesntChange) {
1319+
auto &hwHelper = HwHelper::get(renderCoreFamily);
1320+
uint32_t *sipKernelBinary = nullptr;
1321+
uint32_t *oldSipKernelBinary = sipKernelBinary;
1322+
size_t kernelBinarySize = 1024;
1323+
size_t oldKernelBinarySize = kernelBinarySize;
1324+
hwHelper.setSipKernelData(sipKernelBinary, kernelBinarySize);
1325+
EXPECT_EQ(oldKernelBinarySize, kernelBinarySize);
1326+
EXPECT_EQ(oldSipKernelBinary, sipKernelBinary);
1327+
}
1328+
1329+
HWTEST_F(HwHelperTest, whenIsSipKernelAsHexadecimalArrayPreferredIsCalledThenReturnFalse) {
1330+
auto &hwHelper = HwHelper::get(renderCoreFamily);
1331+
EXPECT_FALSE(hwHelper.isSipKernelAsHexadecimalArrayPreferred());
1332+
}
1333+
13101334
using isXeHpCoreOrBelow = IsAtMostProduct<IGFX_XE_HP_SDV>;
13111335
HWTEST2_F(HwHelperTest, givenXeHPAndBelowPlatformWhenCheckingIfAdditionalPipeControlArgsAreRequiredThenReturnFalse, isXeHpCoreOrBelow) {
13121336
const auto &hwHelper = HwHelper::get(renderCoreFamily);

opencl/test/unit_test/os_interface/device_factory_tests.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,11 @@ TEST_F(DeviceFactoryTest, givenPointerToHwInfoWhenGetDevicedCalledThenRequiedSur
176176
ASSERT_TRUE(success);
177177
auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo();
178178

179-
EXPECT_EQ(hwInfo->gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte, hwInfo->capabilityTable.requiredPreemptionSurfaceSize);
179+
const auto &hwHelper = HwHelper::get(hwInfo->platform.eRenderCoreFamily);
180+
auto expextedSize = static_cast<size_t>(hwInfo->gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte);
181+
hwHelper.adjustPreemptionSurfaceSize(expextedSize);
182+
183+
EXPECT_EQ(expextedSize, hwInfo->capabilityTable.requiredPreemptionSurfaceSize);
180184
}
181185

182186
TEST_F(DeviceFactoryTest, givenCreateMultipleRootDevicesDebugFlagWhenPrepareDeviceEnvironmentsIsCalledThenNumberOfReturnedDevicesIsEqualToDebugVariable) {

opencl/test/unit_test/os_interface/linux/hw_info_config_linux_tests.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,9 @@ TEST_F(HwInfoConfigTestLinuxDummy, givenPointerToHwInfoWhenConfigureHwInfoCalled
449449
EXPECT_EQ(MemoryConstants::pageSize, pInHwInfo.capabilityTable.requiredPreemptionSurfaceSize);
450450
int ret = hwConfig.configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
451451
EXPECT_EQ(0, ret);
452-
EXPECT_EQ(outHwInfo.gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte, outHwInfo.capabilityTable.requiredPreemptionSurfaceSize);
452+
auto expectedSize = static_cast<size_t>(outHwInfo.gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte);
453+
HwHelper::get(outHwInfo.platform.eRenderCoreFamily).adjustPreemptionSurfaceSize(expectedSize);
454+
EXPECT_EQ(expectedSize, outHwInfo.capabilityTable.requiredPreemptionSurfaceSize);
453455
}
454456

455457
TEST_F(HwInfoConfigTestLinuxDummy, givenInstrumentationForHardwareIsEnabledOrDisabledWhenConfiguringHwInfoThenOverrideItUsingHaveInstrumentation) {

opencl/test/unit_test/source_level_debugger/source_level_debugger_csr_tests.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
HWTEST_F(CommandStreamReceiverWithActiveDebuggerTest, givenCsrWithActiveDebuggerAndDisabledPreemptionWhenFlushTaskIsCalledThenSipKernelIsMadeResident) {
2323

2424
auto mockCsr = createCSR<FamilyType>();
25+
auto sipType = SipKernel::getSipKernelType(device->getDevice());
26+
SipKernel::initSipKernel(sipType, device->getDevice());
2527

2628
CommandQueueHw<FamilyType> commandQueue(nullptr, device.get(), 0, false);
2729
auto &commandStream = commandQueue.getCS(4096u);

0 commit comments

Comments
 (0)