|
@@ -190,7 +190,6 @@ static void submit_unpin_objects(struct etnaviv_gem_submit *submit)
|
|
if (submit->bos[i].flags & BO_PINNED)
|
|
if (submit->bos[i].flags & BO_PINNED)
|
|
etnaviv_gem_mapping_unreference(submit->bos[i].mapping);
|
|
etnaviv_gem_mapping_unreference(submit->bos[i].mapping);
|
|
|
|
|
|
- submit->bos[i].iova = 0;
|
|
|
|
submit->bos[i].mapping = NULL;
|
|
submit->bos[i].mapping = NULL;
|
|
submit->bos[i].flags &= ~BO_PINNED;
|
|
submit->bos[i].flags &= ~BO_PINNED;
|
|
}
|
|
}
|
|
@@ -213,14 +212,13 @@ static int submit_pin_objects(struct etnaviv_gem_submit *submit)
|
|
|
|
|
|
submit->bos[i].flags |= BO_PINNED;
|
|
submit->bos[i].flags |= BO_PINNED;
|
|
submit->bos[i].mapping = mapping;
|
|
submit->bos[i].mapping = mapping;
|
|
- submit->bos[i].iova = mapping->iova;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static int submit_bo(struct etnaviv_gem_submit *submit, u32 idx,
|
|
static int submit_bo(struct etnaviv_gem_submit *submit, u32 idx,
|
|
- struct etnaviv_gem_object **obj, u32 *iova)
|
|
|
|
|
|
+ struct etnaviv_gem_submit_bo **bo)
|
|
{
|
|
{
|
|
if (idx >= submit->nr_bos) {
|
|
if (idx >= submit->nr_bos) {
|
|
DRM_ERROR("invalid buffer index: %u (out of %u)\n",
|
|
DRM_ERROR("invalid buffer index: %u (out of %u)\n",
|
|
@@ -228,10 +226,7 @@ static int submit_bo(struct etnaviv_gem_submit *submit, u32 idx,
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
- if (obj)
|
|
|
|
- *obj = submit->bos[idx].obj;
|
|
|
|
- if (iova)
|
|
|
|
- *iova = submit->bos[idx].iova;
|
|
|
|
|
|
+ *bo = &submit->bos[idx];
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -247,8 +242,8 @@ static int submit_reloc(struct etnaviv_gem_submit *submit, void *stream,
|
|
|
|
|
|
for (i = 0; i < nr_relocs; i++) {
|
|
for (i = 0; i < nr_relocs; i++) {
|
|
const struct drm_etnaviv_gem_submit_reloc *r = relocs + i;
|
|
const struct drm_etnaviv_gem_submit_reloc *r = relocs + i;
|
|
- struct etnaviv_gem_object *bobj;
|
|
|
|
- u32 iova, off;
|
|
|
|
|
|
+ struct etnaviv_gem_submit_bo *bo;
|
|
|
|
+ u32 off;
|
|
|
|
|
|
if (unlikely(r->flags)) {
|
|
if (unlikely(r->flags)) {
|
|
DRM_ERROR("invalid reloc flags\n");
|
|
DRM_ERROR("invalid reloc flags\n");
|
|
@@ -270,17 +265,16 @@ static int submit_reloc(struct etnaviv_gem_submit *submit, void *stream,
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
- ret = submit_bo(submit, r->reloc_idx, &bobj, &iova);
|
|
|
|
|
|
+ ret = submit_bo(submit, r->reloc_idx, &bo);
|
|
if (ret)
|
|
if (ret)
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
- if (r->reloc_offset >=
|
|
|
|
- bobj->base.size - sizeof(*ptr)) {
|
|
|
|
|
|
+ if (r->reloc_offset >= bo->obj->base.size - sizeof(*ptr)) {
|
|
DRM_ERROR("relocation %u outside object", i);
|
|
DRM_ERROR("relocation %u outside object", i);
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
- ptr[off] = iova + r->reloc_offset;
|
|
|
|
|
|
+ ptr[off] = bo->mapping->iova + r->reloc_offset;
|
|
|
|
|
|
last_offset = off;
|
|
last_offset = off;
|
|
}
|
|
}
|