aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
authorRex Zhu <Rex.Zhu@amd.com>2017-02-08 04:17:55 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-02-13 12:43:04 -0500
commit254cd2e08dd0c44f9de6424f10390343a34b4f5a (patch)
treeaba1e2a28c4bc6070652943576b974da209f0e54 /drivers/gpu/drm/amd/amdgpu
parentd50e5c24480f8a6e2918ecd998e65f990f88b0ee (diff)
drm/amdgpu: read hw register to check pg status.
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vce_v3_0.c5
5 files changed, 10 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 96ad79627dbb..e9af03113fc3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1037,7 +1037,6 @@ struct amdgpu_uvd {
1037 bool use_ctx_buf; 1037 bool use_ctx_buf;
1038 struct amd_sched_entity entity; 1038 struct amd_sched_entity entity;
1039 uint32_t srbm_soft_reset; 1039 uint32_t srbm_soft_reset;
1040 bool is_powergated;
1041}; 1040};
1042 1041
1043/* 1042/*
@@ -1066,7 +1065,6 @@ struct amdgpu_vce {
1066 struct amd_sched_entity entity; 1065 struct amd_sched_entity entity;
1067 uint32_t srbm_soft_reset; 1066 uint32_t srbm_soft_reset;
1068 unsigned num_rings; 1067 unsigned num_rings;
1069 bool is_powergated;
1070}; 1068};
1071 1069
1072/* 1070/*
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
index f15df99f0a06..97af4827f652 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
@@ -723,7 +723,8 @@ static int uvd_v4_2_set_powergating_state(void *handle,
723 if (state == AMD_PG_STATE_GATE) { 723 if (state == AMD_PG_STATE_GATE) {
724 uvd_v4_2_stop(adev); 724 uvd_v4_2_stop(adev);
725 if (adev->pg_flags & AMD_PG_SUPPORT_UVD && amdgpu_dpm == 0) { 725 if (adev->pg_flags & AMD_PG_SUPPORT_UVD && amdgpu_dpm == 0) {
726 if (!(RREG32_SMC(ixCURRENT_PG_STATUS) & 0x4)) { 726 if (!(RREG32_SMC(ixCURRENT_PG_STATUS) &
727 CURRENT_PG_STATUS__UVD_PG_STATUS_MASK)) {
727 WREG32(mmUVD_PGFSM_CONFIG, (UVD_PGFSM_CONFIG__UVD_PGFSM_FSM_ADDR_MASK | 728 WREG32(mmUVD_PGFSM_CONFIG, (UVD_PGFSM_CONFIG__UVD_PGFSM_FSM_ADDR_MASK |
728 UVD_PGFSM_CONFIG__UVD_PGFSM_POWER_DOWN_MASK | 729 UVD_PGFSM_CONFIG__UVD_PGFSM_POWER_DOWN_MASK |
729 UVD_PGFSM_CONFIG__UVD_PGFSM_P1_SELECT_MASK)); 730 UVD_PGFSM_CONFIG__UVD_PGFSM_P1_SELECT_MASK));
@@ -733,7 +734,8 @@ static int uvd_v4_2_set_powergating_state(void *handle,
733 return 0; 734 return 0;
734 } else { 735 } else {
735 if (adev->pg_flags & AMD_PG_SUPPORT_UVD && amdgpu_dpm == 0) { 736 if (adev->pg_flags & AMD_PG_SUPPORT_UVD && amdgpu_dpm == 0) {
736 if (RREG32_SMC(ixCURRENT_PG_STATUS) & 0x4) { 737 if (RREG32_SMC(ixCURRENT_PG_STATUS) &
738 CURRENT_PG_STATUS__UVD_PG_STATUS_MASK) {
737 WREG32(mmUVD_PGFSM_CONFIG, (UVD_PGFSM_CONFIG__UVD_PGFSM_FSM_ADDR_MASK | 739 WREG32(mmUVD_PGFSM_CONFIG, (UVD_PGFSM_CONFIG__UVD_PGFSM_FSM_ADDR_MASK |
738 UVD_PGFSM_CONFIG__UVD_PGFSM_POWER_UP_MASK | 740 UVD_PGFSM_CONFIG__UVD_PGFSM_POWER_UP_MASK |
739 UVD_PGFSM_CONFIG__UVD_PGFSM_P1_SELECT_MASK)); 741 UVD_PGFSM_CONFIG__UVD_PGFSM_P1_SELECT_MASK));
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
index 46e715193924..ad8c02e423d4 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
@@ -825,12 +825,10 @@ static int uvd_v5_0_set_powergating_state(void *handle,
825 825
826 if (state == AMD_PG_STATE_GATE) { 826 if (state == AMD_PG_STATE_GATE) {
827 uvd_v5_0_stop(adev); 827 uvd_v5_0_stop(adev);
828 adev->uvd.is_powergated = true;
829 } else { 828 } else {
830 ret = uvd_v5_0_start(adev); 829 ret = uvd_v5_0_start(adev);
831 if (ret) 830 if (ret)
832 goto out; 831 goto out;
833 adev->uvd.is_powergated = false;
834 } 832 }
835 833
836out: 834out:
@@ -844,7 +842,8 @@ static void uvd_v5_0_get_clockgating_state(void *handle, u32 *flags)
844 842
845 mutex_lock(&adev->pm.mutex); 843 mutex_lock(&adev->pm.mutex);
846 844
847 if (adev->uvd.is_powergated) { 845 if (RREG32_SMC(ixCURRENT_PG_STATUS) &
846 CURRENT_PG_STATUS__UVD_PG_STATUS_MASK) {
848 DRM_INFO("Cannot get clockgating state when UVD is powergated.\n"); 847 DRM_INFO("Cannot get clockgating state when UVD is powergated.\n");
849 goto out; 848 goto out;
850 } 849 }
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index af83ab8c1250..18a6de4e1512 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -1051,12 +1051,10 @@ static int uvd_v6_0_set_powergating_state(void *handle,
1051 1051
1052 if (state == AMD_PG_STATE_GATE) { 1052 if (state == AMD_PG_STATE_GATE) {
1053 uvd_v6_0_stop(adev); 1053 uvd_v6_0_stop(adev);
1054 adev->uvd.is_powergated = true;
1055 } else { 1054 } else {
1056 ret = uvd_v6_0_start(adev); 1055 ret = uvd_v6_0_start(adev);
1057 if (ret) 1056 if (ret)
1058 goto out; 1057 goto out;
1059 adev->uvd.is_powergated = false;
1060 } 1058 }
1061 1059
1062out: 1060out:
@@ -1070,7 +1068,8 @@ static void uvd_v6_0_get_clockgating_state(void *handle, u32 *flags)
1070 1068
1071 mutex_lock(&adev->pm.mutex); 1069 mutex_lock(&adev->pm.mutex);
1072 1070
1073 if (adev->uvd.is_powergated) { 1071 if (RREG32_SMC(ixCURRENT_PG_STATUS) &
1072 CURRENT_PG_STATUS__UVD_PG_STATUS_MASK) {
1074 DRM_INFO("Cannot get clockgating state when UVD is powergated.\n"); 1073 DRM_INFO("Cannot get clockgating state when UVD is powergated.\n");
1075 goto out; 1074 goto out;
1076 } 1075 }
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
index a78298529f07..93ec8815bb13 100644
--- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
@@ -768,12 +768,10 @@ static int vce_v3_0_set_powergating_state(void *handle,
768 ret = vce_v3_0_stop(adev); 768 ret = vce_v3_0_stop(adev);
769 if (ret) 769 if (ret)
770 goto out; 770 goto out;
771 adev->vce.is_powergated = true;
772 } else { 771 } else {
773 ret = vce_v3_0_start(adev); 772 ret = vce_v3_0_start(adev);
774 if (ret) 773 if (ret)
775 goto out; 774 goto out;
776 adev->vce.is_powergated = false;
777 } 775 }
778 776
779out: 777out:
@@ -787,7 +785,8 @@ static void vce_v3_0_get_clockgating_state(void *handle, u32 *flags)
787 785
788 mutex_lock(&adev->pm.mutex); 786 mutex_lock(&adev->pm.mutex);
789 787
790 if (adev->vce.is_powergated) { 788 if (RREG32_SMC(ixCURRENT_PG_STATUS) &
789 CURRENT_PG_STATUS__VCE_PG_STATUS_MASK) {
791 DRM_INFO("Cannot get clockgating state when VCE is powergated.\n"); 790 DRM_INFO("Cannot get clockgating state when VCE is powergated.\n");
792 goto out; 791 goto out;
793 } 792 }