/* * Copyright (C) 2019-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/source/gen12lp/hw_cmds.h" #include "opencl/source/command_queue/gpgpu_walker_bdw_and_later.inl" #include "opencl/source/command_queue/hardware_interface_bdw_and_later.inl" namespace NEO { template <> void GpgpuWalkerHelper::adjustMiStoreRegMemMode(MI_STORE_REG_MEM *storeCmd) { storeCmd->setMmioRemapEnable(true); } template <> void HardwareInterface::dispatchWorkarounds( LinearStream *commandStream, CommandQueue &commandQueue, Kernel &kernel, const bool &enable) { using MI_LOAD_REGISTER_IMM = typename TGLLPFamily::MI_LOAD_REGISTER_IMM; using PIPE_CONTROL = typename TGLLPFamily::PIPE_CONTROL; if (kernel.requiresWaDisableRccRhwoOptimization()) { PIPE_CONTROL cmdPipeControl = TGLLPFamily::cmdInitPipeControl; cmdPipeControl.setCommandStreamerStallEnable(true); auto pCmdPipeControl = commandStream->getSpaceForCmd(); *pCmdPipeControl = cmdPipeControl; uint32_t value = enable ? 0x40004000 : 0x40000000; NEO::LriHelper::program(commandStream, 0x7010, value, false); } } template <> size_t GpgpuWalkerHelper::getSizeForWaDisableRccRhwoOptimization(const Kernel *pKernel) { if (pKernel->requiresWaDisableRccRhwoOptimization()) { return (2 * (sizeof(TGLLPFamily::PIPE_CONTROL) + sizeof(TGLLPFamily::MI_LOAD_REGISTER_IMM))); } return 0u; } template class HardwareInterface; template class GpgpuWalkerHelper; template struct EnqueueOperation; } // namespace NEO