diff --git a/runtime/hsa-runtime/core/inc/amd_blit_sdma.h b/runtime/hsa-runtime/core/inc/amd_blit_sdma.h index a5e62ca273..82d9dbeb16 100644 --- a/runtime/hsa-runtime/core/inc/amd_blit_sdma.h +++ b/runtime/hsa-runtime/core/inc/amd_blit_sdma.h @@ -73,11 +73,7 @@ class BlitSdmaBase : public core::Blit { core::Signal& out_signal) = 0; }; -// RingIndexTy: 32/64-bit monotonic ring index, counting in bytes. -// HwIndexMonotonic: true if SDMA HW index is monotonic, false if it wraps at end of ring. -// SizeToCountOffset: value added to size (in bytes) to form SDMA command count field. -template -class BlitSdma : public BlitSdmaBase { +template class BlitSdma : public BlitSdmaBase { public: BlitSdma(); @@ -163,9 +159,9 @@ class BlitSdma : public BlitSdmaBase { /// could be written. NULL if input size is greater than the size of queue /// buffer. - char* AcquireWriteAddress(uint32_t cmd_size, RingIndexTy& curr_index); + char* AcquireWriteAddress(uint32_t cmd_size, uint64_t& curr_index); - void UpdateWriteAndDoorbellRegister(RingIndexTy curr_index, RingIndexTy new_index); + void UpdateWriteAndDoorbellRegister(uint64_t curr_index, uint64_t new_index); /// @brief Updates the Write Register of compute device to the end of /// SDMA packet written into queue buffer. The update to Write Register @@ -178,16 +174,16 @@ class BlitSdma : public BlitSdmaBase { /// @param curr_index Index passed back from AcquireWriteAddress. /// /// @param cmd_size Command packet size in bytes. - void ReleaseWriteAddress(RingIndexTy curr_index, uint32_t cmd_size); + void ReleaseWriteAddress(uint64_t curr_index, uint32_t cmd_size); /// @brief Writes NO-OP words into queue buffer in case writing a command /// causes the queue buffer to wrap. /// /// @param curr_index Index to begin padding from. - void PadRingToEnd(RingIndexTy curr_index); + void PadRingToEnd(uint64_t curr_index); - uint32_t WrapIntoRing(RingIndexTy index); - bool CanWriteUpto(RingIndexTy upto_index); + uint32_t WrapIntoRing(uint64_t index); + bool CanWriteUpto(uint64_t upto_index); /// @brief Build fence command void BuildFenceCommand(char* fence_command_addr, uint32_t* fence, @@ -265,8 +261,8 @@ class BlitSdma : public BlitSdmaBase { HsaQueueResource queue_resource_; // Monotonic ring indices, in bytes, tracking written and submitted commands. - RingIndexTy cached_reserve_index_; - RingIndexTy cached_commit_index_; + uint64_t cached_reserve_index_; + uint64_t cached_commit_index_; static const uint32_t linear_copy_command_size_; @@ -314,21 +310,11 @@ class BlitSdma : public BlitSdmaBase { size_t min_submission_size_; }; -// Ring indices are 32-bit. -// HW ring indices are not monotonic (wrap at end of ring). -// Count fields of SDMA commands are 0-based. -typedef BlitSdma BlitSdmaV2V3; -// Ring indices are 64-bit. -// HW ring indices are monotonic (do not wrap at end of ring). -// Count fields of SDMA commands are 1-based. -typedef BlitSdma BlitSdmaV4; +typedef BlitSdma BlitSdmaV4; -// Ring indices are 64-bit. -// HW ring indices are monotonic (do not wrap at end of ring). -// Count fields of SDMA commands are 1-based. // SDMA is connected to gL2. -typedef BlitSdma BlitSdmaV5; +typedef BlitSdma BlitSdmaV5; } // namespace amd } // namespace rocr diff --git a/runtime/hsa-runtime/core/runtime/amd_blit_sdma.cpp b/runtime/hsa-runtime/core/runtime/amd_blit_sdma.cpp index 71b46d3447..0875994cbb 100644 --- a/runtime/hsa-runtime/core/runtime/amd_blit_sdma.cpp +++ b/runtime/hsa-runtime/core/runtime/amd_blit_sdma.cpp @@ -77,44 +77,33 @@ const size_t BlitSdmaBase::kMaxSingleCopySize = SDMA_PKT_COPY_LINEAR::kMaxSize_; const size_t BlitSdmaBase::kMaxSingleFillSize = SDMA_PKT_CONSTANT_FILL::kMaxSize_; // Initialize size of various sDMA commands use by this module -template -const uint32_t BlitSdma::linear_copy_command_size_ = sizeof(SDMA_PKT_COPY_LINEAR); +template +const uint32_t BlitSdma::linear_copy_command_size_ = sizeof(SDMA_PKT_COPY_LINEAR); -template -const uint32_t BlitSdma::fill_command_size_ = sizeof(SDMA_PKT_CONSTANT_FILL); +template +const uint32_t BlitSdma::fill_command_size_ = sizeof(SDMA_PKT_CONSTANT_FILL); -template -const uint32_t BlitSdma::fence_command_size_ = sizeof(SDMA_PKT_FENCE); +template +const uint32_t BlitSdma::fence_command_size_ = sizeof(SDMA_PKT_FENCE); -template -const uint32_t BlitSdma::poll_command_size_ = sizeof(SDMA_PKT_POLL_REGMEM); +template +const uint32_t BlitSdma::poll_command_size_ = sizeof(SDMA_PKT_POLL_REGMEM); -template -const uint32_t BlitSdma::flush_command_size_ = sizeof(SDMA_PKT_POLL_REGMEM); +template +const uint32_t BlitSdma::flush_command_size_ = sizeof(SDMA_PKT_POLL_REGMEM); -template -const uint32_t BlitSdma::atomic_command_size_ = sizeof(SDMA_PKT_ATOMIC); +template +const uint32_t BlitSdma::atomic_command_size_ = sizeof(SDMA_PKT_ATOMIC); -template -const uint32_t BlitSdma::timestamp_command_size_ = sizeof(SDMA_PKT_TIMESTAMP); +template +const uint32_t BlitSdma::timestamp_command_size_ = sizeof(SDMA_PKT_TIMESTAMP); -template -const uint32_t BlitSdma::trap_command_size_ = sizeof(SDMA_PKT_TRAP); +template const uint32_t BlitSdma::trap_command_size_ = sizeof(SDMA_PKT_TRAP); -template -const uint32_t BlitSdma::gcr_command_size_ = sizeof(SDMA_PKT_GCR); +template const uint32_t BlitSdma::gcr_command_size_ = sizeof(SDMA_PKT_GCR); -template -BlitSdma::BlitSdma() +template +BlitSdma::BlitSdma() : agent_(NULL), queue_start_addr_(NULL), bytes_queued_(0), @@ -129,12 +118,11 @@ BlitSdma::BlitSdma() std::memset(&queue_resource_, 0, sizeof(queue_resource_)); } -template -BlitSdma::~BlitSdma() {} +template BlitSdma::~BlitSdma() {} -template -hsa_status_t BlitSdma::Initialize( - const core::Agent& agent, bool use_xgmi, size_t linear_copy_size_override, int rec_eng) { +template +hsa_status_t BlitSdma::Initialize(const core::Agent& agent, bool use_xgmi, + size_t linear_copy_size_override, int rec_eng) { if (queue_start_addr_ != NULL) { // Already initialized. return HSA_STATUS_SUCCESS; @@ -201,7 +189,7 @@ hsa_status_t BlitSdma: return HSA_STATUS_ERROR_OUT_OF_RESOURCES; } - cached_reserve_index_ = *reinterpret_cast(queue_resource_.Queue_write_ptr); + cached_reserve_index_ = *reinterpret_cast(queue_resource_.Queue_write_ptr); cached_commit_index_ = cached_reserve_index_; if (core::g_use_interrupt_wait) { @@ -218,9 +206,7 @@ hsa_status_t BlitSdma: return HSA_STATUS_SUCCESS; } -template -hsa_status_t BlitSdma::Destroy( - const core::Agent& agent) { +template hsa_status_t BlitSdma::Destroy(const core::Agent& agent) { // Release all allocated resources and reset them to zero. if (queue_resource_.QueueId != 0) { @@ -245,9 +231,8 @@ hsa_status_t BlitSdma: return HSA_STATUS_SUCCESS; } -template -hsa_status_t BlitSdma::SubmitBlockingCommand(const void* cmd, size_t cmd_size, +template +hsa_status_t BlitSdma::SubmitBlockingCommand(const void* cmd, size_t cmd_size, uint64_t size) { ScopedAcquire lock(&lock_); @@ -278,11 +263,11 @@ hsa_status_t BlitSdma -hsa_status_t BlitSdma::SubmitCommand( - const void* cmd, size_t cmd_size, uint64_t size, const std::vector& dep_signals, - core::Signal& out_signal, std::vector& gang_signals) { - +template +hsa_status_t BlitSdma::SubmitCommand(const void* cmd, size_t cmd_size, uint64_t size, + const std::vector& dep_signals, + core::Signal& out_signal, + std::vector& gang_signals) { uint32_t num_poll_command = 0; // Cached copy of dep_signals[i]->LoadRelaxed @@ -355,9 +340,7 @@ hsa_status_t BlitSdma: // Add space for acquire or release Hdp flush command uint32_t flush_cmd_size = 0; if (core::Runtime::runtime_singleton_->flag().enable_sdma_hdp_flush()) { - if ((HwIndexMonotonic) && (hdp_flush_support_)) { - flush_cmd_size = flush_command_size_; - } + if (hdp_flush_support_) flush_cmd_size = flush_command_size_; } // Add space for cache flush. @@ -368,7 +351,7 @@ hsa_status_t BlitSdma: const uint32_t pad_size = total_command_size < min_submission_size_ ? min_submission_size_ - total_command_size : 0; - RingIndexTy curr_index; + uint64_t curr_index; char* command_addr; uint64_t prior_bytes, post_bytes; { @@ -426,7 +409,7 @@ hsa_status_t BlitSdma: // Issue a Hdp flush cmd if (core::Runtime::runtime_singleton_->flag().enable_sdma_hdp_flush()) { - if ((HwIndexMonotonic) && (hdp_flush_support_)) { + if (hdp_flush_support_) { BuildHdpFlushCommand(command_addr); command_addr += flush_command_size_; bytes_written_[wrapped_index] = prior_bytes; @@ -542,9 +525,8 @@ hsa_status_t BlitSdma: return HSA_STATUS_SUCCESS; } -template -hsa_status_t BlitSdma::SubmitLinearCopyCommand(void* dst, const void* src, size_t size) { +template +hsa_status_t BlitSdma::SubmitLinearCopyCommand(void* dst, const void* src, size_t size) { // Break the copy into multiple copy operation incase the copy size exceeds // the SDMA linear copy limit. const size_t max_copy_size = max_single_linear_copy_size_ ? max_single_linear_copy_size_ : @@ -557,9 +539,8 @@ hsa_status_t BlitSdma -hsa_status_t BlitSdma::SubmitLinearCopyCommand(void* dst, const void* src, size_t size, +template +hsa_status_t BlitSdma::SubmitLinearCopyCommand(void* dst, const void* src, size_t size, std::vector& dep_signals, core::Signal& out_signal, std::vector& gang_signals) { @@ -577,9 +558,8 @@ hsa_status_t BlitSdma -hsa_status_t -BlitSdma::SubmitCopyRectCommand( +template +hsa_status_t BlitSdma::SubmitCopyRectCommand( const hsa_pitched_ptr_t* dst, const hsa_dim3_t* dst_offset, const hsa_pitched_ptr_t* src, const hsa_dim3_t* src_offset, const hsa_dim3_t* range, std::vector& dep_signals, core::Signal& out_signal) { @@ -653,9 +633,8 @@ BlitSdma::SubmitCopyRe out_signal, gang_signals); } -template -hsa_status_t BlitSdma::SubmitLinearFillCommand(void* ptr, uint32_t value, size_t count) { +template +hsa_status_t BlitSdma::SubmitLinearFillCommand(void* ptr, uint32_t value, size_t count) { const size_t size = count * sizeof(uint32_t); const uint32_t num_fill_command = (size + kMaxSingleFillSize - 1) / kMaxSingleFillSize; @@ -666,15 +645,12 @@ hsa_status_t BlitSdma -hsa_status_t BlitSdma::EnableProfiling( - bool enable) { +template hsa_status_t BlitSdma::EnableProfiling(bool enable) { return HSA_STATUS_SUCCESS; } -template -char* BlitSdma::AcquireWriteAddress( - uint32_t cmd_size, RingIndexTy& curr_index) { +template +char* BlitSdma::AcquireWriteAddress(uint32_t cmd_size, uint64_t& curr_index) { // Ring is full when all but one byte is written. if (cmd_size >= kQueueSize) { return nullptr; @@ -692,7 +668,7 @@ char* BlitSdma::Acquir } // Check whether the engine has finished using this region. - const RingIndexTy new_index = curr_index + cmd_size; + const uint64_t new_index = curr_index + cmd_size; if (CanWriteUpto(new_index) == false) { // Wait for read index to move and try again. @@ -713,10 +689,8 @@ char* BlitSdma::Acquir return nullptr; } -template -void BlitSdma::UpdateWriteAndDoorbellRegister(RingIndexTy curr_index, - RingIndexTy new_index) { +template +void BlitSdma::UpdateWriteAndDoorbellRegister(uint64_t curr_index, uint64_t new_index) { while (true) { // Make sure that the address before ::curr_index is already released. // Otherwise the CP may read invalid packets. @@ -725,21 +699,19 @@ void BlitSdma(queue_resource_.Queue_read_ptr)) != + while (WrapIntoRing(*reinterpret_cast(queue_resource_.Queue_read_ptr)) != WrapIntoRing(curr_index)) { os::YieldThread(); } } // Update write pointer and doorbell register. - *reinterpret_cast(queue_resource_.Queue_write_ptr) = - (HwIndexMonotonic ? new_index : WrapIntoRing(new_index)); + *reinterpret_cast(queue_resource_.Queue_write_ptr) = new_index; // Ensure write pointer is visible to GPU before doorbell. std::atomic_thread_fence(std::memory_order_release); - *reinterpret_cast(queue_resource_.Queue_DoorBell) = - (HwIndexMonotonic ? new_index : WrapIntoRing(new_index)); + *reinterpret_cast(queue_resource_.Queue_DoorBell) = new_index; atomic::Store(&cached_commit_index_, new_index, std::memory_order_release); break; @@ -750,9 +722,8 @@ void BlitSdma -void BlitSdma::ReleaseWriteAddress( - RingIndexTy curr_index, uint32_t cmd_size) { +template +void BlitSdma::ReleaseWriteAddress(uint64_t curr_index, uint32_t cmd_size) { if (cmd_size > kQueueSize) { assert(false && "cmd_addr is outside the queue buffer range"); return; @@ -761,11 +732,9 @@ void BlitSdma::Release UpdateWriteAndDoorbellRegister(curr_index, curr_index + cmd_size); } -template -void BlitSdma::PadRingToEnd( - RingIndexTy curr_index) { +template void BlitSdma::PadRingToEnd(uint64_t curr_index) { // Reserve region from here to the end of the ring. - RingIndexTy new_index = curr_index + (kQueueSize - WrapIntoRing(curr_index)); + uint64_t new_index = curr_index + (kQueueSize - WrapIntoRing(curr_index)); // Check whether the engine has finished using this region. if (CanWriteUpto(new_index) == false) { @@ -786,37 +755,22 @@ void BlitSdma::PadRing } } -template -uint32_t BlitSdma::WrapIntoRing( - RingIndexTy index) { +template uint32_t BlitSdma::WrapIntoRing(uint64_t index) { return index & (kQueueSize - 1); } -template -bool BlitSdma::CanWriteUpto( - RingIndexTy upto_index) { +template bool BlitSdma::CanWriteUpto(uint64_t upto_index) { // Get/calculate the monotonic read index. - RingIndexTy hw_read_index = *reinterpret_cast(queue_resource_.Queue_read_ptr); - RingIndexTy read_index; - - if (HwIndexMonotonic) { - read_index = hw_read_index; - } else { - // Calculate distance from commit index to HW read index. - // Commit index is always < kQueueSize away from HW read index. - RingIndexTy commit_index = atomic::Load(&cached_commit_index_, std::memory_order_relaxed); - RingIndexTy dist_to_read_index = WrapIntoRing(commit_index - hw_read_index); - read_index = commit_index - dist_to_read_index; - } + uint64_t hw_read_index = *reinterpret_cast(queue_resource_.Queue_read_ptr); // Check whether the read pointer has passed the given index. // At most we can submit (kQueueSize - 1) bytes at a time. - return (upto_index - read_index) < kQueueSize; + return (upto_index - hw_read_index) < kQueueSize; } -template -void BlitSdma::BuildFenceCommand( - char* fence_command_addr, uint32_t* fence, uint32_t fence_value) { +template +void BlitSdma::BuildFenceCommand(char* fence_command_addr, uint32_t* fence, + uint32_t fence_value) { assert(fence_command_addr != NULL); SDMA_PKT_FENCE* packet_addr = reinterpret_cast(fence_command_addr); @@ -836,9 +790,9 @@ void BlitSdma::BuildFe packet_addr->DATA_UNION.data = fence_value; } -template -void BlitSdma::BuildCopyCommand( - char* cmd_addr, uint32_t num_copy_command, void* dst, const void* src, size_t size) { +template +void BlitSdma::BuildCopyCommand(char* cmd_addr, uint32_t num_copy_command, void* dst, + const void* src, size_t size) { size_t cur_size = 0; const size_t max_copy_size = max_single_linear_copy_size_ ? max_single_linear_copy_size_ : kMaxSingleCopySize; @@ -858,9 +812,9 @@ void BlitSdma::BuildCo packet_addr->HEADER_UNION.sub_op = SDMA_SUBOP_COPY_LINEAR; if (max_copy_size == (1 << 30) -1) - packet_addr->COUNT_UNION.count_ext.count = copy_size + SizeToCountOffset; + packet_addr->COUNT_UNION.count_ext.count = copy_size - 1; /* count is 1-based */ else - packet_addr->COUNT_UNION.count.count = copy_size + SizeToCountOffset; + packet_addr->COUNT_UNION.count.count = copy_size - 1; /* count is 1-based */ packet_addr->SRC_ADDR_LO_UNION.src_addr_31_0 = ptrlow32(cur_src); packet_addr->SRC_ADDR_HI_UNION.src_addr_63_32 = ptrhigh32(cur_src); @@ -881,11 +835,12 @@ Elements are coded by the log2 of the element size in bytes (ie. element 0=1 byt This routine breaks a large rect into tiles that can be handled by hardware. Pitches and offsets must be representable in terms of elements in all tiles of the copy. */ -template -void BlitSdma::BuildCopyRectCommand( - const std::function& append, const hsa_pitched_ptr_t* dst, - const hsa_dim3_t* dst_offset, const hsa_pitched_ptr_t* src, const hsa_dim3_t* src_offset, - const hsa_dim3_t* range) { +template +void BlitSdma::BuildCopyRectCommand(const std::function& append, + const hsa_pitched_ptr_t* dst, + const hsa_dim3_t* dst_offset, + const hsa_pitched_ptr_t* src, + const hsa_dim3_t* src_offset, const hsa_dim3_t* range) { // Returns the index of the first set bit (ie log2 of the largest power of 2 that evenly divides // width), the largest element that perfectly covers width. // width | 16 ensures that we don't return a higher element than is supported and avoids @@ -1029,9 +984,9 @@ void BlitSdma::BuildCo } } -template -void BlitSdma::BuildFillCommand( - char* cmd_addr, uint32_t num_fill_command, void* ptr, uint32_t value, size_t count) { +template +void BlitSdma::BuildFillCommand(char* cmd_addr, uint32_t num_fill_command, void* ptr, + uint32_t value, size_t count) { char* cur_ptr = reinterpret_cast(ptr); const uint32_t maxDwordCount = kMaxSingleFillSize / sizeof(uint32_t); SDMA_PKT_CONSTANT_FILL* packet_addr = reinterpret_cast(cmd_addr); @@ -1050,7 +1005,8 @@ void BlitSdma::BuildFi packet_addr->DATA_UNION.src_data_31_0 = value; - packet_addr->COUNT_UNION.count = (fill_count + SizeToCountOffset) * sizeof(uint32_t); + /* count is 1-based */ + packet_addr->COUNT_UNION.count = (fill_count - 1) * sizeof(uint32_t); packet_addr++; cur_ptr += fill_count * sizeof(uint32_t); @@ -1059,9 +1015,8 @@ void BlitSdma::BuildFi assert(count == 0 && "SDMA fill command count error."); } -template -void BlitSdma::BuildPollCommand( - char* cmd_addr, void* addr, uint32_t reference) { +template +void BlitSdma::BuildPollCommand(char* cmd_addr, void* addr, uint32_t reference) { SDMA_PKT_POLL_REGMEM* packet_addr = reinterpret_cast(cmd_addr); @@ -1081,9 +1036,8 @@ void BlitSdma::BuildPo packet_addr->DW5_UNION.retry_count = 0xfff; // Retry forever. } -template -void BlitSdma::BuildAtomicDecrementCommand(char* cmd_addr, void* addr) { +template +void BlitSdma::BuildAtomicDecrementCommand(char* cmd_addr, void* addr) { SDMA_PKT_ATOMIC* packet_addr = reinterpret_cast(cmd_addr); memset(packet_addr, 0, sizeof(SDMA_PKT_ATOMIC)); @@ -1098,9 +1052,8 @@ void BlitSdmaSRC_DATA_HI_UNION.src_data_63_32 = 0xffffffff; } -template -void BlitSdma::BuildGetGlobalTimestampCommand(char* cmd_addr, void* write_address) { +template +void BlitSdma::BuildGetGlobalTimestampCommand(char* cmd_addr, void* write_address) { SDMA_PKT_TIMESTAMP* packet_addr = reinterpret_cast(cmd_addr); @@ -1113,9 +1066,7 @@ void BlitSdmaADDR_HI_UNION.addr_63_32 = ptrhigh32(write_address); } -template -void BlitSdma::BuildTrapCommand( - char* cmd_addr, uint32_t event_id) { +template void BlitSdma::BuildTrapCommand(char* cmd_addr, uint32_t event_id) { SDMA_PKT_TRAP* packet_addr = reinterpret_cast(cmd_addr); @@ -1125,17 +1076,13 @@ void BlitSdma::BuildTr packet_addr->INT_CONTEXT_UNION.int_ctx = event_id; } -template -void BlitSdma::BuildHdpFlushCommand( - char* cmd_addr) { +template void BlitSdma::BuildHdpFlushCommand(char* cmd_addr) { assert(cmd_addr != NULL); SDMA_PKT_POLL_REGMEM* addr = reinterpret_cast(cmd_addr); memcpy(addr, &hdp_flush_cmd, flush_command_size_); } -template -void BlitSdma::BuildGCRCommand( - char* cmd_addr, bool invalidate) { +template void BlitSdma::BuildGCRCommand(char* cmd_addr, bool invalidate) { assert(cmd_addr != NULL); assert(useGCR && "Unsupported SDMA command - GCR."); SDMA_PKT_GCR* addr = reinterpret_cast(cmd_addr); @@ -1154,25 +1101,16 @@ void BlitSdma::BuildGC addr->WORD2_UNION.GCR_CONTROL_GL2_RANGE = 0; } -template -uint64_t BlitSdma::PendingBytes() { - RingIndexTy commit = atomic::Load(&cached_commit_index_, std::memory_order_acquire); - RingIndexTy hw_read_index = *reinterpret_cast(queue_resource_.Queue_read_ptr); - RingIndexTy read; - if (HwIndexMonotonic) { - read = hw_read_index; - } else { - RingIndexTy dist_to_read_index = WrapIntoRing(commit - hw_read_index); - read = commit - dist_to_read_index; - } +template uint64_t BlitSdma::PendingBytes() { + uint64_t commit = atomic::Load(&cached_commit_index_, std::memory_order_acquire); + uint64_t hw_read_index = *reinterpret_cast(queue_resource_.Queue_read_ptr); - if (commit == read) return 0; - return bytes_queued_ - bytes_written_[WrapIntoRing(read)]; + if (commit == hw_read_index) return 0; + return bytes_queued_ - bytes_written_[WrapIntoRing(hw_read_index)]; } -template class BlitSdma; -template class BlitSdma; -template class BlitSdma; +template class BlitSdma; +template class BlitSdma; } // namespace amd } // namespace rocr diff --git a/runtime/hsa-runtime/core/runtime/amd_gpu_agent.cpp b/runtime/hsa-runtime/core/runtime/amd_gpu_agent.cpp index fdcff3a18f..6f9fe60e70 100644 --- a/runtime/hsa-runtime/core/runtime/amd_gpu_agent.cpp +++ b/runtime/hsa-runtime/core/runtime/amd_gpu_agent.cpp @@ -711,10 +711,6 @@ core::Blit* GpuAgent::CreateBlitSdma(bool use_xgmi, int rec_eng) { const size_t copy_size_overrides[2] = {0x3fffff, 0x3fffffff}; switch (isa_->GetMajorVersion()) { - case 7: - case 8: - sdma = new BlitSdmaV2V3(); - break; case 9: sdma = new BlitSdmaV4(); copy_size_override = (isa_->GetMinorVersion() == 0 && isa_->GetStepping() == 10) ?