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 /drivers/gpu/drm | |
| 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>
Diffstat (limited to 'drivers/gpu/drm')
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 */ |
