aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
diff options
context:
space:
mode:
authorKen Wang <Qingqing.Wang@amd.com>2015-06-04 09:26:57 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-06-03 21:04:03 -0400
commit71062f435eaf0ff7867a1188e5c7887b0a5871ff (patch)
treed3e7404f715e42408675e4a1aab996b053585253 /drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
parent02558a006c0cf92e612c9d6d1c6058ca1a6dbe6a (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.c14
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 }