From a5dfb0718d9cff069d66fda96081abd2a6ae86b3 Mon Sep 17 00:00:00 2001 From: Matthew Poremba Date: Thu, 1 Sep 2022 14:48:22 -0700 Subject: [PATCH] dev-amdgpu: Add user-mode TranslationGen to SDMA RLC queue do translation using user mode addresses. To support this, add the final aperture translation needed to the SDMA engine. Change-Id: I25841e240e3b44f66d26d503ab52b54379daa49a Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/63032 Tested-by: kokoro Reviewed-by: Matt Sinclair Maintainer: Matt Sinclair --- src/dev/amdgpu/sdma_engine.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/dev/amdgpu/sdma_engine.cc b/src/dev/amdgpu/sdma_engine.cc index 90b77219c7..b925c854d2 100644 --- a/src/dev/amdgpu/sdma_engine.cc +++ b/src/dev/amdgpu/sdma_engine.cc @@ -137,7 +137,12 @@ SDMAEngine::getDeviceAddress(Addr raw_addr) TranslationGenPtr SDMAEngine::translate(Addr vaddr, Addr size) { - if (gpuDevice->getVM().inAGP(vaddr)) { + if (cur_vmid > 0) { + // Only user translation is available to user queues (vmid > 0) + return TranslationGenPtr(new AMDGPUVM::UserTranslationGen( + &gpuDevice->getVM(), walker, + cur_vmid, vaddr, size)); + } else if (gpuDevice->getVM().inAGP(vaddr)) { // Use AGP translation gen return TranslationGenPtr( new AMDGPUVM::AGPTranslationGen(&gpuDevice->getVM(), vaddr, size));