]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu/hdp5.2: use memcfg register to post the write for HDP flush
authorAlex Deucher <alexander.deucher@amd.com>
Wed, 30 Apr 2025 16:47:37 +0000 (12:47 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 8 May 2025 15:47:23 +0000 (11:47 -0400)
Reading back the remapped HDP flush register seems to cause
problems on some platforms. All we need is a read, so read back
the memcfg register.

Fixes: f756dbac1ce1 ("drm/amdgpu/hdp5.2: do a posting read when flushing HDP")
Reported-by: Alexey Klimov <alexey.klimov@linaro.org>
Link: https://lists.freedesktop.org/archives/amd-gfx/2025-April/123150.html
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4119
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3908
Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 4a89b7698e771914b4d5b571600c76e2fdcbe2a9)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/amdgpu/hdp_v5_2.c

index fcb8dd2876bcc2706ec9cba36e85449038677783..40940b4ab4007b2162ab9f4109f142b199f24a19 100644 (file)
@@ -33,7 +33,17 @@ static void hdp_v5_2_flush_hdp(struct amdgpu_device *adev,
        if (!ring || !ring->funcs->emit_wreg) {
                WREG32_NO_KIQ((adev->rmmio_remap.reg_offset + KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL) >> 2,
                        0);
-               RREG32_NO_KIQ((adev->rmmio_remap.reg_offset + KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL) >> 2);
+               if (amdgpu_sriov_vf(adev)) {
+                       /* this is fine because SR_IOV doesn't remap the register */
+                       RREG32_NO_KIQ((adev->rmmio_remap.reg_offset + KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL) >> 2);
+               } else {
+                       /* We just need to read back a register to post the write.
+                        * Reading back the remapped register causes problems on
+                        * some platforms so just read back the memory size register.
+                        */
+                       if (adev->nbio.funcs->get_memsize)
+                               adev->nbio.funcs->get_memsize(adev);
+               }
        } else {
                amdgpu_ring_emit_wreg(ring,
                        (adev->rmmio_remap.reg_offset + KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL) >> 2,