[PATCH] drm/amdgpu: pass queue size and is_aql_queue to MES
Felix Kuehling
felix.kuehling at amd.com
Thu Sep 22 17:25:59 UTC 2022
Am 2022-09-20 um 10:29 schrieb Graham Sider:
> Update mes_v11_api_def.h add_queue API with is_aql_queue parameter. Also
> re-use gds_size for the queue size (unused for KFD). MES requires the
> queue size in order to compute the actual wptr offset within the queue
> RB since it increases monotonically for AQL queues.
>
> Signed-off-by: Graham Sider <Graham.Sider at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h | 2 ++
> drivers/gpu/drm/amd/amdgpu/mes_v11_0.c | 4 ++++
> drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 2 ++
> drivers/gpu/drm/amd/include/mes_v11_api_def.h | 3 ++-
> 4 files changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> index 7b46f6bf4187..ad980f4b66e1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> @@ -222,6 +222,8 @@ struct mes_add_queue_input {
> uint64_t tba_addr;
> uint64_t tma_addr;
> uint32_t is_kfd_process;
> + uint32_t is_aql_queue;
> + uint32_t queue_size;
> };
>
> struct mes_remove_queue_input {
> diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> index b64cd46a159a..5581e03fc956 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> @@ -187,6 +187,10 @@ static int mes_v11_0_add_hw_queue(struct amdgpu_mes *mes,
> mes_add_queue_pkt.is_kfd_process = input->is_kfd_process;
> mes_add_queue_pkt.trap_en = 1;
>
> + /* For KFD, gds_size is re-used for queue size (needed in MES for AQL queues) */
> + mes_add_queue_pkt.is_aql_queue = input->is_aql_queue;
> + mes_add_queue_pkt.gds_size = input->queue_size;
> +
> return mes_v11_0_submit_pkt_and_poll_completion(mes,
> &mes_add_queue_pkt, sizeof(mes_add_queue_pkt),
> offsetof(union MESAPI__ADD_QUEUE, api_status));
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> index e83725a28106..8644b212cf4b 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> @@ -205,6 +205,8 @@ static int add_queue_mes(struct device_queue_manager *dqm, struct queue *q,
> }
>
> queue_input.is_kfd_process = 1;
> + queue_input.is_aql_queue = q->properties.format;
This would be clearer:
queue_input.is_aql_queue = (q->properties.format == KFD_QUEUE_FORMAT_AQL);
Regards,
Felix
> + queue_input.queue_size = q->properties.queue_size >> 2;
>
> queue_input.paging = false;
> queue_input.tba_addr = qpd->tba_addr;
> diff --git a/drivers/gpu/drm/amd/include/mes_v11_api_def.h b/drivers/gpu/drm/amd/include/mes_v11_api_def.h
> index 50bfa513cb35..7e85cdc5bd34 100644
> --- a/drivers/gpu/drm/amd/include/mes_v11_api_def.h
> +++ b/drivers/gpu/drm/amd/include/mes_v11_api_def.h
> @@ -269,7 +269,8 @@ union MESAPI__ADD_QUEUE {
> uint32_t map_kiq_utility_queue : 1;
> uint32_t is_kfd_process : 1;
> uint32_t trap_en : 1;
> - uint32_t reserved : 21;
> + uint32_t is_aql_queue : 1;
> + uint32_t reserved : 20;
> };
> struct MES_API_STATUS api_status;
> uint64_t tma_addr;
More information about the amd-gfx
mailing list