Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e80d514 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "disp: msm: refactor dma buf attach device assignment"

parents b299a0f0 bd28c729
Loading
Loading
Loading
Loading
+29 −31
Original line number Diff line number Diff line
@@ -95,6 +95,8 @@ struct drm_gem_object *msm_gem_prime_import(struct drm_device *dev,
	struct msm_drm_private *priv;
	struct msm_kms *kms;
	int ret;
	bool lazy_unmap = true;
	u32 domain;

	if (!dma_buf || !dev->dev_private)
		return ERR_PTR(-EINVAL);
@@ -132,36 +134,33 @@ struct drm_gem_object *msm_gem_prime_import(struct drm_device *dev,
		goto fail_put;
	}

	if (flags & ION_FLAG_SECURE) {
		if (flags & ION_FLAG_CP_PIXEL) {
			attach_dev = kms->funcs->get_address_space_device(kms,
						MSM_SMMU_DOMAIN_SECURE);
	/*
			 * While transitioning from secure use-cases, the
			 * secure-cb might still not be attached back, while
			 * the prime_fd_to_handle call is made for the next
			 * frame. Attach those buffers to default drm device
			 * and reattaching with the correct context-bank
			 * will be handled in msm_gem_delayed_import
	 * - attach default drm device for all S2 only buffers or
	 *   when IOMMU is not available
	 * - avoid using lazying unmap feature as it doesn't add
	 * any value without nested translations
	 */
			if (!attach_dev)
				attach_dev = dev->dev;

		} else if ((flags & ION_FLAG_CP_SEC_DISPLAY)
	if ((!iommu_present(&platform_bus_type))
			|| (flags & ION_FLAG_CP_SEC_DISPLAY)
			|| (flags & ION_FLAG_CP_CAMERA_PREVIEW)) {
		attach_dev = dev->dev;
		lazy_unmap = false;
	} else {
			DRM_ERROR("invalid ion secure flag: 0x%lx\n", flags);
		}
	} else {
		attach_dev = kms->funcs->get_address_space_device(kms,
						MSM_SMMU_DOMAIN_UNSECURE);
		domain = (flags & ION_FLAG_CP_PIXEL) ?
			    MSM_SMMU_DOMAIN_SECURE : MSM_SMMU_DOMAIN_UNSECURE;
		attach_dev = kms->funcs->get_address_space_device(kms, domain);
	}

	/*
	 * While transitioning from secure use-cases, the secure/non-secure
	 * context bank might still not be attached back, while the
	 * prime_fd_to_handle call is made for the next frame. Attach those
	 * buffers to default drm device and reattaching with the correct
	 * context-bank will be handled in msm_gem_delayed_import.
	 */
	if (!attach_dev) {
		DRM_ERROR("aspace device not found for domain\n");
		ret = -EINVAL;
		goto fail_put;
		DRM_DEBUG("attaching dma buf with default drm device\n");
		attach_dev = dev->dev;
	}

	attach = dma_buf_attach(dma_buf, attach_dev);
@@ -178,14 +177,13 @@ struct drm_gem_object *msm_gem_prime_import(struct drm_device *dev,
	 * otherwise do delayed mapping during the commit.
	 */
	if (flags & ION_FLAG_CACHED) {
		if (lazy_unmap)
			attach->dma_map_attrs |= DMA_ATTR_DELAYED_UNMAP;
		sgt = dma_buf_map_attachment(
				attach, DMA_BIDIRECTIONAL);
		sgt = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL);
		if (IS_ERR(sgt)) {
			ret = PTR_ERR(sgt);
			DRM_ERROR(
			"dma_buf_map_attachment failure, err=%d\n",
				ret);
			"dma_buf_map_attachment failure, err=%d\n", ret);
			goto fail_detach;
		}
	}
+3 −10
Original line number Diff line number Diff line
@@ -2182,7 +2182,6 @@ static struct device *_sde_kms_get_address_space_device(struct msm_kms *kms,
		unsigned int domain)
{
	struct sde_kms *sde_kms;
	struct device *dev;
	struct msm_gem_address_space *aspace;

	if (!kms) {
@@ -2196,16 +2195,10 @@ static struct device *_sde_kms_get_address_space_device(struct msm_kms *kms,
		return NULL;
	}

	/* return default device, when IOMMU is not present */
	if (!iommu_present(&platform_bus_type)) {
		dev = sde_kms->dev->dev;
	} else {
	aspace = _sde_kms_get_address_space(kms, domain);
		dev =  (aspace && aspace->domain_attached) ?
				msm_gem_get_aspace_device(aspace) : NULL;
	}

	return dev;
	return (aspace && aspace->domain_attached) ?
				msm_gem_get_aspace_device(aspace) : NULL;
}

static void _sde_kms_post_open(struct msm_kms *kms, struct drm_file *file)