drm/amdgpu/gmc10: use common invalidation engine helper
authorAlex Deucher <alexander.deucher@amd.com>
Mon, 6 Jan 2020 18:21:56 +0000 (13:21 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 7 Jan 2020 17:03:47 +0000 (12:03 -0500)
Rather than open coding it.  This also changes the free masks
to better reflect the usage by other components.

Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c

index d6901b2..5884ab5 100644 (file)
@@ -335,7 +335,7 @@ void amdgpu_gmc_ras_fini(struct amdgpu_device *adev)
 }
 
        /*
-        * The latest engine allocation on gfx9 is:
+        * The latest engine allocation on gfx9/10 is:
         * Engine 2, 3: firmware
         * Engine 0, 1, 4~16: amdgpu ring,
         *                    subject to change when ring number changes
index f572533..da9765f 100644 (file)
@@ -564,22 +564,11 @@ static int gmc_v10_0_early_init(void *handle)
 static int gmc_v10_0_late_init(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
-       unsigned vm_inv_eng[AMDGPU_MAX_VMHUBS] = { 4, 4 };
-       unsigned i;
-
-       for(i = 0; i < adev->num_rings; ++i) {
-               struct amdgpu_ring *ring = adev->rings[i];
-               unsigned vmhub = ring->funcs->vmhub;
-
-               ring->vm_inv_eng = vm_inv_eng[vmhub]++;
-               dev_info(adev->dev, "ring %u(%s) uses VM inv eng %u on hub %u\n",
-                        ring->idx, ring->name, ring->vm_inv_eng,
-                        ring->funcs->vmhub);
-       }
+       int r;
 
-       /* Engine 17 is used for GART flushes */
-       for(i = 0; i < AMDGPU_MAX_VMHUBS; ++i)
-               BUG_ON(vm_inv_eng[i] > 17);
+       r = amdgpu_gmc_allocate_vm_inv_eng(adev);
+       if (r)
+               return r;
 
        return amdgpu_irq_get(adev, &adev->gmc.vm_fault, 0);
 }