drm/msm: remove duplicated code from a6xx_create_address_space
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Wed, 2 Nov 2022 17:54:49 +0000 (20:54 +0300)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Wed, 2 Nov 2022 23:23:46 +0000 (02:23 +0300)
The function a6xx_create_address_space() is mostly a copy of
adreno_iommu_create_address_space() with added quirk setting. Rework
these two functions to be a thin wrappers around a common helper.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Patchwork: https://patchwork.freedesktop.org/patch/509614/
Link: https://lore.kernel.org/r/20221102175449.452283-3-dmitry.baryshkov@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/msm/adreno/a3xx_gpu.c
drivers/gpu/drm/msm/adreno/a4xx_gpu.c
drivers/gpu/drm/msm/adreno/a5xx_gpu.c
drivers/gpu/drm/msm/adreno/a6xx_gpu.c
drivers/gpu/drm/msm/adreno/adreno_gpu.c
drivers/gpu/drm/msm/adreno/adreno_gpu.h

index 2c8b989..948785e 100644 (file)
@@ -500,7 +500,7 @@ static const struct adreno_gpu_funcs funcs = {
 #endif
                .gpu_state_get = a3xx_gpu_state_get,
                .gpu_state_put = adreno_gpu_state_put,
-               .create_address_space = adreno_iommu_create_address_space,
+               .create_address_space = adreno_create_address_space,
                .get_rptr = a3xx_get_rptr,
        },
 };
index 7cb8d98..2fb32d5 100644 (file)
@@ -635,7 +635,7 @@ static const struct adreno_gpu_funcs funcs = {
 #endif
                .gpu_state_get = a4xx_gpu_state_get,
                .gpu_state_put = adreno_gpu_state_put,
-               .create_address_space = adreno_iommu_create_address_space,
+               .create_address_space = adreno_create_address_space,
                .get_rptr = a4xx_get_rptr,
        },
        .get_timestamp = a4xx_get_timestamp,
index 3dcec7a..3c537c0 100644 (file)
@@ -1705,7 +1705,7 @@ static const struct adreno_gpu_funcs funcs = {
                .gpu_busy = a5xx_gpu_busy,
                .gpu_state_get = a5xx_gpu_state_get,
                .gpu_state_put = a5xx_gpu_state_put,
-               .create_address_space = adreno_iommu_create_address_space,
+               .create_address_space = adreno_create_address_space,
                .get_rptr = a5xx_get_rptr,
        },
        .get_timestamp = a5xx_get_timestamp,
index db4b3a4..e871964 100644 (file)
@@ -1786,10 +1786,6 @@ a6xx_create_address_space(struct msm_gpu *gpu, struct platform_device *pdev)
 {
        struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
        struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
-       struct iommu_domain_geometry *geometry;
-       struct msm_mmu *mmu;
-       struct msm_gem_address_space *aspace;
-       u64 start, size;
        unsigned long quirks = 0;
 
        /*
@@ -1799,29 +1795,7 @@ a6xx_create_address_space(struct msm_gpu *gpu, struct platform_device *pdev)
        if (!IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice))
                quirks |= IO_PGTABLE_QUIRK_ARM_OUTER_WBWA;
 
-       mmu = msm_iommu_new(&pdev->dev, quirks);
-       if (IS_ERR_OR_NULL(mmu))
-               return ERR_CAST(mmu);
-
-       geometry = msm_iommu_get_geometry(mmu);
-       if (IS_ERR(geometry))
-               return ERR_CAST(geometry);
-
-       /*
-        * Use the aperture start or SZ_16M, whichever is greater. This will
-        * ensure that we align with the allocated pagetable range while still
-        * allowing room in the lower 32 bits for GMEM and whatnot
-        */
-       start = max_t(u64, SZ_16M, geometry->aperture_start);
-       size = geometry->aperture_end - start + 1;
-
-       aspace = msm_gem_address_space_create(mmu, "gpu",
-               start & GENMASK_ULL(48, 0), size);
-
-       if (IS_ERR(aspace) && !IS_ERR(mmu))
-               mmu->funcs->destroy(mmu);
-
-       return aspace;
+       return adreno_iommu_create_address_space(gpu, pdev, quirks);
 }
 
 static struct msm_gem_address_space *
index fb86ae0..57586c7 100644 (file)
@@ -192,15 +192,23 @@ int adreno_zap_shader_load(struct msm_gpu *gpu, u32 pasid)
 }
 
 struct msm_gem_address_space *
+adreno_create_address_space(struct msm_gpu *gpu,
+                           struct platform_device *pdev)
+{
+       return adreno_iommu_create_address_space(gpu, pdev, 0);
+}
+
+struct msm_gem_address_space *
 adreno_iommu_create_address_space(struct msm_gpu *gpu,
-               struct platform_device *pdev)
+                                 struct platform_device *pdev,
+                                 unsigned long quirks)
 {
        struct iommu_domain_geometry *geometry;
        struct msm_mmu *mmu;
        struct msm_gem_address_space *aspace;
        u64 start, size;
 
-       mmu = msm_iommu_new(&pdev->dev, 0);
+       mmu = msm_iommu_new(&pdev->dev, quirks);
        if (IS_ERR_OR_NULL(mmu))
                return ERR_CAST(mmu);
 
index 7072733..5d4b1c9 100644 (file)
@@ -335,8 +335,13 @@ void adreno_show_object(struct drm_printer *p, void **ptr, int len,
  * attached targets
  */
 struct msm_gem_address_space *
+adreno_create_address_space(struct msm_gpu *gpu,
+                           struct platform_device *pdev);
+
+struct msm_gem_address_space *
 adreno_iommu_create_address_space(struct msm_gpu *gpu,
-               struct platform_device *pdev);
+                                 struct platform_device *pdev,
+                                 unsigned long quirks);
 
 int adreno_read_speedbin(struct device *dev, u32 *speedbin);