drm/amdgpu/gfx12: add CU mask support for compute MQD initialization

Extend the GFX12 compute MQD initialization to support
Compute Unit (CU) masking for fine-grained resource allocation.
This allows compute queues to be limited to specific CUs for
performance isolation and debugging purposes.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Jesse Zhang <jesse.zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Jesse.Zhang
2026-01-23 13:05:29 +08:00
committed by Alex Deucher
parent d68c4e48e4
commit cb9a5ff7ad

View File

@@ -3109,6 +3109,37 @@ static int gfx_v12_0_cp_async_gfx_ring_resume(struct amdgpu_device *adev)
return gfx_v12_0_cp_gfx_start(adev);
}
static void gfx_v12_0_compute_mqd_set_cu_mask(struct amdgpu_device *adev,
struct v12_compute_mqd *mqd,
struct amdgpu_mqd_prop *prop)
{
uint32_t se_mask[8] = {0};
uint32_t wa_mask;
bool has_wa_flag = prop->cu_flags & (AMDGPU_UPDATE_FLAG_DBG_WA_ENABLE |
AMDGPU_UPDATE_FLAG_DBG_WA_DISABLE);
if (!has_wa_flag && (!prop->cu_mask || !prop->cu_mask_count))
return;
if (has_wa_flag) {
wa_mask = (prop->cu_flags & AMDGPU_UPDATE_FLAG_DBG_WA_ENABLE) ?
0xffff : 0xffffffff;
mqd->compute_static_thread_mgmt_se0 = wa_mask;
mqd->compute_static_thread_mgmt_se1 = wa_mask;
mqd->compute_static_thread_mgmt_se2 = wa_mask;
mqd->compute_static_thread_mgmt_se3 = wa_mask;
return;
}
amdgpu_gfx_mqd_symmetrically_map_cu_mask(adev, prop->cu_mask,
prop->cu_mask_count, se_mask);
mqd->compute_static_thread_mgmt_se0 = se_mask[0];
mqd->compute_static_thread_mgmt_se1 = se_mask[1];
mqd->compute_static_thread_mgmt_se2 = se_mask[2];
mqd->compute_static_thread_mgmt_se3 = se_mask[3];
}
static int gfx_v12_0_compute_mqd_init(struct amdgpu_device *adev, void *m,
struct amdgpu_mqd_prop *prop)
{
@@ -3242,6 +3273,8 @@ static int gfx_v12_0_compute_mqd_init(struct amdgpu_device *adev, void *m,
/* set UQ fenceaddress */
mqd->fence_address_lo = lower_32_bits(prop->fence_address);
mqd->fence_address_hi = upper_32_bits(prop->fence_address);
/* set CU mask */
gfx_v12_0_compute_mqd_set_cu_mask(adev, mqd, prop);
return 0;
}