Similar race condition as Vega20+XGMI. Add the extra type-2 TLB flush
for GC 9.4.3, 9.4.4 and 9.5.0 too.

Reported-by: Shahzeb Ahmed <[email protected]>
Reported-by: Manjunath Gaonkar <[email protected]>
Signed-off-by: Elena Sakhnovitch <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index c058a00bf2fb..7583e4993301 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -2181,10 +2181,22 @@ static int gmc_v9_0_hw_init(struct amdgpu_ip_block 
*ip_block)
         * (type 2), which flushes both. Due to a race condition with
         * concurrent memory accesses using the same TLB cache line, we still
         * need a second TLB flush after this.
+        *
+        * GC 9.4.3, 9.4.4 and 9.5.0 hit a similar race.
         */
-       adev->gmc.flush_tlb_needs_extra_type_2 =
-               amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 0) &&
-               adev->gmc.xgmi.num_physical_nodes;
+       switch (amdgpu_ip_version(adev, GC_HWIP, 0)) {
+       case IP_VERSION(9, 4, 0):
+               adev->gmc.flush_tlb_needs_extra_type_2 =
+                       !!adev->gmc.xgmi.num_physical_nodes;
+               break;
+       case IP_VERSION(9, 4, 3):
+       case IP_VERSION(9, 4, 4):
+       case IP_VERSION(9, 5, 0):
+               adev->gmc.flush_tlb_needs_extra_type_2 = true;
+               break;
+       default:
+               break;
+       }
 
        /* The sequence of these two function calls matters.*/
        gmc_v9_0_init_golden_registers(adev);
-- 
2.34.1

Reply via email to