[PATCH 2/2] drm/amdgpu: poll BACO status after RPM BACO exits

Quan, Evan Evan.Quan at amd.com
Mon Nov 21 02:21:44 UTC 2022


[AMD Official Use Only - General]



> -----Original Message-----
> From: Chen, Guchun <Guchun.Chen at amd.com>
> Sent: Monday, November 21, 2022 8:39 AM
> To: amd-gfx at lists.freedesktop.org; Deucher, Alexander
> <Alexander.Deucher at amd.com>; Zhang, Hawking
> <Hawking.Zhang at amd.com>; Lazar, Lijo <Lijo.Lazar at amd.com>; Quan, Evan
> <Evan.Quan at amd.com>
> Cc: Chen, Guchun <Guchun.Chen at amd.com>
> Subject: [PATCH 2/2] drm/amdgpu: poll BACO status after RPM BACO exits
> 
> After executing BACO exit, driver needs to poll the status
> to ensure FW has completed BACO exit sequence to prevent
> timing issue.
> 
> Signed-off-by: Guchun Chen <guchun.chen at amd.com>
> ---
>  .../gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c    | 23
> ++++++++++++++++++-
>  1 file changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> index dccbd9f70723..796c8179bfbf 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> @@ -79,6 +79,16 @@
> MODULE_FIRMWARE("amdgpu/beige_goby_smc.bin");
>  #define mmTHM_BACO_CNTL_ARCT			0xA7
>  #define mmTHM_BACO_CNTL_ARCT_BASE_IDX		0
> 
> +static void smu_v11_0_poll_baco_exit(struct smu_context *smu)
> +{
> +	uint32_t data, loop = 0;
> +
> +	do {
> +		msleep(1);
> +		data = RREG32_SOC15(THM, 0, mmTHM_BACO_CNTL);
> +	} while ((data & 0x100) && (++loop < 100));
> +}
[Quan, Evan] Better to update the msleep with udelay. Otherwise, you might hit some checkpatch.pl errors.
Other than that, the series is Reviewed-by: Evan Quan <evan.quan at amd.com>

Evan
> +
>  int smu_v11_0_init_microcode(struct smu_context *smu)
>  {
>  	struct amdgpu_device *adev = smu->adev;
> @@ -1685,7 +1695,18 @@ int smu_v11_0_baco_enter(struct smu_context
> *smu)
> 
>  int smu_v11_0_baco_exit(struct smu_context *smu)
>  {
> -	return smu_v11_0_baco_set_state(smu, SMU_BACO_STATE_EXIT);
> +	int ret = 0;
> +
> +	ret = smu_v11_0_baco_set_state(smu, SMU_BACO_STATE_EXIT);
> +	if (!ret) {
> +		/*
> +		 * Poll BACO exit status to ensure FW has completed
> +		 * BACO exit process to avoid timing issues.
> +		 */
> +		smu_v11_0_poll_baco_exit(smu);
> +	}
> +
> +	return ret;
>  }
> 
>  int smu_v11_0_mode1_reset(struct smu_context *smu)
> --
> 2.25.1


More information about the amd-gfx mailing list