diff --git a/runtime/gen8/preamble_gen8.cpp b/runtime/gen8/preamble_gen8.cpp index f4b84c3595..ed89e51e9f 100644 --- a/runtime/gen8/preamble_gen8.cpp +++ b/runtime/gen8/preamble_gen8.cpp @@ -31,6 +31,11 @@ uint32_t PreambleHelper::getL3Config(const HardwareInfo &hwInfo, bool return l3Config; } +template <> +bool PreambleHelper::isL3Configurable(const HardwareInfo &hwInfo) { + return getL3Config(hwInfo, true) != getL3Config(hwInfo, false); +} + template <> void PreambleHelper::programPipelineSelect(LinearStream *pCommandStream, const DispatchFlags &dispatchFlags, diff --git a/runtime/gen9/preamble_gen9.cpp b/runtime/gen9/preamble_gen9.cpp index 9bf85e8807..4cfd423181 100644 --- a/runtime/gen9/preamble_gen9.cpp +++ b/runtime/gen9/preamble_gen9.cpp @@ -27,6 +27,11 @@ uint32_t PreambleHelper::getL3Config(const HardwareInfo &hwInfo, bool return l3Config; } +template <> +bool PreambleHelper::isL3Configurable(const HardwareInfo &hwInfo) { + return getL3Config(hwInfo, true) != getL3Config(hwInfo, false); +} + template <> void PreambleHelper::programPipelineSelect(LinearStream *pCommandStream, const DispatchFlags &dispatchFlags, diff --git a/runtime/helpers/preamble.h b/runtime/helpers/preamble.h index caeb028286..a0bc86cc72 100644 --- a/runtime/helpers/preamble.h +++ b/runtime/helpers/preamble.h @@ -43,6 +43,7 @@ struct PreambleHelper { uint32_t requiredThreadArbitrationPolicy, GraphicsAllocation *preemptionCsr); static void programKernelDebugging(LinearStream *pCommandStream); static uint32_t getL3Config(const HardwareInfo &hwInfo, bool useSLM); + static bool isL3Configurable(const HardwareInfo &hwInfo); static size_t getAdditionalCommandsSize(const Device &device); static size_t getThreadArbitrationCommandsSize(); static size_t getVFECommandsSize(); diff --git a/runtime/helpers/preamble_base.inl b/runtime/helpers/preamble_base.inl index 3d92f0add8..e84ffc5ffb 100644 --- a/runtime/helpers/preamble_base.inl +++ b/runtime/helpers/preamble_base.inl @@ -82,4 +82,9 @@ size_t PreambleHelper::getKernelDebuggingCommandsSize(bool debuggingA return 0; } +template +bool PreambleHelper::isL3Configurable(const HardwareInfo &hwInfo) { + return false; +} + } // namespace NEO diff --git a/unit_tests/gen11/test_preamble_gen11.cpp b/unit_tests/gen11/test_preamble_gen11.cpp index 039c04936d..433377b86e 100644 --- a/unit_tests/gen11/test_preamble_gen11.cpp +++ b/unit_tests/gen11/test_preamble_gen11.cpp @@ -40,6 +40,13 @@ GEN11TEST_F(IclSlm, givenGen11WhenProgramingL3ThenErrorDetectionBehaviorControlB EXPECT_TRUE((l3Config & errorDetectionBehaviorControlBit) != 0); } +GEN11TEST_F(IclSlm, givenGen11IsL3Programing) { + bool isL3Programmable = + PreambleHelper::isL3Configurable(**platformDevices); + + EXPECT_FALSE(isL3Programmable); +} + typedef PreambleFixture Gen11UrbEntryAllocationSize; GEN11TEST_F(Gen11UrbEntryAllocationSize, getUrbEntryAllocationSize) { uint32_t actualVal = PreambleHelper::getUrbEntryAllocationSize(); diff --git a/unit_tests/gen8/test_preamble_gen8.cpp b/unit_tests/gen8/test_preamble_gen8.cpp index de1f114165..457daf9d0e 100644 --- a/unit_tests/gen8/test_preamble_gen8.cpp +++ b/unit_tests/gen8/test_preamble_gen8.cpp @@ -57,6 +57,19 @@ BDWTEST_F(Gen8L3Config, checkSLM) { EXPECT_TRUE((l3Config & errorDetectionBehaviorControlBit) != 0); } +BDWTEST_F(Gen8L3Config, givenGen8IsL3Programing) { + bool l3ConfigDifference; + bool isL3Programmable; + + l3ConfigDifference = + PreambleHelper::getL3Config(**platformDevices, true) != + PreambleHelper::getL3Config(**platformDevices, false); + isL3Programmable = + PreambleHelper::isL3Configurable(**platformDevices); + + EXPECT_EQ(l3ConfigDifference, isL3Programmable); +} + typedef PreambleFixture ThreadArbitrationGen8; BDWTEST_F(ThreadArbitrationGen8, givenPolicyWhenThreadArbitrationProgrammedThenDoNothing) { typedef BDWFamily::MI_LOAD_REGISTER_IMM MI_LOAD_REGISTER_IMM; diff --git a/unit_tests/gen9/preamble_tests_gen9.cpp b/unit_tests/gen9/preamble_tests_gen9.cpp index 65556bc0b6..7615b03fef 100644 --- a/unit_tests/gen9/preamble_tests_gen9.cpp +++ b/unit_tests/gen9/preamble_tests_gen9.cpp @@ -48,3 +48,16 @@ GEN9TEST_F(PreambleTestGen9, givenDisabledPreemptionAndDisabledDebuggingWhenPrea GEN9TEST_F(PreambleTestGen9, givenKernelDebuggingActiveAndDisabledPreemptionWhenGetAdditionalCommandsSizeIsCalledThen2MiLoadRegisterImmCmdsAreInlcuded) { SourceLevelDebuggerPreambleTest::givenKernelDebuggingActiveAndDisabledPreemptionWhenGetAdditionalCommandsSizeIsCalledThen2MiLoadRegisterImmCmdsAreInlcudedTest(); } + +GEN9TEST_F(PreambleTestGen9, givenGen9IsL3Programing) { + bool l3ConfigDifference; + bool isL3Programmable; + + l3ConfigDifference = + PreambleHelper::getL3Config(**platformDevices, true) != + PreambleHelper::getL3Config(**platformDevices, false); + isL3Programmable = + PreambleHelper::isL3Configurable(**platformDevices); + + EXPECT_EQ(l3ConfigDifference, isL3Programmable); +}