.. | .. |
---|
38 | 38 | { |
---|
39 | 39 | struct drm_device *drm = rk_obj->base.dev; |
---|
40 | 40 | struct rockchip_drm_private *private = drm->dev_private; |
---|
41 | | - int prot = IOMMU_READ | IOMMU_WRITE | IOMMU_TLB_SHOT_ENTIRE; |
---|
| 41 | + int prot = IOMMU_READ | IOMMU_WRITE; |
---|
42 | 42 | ssize_t ret; |
---|
43 | 43 | |
---|
44 | 44 | mutex_lock(&private->mm_lock); |
---|
.. | .. |
---|
62 | 62 | ret = -ENOMEM; |
---|
63 | 63 | goto err_remove_node; |
---|
64 | 64 | } |
---|
| 65 | + |
---|
| 66 | +#ifdef CONFIG_IOMMU_API |
---|
| 67 | + if (private->domain->ops->flush_iotlb_all) |
---|
| 68 | + private->domain->ops->flush_iotlb_all(private->domain); |
---|
| 69 | +#endif |
---|
65 | 70 | |
---|
66 | 71 | rk_obj->size = ret; |
---|
67 | 72 | |
---|
.. | .. |
---|
459 | 464 | rk_obj->base.size); |
---|
460 | 465 | } |
---|
461 | 466 | |
---|
| 467 | +static inline bool is_vop_enabled(void) |
---|
| 468 | +{ |
---|
| 469 | + return (IS_ENABLED(CONFIG_ROCKCHIP_VOP) || IS_ENABLED(CONFIG_ROCKCHIP_VOP2)); |
---|
| 470 | +} |
---|
| 471 | + |
---|
462 | 472 | static int rockchip_gem_alloc_buf(struct rockchip_gem_object *rk_obj, |
---|
463 | 473 | bool alloc_kmap) |
---|
464 | 474 | { |
---|
.. | .. |
---|
467 | 477 | struct rockchip_drm_private *private = drm->dev_private; |
---|
468 | 478 | int ret = 0; |
---|
469 | 479 | |
---|
470 | | - if (!private->domain) |
---|
| 480 | + if (!private->domain && is_vop_enabled()) |
---|
471 | 481 | rk_obj->flags |= ROCKCHIP_BO_CONTIG; |
---|
472 | 482 | |
---|
473 | 483 | if (rk_obj->flags & ROCKCHIP_BO_SECURE) { |
---|
.. | .. |
---|
507 | 517 | ret = rockchip_gem_iommu_map(rk_obj); |
---|
508 | 518 | if (ret < 0) |
---|
509 | 519 | goto err_free; |
---|
510 | | - } else { |
---|
| 520 | + } else if (is_vop_enabled()) { |
---|
511 | 521 | WARN_ON(!rk_obj->dma_handle); |
---|
512 | 522 | rk_obj->dma_addr = rk_obj->dma_handle; |
---|
513 | 523 | } |
---|
.. | .. |
---|
819 | 829 | struct drm_mode_create_dumb *args) |
---|
820 | 830 | { |
---|
821 | 831 | struct rockchip_gem_object *rk_obj; |
---|
822 | | - int min_pitch = DIV_ROUND_UP(args->width * args->bpp, 8); |
---|
| 832 | + u32 min_pitch = args->width * DIV_ROUND_UP(args->bpp, 8); |
---|
823 | 833 | |
---|
824 | 834 | /* |
---|
825 | 835 | * align to 64 bytes since Mali requires it. |
---|