From 752b69688322e21bed65df4069b82afcf77d0f35 Mon Sep 17 00:00:00 2001 From: Matthew Poremba Date: Sun, 30 Oct 2022 12:12:49 -0700 Subject: [PATCH] dev-amdgpu: Fix SDMA trap ring ID, context SDMA traps are used in the driver as a DMA fence. To pass a fence, the SDMA sends the driver the interrupt context from a trap packet and the ring ID which specifies which queue in the SDMA engine is passing a fence. Currently the interrupt context is using the wrong value in the packet and the ring ID is hard-coded to always be the gfx queue. This changeset uses the correct interrupt context from the SDMA packet and sets the ring ID to either 0 if the gfx queue is currently being processed or 3 if the page queue is being processed. The relevant interrupt service routine in the driver can be found at: https://github.com/RadeonOpenCompute/ROCK-Kernel-Driver/blob/roc-4.3.x/ drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c#L2129 Change-Id: Ie4a4a9d6ab1d3bf83bf76bb57a02a91100217b51 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/65093 Reviewed-by: Matt Sinclair Maintainer: Matt Sinclair Tested-by: kokoro --- src/dev/amdgpu/sdma_engine.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/dev/amdgpu/sdma_engine.cc b/src/dev/amdgpu/sdma_engine.cc index 1cd6ff2ed0..e9a4c176d8 100644 --- a/src/dev/amdgpu/sdma_engine.cc +++ b/src/dev/amdgpu/sdma_engine.cc @@ -713,11 +713,16 @@ SDMAEngine::trap(SDMAQueue *q, sdmaTrap *pkt) { q->incRptr(sizeof(sdmaTrap)); - DPRINTF(SDMAEngine, "Trap contextId: %p rbRptr: %p ibOffset: %p\n", - pkt->contextId, pkt->rbRptr, pkt->ibOffset); + DPRINTF(SDMAEngine, "Trap contextId: %p\n", pkt->intrContext); - gpuDevice->getIH()->prepareInterruptCookie(pkt->contextId, 0, - getIHClientId(), TRAP_ID); + uint32_t ring_id = 0; + assert(page.processing() ^ gfx.processing()); + if (page.processing()) { + ring_id = 3; + } + + gpuDevice->getIH()->prepareInterruptCookie(pkt->intrContext, ring_id, + getIHClientId(), TRAP_ID); gpuDevice->getIH()->submitInterruptCookie(); delete pkt;