[PATCH] drm/amdgpu: fix MES HQD masks
Joshi, Mukul
Mukul.Joshi at amd.com
Fri Apr 5 15:26:27 UTC 2024
[AMD Official Use Only - General]
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of
> Shashank Sharma
> Sent: Friday, April 5, 2024 10:36 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Sharma, Shashank <Shashank.Sharma at amd.com>; Koenig, Christian
> <Christian.Koenig at amd.com>; Deucher, Alexander
> <Alexander.Deucher at amd.com>; Yadav, Arvind <Arvind.Yadav at amd.com>
> Subject: [PATCH] drm/amdgpu: fix MES HQD masks
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> This patch fixes the existing HQD masks prepared during the MES initialization.
> These existing masks values were causing problems when we try to enable GFX
> oversubscription.
>
> Cc: Christian König <Christian.Koenig at amd.com>
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Signed-off-by: Shashank Sharma <shashank.sharma at amd.com>
> Signed-off-by: Arvind Yadav <arvind.yadav at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 3 ---
> drivers/gpu/drm/amd/amdgpu/mes_v10_1.c | 15 ++++++++++++++-
> drivers/gpu/drm/amd/amdgpu/mes_v11_0.c | 15 ++++++++++++++-
> 3 files changed, 28 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> index da48b6da0107..7db80ffda33f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> @@ -148,9 +148,6 @@ int amdgpu_mes_init(struct amdgpu_device *adev)
> adev->mes.compute_hqd_mask[i] = 0xc;
> }
>
> - for (i = 0; i < AMDGPU_MES_MAX_GFX_PIPES; i++)
> - adev->mes.gfx_hqd_mask[i] = i ? 0 : 0xfffffffe;
> -
> for (i = 0; i < AMDGPU_MES_MAX_SDMA_PIPES; i++) {
> if (amdgpu_ip_version(adev, SDMA0_HWIP, 0) <
> IP_VERSION(6, 0, 0)) diff --git
> a/drivers/gpu/drm/amd/amdgpu/mes_v10_1.c
> b/drivers/gpu/drm/amd/amdgpu/mes_v10_1.c
> index 1e5ad1e08d2a..9217914f824d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_v10_1.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_v10_1.c
> @@ -266,6 +266,19 @@ static int mes_v10_1_query_sched_status(struct
> amdgpu_mes *mes)
> offsetof(union MESAPI__QUERY_MES_STATUS, api_status)); }
>
> +static inline uint32_t mes_v10_get_gfx_hqd_mask(int pipe_index) {
> + /* Pipe 1 can't be used for MES due to HW limitation */
> + if (pipe_index == 1)
> + return 0;
> +
> + /*
> + * GFX V10 supports 2 queues, but we want to keep queue 0
> + * reserved for kernel, so enable only queue 1 (1<<1) for MES.
> + */
> + return 0x2;
> +}
> +
> static int mes_v10_1_set_hw_resources(struct amdgpu_mes *mes) {
> int i;
> @@ -291,7 +304,7 @@ static int mes_v10_1_set_hw_resources(struct
> amdgpu_mes *mes)
> mes->compute_hqd_mask[i];
>
> for (i = 0; i < MAX_GFX_PIPES; i++)
> - mes_set_hw_res_pkt.gfx_hqd_mask[i] = mes->gfx_hqd_mask[i];
> + mes_set_hw_res_pkt.gfx_hqd_mask[i] =
> + mes_v10_get_gfx_hqd_mask(i);
>
> for (i = 0; i < MAX_SDMA_PIPES; i++)
> mes_set_hw_res_pkt.sdma_hqd_mask[i] = mes->sdma_hqd_mask[i];
> diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> index 26d71a22395d..b7dcd936afc8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
> @@ -360,6 +360,19 @@ static int mes_v11_0_misc_op(struct amdgpu_mes
> *mes,
> offsetof(union MESAPI__MISC, api_status)); }
>
> +static inline uint32_t mes_v11_get_gfx_hqd_mask(int pipe_index) {
> + /* Pipe 1 can't be used for MES due to HW limitation */
> + if (pipe_index == 1)
> + return 0;
> +
> + /*
> + * GFX V10 supports 2 queues, but we want to keep queue 0
> + * reserved for kernel, so enable only queue 1 (1<<1) for MES.
> + */
> + return 0x2;
> +}
There is no difference between this function and the corresponding function written for GFX10.
Why not make this a common function instead?
Regards,
Mukul
> +
> static int mes_v11_0_set_hw_resources(struct amdgpu_mes *mes) {
> int i;
> @@ -385,7 +398,7 @@ static int mes_v11_0_set_hw_resources(struct
> amdgpu_mes *mes)
> mes->compute_hqd_mask[i];
>
> for (i = 0; i < MAX_GFX_PIPES; i++)
> - mes_set_hw_res_pkt.gfx_hqd_mask[i] = mes->gfx_hqd_mask[i];
> + mes_set_hw_res_pkt.gfx_hqd_mask[i] =
> + mes_v11_get_gfx_hqd_mask(i);
>
> for (i = 0; i < MAX_SDMA_PIPES; i++)
> mes_set_hw_res_pkt.sdma_hqd_mask[i] = mes->sdma_hqd_mask[i];
> --
> 2.43.2
More information about the amd-gfx
mailing list