diff options
| -rw-r--r-- | drivers/gpu/drm/etnaviv/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_drv.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gem.c | 45 | ||||
| -rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 8 |
6 files changed, 37 insertions, 32 deletions
diff --git a/drivers/gpu/drm/etnaviv/Kconfig b/drivers/gpu/drm/etnaviv/Kconfig index 71cee4e9fefb..38b477b5fbf9 100644 --- a/drivers/gpu/drm/etnaviv/Kconfig +++ b/drivers/gpu/drm/etnaviv/Kconfig | |||
| @@ -10,6 +10,8 @@ config DRM_ETNAVIV | |||
| 10 | select IOMMU_API | 10 | select IOMMU_API |
| 11 | select IOMMU_SUPPORT | 11 | select IOMMU_SUPPORT |
| 12 | select WANT_DEV_COREDUMP | 12 | select WANT_DEV_COREDUMP |
| 13 | select CMA if HAVE_DMA_CONTIGUOUS | ||
| 14 | select DMA_CMA if HAVE_DMA_CONTIGUOUS | ||
| 13 | help | 15 | help |
| 14 | DRM driver for Vivante GPUs. | 16 | DRM driver for Vivante GPUs. |
| 15 | 17 | ||
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c index 91e17aeee1da..2cb4773823c2 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c | |||
| @@ -316,7 +316,7 @@ static int etnaviv_ioctl_gem_cpu_prep(struct drm_device *dev, void *data, | |||
| 316 | 316 | ||
| 317 | ret = etnaviv_gem_cpu_prep(obj, args->op, &TS(args->timeout)); | 317 | ret = etnaviv_gem_cpu_prep(obj, args->op, &TS(args->timeout)); |
| 318 | 318 | ||
| 319 | drm_gem_object_unreference_unlocked(obj); | 319 | drm_gem_object_put_unlocked(obj); |
| 320 | 320 | ||
| 321 | return ret; | 321 | return ret; |
| 322 | } | 322 | } |
| @@ -337,7 +337,7 @@ static int etnaviv_ioctl_gem_cpu_fini(struct drm_device *dev, void *data, | |||
| 337 | 337 | ||
| 338 | ret = etnaviv_gem_cpu_fini(obj); | 338 | ret = etnaviv_gem_cpu_fini(obj); |
| 339 | 339 | ||
| 340 | drm_gem_object_unreference_unlocked(obj); | 340 | drm_gem_object_put_unlocked(obj); |
| 341 | 341 | ||
| 342 | return ret; | 342 | return ret; |
| 343 | } | 343 | } |
| @@ -357,7 +357,7 @@ static int etnaviv_ioctl_gem_info(struct drm_device *dev, void *data, | |||
| 357 | return -ENOENT; | 357 | return -ENOENT; |
| 358 | 358 | ||
| 359 | ret = etnaviv_gem_mmap_offset(obj, &args->offset); | 359 | ret = etnaviv_gem_mmap_offset(obj, &args->offset); |
| 360 | drm_gem_object_unreference_unlocked(obj); | 360 | drm_gem_object_put_unlocked(obj); |
| 361 | 361 | ||
| 362 | return ret; | 362 | return ret; |
| 363 | } | 363 | } |
| @@ -446,7 +446,7 @@ static int etnaviv_ioctl_gem_wait(struct drm_device *dev, void *data, | |||
| 446 | 446 | ||
| 447 | ret = etnaviv_gem_wait_bo(gpu, obj, timeout); | 447 | ret = etnaviv_gem_wait_bo(gpu, obj, timeout); |
| 448 | 448 | ||
| 449 | drm_gem_object_unreference_unlocked(obj); | 449 | drm_gem_object_put_unlocked(obj); |
| 450 | 450 | ||
| 451 | return ret; | 451 | return ret; |
| 452 | } | 452 | } |
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c index 9a3bea738330..5a634594a6ce 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c | |||
| @@ -68,7 +68,7 @@ static int etnaviv_gem_shmem_get_pages(struct etnaviv_gem_object *etnaviv_obj) | |||
| 68 | struct page **p = drm_gem_get_pages(&etnaviv_obj->base); | 68 | struct page **p = drm_gem_get_pages(&etnaviv_obj->base); |
| 69 | 69 | ||
| 70 | if (IS_ERR(p)) { | 70 | if (IS_ERR(p)) { |
| 71 | dev_err(dev->dev, "could not get pages: %ld\n", PTR_ERR(p)); | 71 | dev_dbg(dev->dev, "could not get pages: %ld\n", PTR_ERR(p)); |
| 72 | return PTR_ERR(p); | 72 | return PTR_ERR(p); |
| 73 | } | 73 | } |
| 74 | 74 | ||
| @@ -265,7 +265,7 @@ void etnaviv_gem_mapping_reference(struct etnaviv_vram_mapping *mapping) | |||
| 265 | { | 265 | { |
| 266 | struct etnaviv_gem_object *etnaviv_obj = mapping->object; | 266 | struct etnaviv_gem_object *etnaviv_obj = mapping->object; |
| 267 | 267 | ||
| 268 | drm_gem_object_reference(&etnaviv_obj->base); | 268 | drm_gem_object_get(&etnaviv_obj->base); |
| 269 | 269 | ||
| 270 | mutex_lock(&etnaviv_obj->lock); | 270 | mutex_lock(&etnaviv_obj->lock); |
| 271 | WARN_ON(mapping->use == 0); | 271 | WARN_ON(mapping->use == 0); |
| @@ -282,7 +282,7 @@ void etnaviv_gem_mapping_unreference(struct etnaviv_vram_mapping *mapping) | |||
| 282 | mapping->use -= 1; | 282 | mapping->use -= 1; |
| 283 | mutex_unlock(&etnaviv_obj->lock); | 283 | mutex_unlock(&etnaviv_obj->lock); |
| 284 | 284 | ||
| 285 | drm_gem_object_unreference_unlocked(&etnaviv_obj->base); | 285 | drm_gem_object_put_unlocked(&etnaviv_obj->base); |
| 286 | } | 286 | } |
| 287 | 287 | ||
| 288 | struct etnaviv_vram_mapping *etnaviv_gem_mapping_get( | 288 | struct etnaviv_vram_mapping *etnaviv_gem_mapping_get( |
| @@ -358,7 +358,7 @@ out: | |||
| 358 | return ERR_PTR(ret); | 358 | return ERR_PTR(ret); |
| 359 | 359 | ||
| 360 | /* Take a reference on the object */ | 360 | /* Take a reference on the object */ |
| 361 | drm_gem_object_reference(obj); | 361 | drm_gem_object_get(obj); |
| 362 | return mapping; | 362 | return mapping; |
| 363 | } | 363 | } |
| 364 | 364 | ||
| @@ -413,6 +413,16 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op, | |||
| 413 | bool write = !!(op & ETNA_PREP_WRITE); | 413 | bool write = !!(op & ETNA_PREP_WRITE); |
| 414 | int ret; | 414 | int ret; |
| 415 | 415 | ||
| 416 | if (!etnaviv_obj->sgt) { | ||
| 417 | void *ret; | ||
| 418 | |||
| 419 | mutex_lock(&etnaviv_obj->lock); | ||
| 420 | ret = etnaviv_gem_get_pages(etnaviv_obj); | ||
| 421 | mutex_unlock(&etnaviv_obj->lock); | ||
| 422 | if (IS_ERR(ret)) | ||
| 423 | return PTR_ERR(ret); | ||
| 424 | } | ||
| 425 | |||
| 416 | if (op & ETNA_PREP_NOSYNC) { | 426 | if (op & ETNA_PREP_NOSYNC) { |
| 417 | if (!reservation_object_test_signaled_rcu(etnaviv_obj->resv, | 427 | if (!reservation_object_test_signaled_rcu(etnaviv_obj->resv, |
| 418 | write)) | 428 | write)) |
| @@ -427,16 +437,6 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op, | |||
| 427 | } | 437 | } |
| 428 | 438 | ||
| 429 | if (etnaviv_obj->flags & ETNA_BO_CACHED) { | 439 | if (etnaviv_obj->flags & ETNA_BO_CACHED) { |
| 430 | if (!etnaviv_obj->sgt) { | ||
| 431 | void *ret; | ||
| 432 | |||
| 433 | mutex_lock(&etnaviv_obj->lock); | ||
| 434 | ret = etnaviv_gem_get_pages(etnaviv_obj); | ||
| 435 | mutex_unlock(&etnaviv_obj->lock); | ||
| 436 | if (IS_ERR(ret)) | ||
| 437 | return PTR_ERR(ret); | ||
| 438 | } | ||
| 439 | |||
| 440 | dma_sync_sg_for_cpu(dev->dev, etnaviv_obj->sgt->sgl, | 440 | dma_sync_sg_for_cpu(dev->dev, etnaviv_obj->sgt->sgl, |
| 441 | etnaviv_obj->sgt->nents, | 441 | etnaviv_obj->sgt->nents, |
| 442 | etnaviv_op_to_dma_dir(op)); | 442 | etnaviv_op_to_dma_dir(op)); |
| @@ -662,7 +662,8 @@ static struct drm_gem_object *__etnaviv_gem_new(struct drm_device *dev, | |||
| 662 | * going to pin these pages. | 662 | * going to pin these pages. |
| 663 | */ | 663 | */ |
| 664 | mapping = obj->filp->f_mapping; | 664 | mapping = obj->filp->f_mapping; |
| 665 | mapping_set_gfp_mask(mapping, GFP_HIGHUSER); | 665 | mapping_set_gfp_mask(mapping, GFP_HIGHUSER | |
| 666 | __GFP_RETRY_MAYFAIL | __GFP_NOWARN); | ||
| 666 | } | 667 | } |
| 667 | 668 | ||
| 668 | if (ret) | 669 | if (ret) |
| @@ -671,7 +672,7 @@ static struct drm_gem_object *__etnaviv_gem_new(struct drm_device *dev, | |||
| 671 | return obj; | 672 | return obj; |
| 672 | 673 | ||
| 673 | fail: | 674 | fail: |
| 674 | drm_gem_object_unreference_unlocked(obj); | 675 | drm_gem_object_put_unlocked(obj); |
| 675 | return ERR_PTR(ret); | 676 | return ERR_PTR(ret); |
| 676 | } | 677 | } |
| 677 | 678 | ||
| @@ -688,14 +689,14 @@ int etnaviv_gem_new_handle(struct drm_device *dev, struct drm_file *file, | |||
| 688 | 689 | ||
| 689 | ret = etnaviv_gem_obj_add(dev, obj); | 690 | ret = etnaviv_gem_obj_add(dev, obj); |
| 690 | if (ret < 0) { | 691 | if (ret < 0) { |
| 691 | drm_gem_object_unreference_unlocked(obj); | 692 | drm_gem_object_put_unlocked(obj); |
| 692 | return ret; | 693 | return ret; |
| 693 | } | 694 | } |
| 694 | 695 | ||
| 695 | ret = drm_gem_handle_create(file, obj, handle); | 696 | ret = drm_gem_handle_create(file, obj, handle); |
| 696 | 697 | ||
| 697 | /* drop reference from allocate - handle holds it now */ | 698 | /* drop reference from allocate - handle holds it now */ |
| 698 | drm_gem_object_unreference_unlocked(obj); | 699 | drm_gem_object_put_unlocked(obj); |
| 699 | 700 | ||
| 700 | return ret; | 701 | return ret; |
| 701 | } | 702 | } |
| @@ -712,7 +713,7 @@ struct drm_gem_object *etnaviv_gem_new(struct drm_device *dev, | |||
| 712 | 713 | ||
| 713 | ret = etnaviv_gem_obj_add(dev, obj); | 714 | ret = etnaviv_gem_obj_add(dev, obj); |
| 714 | if (ret < 0) { | ||
