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
