hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/nouveau/nouveau_prime.c
....@@ -22,7 +22,6 @@
2222 * Authors: Dave Airlie
2323 */
2424
25
-#include <drm/drmP.h>
2625 #include <linux/dma-buf.h>
2726
2827 #include "nouveau_drv.h"
....@@ -33,7 +32,7 @@
3332 struct nouveau_bo *nvbo = nouveau_gem_object(obj);
3433 int npages = nvbo->bo.num_pages;
3534
36
- return drm_prime_pages_to_sg(nvbo->bo.ttm->pages, npages);
35
+ return drm_prime_pages_to_sg(obj->dev, nvbo->bo.ttm->pages, npages);
3736 }
3837
3938 void *nouveau_gem_prime_vmap(struct drm_gem_object *obj)
....@@ -61,31 +60,44 @@
6160 struct sg_table *sg)
6261 {
6362 struct nouveau_drm *drm = nouveau_drm(dev);
63
+ struct drm_gem_object *obj;
6464 struct nouveau_bo *nvbo;
65
- struct reservation_object *robj = attach->dmabuf->resv;
66
- u32 flags = 0;
65
+ struct dma_resv *robj = attach->dmabuf->resv;
66
+ u64 size = attach->dmabuf->size;
67
+ int align = 0;
6768 int ret;
6869
69
- flags = TTM_PL_FLAG_TT;
70
-
71
- ww_mutex_lock(&robj->lock, NULL);
72
- ret = nouveau_bo_new(&drm->client, attach->dmabuf->size, 0, flags, 0, 0,
73
- sg, robj, &nvbo);
74
- ww_mutex_unlock(&robj->lock);
75
- if (ret)
76
- return ERR_PTR(ret);
70
+ dma_resv_lock(robj, NULL);
71
+ nvbo = nouveau_bo_alloc(&drm->client, &size, &align,
72
+ NOUVEAU_GEM_DOMAIN_GART, 0, 0);
73
+ if (IS_ERR(nvbo)) {
74
+ obj = ERR_CAST(nvbo);
75
+ goto unlock;
76
+ }
7777
7878 nvbo->valid_domains = NOUVEAU_GEM_DOMAIN_GART;
7979
8080 /* Initialize the embedded gem-object. We return a single gem-reference
8181 * to the caller, instead of a normal nouveau_bo ttm reference. */
82
- ret = drm_gem_object_init(dev, &nvbo->gem, nvbo->bo.mem.size);
82
+ ret = drm_gem_object_init(dev, &nvbo->bo.base, size);
8383 if (ret) {
8484 nouveau_bo_ref(NULL, &nvbo);
85
- return ERR_PTR(-ENOMEM);
85
+ obj = ERR_PTR(-ENOMEM);
86
+ goto unlock;
8687 }
8788
88
- return &nvbo->gem;
89
+ ret = nouveau_bo_init(nvbo, size, align, NOUVEAU_GEM_DOMAIN_GART,
90
+ sg, robj);
91
+ if (ret) {
92
+ obj = ERR_PTR(ret);
93
+ goto unlock;
94
+ }
95
+
96
+ obj = &nvbo->bo.base;
97
+
98
+unlock:
99
+ dma_resv_unlock(robj);
100
+ return obj;
89101 }
90102
91103 int nouveau_gem_prime_pin(struct drm_gem_object *obj)
....@@ -94,7 +106,7 @@
94106 int ret;
95107
96108 /* pin buffer into GTT */
97
- ret = nouveau_bo_pin(nvbo, TTM_PL_FLAG_TT, false);
109
+ ret = nouveau_bo_pin(nvbo, NOUVEAU_GEM_DOMAIN_GART, false);
98110 if (ret)
99111 return -EINVAL;
100112
....@@ -121,11 +133,4 @@
121133 struct nouveau_bo *nvbo = nouveau_gem_object(obj);
122134
123135 nouveau_bo_unpin(nvbo);
124
-}
125
-
126
-struct reservation_object *nouveau_gem_prime_res_obj(struct drm_gem_object *obj)
127
-{
128
- struct nouveau_bo *nvbo = nouveau_gem_object(obj);
129
-
130
- return nvbo->bo.resv;
131136 }