diff options
author | Rex Zhu <Rex.Zhu@amd.com> | 2017-02-08 04:17:55 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-02-13 12:43:04 -0500 |
commit | 254cd2e08dd0c44f9de6424f10390343a34b4f5a (patch) | |
tree | aba1e2a28c4bc6070652943576b974da209f0e54 | |
parent | d50e5c24480f8a6e2918ecd998e65f990f88b0ee (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>
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 | ||
836 | out: | 834 | out: |
@@ -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 | ||
1062 | out: | 1060 | out: |
@@ -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 | ||
779 | out: | 777 | out: |
@@ -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 */ |