diff options
author | Ken Wang <Qingqing.Wang@amd.com> | 2015-06-04 09:26:57 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-06-03 21:04:03 -0400 |
commit | 71062f435eaf0ff7867a1188e5c7887b0a5871ff (patch) | |
tree | d3e7404f715e42408675e4a1aab996b053585253 /drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | |
parent | 02558a006c0cf92e612c9d6d1c6058ca1a6dbe6a (diff) |
drm/amdgpu: add ib_size/start_alignment interface query
Query the IB alignment requirements from the kernel rather
than hardcoding them in the user mode drivers.
Signed-off-by: Ken Wang <Qingqing.Wang@amd.com>
Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index 12b756e8c6b8..f1e5d87ef1f7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | |||
@@ -188,6 +188,8 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file | |||
188 | struct drm_amdgpu_info_hw_ip ip = {}; | 188 | struct drm_amdgpu_info_hw_ip ip = {}; |
189 | enum amd_ip_block_type type; | 189 | enum amd_ip_block_type type; |
190 | uint32_t ring_mask = 0; | 190 | uint32_t ring_mask = 0; |
191 | uint32_t ib_start_alignment = 0; | ||
192 | uint32_t ib_size_alignment = 0; | ||
191 | 193 | ||
192 | if (info->query_hw_ip.ip_instance >= AMDGPU_HW_IP_INSTANCE_MAX_COUNT) | 194 | if (info->query_hw_ip.ip_instance >= AMDGPU_HW_IP_INSTANCE_MAX_COUNT) |
193 | return -EINVAL; | 195 | return -EINVAL; |
@@ -197,25 +199,35 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file | |||
197 | type = AMD_IP_BLOCK_TYPE_GFX; | 199 | type = AMD_IP_BLOCK_TYPE_GFX; |
198 | for (i = 0; i < adev->gfx.num_gfx_rings; i++) | 200 | for (i = 0; i < adev->gfx.num_gfx_rings; i++) |
199 | ring_mask |= ((adev->gfx.gfx_ring[i].ready ? 1 : 0) << i); | 201 | ring_mask |= ((adev->gfx.gfx_ring[i].ready ? 1 : 0) << i); |
202 | ib_start_alignment = AMDGPU_GPU_PAGE_SIZE; | ||
203 | ib_size_alignment = 8; | ||
200 | break; | 204 | break; |
201 | case AMDGPU_HW_IP_COMPUTE: | 205 | case AMDGPU_HW_IP_COMPUTE: |
202 | type = AMD_IP_BLOCK_TYPE_GFX; | 206 | type = AMD_IP_BLOCK_TYPE_GFX; |
203 | for (i = 0; i < adev->gfx.num_compute_rings; i++) | 207 | for (i = 0; i < adev->gfx.num_compute_rings; i++) |
204 | ring_mask |= ((adev->gfx.compute_ring[i].ready ? 1 : 0) << i); | 208 | ring_mask |= ((adev->gfx.compute_ring[i].ready ? 1 : 0) << i); |
209 | ib_start_alignment = AMDGPU_GPU_PAGE_SIZE; | ||
210 | ib_size_alignment = 8; | ||
205 | break; | 211 | break; |
206 | case AMDGPU_HW_IP_DMA: | 212 | case AMDGPU_HW_IP_DMA: |
207 | type = AMD_IP_BLOCK_TYPE_SDMA; | 213 | type = AMD_IP_BLOCK_TYPE_SDMA; |
208 | ring_mask = adev->sdma[0].ring.ready ? 1 : 0; | 214 | ring_mask = adev->sdma[0].ring.ready ? 1 : 0; |
209 | ring_mask |= ((adev->sdma[1].ring.ready ? 1 : 0) << 1); | 215 | ring_mask |= ((adev->sdma[1].ring.ready ? 1 : 0) << 1); |
216 | ib_start_alignment = AMDGPU_GPU_PAGE_SIZE; | ||
217 | ib_size_alignment = 1; | ||
210 | break; | 218 | break; |
211 | case AMDGPU_HW_IP_UVD: | 219 | case AMDGPU_HW_IP_UVD: |
212 | type = AMD_IP_BLOCK_TYPE_UVD; | 220 | type = AMD_IP_BLOCK_TYPE_UVD; |
213 | ring_mask = adev->uvd.ring.ready ? 1 : 0; | 221 | ring_mask = adev->uvd.ring.ready ? 1 : 0; |
222 | ib_start_alignment = AMDGPU_GPU_PAGE_SIZE; | ||
223 | ib_size_alignment = 8; | ||
214 | break; | 224 | break; |
215 | case AMDGPU_HW_IP_VCE: | 225 | case AMDGPU_HW_IP_VCE: |
216 | type = AMD_IP_BLOCK_TYPE_VCE; | 226 | type = AMD_IP_BLOCK_TYPE_VCE; |
217 | for (i = 0; i < AMDGPU_MAX_VCE_RINGS; i++) | 227 | for (i = 0; i < AMDGPU_MAX_VCE_RINGS; i++) |
218 | ring_mask |= ((adev->vce.ring[i].ready ? 1 : 0) << i); | 228 | ring_mask |= ((adev->vce.ring[i].ready ? 1 : 0) << i); |
229 | ib_start_alignment = AMDGPU_GPU_PAGE_SIZE; | ||
230 | ib_size_alignment = 8; | ||
219 | break; | 231 | break; |
220 | default: | 232 | default: |
221 | return -EINVAL; | 233 | return -EINVAL; |
@@ -228,6 +240,8 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file | |||
228 | ip.hw_ip_version_minor = adev->ip_blocks[i].minor; | 240 | ip.hw_ip_version_minor = adev->ip_blocks[i].minor; |
229 | ip.capabilities_flags = 0; | 241 | ip.capabilities_flags = 0; |
230 | ip.available_rings = ring_mask; | 242 | ip.available_rings = ring_mask; |
243 | ip.ib_start_alignment = ib_start_alignment; | ||
244 | ip.ib_size_alignment = ib_size_alignment; | ||
231 | break; | 245 | break; |
232 | } | 246 | } |
233 | } | 247 | } |