aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRex Zhu <Rex.Zhu@amd.com>2016-11-23 05:09:22 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-12-06 18:08:23 -0500
commit3c3a7e616c02cbf0ffcd5888ceffb24e7ac73ad6 (patch)
tree59e8742878eef9b3a54379ae6429e17a500f07d4
parent805b3ba87dfa7273567aed6e9c730e9b89b450d7 (diff)
drm/amdgpu: fix bug mclk can't change on Polaris
the root cause is we gate the clock to uvd vcpu. mclk's change should need the response from uvd if it is power on. Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> Acked-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c5
2 files changed, 8 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
index 95cabeafc18e..a79e283590fb 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
@@ -640,7 +640,7 @@ static void uvd_v5_0_enable_clock_gating(struct amdgpu_device *adev, bool enable
640 UVD_SUVD_CGC_GATE__SDB_MASK; 640 UVD_SUVD_CGC_GATE__SDB_MASK;
641 641
642 if (enable) { 642 if (enable) {
643 data3 |= (UVD_CGC_GATE__SYS_MASK | 643 data3 |= (UVD_CGC_GATE__SYS_MASK |
644 UVD_CGC_GATE__UDEC_MASK | 644 UVD_CGC_GATE__UDEC_MASK |
645 UVD_CGC_GATE__MPEG2_MASK | 645 UVD_CGC_GATE__MPEG2_MASK |
646 UVD_CGC_GATE__RBC_MASK | 646 UVD_CGC_GATE__RBC_MASK |
@@ -656,9 +656,11 @@ static void uvd_v5_0_enable_clock_gating(struct amdgpu_device *adev, bool enable
656 UVD_CGC_GATE__UDEC_DB_MASK | 656 UVD_CGC_GATE__UDEC_DB_MASK |
657 UVD_CGC_GATE__UDEC_MP_MASK | 657 UVD_CGC_GATE__UDEC_MP_MASK |
658 UVD_CGC_GATE__WCB_MASK | 658 UVD_CGC_GATE__WCB_MASK |
659 UVD_CGC_GATE__VCPU_MASK |
660 UVD_CGC_GATE__JPEG_MASK | 659 UVD_CGC_GATE__JPEG_MASK |
661 UVD_CGC_GATE__SCPU_MASK); 660 UVD_CGC_GATE__SCPU_MASK);
661 /* only in pg enabled, we can gate clock to vcpu*/
662 if (adev->pg_flags & AMD_PG_SUPPORT_UVD)
663 data3 |= UVD_CGC_GATE__VCPU_MASK;
662 data3 &= ~UVD_CGC_GATE__REGS_MASK; 664 data3 &= ~UVD_CGC_GATE__REGS_MASK;
663 data1 |= suvd_flags; 665 data1 |= suvd_flags;
664 } else { 666 } else {
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index c697a73b872b..ba0bbf7138dc 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -879,10 +879,13 @@ static void uvd_v6_0_enable_clock_gating(struct amdgpu_device *adev, bool enable
879 UVD_CGC_GATE__UDEC_DB_MASK | 879 UVD_CGC_GATE__UDEC_DB_MASK |
880 UVD_CGC_GATE__UDEC_MP_MASK | 880 UVD_CGC_GATE__UDEC_MP_MASK |
881 UVD_CGC_GATE__WCB_MASK | 881 UVD_CGC_GATE__WCB_MASK |
882 UVD_CGC_GATE__VCPU_MASK |
883 UVD_CGC_GATE__JPEG_MASK | 882 UVD_CGC_GATE__JPEG_MASK |
884 UVD_CGC_GATE__SCPU_MASK | 883 UVD_CGC_GATE__SCPU_MASK |
885 UVD_CGC_GATE__JPEG2_MASK); 884 UVD_CGC_GATE__JPEG2_MASK);
885 /* only in pg enabled, we can gate clock to vcpu*/
886 if (adev->pg_flags & AMD_PG_SUPPORT_UVD)
887 data3 |= UVD_CGC_GATE__VCPU_MASK;
888
886 data3 &= ~UVD_CGC_GATE__REGS_MASK; 889 data3 &= ~UVD_CGC_GATE__REGS_MASK;
887 } else { 890 } else {
888 data3 = 0; 891 data3 = 0;