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

drm/amdgpu: cleanup IB pool handling a bit

Fix the coding style, move and rename the definitions to
better match what they are supposed to be doing.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Christian König and committed by
Alex Deucher
9ecefb19 e2085864

+71 -56
+1 -10
drivers/gpu/drm/amd/amdgpu/amdgpu.h
··· 204 204 #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 205 205 #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ 206 206 #define AMDGPU_FENCE_JIFFIES_TIMEOUT (HZ / 2) 207 - /* AMDGPU_IB_POOL_SIZE must be a power of 2 */ 208 - #define AMDGPU_IB_POOL_SIZE 16 209 207 #define AMDGPU_DEBUGFS_MAX_COMPONENTS 32 210 208 #define AMDGPUFB_CONN_LIMIT 4 211 209 #define AMDGPU_BIOS_NUM_SCRATCH 16 ··· 400 402 int amdgpu_fence_slab_init(void); 401 403 void amdgpu_fence_slab_fini(void); 402 404 403 - enum amdgpu_ib_pool_type { 404 - AMDGPU_IB_POOL_NORMAL = 0, 405 - AMDGPU_IB_POOL_VM, 406 - AMDGPU_IB_POOL_DIRECT, 407 - 408 - AMDGPU_IB_POOL_MAX 409 - }; 410 405 /* 411 406 * IRQS. 412 407 */ ··· 857 866 unsigned num_rings; 858 867 struct amdgpu_ring *rings[AMDGPU_MAX_RINGS]; 859 868 bool ib_pool_ready; 860 - struct amdgpu_sa_manager ring_tmp_bo[AMDGPU_IB_POOL_MAX]; 869 + struct amdgpu_sa_manager ib_pools[AMDGPU_IB_POOL_MAX]; 861 870 struct amdgpu_sched gpu_sched[AMDGPU_HW_IP_NUM][AMDGPU_RING_PRIO_MAX]; 862 871 863 872 /* interrupts */
+2 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
··· 924 924 925 925 ring = to_amdgpu_ring(entity->rq->sched); 926 926 r = amdgpu_ib_get(adev, vm, ring->funcs->parse_cs ? 927 - chunk_ib->ib_bytes : 0, AMDGPU_IB_POOL_NORMAL, ib); 927 + chunk_ib->ib_bytes : 0, 928 + AMDGPU_IB_POOL_DELAYED, ib); 928 929 if (r) { 929 930 DRM_ERROR("Failed to get ib !\n"); 930 931 return r;
+34 -31
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
··· 61 61 * Returns 0 on success, error on failure. 62 62 */ 63 63 int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm, 64 - unsigned size, 65 - enum amdgpu_ib_pool_type pool_type, 66 - struct amdgpu_ib *ib) 64 + unsigned size, enum amdgpu_ib_pool_type pool_type, 65 + struct amdgpu_ib *ib) 67 66 { 68 67 int r; 69 68 70 69 if (size) { 71 - r = amdgpu_sa_bo_new(&adev->ring_tmp_bo[pool_type], 70 + r = amdgpu_sa_bo_new(&adev->ib_pools[pool_type], 72 71 &ib->sa_bo, size, 256); 73 72 if (r) { 74 73 dev_err(adev->dev, "failed to get a new IB (%d)\n", r); ··· 304 305 */ 305 306 int amdgpu_ib_pool_init(struct amdgpu_device *adev) 306 307 { 307 - int r, i; 308 308 unsigned size; 309 + int r, i; 309 310 310 - if (adev->ib_pool_ready) { 311 + if (adev->ib_pool_ready) 311 312 return 0; 312 - } 313 + 313 314 for (i = 0; i < AMDGPU_IB_POOL_MAX; i++) { 314 315 if (i == AMDGPU_IB_POOL_DIRECT) 315 316 size = PAGE_SIZE * 2; 316 317 else 317 - size = AMDGPU_IB_POOL_SIZE*64*1024; 318 - r = amdgpu_sa_bo_manager_init(adev, &adev->ring_tmp_bo[i], 319 - size, 320 - AMDGPU_GPU_PAGE_SIZE, 321 - AMDGPU_GEM_DOMAIN_GTT); 322 - if (r) { 323 - for (i--; i >= 0; i--) 324 - amdgpu_sa_bo_manager_fini(adev, &adev->ring_tmp_bo[i]); 325 - return r; 326 - } 318 + size = AMDGPU_IB_POOL_SIZE; 319 + 320 + r = amdgpu_sa_bo_manager_init(adev, &adev->ib_pools[i], 321 + size, AMDGPU_GPU_PAGE_SIZE, 322 + AMDGPU_GEM_DOMAIN_GTT); 323 + if (r) 324 + goto error; 327 325 } 328 326 adev->ib_pool_ready = true; 329 327 330 328 return 0; 329 + 330 + error: 331 + while (i--) 332 + amdgpu_sa_bo_manager_fini(adev, &adev->ib_pools[i]); 333 + return r; 331 334 } 332 335 333 336 /** ··· 344 343 { 345 344 int i; 346 345 347 - if (adev->ib_pool_ready) { 348 - for (i = 0; i < AMDGPU_IB_POOL_MAX; i++) 349 - amdgpu_sa_bo_manager_fini(adev, &adev->ring_tmp_bo[i]); 350 - adev->ib_pool_ready = false; 351 - } 346 + if (!adev->ib_pool_ready) 347 + return; 348 + 349 + for (i = 0; i < AMDGPU_IB_POOL_MAX; i++) 350 + amdgpu_sa_bo_manager_fini(adev, &adev->ib_pools[i]); 351 + adev->ib_pool_ready = false; 352 352 } 353 353 354 354 /** ··· 364 362 */ 365 363 int amdgpu_ib_ring_tests(struct amdgpu_device *adev) 366 364 { 367 - unsigned i; 368 - int r, ret = 0; 369 365 long tmo_gfx, tmo_mm; 366 + int r, ret = 0; 367 + unsigned i; 370 368 371 369 tmo_mm = tmo_gfx = AMDGPU_IB_TEST_TIMEOUT; 372 370 if (amdgpu_sriov_vf(adev)) { ··· 444 442 struct drm_device *dev = node->minor->dev; 445 443 struct amdgpu_device *adev = dev->dev_private; 446 444 447 - seq_printf(m, "-------------------- NORMAL -------------------- \n"); 448 - amdgpu_sa_bo_dump_debug_info(&adev->ring_tmp_bo[AMDGPU_IB_POOL_NORMAL], m); 449 - seq_printf(m, "---------------------- VM ---------------------- \n"); 450 - amdgpu_sa_bo_dump_debug_info(&adev->ring_tmp_bo[AMDGPU_IB_POOL_VM], m); 451 - seq_printf(m, "-------------------- DIRECT--------------------- \n"); 452 - amdgpu_sa_bo_dump_debug_info(&adev->ring_tmp_bo[AMDGPU_IB_POOL_DIRECT], m); 445 + seq_printf(m, "--------------------- DELAYED --------------------- \n"); 446 + amdgpu_sa_bo_dump_debug_info(&adev->ib_pools[AMDGPU_IB_POOL_DELAYED], 447 + m); 448 + seq_printf(m, "-------------------- IMMEDIATE -------------------- \n"); 449 + amdgpu_sa_bo_dump_debug_info(&adev->ib_pools[AMDGPU_IB_POOL_IMMEDIATE], 450 + m); 451 + seq_printf(m, "--------------------- DIRECT ---------------------- \n"); 452 + amdgpu_sa_bo_dump_debug_info(&adev->ib_pools[AMDGPU_IB_POOL_DIRECT], m); 453 453 454 454 return 0; 455 - 456 455 } 457 456 458 457 static const struct drm_info_list amdgpu_debugfs_sa_list[] = {
+13
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
··· 50 50 51 51 #define to_amdgpu_ring(s) container_of((s), struct amdgpu_ring, sched) 52 52 53 + #define AMDGPU_IB_POOL_SIZE (1024 * 1024) 54 + 53 55 enum amdgpu_ring_type { 54 56 AMDGPU_RING_TYPE_GFX = AMDGPU_HW_IP_GFX, 55 57 AMDGPU_RING_TYPE_COMPUTE = AMDGPU_HW_IP_COMPUTE, ··· 63 61 AMDGPU_RING_TYPE_VCN_ENC = AMDGPU_HW_IP_VCN_ENC, 64 62 AMDGPU_RING_TYPE_VCN_JPEG = AMDGPU_HW_IP_VCN_JPEG, 65 63 AMDGPU_RING_TYPE_KIQ 64 + }; 65 + 66 + enum amdgpu_ib_pool_type { 67 + /* Normal submissions to the top of the pipeline. */ 68 + AMDGPU_IB_POOL_DELAYED, 69 + /* Immediate submissions to the bottom of the pipeline. */ 70 + AMDGPU_IB_POOL_IMMEDIATE, 71 + /* Direct submission to the ring buffer during init and reset. */ 72 + AMDGPU_IB_POOL_DIRECT, 73 + 74 + AMDGPU_IB_POOL_MAX 66 75 }; 67 76 68 77 struct amdgpu_device;
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_test.c
··· 44 44 /* Number of tests = 45 45 * (Total GTT - IB pool - writeback page - ring buffers) / test size 46 46 */ 47 - n = adev->gmc.gart_size - AMDGPU_IB_POOL_SIZE*64*1024; 47 + n = adev->gmc.gart_size - AMDGPU_IB_POOL_SIZE; 48 48 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) 49 49 if (adev->rings[i]) 50 50 n -= adev->rings[i]->ring_size;
+6 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
··· 333 333 num_bytes = num_pages * 8; 334 334 335 335 r = amdgpu_job_alloc_with_ib(adev, num_dw * 4 + num_bytes, 336 - AMDGPU_IB_POOL_NORMAL, &job); 336 + AMDGPU_IB_POOL_DELAYED, &job); 337 337 if (r) 338 338 return r; 339 339 ··· 2122 2122 struct dma_fence **fence, bool direct_submit, 2123 2123 bool vm_needs_flush, bool tmz) 2124 2124 { 2125 + enum amdgpu_ib_pool_type pool = direct_submit ? AMDGPU_IB_POOL_DIRECT : 2126 + AMDGPU_IB_POOL_DELAYED; 2125 2127 struct amdgpu_device *adev = ring->adev; 2126 2128 struct amdgpu_job *job; 2127 2129 ··· 2141 2139 num_loops = DIV_ROUND_UP(byte_count, max_bytes); 2142 2140 num_dw = ALIGN(num_loops * adev->mman.buffer_funcs->copy_num_dw, 8); 2143 2141 2144 - r = amdgpu_job_alloc_with_ib(adev, num_dw * 4, 2145 - direct_submit ? AMDGPU_IB_POOL_DIRECT : AMDGPU_IB_POOL_NORMAL, &job); 2142 + r = amdgpu_job_alloc_with_ib(adev, num_dw * 4, pool, &job); 2146 2143 if (r) 2147 2144 return r; 2148 2145 ··· 2230 2229 /* for IB padding */ 2231 2230 num_dw += 64; 2232 2231 2233 - r = amdgpu_job_alloc_with_ib(adev, num_dw * 4, AMDGPU_IB_POOL_NORMAL, &job); 2232 + r = amdgpu_job_alloc_with_ib(adev, num_dw * 4, AMDGPU_IB_POOL_DELAYED, 2233 + &job); 2234 2234 if (r) 2235 2235 return r; 2236 2236
+2 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
··· 1056 1056 goto err; 1057 1057 } 1058 1058 1059 - r = amdgpu_job_alloc_with_ib(adev, 64, 1060 - direct ? AMDGPU_IB_POOL_DIRECT : AMDGPU_IB_POOL_NORMAL, &job); 1059 + r = amdgpu_job_alloc_with_ib(adev, 64, direct ? AMDGPU_IB_POOL_DIRECT : 1060 + AMDGPU_IB_POOL_DELAYED, &job); 1061 1061 if (r) 1062 1062 goto err; 1063 1063
+3 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
··· 447 447 int i, r; 448 448 449 449 r = amdgpu_job_alloc_with_ib(ring->adev, ib_size_dw * 4, 450 - AMDGPU_IB_POOL_DIRECT, &job); 450 + AMDGPU_IB_POOL_DIRECT, &job); 451 451 if (r) 452 452 return r; 453 453 ··· 526 526 int i, r; 527 527 528 528 r = amdgpu_job_alloc_with_ib(ring->adev, ib_size_dw * 4, 529 - direct ? AMDGPU_IB_POOL_DIRECT : AMDGPU_IB_POOL_NORMAL, &job); 529 + direct ? AMDGPU_IB_POOL_DIRECT : 530 + AMDGPU_IB_POOL_DELAYED, &job); 530 531 if (r) 531 532 return r; 532 533
+7 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c
··· 61 61 struct dma_resv *resv, 62 62 enum amdgpu_sync_mode sync_mode) 63 63 { 64 + enum amdgpu_ib_pool_type pool = p->direct ? AMDGPU_IB_POOL_IMMEDIATE : 65 + AMDGPU_IB_POOL_DELAYED; 64 66 unsigned int ndw = AMDGPU_VM_SDMA_MIN_NUM_DW; 65 67 int r; 66 68 67 - r = amdgpu_job_alloc_with_ib(p->adev, ndw * 4, 68 - p->direct ? AMDGPU_IB_POOL_VM : AMDGPU_IB_POOL_NORMAL, &p->job); 69 + r = amdgpu_job_alloc_with_ib(p->adev, ndw * 4, pool, &p->job); 69 70 if (r) 70 71 return r; 71 72 ··· 200 199 uint64_t addr, unsigned count, uint32_t incr, 201 200 uint64_t flags) 202 201 { 202 + enum amdgpu_ib_pool_type pool = p->direct ? AMDGPU_IB_POOL_IMMEDIATE : 203 + AMDGPU_IB_POOL_DELAYED; 203 204 unsigned int i, ndw, nptes; 204 205 uint64_t *pte; 205 206 int r; ··· 227 224 ndw = max(ndw, AMDGPU_VM_SDMA_MIN_NUM_DW); 228 225 ndw = min(ndw, AMDGPU_VM_SDMA_MAX_NUM_DW); 229 226 230 - r = amdgpu_job_alloc_with_ib(p->adev, ndw * 4, 231 - p->direct ? AMDGPU_IB_POOL_VM : AMDGPU_IB_POOL_NORMAL, &p->job); 227 + r = amdgpu_job_alloc_with_ib(p->adev, ndw * 4, pool, 228 + &p->job); 232 229 if (r) 233 230 return r; 234 231
+2 -1
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
··· 372 372 * translation. Avoid this by doing the invalidation from the SDMA 373 373 * itself. 374 374 */ 375 - r = amdgpu_job_alloc_with_ib(adev, 16 * 4, AMDGPU_IB_POOL_VM, &job); 375 + r = amdgpu_job_alloc_with_ib(adev, 16 * 4, AMDGPU_IB_POOL_IMMEDIATE, 376 + &job); 376 377 if (r) 377 378 goto error_alloc; 378 379