/* * Copyright (C) 2018-2019 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "core/helpers/aligned_memory.h" #include "runtime/command_stream/linear_stream.h" #include "runtime/command_stream/preemption.h" #include "runtime/device/device.h" #include "runtime/helpers/preamble.h" #include "runtime/kernel/kernel.h" #include "hw_cmds.h" #include "reg_configs_common.h" #include namespace NEO { template void PreambleHelper::programThreadArbitration(LinearStream *pCommandStream, uint32_t requiredThreadArbitrationPolicy) { } template size_t PreambleHelper::getThreadArbitrationCommandsSize() { return 0; } template uint32_t PreambleHelper::getDefaultThreadArbitrationPolicy() { return 0; } template void PreambleHelper::programGenSpecificPreambleWorkArounds(LinearStream *pCommandStream, const HardwareInfo &hwInfo) { } template size_t PreambleHelper::getAdditionalCommandsSize(const Device &device) { size_t totalSize = PreemptionHelper::getRequiredPreambleSize(device); totalSize += getKernelDebuggingCommandsSize(device.isSourceLevelDebuggerActive()); return totalSize; } template void PreambleHelper::programPreamble(LinearStream *pCommandStream, Device &device, uint32_t l3Config, uint32_t requiredThreadArbitrationPolicy, GraphicsAllocation *preemptionCsr) { programL3(pCommandStream, l3Config); programThreadArbitration(pCommandStream, requiredThreadArbitrationPolicy); programPreemption(pCommandStream, device, preemptionCsr); if (device.isSourceLevelDebuggerActive()) { programKernelDebugging(pCommandStream); } programGenSpecificPreambleWorkArounds(pCommandStream, device.getHardwareInfo()); } template void PreambleHelper::programPreemption(LinearStream *pCommandStream, Device &device, GraphicsAllocation *preemptionCsr) { PreemptionHelper::programCsrBaseAddress(*pCommandStream, device, preemptionCsr); } template void PreambleHelper::programKernelDebugging(LinearStream *pCommandStream) { auto pCmd = reinterpret_cast(pCommandStream->getSpace(sizeof(MI_LOAD_REGISTER_IMM))); *pCmd = GfxFamily::cmdInitLoadRegisterImm; pCmd->setRegisterOffset(DebugModeRegisterOffset::registerOffset); pCmd->setDataDword(DebugModeRegisterOffset::debugEnabledValue); auto pCmd2 = reinterpret_cast(pCommandStream->getSpace(sizeof(MI_LOAD_REGISTER_IMM))); *pCmd2 = GfxFamily::cmdInitLoadRegisterImm; pCmd2->setRegisterOffset(TdDebugControlRegisterOffset::registerOffset); pCmd2->setDataDword(TdDebugControlRegisterOffset::debugEnabledValue); } template size_t PreambleHelper::getKernelDebuggingCommandsSize(bool debuggingActive) { if (debuggingActive) { return 2 * sizeof(MI_LOAD_REGISTER_IMM); } return 0; } } // namespace NEO