aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c
index c13a55352db6..4073f072f6c4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c
@@ -100,6 +100,40 @@ static int amdgpu_identity_map(struct amdgpu_device *adev,
100 return amdgpu_update_cached_map(mapper, ring, *out_ring); 100 return amdgpu_update_cached_map(mapper, ring, *out_ring);
101} 101}
102 102
103static enum amdgpu_ring_type amdgpu_hw_ip_to_ring_type(int hw_ip)
104{
105 switch (hw_ip) {
106 case AMDGPU_HW_IP_GFX:
107 return AMDGPU_RING_TYPE_GFX;
108 case AMDGPU_HW_IP_COMPUTE:
109 return AMDGPU_RING_TYPE_COMPUTE;
110 case AMDGPU_HW_IP_DMA:
111 return AMDGPU_RING_TYPE_SDMA;
112 case AMDGPU_HW_IP_UVD:
113 return AMDGPU_RING_TYPE_UVD;
114 case AMDGPU_HW_IP_VCE:
115 return AMDGPU_RING_TYPE_VCE;
116 default:
117 DRM_ERROR("Invalid HW IP specified %d\n", hw_ip);
118 return -1;
119 }
120}
121
122static int amdgpu_lru_map(struct amdgpu_device *adev,
123 struct amdgpu_queue_mapper *mapper,
124 int user_ring,
125 struct amdgpu_ring **out_ring)
126{
127 int r;
128 int ring_type = amdgpu_hw_ip_to_ring_type(mapper->hw_ip);
129
130 r = amdgpu_ring_lru_get(adev, ring_type, out_ring);
131 if (r)
132 return r;
133
134 return amdgpu_update_cached_map(mapper, user_ring, *out_ring);
135}
136
103/** 137/**
104 * amdgpu_queue_mgr_init - init an amdgpu_queue_mgr struct 138 * amdgpu_queue_mgr_init - init an amdgpu_queue_mgr struct
105 * 139 *
@@ -230,7 +264,6 @@ int amdgpu_queue_mgr_map(struct amdgpu_device *adev,
230 264
231 switch (mapper->hw_ip) { 265 switch (mapper->hw_ip) {
232 case AMDGPU_HW_IP_GFX: 266 case AMDGPU_HW_IP_GFX:
233 case AMDGPU_HW_IP_COMPUTE:
234 case AMDGPU_HW_IP_DMA: 267 case AMDGPU_HW_IP_DMA:
235 case AMDGPU_HW_IP_UVD: 268 case AMDGPU_HW_IP_UVD:
236 case AMDGPU_HW_IP_VCE: 269 case AMDGPU_HW_IP_VCE:
@@ -239,6 +272,9 @@ int amdgpu_queue_mgr_map(struct amdgpu_device *adev,
239 case AMDGPU_HW_IP_VCN_ENC: 272 case AMDGPU_HW_IP_VCN_ENC:
240 r = amdgpu_identity_map(adev, mapper, ring, out_ring); 273 r = amdgpu_identity_map(adev, mapper, ring, out_ring);
241 break; 274 break;
275 case AMDGPU_HW_IP_COMPUTE:
276 r = amdgpu_lru_map(adev, mapper, ring, out_ring);
277 break;
242 default: 278 default:
243 *out_ring = NULL; 279 *out_ring = NULL;
244 r = -EINVAL; 280 r = -EINVAL;