mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 15:02:40 -04:00
drm/amd/pm/smu11: 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. v2: use usleep_range to replace msleep to fix checkpatch.pl warnings Signed-off-by: Guchun Chen <guchun.chen@amd.com> Reviewed-by: Lijo Lazar <lijo.lazar@amd.com> Reviewed-by: Evan Quan <evan.quan@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
6dca7efe6e
commit
86a3c691db
@@ -79,6 +79,17 @@ 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)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
uint32_t data, loop = 0;
|
||||
|
||||
do {
|
||||
usleep_range(1000, 1100);
|
||||
data = RREG32_SOC15(THM, 0, mmTHM_BACO_CNTL);
|
||||
} while ((data & 0x100) && (++loop < 100));
|
||||
}
|
||||
|
||||
int smu_v11_0_init_microcode(struct smu_context *smu)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
@@ -1689,7 +1700,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;
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user