Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu/hdp4.0: do a posting read when flushing HDP

Need to read back to make sure the write goes through.

Cc: David Belanger <david.belanger@amd.com>
Reviewed-by: Frank Min <frank.min@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org

+8 -4
+8 -4
drivers/gpu/drm/amd/amdgpu/hdp_v4_0.c
··· 40 40 static void hdp_v4_0_flush_hdp(struct amdgpu_device *adev, 41 41 struct amdgpu_ring *ring) 42 42 { 43 - if (!ring || !ring->funcs->emit_wreg) 43 + if (!ring || !ring->funcs->emit_wreg) { 44 44 WREG32((adev->rmmio_remap.reg_offset + KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL) >> 2, 0); 45 - else 45 + RREG32((adev->rmmio_remap.reg_offset + KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL) >> 2); 46 + } else { 46 47 amdgpu_ring_emit_wreg(ring, (adev->rmmio_remap.reg_offset + KFD_MMIO_REMAP_HDP_MEM_FLUSH_CNTL) >> 2, 0); 48 + } 47 49 } 48 50 49 51 static void hdp_v4_0_invalidate_hdp(struct amdgpu_device *adev, ··· 56 54 amdgpu_ip_version(adev, HDP_HWIP, 0) == IP_VERSION(4, 4, 5)) 57 55 return; 58 56 59 - if (!ring || !ring->funcs->emit_wreg) 57 + if (!ring || !ring->funcs->emit_wreg) { 60 58 WREG32_SOC15_NO_KIQ(HDP, 0, mmHDP_READ_CACHE_INVALIDATE, 1); 61 - else 59 + RREG32_SOC15_NO_KIQ(HDP, 0, mmHDP_READ_CACHE_INVALIDATE); 60 + } else { 62 61 amdgpu_ring_emit_wreg(ring, SOC15_REG_OFFSET( 63 62 HDP, 0, mmHDP_READ_CACHE_INVALIDATE), 1); 63 + } 64 64 } 65 65 66 66 static void hdp_v4_0_query_ras_error_count(struct amdgpu_device *adev,