[AMD Official Use Only - General] > -----Original Message----- > From: Chen, Guchun <Guchun.Chen@xxxxxxx> > Sent: Monday, November 21, 2022 8:39 AM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx; Deucher, Alexander > <Alexander.Deucher@xxxxxxx>; Zhang, Hawking > <Hawking.Zhang@xxxxxxx>; Lazar, Lijo <Lijo.Lazar@xxxxxxx>; Quan, Evan > <Evan.Quan@xxxxxxx> > Cc: Chen, Guchun <Guchun.Chen@xxxxxxx> > 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@xxxxxxx> > --- > .../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@xxxxxxx> 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