forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-04 1543e317f1da31b75942316931e8f491a8920811
kernel/drivers/gpu/drm/qxl/qxl_release.c
....@@ -19,9 +19,13 @@
1919 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
2020 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2121 */
22
+
23
+#include <linux/delay.h>
24
+
25
+#include <trace/events/dma_fence.h>
26
+
2227 #include "qxl_drv.h"
2328 #include "qxl_object.h"
24
-#include <trace/events/dma_fence.h>
2529
2630 /*
2731 * drawable cmd cache - allocate a bunch of VRAM pages, suballocate
....@@ -195,11 +199,12 @@
195199 }
196200
197201 static int qxl_release_bo_alloc(struct qxl_device *qdev,
198
- struct qxl_bo **bo)
202
+ struct qxl_bo **bo,
203
+ u32 priority)
199204 {
200205 /* pin releases bo's they are too messy to evict */
201206 return qxl_bo_create(qdev, PAGE_SIZE, false, true,
202
- QXL_GEM_DOMAIN_VRAM, NULL, bo);
207
+ QXL_GEM_DOMAIN_VRAM, priority, NULL, bo);
203208 }
204209
205210 int qxl_release_list_add(struct qxl_release *release, struct qxl_bo *bo)
....@@ -217,7 +222,7 @@
217222
218223 qxl_bo_ref(bo);
219224 entry->tv.bo = &bo->tbo;
220
- entry->tv.shared = false;
225
+ entry->tv.num_shared = 0;
221226 list_add_tail(&entry->tv.head, &release->bos);
222227 return 0;
223228 }
....@@ -234,12 +239,12 @@
234239 return ret;
235240 }
236241
237
- ret = reservation_object_reserve_shared(bo->tbo.resv);
242
+ ret = dma_resv_reserve_shared(bo->tbo.base.resv, 1);
238243 if (ret)
239244 return ret;
240245
241246 /* allocate a surface for reserved + validated buffers */
242
- ret = qxl_bo_check_id(bo->gem_base.dev->dev_private, bo);
247
+ ret = qxl_bo_check_id(to_qxl(bo->tbo.base.dev), bo);
243248 if (ret)
244249 return ret;
245250 return 0;
....@@ -282,7 +287,6 @@
282287 ttm_eu_backoff_reservation(&release->ticket, &release->bos);
283288 }
284289
285
-
286290 int qxl_alloc_surface_release_reserved(struct qxl_device *qdev,
287291 enum qxl_surface_cmd_type surface_cmd_type,
288292 struct qxl_release *create_rel,
....@@ -323,13 +327,18 @@
323327 int ret = 0;
324328 union qxl_release_info *info;
325329 int cur_idx;
330
+ u32 priority;
326331
327
- if (type == QXL_RELEASE_DRAWABLE)
332
+ if (type == QXL_RELEASE_DRAWABLE) {
328333 cur_idx = 0;
329
- else if (type == QXL_RELEASE_SURFACE_CMD)
334
+ priority = 0;
335
+ } else if (type == QXL_RELEASE_SURFACE_CMD) {
330336 cur_idx = 1;
331
- else if (type == QXL_RELEASE_CURSOR_CMD)
337
+ priority = 1;
338
+ } else if (type == QXL_RELEASE_CURSOR_CMD) {
332339 cur_idx = 2;
340
+ priority = 1;
341
+ }
333342 else {
334343 DRM_ERROR("got illegal type: %d\n", type);
335344 return -EINVAL;
....@@ -349,7 +358,7 @@
349358 qdev->current_release_bo[cur_idx] = NULL;
350359 }
351360 if (!qdev->current_release_bo[cur_idx]) {
352
- ret = qxl_release_bo_alloc(qdev, &qdev->current_release_bo[cur_idx]);
361
+ ret = qxl_release_bo_alloc(qdev, &qdev->current_release_bo[cur_idx], priority);
353362 if (ret) {
354363 mutex_unlock(&qdev->release_mutex);
355364 qxl_release_free(qdev, *release);
....@@ -426,10 +435,7 @@
426435 void qxl_release_fence_buffer_objects(struct qxl_release *release)
427436 {
428437 struct ttm_buffer_object *bo;
429
- struct ttm_bo_global *glob;
430438 struct ttm_bo_device *bdev;
431
- struct ttm_bo_driver *driver;
432
- struct qxl_bo *qbo;
433439 struct ttm_validate_buffer *entry;
434440 struct qxl_device *qdev;
435441
....@@ -450,20 +456,16 @@
450456 release->id | 0xf0000000, release->base.seqno);
451457 trace_dma_fence_emit(&release->base);
452458
453
- driver = bdev->driver;
454
- glob = bdev->glob;
455
-
456
- spin_lock(&glob->lru_lock);
459
+ spin_lock(&ttm_bo_glob.lru_lock);
457460
458461 list_for_each_entry(entry, &release->bos, head) {
459462 bo = entry->bo;
460
- qbo = to_qxl_bo(bo);
461463
462
- reservation_object_add_shared_fence(bo->resv, &release->base);
463
- ttm_bo_add_to_lru(bo);
464
- reservation_object_unlock(bo->resv);
464
+ dma_resv_add_shared_fence(bo->base.resv, &release->base);
465
+ ttm_bo_move_to_lru_tail(bo, NULL);
466
+ dma_resv_unlock(bo->base.resv);
465467 }
466
- spin_unlock(&glob->lru_lock);
468
+ spin_unlock(&ttm_bo_glob.lru_lock);
467469 ww_acquire_fini(&release->ticket);
468470 }
469471