summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
diff options
context:
space:
mode:
authorHuang Rui2018-12-05 05:01:09 +0100
committerAlex Deucher2019-03-19 21:03:54 +0100
commitfad3ecf2359b564fa6e3ef7e87f44dd17947ab82 (patch)
treefd3ab0c33b7793bd3db79f869ec35a4bcf5708b5 /drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
parentdrm/amd/powerplay: add interfaces for smu resume (diff)
downloadkernel-qcow2-linux-fad3ecf2359b564fa6e3ef7e87f44dd17947ab82.tar.gz
kernel-qcow2-linux-fad3ecf2359b564fa6e3ef7e87f44dd17947ab82.tar.xz
kernel-qcow2-linux-fad3ecf2359b564fa6e3ef7e87f44dd17947ab82.zip
drm/amd/powerplay: add resume sequence placeholder for smu ip block
This patch adds resume sequence placeholder for smu ip block. Signed-off-by: Huang Rui <ray.huang@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/powerplay/amdgpu_smu.c')
-rw-r--r--drivers/gpu/drm/amd/powerplay/amdgpu_smu.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
index e0a5597cf6c4..a6f19b525420 100644
--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
@@ -311,13 +311,50 @@ static int smu_resume(void *handle)
if (adev->asic_type < CHIP_VEGA20)
return -EINVAL;
+ pr_info("SMU is resuming...\n");
+
+ if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
+ ret = smu_load_microcode(smu);
+ if (ret)
+ return ret;
+ }
+
+ ret = smu_check_fw_status(smu);
+ if (ret) {
+ pr_err("SMC firmware status is not correct\n");
+ return ret;
+ }
+
mutex_lock(&smu->mutex);
- /* TODO */
+ ret = smu_set_tool_table_location(smu);
+ if (ret)
+ goto failed;
+
+ ret = smu_write_pptable(smu);
+ if (ret)
+ goto failed;
+
+ ret = smu_write_watermarks_table(smu);
+ if (ret)
+ goto failed;
+
+ ret = smu_set_last_dcef_min_deep_sleep_clk(smu);
+ if (ret)
+ goto failed;
+
+ ret = smu_system_features_control(smu, true);
+ if (ret)
+ goto failed;
mutex_unlock(&smu->mutex);
+ pr_info("SMU is resumed successfully!\n");
+
return 0;
+failed:
+ mutex_unlock(&smu->mutex);
+ return ret;
}
static int smu_set_clockgating_state(void *handle,