/* * Copyright (C) 2019 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "runtime/aub/aub_helper.h" #include "runtime/aub_mem_dump/page_table_entry_bits.h" #include "runtime/command_stream/command_stream_receiver_simulated_common_hw.h" #include "runtime/gmm_helper/gmm.h" #include "runtime/gmm_helper/gmm_helper.h" #include "runtime/gmm_helper/resource_info.h" #include "runtime/helpers/hardware_context_controller.h" #include "runtime/memory_manager/memory_manager.h" #include "runtime/os_interface/debug_settings_manager.h" #include "runtime/os_interface/os_context.h" #include "aub_mapper.h" #include "third_party/aub_stream/headers/aub_manager.h" namespace OCLRT { template void CommandStreamReceiverSimulatedCommonHw::initGlobalMMIO() { for (auto &mmioPair : AUBFamilyMapper::globalMMIO) { stream->writeMMIO(mmioPair.first, mmioPair.second); } } template void CommandStreamReceiverSimulatedCommonHw::initAdditionalMMIO() { if (DebugManager.flags.AubDumpAddMmioRegistersList.get() != "unk") { auto mmioList = AubHelper::getAdditionalMmioList(); for (auto &mmioPair : mmioList) { stream->writeMMIO(mmioPair.first, mmioPair.second); } } } template uint64_t CommandStreamReceiverSimulatedCommonHw::getPPGTTAdditionalBits(GraphicsAllocation *gfxAllocation) { return BIT(PageTableEntry::presentBit) | BIT(PageTableEntry::writableBit) | BIT(PageTableEntry::userSupervisorBit); } template void CommandStreamReceiverSimulatedCommonHw::getGTTData(void *memory, AubGTTData &data) { data.present = true; data.localMemory = false; } template uint32_t CommandStreamReceiverSimulatedCommonHw::getMemoryBankForGtt() const { return MemoryBanks::getBank(this->deviceIndex); } template const AubMemDump::LrcaHelper &CommandStreamReceiverSimulatedCommonHw::getCsTraits(EngineType engineType) { return *AUBFamilyMapper::csTraits[engineType]; } template void CommandStreamReceiverSimulatedCommonHw::initEngineMMIO() { auto mmioList = AUBFamilyMapper::perEngineMMIO[osContext->getEngineType()]; DEBUG_BREAK_IF(!mmioList); for (auto &mmioPair : *mmioList) { stream->writeMMIO(mmioPair.first, mmioPair.second); } } template void CommandStreamReceiverSimulatedCommonHw::submitLRCA(const MiContextDescriptorReg &contextDescriptor) { auto mmioBase = getCsTraits(osContext->getEngineType()).mmioBase; stream->writeMMIO(AubMemDump::computeRegisterOffset(mmioBase, 0x2230), 0); stream->writeMMIO(AubMemDump::computeRegisterOffset(mmioBase, 0x2230), 0); stream->writeMMIO(AubMemDump::computeRegisterOffset(mmioBase, 0x2230), contextDescriptor.ulData[1]); stream->writeMMIO(AubMemDump::computeRegisterOffset(mmioBase, 0x2230), contextDescriptor.ulData[0]); } template void CommandStreamReceiverSimulatedCommonHw::setupContext(OsContext &osContext) { CommandStreamReceiverHw::setupContext(osContext); auto engineType = osContext.getEngineType(); uint32_t flags = 0; getCsTraits(engineType).setContextSaveRestoreFlags(flags); if (aubManager && !osContext.isLowPriority()) { hardwareContextController = std::make_unique(*aubManager, osContext, flags); } } template bool CommandStreamReceiverSimulatedCommonHw::getParametersForWriteMemory(GraphicsAllocation &graphicsAllocation, uint64_t &gpuAddress, void *&cpuAddress, size_t &size) const { cpuAddress = ptrOffset(graphicsAllocation.getUnderlyingBuffer(), static_cast(graphicsAllocation.getAllocationOffset())); gpuAddress = GmmHelper::decanonize(graphicsAllocation.getGpuAddress()); size = graphicsAllocation.getUnderlyingBufferSize(); auto gmm = graphicsAllocation.getDefaultGmm(); if (gmm && gmm->isRenderCompressed) { size = gmm->gmmResourceInfo->getSizeAllocation(); } if ((size == 0) || !graphicsAllocation.isAubWritable()) return false; if (cpuAddress == nullptr) { cpuAddress = this->getMemoryManager()->lockResource(&graphicsAllocation); } return true; } template void CommandStreamReceiverSimulatedCommonHw::expectMemoryEqual(void *gfxAddress, const void *srcAddress, size_t length) { this->expectMemory(gfxAddress, srcAddress, length, AubMemDump::CmdServicesMemTraceMemoryCompare::CompareOperationValues::CompareEqual); } template void CommandStreamReceiverSimulatedCommonHw::expectMemoryNotEqual(void *gfxAddress, const void *srcAddress, size_t length) { this->expectMemory(gfxAddress, srcAddress, length, AubMemDump::CmdServicesMemTraceMemoryCompare::CompareOperationValues::CompareNotEqual); } } // namespace OCLRT