drm/amdgpu: fix usable gart size calculation
authorNirmoy Das <nirmoy.das@amd.com>
Thu, 12 Nov 2020 17:36:01 +0000 (18:36 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 16 Nov 2020 17:17:06 +0000 (12:17 -0500)
amdgpu_do_test_moves() is failing because of wrong
usable gart size calculation and throwing:

[drm:amdgpu_do_test_moves [amdgpu]] *ERROR* 0000000020bdc9f3 bind failed

Signed-off-by: Nirmoy Das <nirmoy.das@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_test.c

index 6042b3b..7b230bc 100644 (file)
@@ -42,16 +42,11 @@ static void amdgpu_do_test_moves(struct amdgpu_device *adev)
        size = 1024 * 1024;
 
        /* Number of tests =
-        * (Total GTT - IB pool - writeback page - ring buffers) / test size
+        * (Total GTT - gart_pin_size - (2 transfer windows for buffer moves)) / test size
         */
-       n = adev->gmc.gart_size - AMDGPU_IB_POOL_SIZE;
-       for (i = 0; i < AMDGPU_MAX_RINGS; ++i)
-               if (adev->rings[i])
-                       n -= adev->rings[i]->ring_size;
-       if (adev->wb.wb_obj)
-               n -= AMDGPU_GPU_PAGE_SIZE;
-       if (adev->irq.ih.ring_obj)
-               n -= adev->irq.ih.ring_size;
+       n = adev->gmc.gart_size - atomic64_read(&adev->gart_pin_size);
+       n -= AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS *
+               AMDGPU_GPU_PAGE_SIZE;
        n /= size;
 
        gtt_obj = kcalloc(n, sizeof(*gtt_obj), GFP_KERNEL);