Extend the amdgpu_usermode_queue function table (amdgpu_userq_funcs) with
a new 'mqd_update' callback to support runtime updates of user queue MQD
configurations.

Signed-off-by: Jesse Zhang <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h       | 19 +++++++++++++++++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h |  3 +++
 2 files changed, 22 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index f997fa17e8bd..64e69f0f9a02 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -811,6 +811,25 @@ struct amdgpu_mqd_prop {
        bool kernel_queue;
 };
 
+
+enum amdgpu_mqd_update_flag {
+       AMDGPU_UPDATE_FLAG_DBG_WA_ENABLE = 1,
+       AMDGPU_UPDATE_FLAG_DBG_WA_DISABLE = 2,
+       AMDGPU_UPDATE_FLAG_IS_GWS = 4, /* quirk for gfx9 IP */
+};
+
+/* MQD update information container (aligned with KFD) */
+struct amdgpu_mqd_update_info {
+       union {
+              struct {
+                      /* Must be multiple of 32 */
+                      uint32_t count;
+                      uint32_t *ptr;
+              } cu_mask;
+       };
+       enum amdgpu_mqd_update_flag update_flag;
+};
+
 struct amdgpu_mqd {
        unsigned mqd_size;
        int (*init_mqd)(struct amdgpu_device *adev, void *mqd,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
index 95ace14e458c..1ff0f611f882 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
@@ -41,6 +41,7 @@ enum amdgpu_userq_state {
 };
 
 struct amdgpu_mqd_prop;
+struct amdgpu_mqd_update_info;
 
 struct amdgpu_userq_obj {
        void             *cpu_ptr;
@@ -79,6 +80,8 @@ struct amdgpu_usermode_queue {
 struct amdgpu_userq_funcs {
        int (*mqd_create)(struct amdgpu_usermode_queue *queue,
                          struct drm_amdgpu_userq_in *args);
+       int (*mqd_update)(struct amdgpu_usermode_queue *queue,
+                         struct amdgpu_mqd_update_info *minfo);
        void (*mqd_destroy)(struct amdgpu_usermode_queue *uq);
        int (*unmap)(struct amdgpu_usermode_queue *queue);
        int (*map)(struct amdgpu_usermode_queue *queue);
-- 
2.49.0

Reply via email to