aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2016-06-23 11:41:04 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-07-07 15:02:02 -0400
commit5dbbb60ba61e6e9976e46f3dedd989feeef08cb9 (patch)
tree7e3442f0c507cd74ce40b1df1264952b3e4ac242 /drivers/gpu
parentbfa833558cc90517da1d3f0885a9f5ea04e6b021 (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.h4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c30
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,
187int amdgpu_set_powergating_state(struct amdgpu_device *adev, 187int 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);
190int amdgpu_wait_for_idle(struct amdgpu_device *adev,
191 enum amd_ip_block_type block_type);
192bool amdgpu_is_idle(struct amdgpu_device *adev,
193 enum amd_ip_block_type block_type);
190 194
191struct amdgpu_ip_block_version { 195struct 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
1105int 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
1122bool 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
1105const struct amdgpu_ip_block_version * amdgpu_get_ip_block( 1135const 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)