RE: [PATCH] drm/amdgpu: fix MES HQD masks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[AMD Official Use Only - General]

> -----Original Message-----
> From: Sharma, Shashank <Shashank.Sharma@xxxxxxx>
> Sent: Friday, April 5, 2024 11:37 AM
> To: Joshi, Mukul <Mukul.Joshi@xxxxxxx>; amd-gfx@xxxxxxxxxxxxxxxxxxxxx
> Cc: Koenig, Christian <Christian.Koenig@xxxxxxx>; Deucher, Alexander
> <Alexander.Deucher@xxxxxxx>; Yadav, Arvind <Arvind.Yadav@xxxxxxx>
> Subject: Re: [PATCH] drm/amdgpu: fix MES HQD masks
>
>
> On 05/04/2024 17:26, Joshi, Mukul wrote:
> > [AMD Official Use Only - General]
> >
> >> -----Original Message-----
> >> From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of
> >> Shashank Sharma
> >> Sent: Friday, April 5, 2024 10:36 AM
> >> To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx
> >> Cc: Sharma, Shashank <Shashank.Sharma@xxxxxxx>; Koenig, Christian
> >> <Christian.Koenig@xxxxxxx>; Deucher, Alexander
> >> <Alexander.Deucher@xxxxxxx>; Yadav, Arvind <Arvind.Yadav@xxxxxxx>
> >> 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@xxxxxxx>
> >> Cc: Alex Deucher <alexander.deucher@xxxxxxx>
> >> Signed-off-by: Shashank Sharma <shashank.sharma@xxxxxxx>
> >> Signed-off-by: Arvind Yadav <arvind.yadav@xxxxxxx>
> >> ---
> >>   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?
>
> This is deliberate, to indicate that the HQD mask can be different for each GFX
> IP version, so as the number of pipes and queue per pipe. Also the limitation
> on pipe 1 will not be there for future versions.
>
But for now this is common for both GFX10 and GFX11. When we have a case where this changes in future, we can implement a new
function specific for that GFX IP version. For now, this should be a common function.

Regards,
 Mukul

> - Shashank
>
> > 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




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux