This patch adds support for updating MQD
properties for user queues, specifically focusing on CU mask updates.
v2: Return an error for non-compute queues. (Alex)
remove the parameter minfo
Suggested-by: Alex Deucher <[email protected]>
Signed-off-by: Jesse Zhang <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 28 ++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
index f2309d72bbe6..0565986949bd 100644
--- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
+++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
@@ -432,6 +432,33 @@ 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
+ *
+ * Return: 0 on success, negative error code on failure
+ */
+static int mes_userq_mqd_update(struct amdgpu_usermode_queue *queue)
+{
+ 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 (queue->queue_type != AMDGPU_HW_IP_COMPUTE)
+ return -EINVAL;
+
+ retval = mqd_hw_default->init_mqd(adev, (void *)queue->mqd.cpu_ptr,
props);
+
+ if (!retval && props->cu_mask_count && props->cu_mask)
+ 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 +540,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