On Tue, Dec 24, 2019 at 08:27:28AM +0530, smase...@codeaurora.org wrote:
> On 2019-12-16 22:07, Jordan Crouse wrote:
> >Attempt to enable split pagetables if the arm-smmu driver supports it.
> >This will move the default address space from the default region to
> >the address range assigned to TTBR1. The behavior should be transparent
> >to the driver for now but it gets the default buffers out of the way
> >when we want to start swapping TTBR0 for context-specific pagetables.
> >
> >Signed-off-by: Jordan Crouse <jcro...@codeaurora.org>
> >---
> >
> > drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 52
> >++++++++++++++++++++++++++++++++++-
> > 1 file changed, 51 insertions(+), 1 deletion(-)
> >
> >diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
> >b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
> >index 5dc0b2c..1c6da93 100644
> >--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
> >+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
> >@@ -811,6 +811,56 @@ static unsigned long a6xx_gpu_busy(struct msm_gpu
> >*gpu)
> >     return (unsigned long)busy_time;
> > }
> >
> >+static struct msm_gem_address_space *
> >+a6xx_create_address_space(struct msm_gpu *gpu, struct platform_device
> >*pdev)
> >+{
> >+    struct iommu_domain *iommu = iommu_domain_alloc(&platform_bus_type);
> >+    struct msm_gem_address_space *aspace;
> >+    struct msm_mmu *mmu;
> >+    u64 start, size;
> >+    u32 val = 1;
> >+    int ret;
> >+
> >+    if (!iommu)
> >+            return ERR_PTR(-ENOMEM);
> >+
> >+    /*
> >+     * Try to request split pagetables - the request has to be made before
> >+     * the domian is attached
> >+     */
> >+    iommu_domain_set_attr(iommu, DOMAIN_ATTR_SPLIT_TABLES, &val);
> >+
> >+    mmu = msm_iommu_new(&pdev->dev, iommu);
> >+    if (IS_ERR(mmu)) {
> >+            iommu_domain_free(iommu);
> >+            return ERR_CAST(mmu);
> >+    }
> >+
> >+    /*
> >+     * After the domain is attached, see if the split tables were actually
> >+     * successful.
> >+     */
> >+    ret = iommu_domain_get_attr(iommu, DOMAIN_ATTR_SPLIT_TABLES, &val);
> >+    if (!ret && val) {
> >+            /*
> >+             * The aperture start will be at the beginning of the TTBR1
> >+             * space so use that as a base
> >+             */
> >+            start = iommu->geometry.aperture_start;
> >+            size = 0xffffffff;
> This should be the va_end and not the size

This is a bug in msm_gem_address_space_create - I intended the parameter to be
the size.

Jordan

-- 
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to