Skip to content

Commit a6a4dd5

Browse files
Lang Yualexdeucher
authored andcommitted
drm/amdgpu: Use AMDGPU_MQD_SIZE_ALIGN in KGD
Use AMDGPU_MQD_SIZE_ALIGN for both kernel and user queue. Signed-off-by: Lang Yu <lang.yu@amd.com> Reviewed-by: David Belanger <david.belanger@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Reviewed-by: Mukul Joshi <mukul.joshi@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 0d9a49a commit a6a4dd5

3 files changed

Lines changed: 13 additions & 10 deletions

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2236,7 +2236,7 @@ static int gfx_v12_1_compute_mqd_init(struct amdgpu_device *adev, void *m,
22362236
mqd->cp_hqd_queue_priority = prop->hqd_queue_priority;
22372237

22382238
mqd->cp_mqd_stride_size = prop->mqd_stride_size ? prop->mqd_stride_size :
2239-
sizeof(struct v12_1_compute_mqd);
2239+
AMDGPU_MQD_SIZE_ALIGN(adev->mqds[AMDGPU_HW_IP_COMPUTE].mqd_size);
22402240

22412241
mqd->cp_hqd_active = prop->hqd_active;
22422242

drivers/gpu/drm/amd/amdgpu/mes_userqueue.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,8 @@ static int mes_userq_mqd_create(struct amdgpu_usermode_queue *queue,
289289
return -ENOMEM;
290290
}
291291

292-
r = amdgpu_userq_create_object(uq_mgr, &queue->mqd, mqd_hw_default->mqd_size);
292+
r = amdgpu_userq_create_object(uq_mgr, &queue->mqd,
293+
AMDGPU_MQD_SIZE_ALIGN(mqd_hw_default->mqd_size));
293294
if (r) {
294295
DRM_ERROR("Failed to create MQD object for userqueue\n");
295296
goto free_props;

0 commit comments

Comments
 (0)