From: Shunqian Zheng <zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
To: Tomasz Figa <tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
Cc: "Mark Rutland" <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
"Heiko Stübner" <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>,
"David Airlie" <airlied-cv59FeDIM0c@public.gmane.org>,
list-Y9sIeH5OGRo@public.gmane.org,
linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org,
dri-devel
<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"open list:ARM/Rockchip SoC..."
<linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"IOMMU DRIVERS"
<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
"Rob Herring" <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
"simon xue" <xxm-TNX95d0MmH7DzftRWevZcw@public.gmane.org>,
open-Y9sIeH5OGRo@public.gmane.org,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
姚智情 <mark.yao-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
Subject: Re: [PATCH v2 5/7] drm: rockchip: use common iommu api to attach iommu
Date: Sun, 12 Jun 2016 11:37:12 +0800 [thread overview]
Message-ID: <575CD8E8.6060502@rock-chips.com> (raw)
In-Reply-To: <CAAFQd5AEsMhQiNkjBr-Af6rBg9x6Z9bCOu7GuYXt2h=wao7Cow-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
Hi,
On 2016年06月10日 16:03, Tomasz Figa wrote:
> Hi,
>
> On Wed, Jun 8, 2016 at 10:26 PM, Shunqian Zheng <zhengsq@rock-chips.com> wrote:
>> Rockchip DRM used the arm special API, arm_iommu_*(), to attach
>> iommu for ARM32 SoCs. This patch convert to common iommu API
>> so it would support ARM64 like RK3399.
>>
>> The general idea is domain_alloc(), attach_device() and
>> arch_setup_dma_ops() to set dma_ops manually for DRM at the last.
>>
>> Signed-off-by: Shunqian Zheng <zhengsq@rock-chips.com>
>> ---
>> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 130 +++++++++++++++++++---------
>> drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 1 +
>> 2 files changed, 89 insertions(+), 42 deletions(-)
>>
> Please see my comments inline.
>
>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> index f5a68fc..7965a66 100644
>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> @@ -14,8 +14,6 @@
>> * GNU General Public License for more details.
>> */
>>
>> -#include <asm/dma-iommu.h>
>> -
>> #include <drm/drmP.h>
>> #include <drm/drm_crtc_helper.h>
>> #include <drm/drm_fb_helper.h>
>> @@ -24,6 +22,8 @@
>> #include <linux/module.h>
>> #include <linux/of_graph.h>
>> #include <linux/component.h>
>> +#include <linux/dma-iommu.h>
>> +#include <linux/iommu.h>
>>
>> #include "rockchip_drm_drv.h"
>> #include "rockchip_drm_fb.h"
>> @@ -46,7 +46,8 @@ static bool is_support_iommu = true;
>> int rockchip_drm_dma_attach_device(struct drm_device *drm_dev,
>> struct device *dev)
>> {
>> - struct dma_iommu_mapping *mapping = drm_dev->dev->archdata.mapping;
>> + struct rockchip_drm_private *private = drm_dev->dev_private;
>> + struct iommu_domain *domain = private->domain;
>> int ret;
>>
>> if (!is_support_iommu)
>> @@ -58,16 +59,25 @@ int rockchip_drm_dma_attach_device(struct drm_device *drm_dev,
>>
>> dma_set_max_seg_size(dev, DMA_BIT_MASK(32));
>>
>> - return arm_iommu_attach_device(dev, mapping);
>> + ret = iommu_attach_device(domain, dev);
>> +
> nit: Unnecessary blank line.
Will fix it in v3.
>
>> + if (ret) {
>> + dev_err(dev, "Failed to attach iommu device\n");
>> + return ret;
>> + }
> nit: On the other hand, a blank line here would improve readability.
Will fix it in v3.
>
>> + arch_setup_dma_ops(dev, 0x00000000, SZ_2G,
>> + (struct iommu_ops *)dev->bus->iommu_ops, false);
> This is casting a const pointer to a non-const pointer. which isn't
> really a good idea. I can see that arch_setup_dma_ops() requires a
> writable pointer, though. Looking at the implementations of
> arch_setup_dma_ops() around the platforms (namely arm and arm64...),
> it makes me wonder if the prototype shouldn't be changed to const
> instead.
Actually, kernel-next changed iommu_ops to const by:
53c92d7 iommu: of: enforce const-ness of struct iommu_ops
Will remove casting in the v3.
>
>> + return 0;
>> }
>>
>> void rockchip_drm_dma_detach_device(struct drm_device *drm_dev,
>> struct device *dev)
>> {
>> - if (!is_support_iommu)
>> - return;
>> + struct rockchip_drm_private *private = drm_dev->dev_private;
>> + struct iommu_domain *domain = private->domain;
>>
>> - arm_iommu_detach_device(dev);
>> + if (is_support_iommu)
>> + iommu_detach_device(domain, dev);
>> }
>>
>> int rockchip_register_crtc_funcs(struct drm_crtc *crtc,
>> @@ -132,10 +142,70 @@ static void rockchip_drm_crtc_disable_vblank(struct drm_device *dev,
>> priv->crtc_funcs[pipe]->disable_vblank(crtc);
>> }
>>
>> +static int rockchip_drm_init_iommu(struct drm_device *drm_dev)
>> +{
>> + struct rockchip_drm_private *private = drm_dev->dev_private;
>> + struct device *dev = drm_dev->dev;
>> + int ret;
>> +
>> + dev->dma_parms = devm_kzalloc(dev, sizeof(*dev->dma_parms),
>> + GFP_KERNEL);
>> + if (!dev->dma_parms) {
>> + ret = -ENOMEM;
>> + return ret;
> nit: return -ENOMEM;
Will fix it in v3.
>
>> + }
>> +
>> + ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32));
>> + if (ret) {
>> + dev_err(dev, "Failed to set coherent mask\n");
>> + return ret;
>> + }
>> +
>> + dma_set_max_seg_size(dev, DMA_BIT_MASK(32));
>> +
>> + private->domain = iommu_domain_alloc(&platform_bus_type);
>> + if (!private->domain)
>> + return -ENOMEM;
>> +
>> + ret = iommu_get_dma_cookie(private->domain);
>> + if (ret) {
>> + dev_err(dev, "Failed to get dma cookie\n");
>> + goto err_free_domain;
>> + }
>> +
>> + ret = iommu_dma_init_domain(private->domain, 0x00000000, SZ_2G);
> I guess djkurtz's TODO comment could be preserved here.
Agree.
Thank you very much.
Shunqian
>
> Best regards,
> Tomasz
>
>
>
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2016-06-12 3:37 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-08 13:26 [PATCH v2 0/7] fix bugs; enable iommu for ARM64 Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
[not found] ` <1465392392-2003-1-git-send-email-zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2016-06-08 13:26 ` [PATCH v2 1/7] iommu/rockchip: fix devm_{request,free}_irq parameter Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-10 5:30 ` [PATCH v2 1/7] iommu/rockchip: fix devm_{request, free}_irq parameter Tomasz Figa
2016-06-10 5:30 ` [PATCH v2 1/7] iommu/rockchip: fix devm_{request,free}_irq parameter Tomasz Figa
2016-06-10 5:30 ` [PATCH v2 1/7] iommu/rockchip: fix devm_{request, free}_irq parameter Tomasz Figa
2016-06-08 13:26 ` [PATCH v2 2/7] iommu/rockchip: add map_sg callback for rk_iommu_ops Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-10 5:31 ` Tomasz Figa
2016-06-10 5:31 ` Tomasz Figa
2016-06-10 5:31 ` Tomasz Figa
2016-06-08 13:26 ` [PATCH v2 3/7] iommu/rockchip: support virtual iommu slave device Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
[not found] ` <1465392392-2003-4-git-send-email-zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2016-06-10 6:22 ` Tomasz Figa
2016-06-10 6:22 ` Tomasz Figa
2016-06-10 6:22 ` Tomasz Figa
[not found] ` <CAAFQd5DuAc-B17AqOg0mGcfLCGwztEOaukPL+c5jmL4a-AEeBA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-06-12 2:33 ` Shunqian Zheng
2016-06-08 13:26 ` [PATCH v2 4/7] ARM: dts: rockchip: add virtual iommu for display Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
[not found] ` <1465392392-2003-5-git-send-email-zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2016-06-10 6:22 ` Tomasz Figa
2016-06-10 6:22 ` Tomasz Figa
2016-06-10 6:22 ` Tomasz Figa
2016-06-08 13:26 ` [PATCH v2 5/7] drm: rockchip: use common iommu api to attach iommu Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-10 8:03 ` Tomasz Figa
2016-06-10 8:03 ` Tomasz Figa
2016-06-10 8:03 ` Tomasz Figa
[not found] ` <CAAFQd5AEsMhQiNkjBr-Af6rBg9x6Z9bCOu7GuYXt2h=wao7Cow-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-06-12 3:37 ` Shunqian Zheng [this message]
2016-06-08 13:26 ` [PATCH v2 6/7] iommu/rockchip: use DMA API to map, to flush cache Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
[not found] ` <1465392392-2003-7-git-send-email-zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2016-06-10 9:10 ` Tomasz Figa
2016-06-10 9:10 ` Tomasz Figa
2016-06-10 9:10 ` Tomasz Figa
[not found] ` <CAAFQd5Da+Eg=eiRUgLSS_qPjGbG474KYWDC=GaAMS8A_CuQ3Mg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-06-13 9:56 ` Shunqian Zheng
2016-06-13 9:56 ` Shunqian Zheng
2016-06-13 10:21 ` Tomasz Figa
[not found] ` <CAAFQd5DDCd8VcdEhEASAK7NMBnVJWuUxgGURtsa2KQBKsgsxUQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-06-13 10:31 ` Shunqian Zheng
[not found] ` <575E8B6F.1040103-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-06-13 10:41 ` Tomasz Figa
2016-06-13 10:41 ` Tomasz Figa
[not found] ` <575E834C.30305-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-06-13 10:39 ` Robin Murphy
2016-06-13 10:39 ` Robin Murphy
2016-06-13 10:39 ` Robin Murphy
2016-06-08 13:26 ` [PATCH v2 7/7] iommu/rockchip: enable rockchip iommu on ARM64 platform Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
2016-06-08 13:26 ` Shunqian Zheng
[not found] ` <1465392392-2003-8-git-send-email-zhengsq-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2016-06-10 9:12 ` Tomasz Figa
2016-06-10 9:12 ` Tomasz Figa
2016-06-10 9:12 ` Tomasz Figa
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=575CD8E8.6060502@rock-chips.com \
--to=zhengsq-tnx95d0mmh7dzftrwevzcw@public.gmane.org \
--cc=airlied-cv59FeDIM0c@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=list-Y9sIeH5OGRo@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=mark.yao-TNX95d0MmH7DzftRWevZcw@public.gmane.org \
--cc=open-Y9sIeH5OGRo@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=xxm-TNX95d0MmH7DzftRWevZcw@public.gmane.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.