@@ -385,6 +385,8 @@ int amdgpu_gfx_mqd_sw_init(struct amdgpu_device *adev,
385385 struct amdgpu_kiq * kiq = & adev -> gfx .kiq [xcc_id ];
386386 struct amdgpu_ring * ring = & kiq -> ring ;
387387 u32 domain = AMDGPU_GEM_DOMAIN_GTT ;
388+ u32 gfx_mqd_size = max (adev -> mqds [AMDGPU_HW_IP_GFX ].mqd_size , mqd_size );
389+ u32 compute_mqd_size = max (adev -> mqds [AMDGPU_HW_IP_COMPUTE ].mqd_size , mqd_size );
388390
389391#if !defined(CONFIG_ARM ) && !defined(CONFIG_ARM64 )
390392 /* Only enable on gfx10 and 11 for now to avoid changing behavior on older chips */
@@ -424,17 +426,17 @@ int amdgpu_gfx_mqd_sw_init(struct amdgpu_device *adev,
424426 for (i = 0 ; i < adev -> gfx .num_gfx_rings ; i ++ ) {
425427 ring = & adev -> gfx .gfx_ring [i ];
426428 if (!ring -> mqd_obj ) {
427- r = amdgpu_bo_create_kernel (adev , mqd_size , PAGE_SIZE ,
428- domain , & ring -> mqd_obj ,
429+ r = amdgpu_bo_create_kernel (adev , AMDGPU_MQD_SIZE_ALIGN ( gfx_mqd_size ) ,
430+ PAGE_SIZE , domain , & ring -> mqd_obj ,
429431 & ring -> mqd_gpu_addr , & ring -> mqd_ptr );
430432 if (r ) {
431433 dev_warn (adev -> dev , "failed to create ring mqd bo (%d)" , r );
432434 return r ;
433435 }
434436
435- ring -> mqd_size = mqd_size ;
437+ ring -> mqd_size = gfx_mqd_size ;
436438 /* prepare MQD backup */
437- adev -> gfx .me .mqd_backup [i ] = kzalloc (mqd_size , GFP_KERNEL );
439+ adev -> gfx .me .mqd_backup [i ] = kzalloc (gfx_mqd_size , GFP_KERNEL );
438440 if (!adev -> gfx .me .mqd_backup [i ]) {
439441 dev_warn (adev -> dev , "no memory to create MQD backup for ring %s\n" , ring -> name );
440442 return - ENOMEM ;
@@ -448,17 +450,17 @@ int amdgpu_gfx_mqd_sw_init(struct amdgpu_device *adev,
448450 j = i + xcc_id * adev -> gfx .num_compute_rings ;
449451 ring = & adev -> gfx .compute_ring [j ];
450452 if (!ring -> mqd_obj ) {
451- r = amdgpu_bo_create_kernel (adev , mqd_size , PAGE_SIZE ,
452- domain , & ring -> mqd_obj ,
453+ r = amdgpu_bo_create_kernel (adev , AMDGPU_MQD_SIZE_ALIGN ( compute_mqd_size ) ,
454+ PAGE_SIZE , domain , & ring -> mqd_obj ,
453455 & ring -> mqd_gpu_addr , & ring -> mqd_ptr );
454456 if (r ) {
455457 dev_warn (adev -> dev , "failed to create ring mqd bo (%d)" , r );
456458 return r ;
457459 }
458460
459- ring -> mqd_size = mqd_size ;
461+ ring -> mqd_size = compute_mqd_size ;
460462 /* prepare MQD backup */
461- adev -> gfx .mec .mqd_backup [j ] = kzalloc (mqd_size , GFP_KERNEL );
463+ adev -> gfx .mec .mqd_backup [j ] = kzalloc (compute_mqd_size , GFP_KERNEL );
462464 if (!adev -> gfx .mec .mqd_backup [j ]) {
463465 dev_warn (adev -> dev , "no memory to create MQD backup for ring %s\n" , ring -> name );
464466 return - ENOMEM ;
0 commit comments