]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/amdgpu/sdma4: use paging queue for buffer funcs
authorAlex Deucher <alexander.deucher@amd.com>
Wed, 7 Nov 2018 17:25:30 +0000 (12:25 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 8 Nov 2018 21:04:27 +0000 (16:04 -0500)
Use the paging queue for buffer functions to avoid contention
with the other queues.

Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Tested-by: Chen Gong <Curry.Gong@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c

index 8977e84bebe4377b3b44aa3f0b6867bfb2165b35..f4490cdd98046bd28028588cf91b919a3b54d308 100644 (file)
@@ -662,6 +662,10 @@ static void sdma_v4_0_page_stop(struct amdgpu_device *adev)
        u32 rb_cntl, ib_cntl;
        int i;
 
+       if ((adev->mman.buffer_funcs_ring == sdma0) ||
+           (adev->mman.buffer_funcs_ring == sdma1))
+               amdgpu_ttm_set_buffer_funcs_status(adev, false);
+
        for (i = 0; i < adev->sdma.num_instances; i++) {
                rb_cntl = RREG32_SDMA(i, mmSDMA0_PAGE_RB_CNTL);
                rb_cntl = REG_SET_FIELD(rb_cntl, SDMA0_PAGE_RB_CNTL,
@@ -1152,6 +1156,9 @@ static int sdma_v4_0_start(struct amdgpu_device *adev)
                        r = amdgpu_ring_test_helper(page);
                        if (r)
                                return r;
+
+                       if (adev->mman.buffer_funcs_ring == page)
+                               amdgpu_ttm_set_buffer_funcs_status(adev, true);
                }
 
                if (adev->mman.buffer_funcs_ring == ring)
@@ -2057,7 +2064,10 @@ static const struct amdgpu_buffer_funcs sdma_v4_0_buffer_funcs = {
 static void sdma_v4_0_set_buffer_funcs(struct amdgpu_device *adev)
 {
        adev->mman.buffer_funcs = &sdma_v4_0_buffer_funcs;
-       adev->mman.buffer_funcs_ring = &adev->sdma.instance[0].ring;
+       if (adev->sdma.has_page_queue)
+               adev->mman.buffer_funcs_ring = &adev->sdma.instance[0].page;
+       else
+               adev->mman.buffer_funcs_ring = &adev->sdma.instance[0].ring;
 }
 
 static const struct amdgpu_vm_pte_funcs sdma_v4_0_vm_pte_funcs = {