dev-amdgpu: Implement SDMA RLC queue unmapping

The unmap queues packet specifies all non-static queues should be
unmapped which includes RLC queues in the SMDA. This functionality did
not exist before and is added in this changeset.

Fixes bug with rodinia_3.0/hip/bfs.

Change-Id: I80ca8cf8d89559625b5870745889b0a27916635e
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/63173
Tested-by: kokoro <noreply+kokoro@google.com>
Maintainer: Matt Sinclair <mattdsinclair@gmail.com>
Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com>
This commit is contained in:
Matthew Poremba
2022-09-05 10:13:51 -07:00
parent af4251f6ae
commit 9ea28bd782
3 changed files with 12 additions and 0 deletions

View File

@@ -643,6 +643,9 @@ AMDGPUDevice::deallocateAllQueues()
{
idMap.erase(idMap.begin(), idMap.end());
usedVMIDs.erase(usedVMIDs.begin(), usedVMIDs.end());
sdma0->deallocateRLCQueues();
sdma1->deallocateRLCQueues();
}
void

View File

@@ -202,6 +202,14 @@ SDMAEngine::unregisterRLCQueue(Addr doorbell)
}
}
void
SDMAEngine::deallocateRLCQueues()
{
for (auto doorbell: rlcInfo) {
unregisterRLCQueue(doorbell);
}
}
/* Start decoding packets from the Gfx queue. */
void
SDMAEngine::processGfx(Addr wptrOffset)

View File

@@ -266,6 +266,7 @@ class SDMAEngine : public DmaVirtDevice
*/
void registerRLCQueue(Addr doorbell, Addr rb_base);
void unregisterRLCQueue(Addr doorbell);
void deallocateRLCQueues();
int cur_vmid = 0;
};