From: smasetty@codeaurora.org
To: Jordan Crouse <jcrouse@codeaurora.org>
Cc: iommu@lists.linux-foundation.org,
freedreno@lists.freedesktop.org, David Airlie <airlied@linux.ie>,
will@kernel.org, robin.murphy@arm.com,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org, Sean Paul <sean@poorly.run>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 5/5] drm/msm/a6xx: Support split pagetables
Date: Tue, 24 Dec 2019 08:27:28 +0530 [thread overview]
Message-ID: <8aec2a4f74fede1cf616b9e2eece3e8e@codeaurora.org> (raw)
In-Reply-To: <1576514271-15687-6-git-send-email-jcrouse@codeaurora.org>
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 <jcrouse@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
> + } else {
> + /* Otherwise use the legacy 32 bit region */
> + start = SZ_16M;
> + size = 0xffffffff - SZ_16M;
same as above
> + }
> +
> + aspace = msm_gem_address_space_create(mmu, "gpu", start, size);
> + if (IS_ERR(aspace))
> + iommu_domain_free(iommu);
> +
> + return aspace;
> +}
> +
> static const struct adreno_gpu_funcs funcs = {
> .base = {
> .get_param = adreno_get_param,
> @@ -832,7 +882,7 @@ static const struct adreno_gpu_funcs funcs = {
> #if defined(CONFIG_DRM_MSM_GPU_STATE)
> .gpu_state_get = a6xx_gpu_state_get,
> .gpu_state_put = a6xx_gpu_state_put,
> - .create_address_space = adreno_iommu_create_address_space,
> + .create_address_space = a6xx_create_address_space,
> #endif
> },
> .get_timestamp = a6xx_get_timestamp,
WARNING: multiple messages have this Message-ID (diff)
From: smasetty@codeaurora.org
To: Jordan Crouse <jcrouse@codeaurora.org>
Cc: Sean Paul <sean@poorly.run>, David Airlie <airlied@linux.ie>,
freedreno@lists.freedesktop.org, robin.murphy@arm.com,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
iommu@lists.linux-foundation.org, linux-arm-msm@vger.kernel.org,
will@kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 5/5] drm/msm/a6xx: Support split pagetables
Date: Tue, 24 Dec 2019 08:27:28 +0530 [thread overview]
Message-ID: <8aec2a4f74fede1cf616b9e2eece3e8e@codeaurora.org> (raw)
In-Reply-To: <1576514271-15687-6-git-send-email-jcrouse@codeaurora.org>
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 <jcrouse@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
> + } else {
> + /* Otherwise use the legacy 32 bit region */
> + start = SZ_16M;
> + size = 0xffffffff - SZ_16M;
same as above
> + }
> +
> + aspace = msm_gem_address_space_create(mmu, "gpu", start, size);
> + if (IS_ERR(aspace))
> + iommu_domain_free(iommu);
> +
> + return aspace;
> +}
> +
> static const struct adreno_gpu_funcs funcs = {
> .base = {
> .get_param = adreno_get_param,
> @@ -832,7 +882,7 @@ static const struct adreno_gpu_funcs funcs = {
> #if defined(CONFIG_DRM_MSM_GPU_STATE)
> .gpu_state_get = a6xx_gpu_state_get,
> .gpu_state_put = a6xx_gpu_state_put,
> - .create_address_space = adreno_iommu_create_address_space,
> + .create_address_space = a6xx_create_address_space,
> #endif
> },
> .get_timestamp = a6xx_get_timestamp,
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
WARNING: multiple messages have this Message-ID (diff)
From: smasetty@codeaurora.org
To: Jordan Crouse <jcrouse@codeaurora.org>
Cc: Sean Paul <sean@poorly.run>, David Airlie <airlied@linux.ie>,
freedreno@lists.freedesktop.org, robin.murphy@arm.com,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
iommu@lists.linux-foundation.org, linux-arm-msm@vger.kernel.org,
will@kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 5/5] drm/msm/a6xx: Support split pagetables
Date: Tue, 24 Dec 2019 08:27:28 +0530 [thread overview]
Message-ID: <8aec2a4f74fede1cf616b9e2eece3e8e@codeaurora.org> (raw)
In-Reply-To: <1576514271-15687-6-git-send-email-jcrouse@codeaurora.org>
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 <jcrouse@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
> + } else {
> + /* Otherwise use the legacy 32 bit region */
> + start = SZ_16M;
> + size = 0xffffffff - SZ_16M;
same as above
> + }
> +
> + aspace = msm_gem_address_space_create(mmu, "gpu", start, size);
> + if (IS_ERR(aspace))
> + iommu_domain_free(iommu);
> +
> + return aspace;
> +}
> +
> static const struct adreno_gpu_funcs funcs = {
> .base = {
> .get_param = adreno_get_param,
> @@ -832,7 +882,7 @@ static const struct adreno_gpu_funcs funcs = {
> #if defined(CONFIG_DRM_MSM_GPU_STATE)
> .gpu_state_get = a6xx_gpu_state_get,
> .gpu_state_put = a6xx_gpu_state_put,
> - .create_address_space = adreno_iommu_create_address_space,
> + .create_address_space = a6xx_create_address_space,
> #endif
> },
> .get_timestamp = a6xx_get_timestamp,
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: smasetty@codeaurora.org
To: Jordan Crouse <jcrouse@codeaurora.org>
Cc: Sean Paul <sean@poorly.run>, David Airlie <airlied@linux.ie>,
freedreno@lists.freedesktop.org, robin.murphy@arm.com,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
iommu@lists.linux-foundation.org, linux-arm-msm@vger.kernel.org,
will@kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 5/5] drm/msm/a6xx: Support split pagetables
Date: Tue, 24 Dec 2019 08:27:28 +0530 [thread overview]
Message-ID: <8aec2a4f74fede1cf616b9e2eece3e8e@codeaurora.org> (raw)
In-Reply-To: <1576514271-15687-6-git-send-email-jcrouse@codeaurora.org>
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 <jcrouse@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
> + } else {
> + /* Otherwise use the legacy 32 bit region */
> + start = SZ_16M;
> + size = 0xffffffff - SZ_16M;
same as above
> + }
> +
> + aspace = msm_gem_address_space_create(mmu, "gpu", start, size);
> + if (IS_ERR(aspace))
> + iommu_domain_free(iommu);
> +
> + return aspace;
> +}
> +
> static const struct adreno_gpu_funcs funcs = {
> .base = {
> .get_param = adreno_get_param,
> @@ -832,7 +882,7 @@ static const struct adreno_gpu_funcs funcs = {
> #if defined(CONFIG_DRM_MSM_GPU_STATE)
> .gpu_state_get = a6xx_gpu_state_get,
> .gpu_state_put = a6xx_gpu_state_put,
> - .create_address_space = adreno_iommu_create_address_space,
> + .create_address_space = a6xx_create_address_space,
> #endif
> },
> .get_timestamp = a6xx_get_timestamp,
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-12-24 2:57 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-16 16:37 [PATCH v3 0/5] iommu/arm-smmu: Split pagetable support for arm-smmu-v2 Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` [PATCH v3 1/5] iommu: Add DOMAIN_ATTR_SPLIT_TABLES Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2020-01-09 14:36 ` Will Deacon
2020-01-09 14:36 ` Will Deacon
2020-01-09 14:36 ` Will Deacon
2019-12-16 16:37 ` [PATCH v3 2/5] iommu/arm-smmu: Add support for split pagetables Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2020-01-09 14:33 ` Will Deacon
2020-01-09 14:33 ` Will Deacon
2020-01-09 14:33 ` Will Deacon
2020-01-09 19:25 ` Jordan Crouse
2020-01-09 19:25 ` Jordan Crouse
2020-01-09 19:25 ` Jordan Crouse
2020-01-21 14:36 ` Robin Murphy
2020-01-21 14:36 ` Robin Murphy
2020-01-21 14:36 ` Robin Murphy
2020-01-21 17:11 ` Jordan Crouse
2020-01-21 17:11 ` Jordan Crouse
2020-01-21 17:11 ` Jordan Crouse
2020-01-21 18:54 ` Robin Murphy
2020-01-21 18:54 ` Robin Murphy
2020-01-21 18:54 ` Robin Murphy
2020-01-21 14:47 ` Robin Murphy
2020-01-21 14:47 ` Robin Murphy
2020-01-21 14:47 ` Robin Murphy
2019-12-16 16:37 ` [PATCH v3 3/5] drm/msm: Attach the IOMMU device during initialization Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` [PATCH v3 4/5] drm/msm: Refactor address space initialization Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2020-01-06 21:59 ` [Freedreno] " Jordan Crouse
2020-01-06 21:59 ` Jordan Crouse
2020-01-06 21:59 ` Jordan Crouse
2020-01-06 21:59 ` Jordan Crouse
2019-12-16 16:37 ` [PATCH v3 5/5] drm/msm/a6xx: Support split pagetables Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 16:37 ` Jordan Crouse
2019-12-16 17:43 ` Rob Clark
2019-12-16 17:43 ` Rob Clark
2019-12-16 17:43 ` Rob Clark
2019-12-16 17:43 ` Rob Clark
2019-12-24 2:57 ` smasetty [this message]
2019-12-24 2:57 ` smasetty
2019-12-24 2:57 ` smasetty
2019-12-24 2:57 ` smasetty
2020-01-06 21:57 ` Jordan Crouse
2020-01-06 21:57 ` Jordan Crouse
2020-01-06 21:57 ` Jordan Crouse
2020-01-06 21:57 ` Jordan Crouse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8aec2a4f74fede1cf616b9e2eece3e8e@codeaurora.org \
--to=smasetty@codeaurora.org \
--cc=airlied@linux.ie \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=iommu@lists.linux-foundation.org \
--cc=jcrouse@codeaurora.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robin.murphy@arm.com \
--cc=sean@poorly.run \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.