aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2017-03-14 17:57:35 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-05-24 17:41:54 -0400
commit380cc704398f9d11aed6c2b17ede6107a577608c (patch)
treec2c02974fbb77fa157f05f9bfd618276e4bc69dc
parent401b58ceb598aca618c8df4ce99cb2a7100aa39b (diff)
drm/amdgpu/raven: power up/down VCN via the SMU (v2)
By default VCN is powered down like SDMA, power it up/down on driver load/unload. [Rui: Fix to add the parameter 0 to un-gate VCN] v2 Acked-by: Huang Rui <ray.huang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Huang Rui <ray.huang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.c24
1 files changed, 24 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 6c931baeeb15..b69dcb9e6a39 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/rv_smumgr.c
@@ -264,6 +264,27 @@ static int rv_smc_disable_sdma(struct pp_smumgr *smumgr)
264 return 0; 264 return 0;
265} 265}
266 266
267/* vcn is disabled by default in vbios, need to re-enable in driver */
268static int rv_smc_enable_vcn(struct pp_smumgr *smumgr)
269{
270 PP_ASSERT_WITH_CODE(!rv_send_msg_to_smc_with_parameter(smumgr,
271 PPSMC_MSG_PowerUpVcn, 0),
272 "Attempt to power up vcn Failed!",
273 return -EINVAL);
274
275 return 0;
276}
277
278static int rv_smc_disable_vcn(struct pp_smumgr *smumgr)
279{
280 PP_ASSERT_WITH_CODE(!rv_send_msg_to_smc_with_parameter(smumgr,
281 PPSMC_MSG_PowerDownVcn, 0),
282 "Attempt to power down vcn Failed!",
283 return -EINVAL);
284
285 return 0;
286}
287
267static int rv_smu_fini(struct pp_smumgr *smumgr) 288static int rv_smu_fini(struct pp_smumgr *smumgr)
268{ 289{
269 struct rv_smumgr *priv = 290 struct rv_smumgr *priv =
@@ -271,6 +292,7 @@ static int rv_smu_fini(struct pp_smumgr *smumgr)
271 292
272 if (priv) { 293 if (priv) {
273 rv_smc_disable_sdma(smumgr); 294 rv_smc_disable_sdma(smumgr);
295 rv_smc_disable_vcn(smumgr);
274 cgs_free_gpu_mem(smumgr->device, 296 cgs_free_gpu_mem(smumgr->device,
275 priv->smu_tables.entry[WMTABLE].handle); 297 priv->smu_tables.entry[WMTABLE].handle);
276 cgs_free_gpu_mem(smumgr->device, 298 cgs_free_gpu_mem(smumgr->device,
@@ -288,6 +310,8 @@ static int rv_start_smu(struct pp_smumgr *smumgr)
288 return -EINVAL; 310 return -EINVAL;
289 if (rv_smc_enable_sdma(smumgr)) 311 if (rv_smc_enable_sdma(smumgr))
290 return -EINVAL; 312 return -EINVAL;
313 if (rv_smc_enable_vcn(smumgr))
314 return -EINVAL;
291 315
292 return 0; 316 return 0;
293} 317}