This patch adds support for updating MQD properties for user queues, specifically focusing on CU mask updates.
Signed-off-by: Jesse Zhang <[email protected]> --- drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c index f2309d72bbe6..ae221eaa5b82 100644 --- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c +++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c @@ -432,6 +432,39 @@ static int mes_userq_mqd_create(struct amdgpu_usermode_queue *queue, return r; } +/** + * mes_userq_mqd_update - Core MQD update logic for user queues + * @queue: Target mes_user_queue structure + * @minfo: MQD update information (CU mask/priority etc.) + * + * Return: 0 on success, negative error code on failure + */ +static int mes_userq_mqd_update(struct amdgpu_usermode_queue *queue, + struct amdgpu_mqd_update_info *minfo) +{ + int retval = 0; + struct amdgpu_device *adev = queue->userq_mgr->adev; + struct amdgpu_mqd_prop *props = queue->userq_prop; + struct amdgpu_mqd *mqd_hw_default = &adev->mqds[queue->queue_type]; + + if (!queue || !props) + return -EINVAL; + + if (minfo) { + props->cu_flags = minfo->update_flag; + props->cu_mask_count = minfo->cu_mask.count; + props->cu_mask = minfo->cu_mask.ptr; + } + + if (mqd_hw_default->update_mqd) + retval = mqd_hw_default->update_mqd(adev, (void *)queue->mqd.cpu_ptr, props); + + if (!retval && minfo) + props->is_user_cu_masked = true; + + return retval; +} + static void mes_userq_mqd_destroy(struct amdgpu_usermode_queue *queue) { struct amdgpu_userq_mgr *uq_mgr = queue->userq_mgr; @@ -513,6 +546,7 @@ static int mes_userq_restore(struct amdgpu_usermode_queue *queue) const struct amdgpu_userq_funcs userq_mes_funcs = { .mqd_create = mes_userq_mqd_create, + .mqd_update = mes_userq_mqd_update, .mqd_destroy = mes_userq_mqd_destroy, .unmap = mes_userq_unmap, .map = mes_userq_map, -- 2.49.0
