aboutsummaryrefslogtreecommitdiffstats
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
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>
-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
-rw-r--r--drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_0_1_sh_mask.h2
-rw-r--r--drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_d.h1
-rw-r--r--drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_sh_mask.h2
-rw-r--r--drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_d.h1
-rw-r--r--drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_sh_mask.h2
-rw-r--r--drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_d.h2
-rw-r--r--drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_sh_mask.h3
12 files changed, 22 insertions, 14 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 }
diff --git a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_0_1_sh_mask.h b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_0_1_sh_mask.h
index 25882a4dea5d..34c6ff52710e 100644
--- a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_0_1_sh_mask.h
+++ b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_0_1_sh_mask.h
@@ -5452,5 +5452,7 @@
5452#define ROM_SW_DATA_63__ROM_SW_DATA__SHIFT 0x0 5452#define ROM_SW_DATA_63__ROM_SW_DATA__SHIFT 0x0
5453#define ROM_SW_DATA_64__ROM_SW_DATA_MASK 0xffffffff 5453#define ROM_SW_DATA_64__ROM_SW_DATA_MASK 0xffffffff
5454#define ROM_SW_DATA_64__ROM_SW_DATA__SHIFT 0x0 5454#define ROM_SW_DATA_64__ROM_SW_DATA__SHIFT 0x0
5455#define CURRENT_PG_STATUS__VCE_PG_STATUS_MASK 0x00000002
5456#define CURRENT_PG_STATUS__UVD_PG_STATUS_MASK 0x00000004
5455 5457
5456#endif /* SMU_7_0_1_SH_MASK_H */ 5458#endif /* SMU_7_0_1_SH_MASK_H */
diff --git a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_d.h b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_d.h
index a9ef1562f43b..66597c64f525 100644
--- a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_d.h
+++ b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_d.h
@@ -1121,5 +1121,6 @@
1121#define ixROM_SW_DATA_62 0xc060011c 1121#define ixROM_SW_DATA_62 0xc060011c
1122#define ixROM_SW_DATA_63 0xc0600120 1122#define ixROM_SW_DATA_63 0xc0600120
1123#define ixROM_SW_DATA_64 0xc0600124 1123#define ixROM_SW_DATA_64 0xc0600124
1124#define ixCURRENT_PG_STATUS 0xc020029c
1124 1125
1125#endif /* SMU_7_1_1_D_H */ 1126#endif /* SMU_7_1_1_D_H */
diff --git a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_sh_mask.h b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_sh_mask.h
index 2c997f7b5d13..fb06f2e2f6e6 100644
--- a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_sh_mask.h
+++ b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_1_sh_mask.h
@@ -4860,5 +4860,7 @@
4860#define ROM_SW_DATA_63__ROM_SW_DATA__SHIFT 0x0 4860#define ROM_SW_DATA_63__ROM_SW_DATA__SHIFT 0x0
4861#define ROM_SW_DATA_64__ROM_SW_DATA_MASK 0xffffffff 4861#define ROM_SW_DATA_64__ROM_SW_DATA_MASK 0xffffffff
4862#define ROM_SW_DATA_64__ROM_SW_DATA__SHIFT 0x0 4862#define ROM_SW_DATA_64__ROM_SW_DATA__SHIFT 0x0
4863#define CURRENT_PG_STATUS__VCE_PG_STATUS_MASK 0x00000002
4864#define CURRENT_PG_STATUS__UVD_PG_STATUS_MASK 0x00000004
4863 4865
4864#endif /* SMU_7_1_1_SH_MASK_H */ 4866#endif /* SMU_7_1_1_SH_MASK_H */
diff --git a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_d.h b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_d.h
index 22dd4c2b7290..4446d43d2a8f 100644
--- a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_d.h
+++ b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_d.h
@@ -1271,5 +1271,6 @@
1271#define ixROM_SW_DATA_62 0xc060011c 1271#define ixROM_SW_DATA_62 0xc060011c
1272#define ixROM_SW_DATA_63 0xc0600120 1272#define ixROM_SW_DATA_63 0xc0600120
1273#define ixROM_SW_DATA_64 0xc0600124 1273#define ixROM_SW_DATA_64 0xc0600124
1274#define ixCURRENT_PG_STATUS 0xc020029c
1274 1275
1275#endif /* SMU_7_1_2_D_H */ 1276#endif /* SMU_7_1_2_D_H */
diff --git a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_sh_mask.h b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_sh_mask.h
index 518fd02e9d35..627906674fe8 100644
--- a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_sh_mask.h
+++ b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_2_sh_mask.h
@@ -5830,5 +5830,7 @@
5830#define ROM_SW_DATA_63__ROM_SW_DATA__SHIFT 0x0 5830#define ROM_SW_DATA_63__ROM_SW_DATA__SHIFT 0x0
5831#define ROM_SW_DATA_64__ROM_SW_DATA_MASK 0xffffffff 5831#define ROM_SW_DATA_64__ROM_SW_DATA_MASK 0xffffffff
5832#define ROM_SW_DATA_64__ROM_SW_DATA__SHIFT 0x0 5832#define ROM_SW_DATA_64__ROM_SW_DATA__SHIFT 0x0
5833#define CURRENT_PG_STATUS__VCE_PG_STATUS_MASK 0x00000002
5834#define CURRENT_PG_STATUS__UVD_PG_STATUS_MASK 0x00000004
5833 5835
5834#endif /* SMU_7_1_2_SH_MASK_H */ 5836#endif /* SMU_7_1_2_SH_MASK_H */
diff --git a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_d.h b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_d.h
index eca2b851f25f..0333d880bc9e 100644
--- a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_d.h
+++ b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_d.h
@@ -1244,5 +1244,5 @@
1244#define ixGC_CAC_ACC_CU14 0xc8 1244#define ixGC_CAC_ACC_CU14 0xc8
1245#define ixGC_CAC_ACC_CU15 0xc9 1245#define ixGC_CAC_ACC_CU15 0xc9
1246#define ixGC_CAC_OVRD_CU 0xe7 1246#define ixGC_CAC_OVRD_CU 0xe7
1247 1247#define ixCURRENT_PG_STATUS 0xc020029c
1248#endif /* SMU_7_1_3_D_H */ 1248#endif /* SMU_7_1_3_D_H */
diff --git a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_sh_mask.h b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_sh_mask.h
index 1ede9e274714..654c1093d362 100644
--- a/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_sh_mask.h
+++ b/drivers/gpu/drm/amd/include/asic_reg/smu/smu_7_1_3_sh_mask.h
@@ -6076,5 +6076,8 @@
6076#define GC_CAC_OVRD_CU__OVRRD_SELECT__SHIFT 0x0 6076#define GC_CAC_OVRD_CU__OVRRD_SELECT__SHIFT 0x0
6077#define GC_CAC_OVRD_CU__OVRRD_VALUE_MASK 0xffff0000 6077#define GC_CAC_OVRD_CU__OVRRD_VALUE_MASK 0xffff0000
6078#define GC_CAC_OVRD_CU__OVRRD_VALUE__SHIFT 0x10 6078#define GC_CAC_OVRD_CU__OVRRD_VALUE__SHIFT 0x10
6079#define CURRENT_PG_STATUS__VCE_PG_STATUS_MASK 0x00000002
6080#define CURRENT_PG_STATUS__UVD_PG_STATUS_MASK 0x00000004
6081
6079 6082
6080#endif /* SMU_7_1_3_SH_MASK_H */ 6083#endif /* SMU_7_1_3_SH_MASK_H */