diff options
author | Chunming Zhou <David1.Zhou@amd.com> | 2017-03-10 01:48:09 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-05-24 17:41:53 -0400 |
commit | 401b58ceb598aca618c8df4ce99cb2a7100aa39b (patch) | |
tree | 0f864b39cf80d970eb3be9a2ae490e56fc4ee22c | |
parent | a960d61cbd62544c04adb4fe6513577601ff4535 (diff) |
drm/amd/powerplay/rv: power up/down sdma via the SMU
sdma is powered down by default in vbios,
need to power up in driver init. Power it down
again on driver tear down.
Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.c index 6b6b75538bc5..6c931baeeb15 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.c +++ b/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.c | |||
@@ -243,6 +243,26 @@ static int rv_verify_smc_interface(struct pp_smumgr *smumgr) | |||
243 | return 0; | 243 | return 0; |
244 | } | 244 | } |
245 | 245 | ||
246 | /* sdma is disabled by default in vbios, need to re-enable in driver */ | ||
247 | static int rv_smc_enable_sdma(struct pp_smumgr *smumgr) | ||
248 | { | ||
249 | PP_ASSERT_WITH_CODE(!rv_send_msg_to_smc(smumgr, | ||
250 | PPSMC_MSG_PowerUpSdma), | ||
251 | "Attempt to power up sdma Failed!", | ||
252 | return -EINVAL); | ||
253 | |||
254 | return 0; | ||
255 | } | ||
256 | |||
257 | static int rv_smc_disable_sdma(struct pp_smumgr *smumgr) | ||
258 | { | ||
259 | PP_ASSERT_WITH_CODE(!rv_send_msg_to_smc(smumgr, | ||
260 | PPSMC_MSG_PowerDownSdma), | ||
261 | "Attempt to power down sdma Failed!", | ||
262 | return -EINVAL); | ||
263 | |||
264 | return 0; | ||
265 | } | ||
246 | 266 | ||
247 | static int rv_smu_fini(struct pp_smumgr *smumgr) | 267 | static int rv_smu_fini(struct pp_smumgr *smumgr) |
248 | { | 268 | { |
@@ -250,6 +270,7 @@ static int rv_smu_fini(struct pp_smumgr *smumgr) | |||
250 | (struct rv_smumgr *)(smumgr->backend); | 270 | (struct rv_smumgr *)(smumgr->backend); |
251 | 271 | ||
252 | if (priv) { | 272 | if (priv) { |
273 | rv_smc_disable_sdma(smumgr); | ||
253 | cgs_free_gpu_mem(smumgr->device, | 274 | cgs_free_gpu_mem(smumgr->device, |
254 | priv->smu_tables.entry[WMTABLE].handle); | 275 | priv->smu_tables.entry[WMTABLE].handle); |
255 | cgs_free_gpu_mem(smumgr->device, | 276 | cgs_free_gpu_mem(smumgr->device, |
@@ -265,6 +286,8 @@ static int rv_start_smu(struct pp_smumgr *smumgr) | |||
265 | { | 286 | { |
266 | if (rv_verify_smc_interface(smumgr)) | 287 | if (rv_verify_smc_interface(smumgr)) |
267 | return -EINVAL; | 288 | return -EINVAL; |
289 | if (rv_smc_enable_sdma(smumgr)) | ||
290 | return -EINVAL; | ||
268 | 291 | ||
269 | return 0; | 292 | return 0; |
270 | } | 293 | } |