RE: [PATCH] drm/amdgpu: reduce RLC safe mode request for gfx clock gating

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

 



[AMD Official Use Only - AMD Internal Distribution Only]

Ping...

Regards,
      Prike

> -----Original Message-----
> From: Liang, Prike <Prike.Liang@xxxxxxx>
> Sent: Tuesday, December 24, 2024 2:16 PM
> To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx
> Cc: Deucher, Alexander <Alexander.Deucher@xxxxxxx>; Lazar, Lijo
> <Lijo.Lazar@xxxxxxx>; Liang, Prike <Prike.Liang@xxxxxxx>
> Subject: [PATCH] drm/amdgpu: reduce RLC safe mode request for gfx clock gating
>
> The driver can only request one time for the power safe mode instead of polling and
> disabling the power feature each time prior to program the GFX clock gating control
> registers. This update will reduce the latency on the GFX clock gating entry.
>
> Signed-off-by: Prike Liang <Prike.Liang@xxxxxxx>
> ---
>  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 12 ++++--------
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 14 ++------------
>  2 files changed, 6 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> index af73f85527b7..6a025438f9d0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -5639,8 +5639,6 @@ static void
> gfx_v8_0_update_medium_grain_clock_gating(struct amdgpu_device *adev  {
>       uint32_t temp, data;
>
> -     amdgpu_gfx_rlc_enter_safe_mode(adev, 0);
> -
>       /* It is disabled by HW by default */
>       if (enable && (adev->cg_flags & AMD_CG_SUPPORT_GFX_MGCG)) {
>               if (adev->cg_flags & AMD_CG_SUPPORT_GFX_MGLS) { @@ -
> 5734,8 +5732,6 @@ static void
> gfx_v8_0_update_medium_grain_clock_gating(struct amdgpu_device *adev
>               /* 7- wait for RLC_SERDES_CU_MASTER &
> RLC_SERDES_NONCU_MASTER idle */
>               gfx_v8_0_wait_for_rlc_serdes(adev);
>       }
> -
> -     amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
>  }
>
>  static void gfx_v8_0_update_coarse_grain_clock_gating(struct amdgpu_device
> *adev, @@ -5745,8 +5741,6 @@ static void
> gfx_v8_0_update_coarse_grain_clock_gating(struct amdgpu_device *adev
>
>       temp = data = RREG32(mmRLC_CGCG_CGLS_CTRL);
>
> -     amdgpu_gfx_rlc_enter_safe_mode(adev, 0);
> -
>       if (enable && (adev->cg_flags & AMD_CG_SUPPORT_GFX_CGCG)) {
>               temp1 = data1 =
>       RREG32(mmRLC_CGTT_MGCG_OVERRIDE);
>               data1 &= ~RLC_CGTT_MGCG_OVERRIDE__CGCG_MASK;
> @@ -5827,12 +5821,12 @@ static void
> gfx_v8_0_update_coarse_grain_clock_gating(struct amdgpu_device *adev
>       }
>
>       gfx_v8_0_wait_for_rlc_serdes(adev);
> -
> -     amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
>  }
>  static int gfx_v8_0_update_gfx_clock_gating(struct amdgpu_device *adev,
>                                           bool enable)
>  {
> +     amdgpu_gfx_rlc_enter_safe_mode(adev, 0);
> +
>       if (enable) {
>               /* CGCG/CGLS should be enabled after MGCG/MGLS/TS(CG/LS)
>                * ===  MGCG + MGLS + TS(CG/LS) ===
> @@ -5846,6 +5840,8 @@ static int gfx_v8_0_update_gfx_clock_gating(struct
> amdgpu_device *adev,
>               gfx_v8_0_update_coarse_grain_clock_gating(adev, enable);
>               gfx_v8_0_update_medium_grain_clock_gating(adev, enable);
>       }
> +
> +     amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
>       return 0;
>  }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index 4b5006dc3d34..fa572b40989e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -4964,8 +4964,6 @@ static void
> gfx_v9_0_update_medium_grain_clock_gating(struct amdgpu_device *adev  {
>       uint32_t data, def;
>
> -     amdgpu_gfx_rlc_enter_safe_mode(adev, 0);
> -
>       /* It is disabled by HW by default */
>       if (enable && (adev->cg_flags & AMD_CG_SUPPORT_GFX_MGCG)) {
>               /* 1 - RLC_CGTT_MGCG_OVERRIDE */
> @@ -5030,8 +5028,6 @@ static void
> gfx_v9_0_update_medium_grain_clock_gating(struct amdgpu_device *adev
>                       WREG32_SOC15(GC, 0, mmCP_MEM_SLP_CNTL, data);
>               }
>       }
> -
> -     amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
>  }
>
>  static void gfx_v9_0_update_3d_clock_gating(struct amdgpu_device *adev, @@ -
> 5042,8 +5038,6 @@ static void gfx_v9_0_update_3d_clock_gating(struct
> amdgpu_device *adev,
>       if (!adev->gfx.num_gfx_rings)
>               return;
>
> -     amdgpu_gfx_rlc_enter_safe_mode(adev, 0);
> -
>       /* Enable 3D CGCG/CGLS */
>       if (enable) {
>               /* write cmd to clear cgcg/cgls ov */ @@ -5085,8 +5079,6 @@ static
> void gfx_v9_0_update_3d_clock_gating(struct amdgpu_device *adev,
>               if (def != data)
>                       WREG32_SOC15(GC, 0, mmRLC_CGCG_CGLS_CTRL_3D,
> data);
>       }
> -
> -     amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
>  }
>
>  static void gfx_v9_0_update_coarse_grain_clock_gating(struct amdgpu_device
> *adev, @@ -5094,8 +5086,6 @@ static void
> gfx_v9_0_update_coarse_grain_clock_gating(struct amdgpu_device *adev  {
>       uint32_t def, data;
>
> -     amdgpu_gfx_rlc_enter_safe_mode(adev, 0);
> -
>       if (enable && (adev->cg_flags & AMD_CG_SUPPORT_GFX_CGCG)) {
>               def = data = RREG32_SOC15(GC, 0,
> mmRLC_CGTT_MGCG_OVERRIDE);
>               /* unset CGCG override */
> @@ -5137,13 +5127,12 @@ static void
> gfx_v9_0_update_coarse_grain_clock_gating(struct amdgpu_device *adev
>               if (def != data)
>                       WREG32_SOC15(GC, 0, mmRLC_CGCG_CGLS_CTRL,
> data);
>       }
> -
> -     amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
>  }
>
>  static int gfx_v9_0_update_gfx_clock_gating(struct amdgpu_device *adev,
>                                           bool enable)
>  {
> +     amdgpu_gfx_rlc_enter_safe_mode(adev, 0);
>       if (enable) {
>               /* CGCG/CGLS should be enabled after MGCG/MGLS
>                * ===  MGCG + MGLS ===
> @@ -5163,6 +5152,7 @@ static int gfx_v9_0_update_gfx_clock_gating(struct
> amdgpu_device *adev,
>               /* ===  MGCG + MGLS === */
>               gfx_v9_0_update_medium_grain_clock_gating(adev, enable);
>       }
> +     amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
>       return 0;
>  }
>
> --
> 2.34.1





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

  Powered by Linux