aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/msm_gpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gpu.c')
-rw-r--r--drivers/gpu/drm/msm/msm_gpu.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index c3909ba75b12..6e079a83bd36 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -20,6 +20,7 @@
20#include "msm_mmu.h" 20#include "msm_mmu.h"
21#include "msm_fence.h" 21#include "msm_fence.h"
22#include "msm_gpu_trace.h" 22#include "msm_gpu_trace.h"
23#include "adreno/adreno_gpu.h"
23 24
24#include <generated/utsrelease.h> 25#include <generated/utsrelease.h>
25#include <linux/string_helpers.h> 26#include <linux/string_helpers.h>
@@ -822,7 +823,6 @@ static struct msm_gem_address_space *
822msm_gpu_create_address_space(struct msm_gpu *gpu, struct platform_device *pdev, 823msm_gpu_create_address_space(struct msm_gpu *gpu, struct platform_device *pdev,
823 uint64_t va_start, uint64_t va_end) 824 uint64_t va_start, uint64_t va_end)
824{ 825{
825 struct iommu_domain *iommu;
826 struct msm_gem_address_space *aspace; 826 struct msm_gem_address_space *aspace;
827 int ret; 827 int ret;
828 828
@@ -831,20 +831,27 @@ msm_gpu_create_address_space(struct msm_gpu *gpu, struct platform_device *pdev,
831 * and have separate page tables per context. For now, to keep things 831 * and have separate page tables per context. For now, to keep things
832 * simple and to get something working, just use a single address space: 832 * simple and to get something working, just use a single address space:
833 */ 833 */
834 iommu = iommu_domain_alloc(&platform_bus_type); 834 if (!adreno_is_a2xx(to_adreno_gpu(gpu))) {
835 if (!iommu) 835 struct iommu_domain *iommu = iommu_domain_alloc(&platform_bus_type);
836 return NULL; 836 if (!iommu)
837 837 return NULL;
838 iommu->geometry.aperture_start = va_start; 838
839 iommu->geometry.aperture_end = va_end; 839 iommu->geometry.aperture_start = va_start;
840 840 iommu->geometry.aperture_end = va_end;
841 DRM_DEV_INFO(gpu->dev->dev, "%s: using IOMMU\n", gpu->name); 841
842 DRM_DEV_INFO(gpu->dev->dev, "%s: using IOMMU\n", gpu->name);
843
844 aspace = msm_gem_address_space_create(&pdev->dev, iommu, "gpu");
845 if (IS_ERR(aspace))
846 iommu_domain_free(iommu);
847 } else {
848 aspace = msm_gem_address_space_create_a2xx(&pdev->dev, gpu, "gpu",
849 va_start, va_end);
850 }
842 851
843 aspace = msm_gem_address_space_create(&pdev->dev, iommu, "gpu");
844 if (IS_ERR(aspace)) { 852 if (IS_ERR(aspace)) {
845 DRM_DEV_ERROR(gpu->dev->dev, "failed to init iommu: %ld\n", 853 DRM_DEV_ERROR(gpu->dev->dev, "failed to init mmu: %ld\n",
846 PTR_ERR(aspace)); 854 PTR_ERR(aspace));
847 iommu_domain_free(iommu);
848 return ERR_CAST(aspace); 855 return ERR_CAST(aspace);
849 } 856 }
850 857