diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2016-06-23 11:41:04 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-07-07 15:02:02 -0400 |
commit | 5dbbb60ba61e6e9976e46f3dedd989feeef08cb9 (patch) | |
tree | 7e3442f0c507cd74ce40b1df1264952b3e4ac242 /drivers/gpu | |
parent | bfa833558cc90517da1d3f0885a9f5ea04e6b021 (diff) |
drm/amdgpu: add IP helpers for wait_for_idle and is_idle
Helpers to to call the IP functions for the selected IP.
Reviewed-by: Chunming zhou <david1.zhou@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 30 |
2 files changed, 34 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 0068955ae37f..7df1f486f1fb 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -187,6 +187,10 @@ int amdgpu_set_clockgating_state(struct amdgpu_device *adev, | |||
187 | int amdgpu_set_powergating_state(struct amdgpu_device *adev, | 187 | int amdgpu_set_powergating_state(struct amdgpu_device *adev, |
188 | enum amd_ip_block_type block_type, | 188 | enum amd_ip_block_type block_type, |
189 | enum amd_powergating_state state); | 189 | enum amd_powergating_state state); |
190 | int amdgpu_wait_for_idle(struct amdgpu_device *adev, | ||
191 | enum amd_ip_block_type block_type); | ||
192 | bool amdgpu_is_idle(struct amdgpu_device *adev, | ||
193 | enum amd_ip_block_type block_type); | ||
190 | 194 | ||
191 | struct amdgpu_ip_block_version { | 195 | struct amdgpu_ip_block_version { |
192 | enum amd_ip_block_type type; | 196 | enum amd_ip_block_type type; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 9757a85e78d6..c281cfd65337 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
@@ -1102,6 +1102,36 @@ int amdgpu_set_powergating_state(struct amdgpu_device *adev, | |||
1102 | return r; | 1102 | return r; |
1103 | } | 1103 | } |
1104 | 1104 | ||
1105 | int amdgpu_wait_for_idle(struct amdgpu_device *adev, | ||
1106 | enum amd_ip_block_type block_type) | ||
1107 | { | ||
1108 | int i, r; | ||
1109 | |||
1110 | for (i = 0; i < adev->num_ip_blocks; i++) { | ||
1111 | if (adev->ip_blocks[i].type == block_type) { | ||
1112 | r = adev->ip_blocks[i].funcs->wait_for_idle((void *)adev); | ||
1113 | if (r) | ||
1114 | return r; | ||
1115 | break; | ||
1116 | } | ||
1117 | } | ||
1118 | return 0; | ||
1119 | |||
1120 | } | ||
1121 | |||
1122 | bool amdgpu_is_idle(struct amdgpu_device *adev, | ||
1123 | enum amd_ip_block_type block_type) | ||
1124 | { | ||
1125 | int i; | ||
1126 | |||
1127 | for (i = 0; i < adev->num_ip_blocks; i++) { | ||
1128 | if (adev->ip_blocks[i].type == block_type) | ||
1129 | return adev->ip_blocks[i].funcs->is_idle((void *)adev); | ||
1130 | } | ||
1131 | return true; | ||
1132 | |||
1133 | } | ||
1134 | |||
1105 | const struct amdgpu_ip_block_version * amdgpu_get_ip_block( | 1135 | const struct amdgpu_ip_block_version * amdgpu_get_ip_block( |
1106 | struct amdgpu_device *adev, | 1136 | struct amdgpu_device *adev, |
1107 | enum amd_ip_block_type type) | 1137 | enum amd_ip_block_type type) |