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/amd/amdgpu | |
| 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/amd/amdgpu')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vce_v3_0.c | 5 |
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 | ||
| 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 | } |
