Loading msm/msm_gem_prime.c +29 −31 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading @@ -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; } } Loading msm/sde/sde_kms.c +3 −10 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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) Loading Loading
msm/msm_gem_prime.c +29 −31 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading @@ -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; } } Loading
msm/sde/sde_kms.c +3 −10 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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) Loading