hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
....@@ -38,7 +38,7 @@
3838 {
3939 struct drm_device *drm = rk_obj->base.dev;
4040 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;
4242 ssize_t ret;
4343
4444 mutex_lock(&private->mm_lock);
....@@ -62,6 +62,11 @@
6262 ret = -ENOMEM;
6363 goto err_remove_node;
6464 }
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
6570
6671 rk_obj->size = ret;
6772
....@@ -459,6 +464,11 @@
459464 rk_obj->base.size);
460465 }
461466
467
+static inline bool is_vop_enabled(void)
468
+{
469
+ return (IS_ENABLED(CONFIG_ROCKCHIP_VOP) || IS_ENABLED(CONFIG_ROCKCHIP_VOP2));
470
+}
471
+
462472 static int rockchip_gem_alloc_buf(struct rockchip_gem_object *rk_obj,
463473 bool alloc_kmap)
464474 {
....@@ -467,7 +477,7 @@
467477 struct rockchip_drm_private *private = drm->dev_private;
468478 int ret = 0;
469479
470
- if (!private->domain)
480
+ if (!private->domain && is_vop_enabled())
471481 rk_obj->flags |= ROCKCHIP_BO_CONTIG;
472482
473483 if (rk_obj->flags & ROCKCHIP_BO_SECURE) {
....@@ -507,7 +517,7 @@
507517 ret = rockchip_gem_iommu_map(rk_obj);
508518 if (ret < 0)
509519 goto err_free;
510
- } else {
520
+ } else if (is_vop_enabled()) {
511521 WARN_ON(!rk_obj->dma_handle);
512522 rk_obj->dma_addr = rk_obj->dma_handle;
513523 }
....@@ -819,7 +829,7 @@
819829 struct drm_mode_create_dumb *args)
820830 {
821831 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);
823833
824834 /*
825835 * align to 64 bytes since Mali requires it.