Re: [PATCH 1/3] drm/amdgpu: add new mes misc api for gfx11

Mario Limonciello <[email protected]>
Newsgroups org.freedesktop.lists.amd-gfx
Message-ID <[email protected]>

On 8/19/26 15:14, Eric Huang wrote:
> new api will be used to workaround a HW scheduler issue
> for 100% usage when gpu has no workload.
> 
> Signed-off-by: Eric Huang <[email protected]>
Reviewed-by: Mario Limonciello (AMD) <[email protected]>> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 23 +++++++++++++++++++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h |  4 ++++
>   drivers/gpu/drm/amd/amdgpu/mes_v11_0.c  | 10 +++++++++-
>   3 files changed, 36 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> index b96f94e5169f..421d937c1188 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> @@ -1140,6 +1140,29 @@ void amdgpu_mes_free_gang_ctx_index(struct amdgpu_mes *mes,
>   	amdgpu_mes_unlock(mes);
>   }
>   
> +int amdgpu_mes_notify_unmap_queue(struct amdgpu_device *adev)
> +{
> +	struct mes_misc_op_input op_input = {0};
> +	int r;
> +
> +	op_input.op = MES_MISC_NOTIFY_WORK_ON_UNMAPPED_QUEUE;
> +
> +	if (!adev->mes.funcs->misc_op) {
> +		dev_err(adev->dev, "mes notify unmap queue is not supported!\n");
> +		r = -EINVAL;
> +		goto error;
> +	}
> +
> +	amdgpu_mes_lock(&adev->mes);
> +	r = adev->mes.funcs->misc_op(&adev->mes, &op_input);
> +	amdgpu_mes_unlock(&adev->mes);
> +	if (r)
> +		dev_err(adev->dev, "failed to notify unmap queue.\n");
> +
> +error:
> +	return r;
> +}
> +
>   #if defined(CONFIG_DEBUG_FS)
>   
>   static int amdgpu_debugfs_mes_event_log_show(struct seq_file *m, void *unused)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> index 977c057dcce8..0291ae14a1e7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
> @@ -366,6 +366,7 @@ enum mes_misc_opcode {
>   	MES_MISC_OP_WRM_REG_WR_WAIT,
>   	MES_MISC_OP_SET_SHADER_DEBUGGER,
>   	MES_MISC_OP_CHANGE_CONFIG,
> +	MES_MISC_OP_NOTIFY_WORK_ON_UNMAPPED_QUEUE
>   };
>   
>   struct mes_misc_op_input {
> @@ -643,4 +644,7 @@ int amdgpu_mes_alloc_gang_ctx_index(struct amdgpu_mes *mes,
>   				    uint32_t *index);
>   void amdgpu_mes_free_gang_ctx_index(struct amdgpu_mes *mes,
>   				    uint32_t index);
> +
> +int amdgpu_mes_notify_unmap_queue(struct amdgpu_device *adev);
> +
>   #endif /* __AMDGPU_MES_H__ */
> diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> index c57bcb9a98b1..df71e9447b35 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> @@ -957,7 +957,15 @@ static int mes_v11_0_misc_op(struct amdgpu_mes *mes,
>   		misc_pkt.change_config.option.bits.limit_single_process =
>   				input->change_config.option.limit_single_process;
>   		break;
> -
> +	case MES_MISC_OP_NOTIFY_WORK_ON_UNMAPPED_QUEUE:
> +		if ((mes->adev->mes.sched_version & AMDGPU_MES_VERSION_MASK) < 0x70) {
> +			dev_warn_once(mes->adev->dev,
> +				      "MES FW version must be larger than 0x70 to support notify work on unmapped queue.\n");
> +			return 0;
> +		}
> +		misc_pkt.opcode = MESAPI_MISC__NOTIFY_WORK_ON_UNMAPPED_QUEUE;
> +		misc_pkt.queue_sch_level = AMD_PRIORITY_LEVEL_NORMAL;
> +		break;
>   	default:
>   		drm_err(adev_to_drm(mes->adev), "unsupported misc op (%d)\n", input->op);
>   		return -EINVAL;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.