All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Szyprowski <m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
To: Laurent Pinchart
	<laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>,
	linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	sakari.ailus-X3B1VOXEql0@public.gmane.org,
	Shuah Khan <shuahkhan-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [RFC/PATCH] media: omap3isp: Set maximum DMA segment size
Date: Tue, 17 Nov 2015 13:15:10 +0100	[thread overview]
Message-ID: <564B1A4E.7040001@samsung.com> (raw)
In-Reply-To: <1560214.1Y1q0qLZA4@avalon>

Hi Laurent,

I really have no idea how this problem should be addressed. I've already 
proposed
to handle it in videobuf2-dc, but this has been rejected. Maybe the only 
way will
be to add dma_set_max_seg_size(isp->dev, DMA_BIT_MASK(32)) to every v4l2 
driver,
which use videobuf2-dc and add a check in videobuf2-dc.

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland

On 2015-11-09 15:18, Laurent Pinchart wrote:
> Hello everybody,
>
> Ping ?
>
> On Tuesday 13 October 2015 16:18:36 Laurent Pinchart wrote:
>> The maximum DMA segment size controls the IOMMU mapping granularity. Its
>> default value is 64kB, resulting in potentially non-contiguous IOMMU
>> mappings. Configure it to 4GB to ensure that buffers get mapped
>> contiguously.
>>
>> Signed-off-by: Laurent Pinchart <laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
>> ---
>>   drivers/media/platform/omap3isp/isp.c | 4 ++++
>>   drivers/media/platform/omap3isp/isp.h | 1 +
>>   2 files changed, 5 insertions(+)
>>
>> I'm posting this as an RFC because I'm not happy with the patch, even if it
>> gets the job done.
>>
>> On ARM the maximum DMA segment size is used when creating IOMMU mappings. As
>> a large number of devices require contiguous memory buffers (this is a very
>> common requirement for video-related embedded devices) the default 64kB
>> value doesn't work.
>>
>> I haven't investigated the history behind this API in details but I have a
>> feeling something is not quite right. We force most drivers to explicitly
>> set the maximum segment size from a default that seems valid for specific
>> use cases only. Furthermore, as the DMA parameters are not stored directly
>> in struct device this require allocation of external memory for which we
>> have no proper management rule, making automatic handling of the DMA
>> parameters in frameworks or helper functions cumbersome (for a discussion
>> on this topic see http://www.spinics.net/lists/linux-media/msg92467.html
>> and http://lists.infradead.org/pipermail/linux-arm-kernel/2014-> November/305913.html).
>>
>> Is it time to fix this mess ?
>>
>> diff --git a/drivers/media/platform/omap3isp/isp.c
>> b/drivers/media/platform/omap3isp/isp.c index 17430a6ed85a..ebf7dc76e94d
>> 100644
>> --- a/drivers/media/platform/omap3isp/isp.c
>> +++ b/drivers/media/platform/omap3isp/isp.c
>> @@ -2444,6 +2444,10 @@ static int isp_probe(struct platform_device *pdev)
>>   	if (ret)
>>   		goto error;
>>
>> +	isp->dev->dma_parms = &isp->dma_parms;
>> +	dma_set_max_seg_size(isp->dev, DMA_BIT_MASK(32));
>> +	dma_set_seg_boundary(isp->dev, 0xffffffff);
>> +
>>   	platform_set_drvdata(pdev, isp);
>>
>>   	/* Regulators */
>> diff --git a/drivers/media/platform/omap3isp/isp.h
>> b/drivers/media/platform/omap3isp/isp.h index e579943175c4..4b2231cf01be
>> 100644
>> --- a/drivers/media/platform/omap3isp/isp.h
>> +++ b/drivers/media/platform/omap3isp/isp.h
>> @@ -193,6 +193,7 @@ struct isp_device {
>>   	u32 syscon_offset;
>>   	u32 phy_type;
>>
>> +	struct device_dma_parameters dma_parms;
>>   	struct dma_iommu_mapping *mapping;
>>
>>   	/* ISP Obj */

WARNING: multiple messages have this Message-ID (diff)
From: m.szyprowski@samsung.com (Marek Szyprowski)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC/PATCH] media: omap3isp: Set maximum DMA segment size
Date: Tue, 17 Nov 2015 13:15:10 +0100	[thread overview]
Message-ID: <564B1A4E.7040001@samsung.com> (raw)
In-Reply-To: <1560214.1Y1q0qLZA4@avalon>

Hi Laurent,

I really have no idea how this problem should be addressed. I've already 
proposed
to handle it in videobuf2-dc, but this has been rejected. Maybe the only 
way will
be to add dma_set_max_seg_size(isp->dev, DMA_BIT_MASK(32)) to every v4l2 
driver,
which use videobuf2-dc and add a check in videobuf2-dc.

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland

On 2015-11-09 15:18, Laurent Pinchart wrote:
> Hello everybody,
>
> Ping ?
>
> On Tuesday 13 October 2015 16:18:36 Laurent Pinchart wrote:
>> The maximum DMA segment size controls the IOMMU mapping granularity. Its
>> default value is 64kB, resulting in potentially non-contiguous IOMMU
>> mappings. Configure it to 4GB to ensure that buffers get mapped
>> contiguously.
>>
>> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>> ---
>>   drivers/media/platform/omap3isp/isp.c | 4 ++++
>>   drivers/media/platform/omap3isp/isp.h | 1 +
>>   2 files changed, 5 insertions(+)
>>
>> I'm posting this as an RFC because I'm not happy with the patch, even if it
>> gets the job done.
>>
>> On ARM the maximum DMA segment size is used when creating IOMMU mappings. As
>> a large number of devices require contiguous memory buffers (this is a very
>> common requirement for video-related embedded devices) the default 64kB
>> value doesn't work.
>>
>> I haven't investigated the history behind this API in details but I have a
>> feeling something is not quite right. We force most drivers to explicitly
>> set the maximum segment size from a default that seems valid for specific
>> use cases only. Furthermore, as the DMA parameters are not stored directly
>> in struct device this require allocation of external memory for which we
>> have no proper management rule, making automatic handling of the DMA
>> parameters in frameworks or helper functions cumbersome (for a discussion
>> on this topic see http://www.spinics.net/lists/linux-media/msg92467.html
>> and http://lists.infradead.org/pipermail/linux-arm-kernel/2014-> November/305913.html).
>>
>> Is it time to fix this mess ?
>>
>> diff --git a/drivers/media/platform/omap3isp/isp.c
>> b/drivers/media/platform/omap3isp/isp.c index 17430a6ed85a..ebf7dc76e94d
>> 100644
>> --- a/drivers/media/platform/omap3isp/isp.c
>> +++ b/drivers/media/platform/omap3isp/isp.c
>> @@ -2444,6 +2444,10 @@ static int isp_probe(struct platform_device *pdev)
>>   	if (ret)
>>   		goto error;
>>
>> +	isp->dev->dma_parms = &isp->dma_parms;
>> +	dma_set_max_seg_size(isp->dev, DMA_BIT_MASK(32));
>> +	dma_set_seg_boundary(isp->dev, 0xffffffff);
>> +
>>   	platform_set_drvdata(pdev, isp);
>>
>>   	/* Regulators */
>> diff --git a/drivers/media/platform/omap3isp/isp.h
>> b/drivers/media/platform/omap3isp/isp.h index e579943175c4..4b2231cf01be
>> 100644
>> --- a/drivers/media/platform/omap3isp/isp.h
>> +++ b/drivers/media/platform/omap3isp/isp.h
>> @@ -193,6 +193,7 @@ struct isp_device {
>>   	u32 syscon_offset;
>>   	u32 phy_type;
>>
>> +	struct device_dma_parameters dma_parms;
>>   	struct dma_iommu_mapping *mapping;
>>
>>   	/* ISP Obj */

WARNING: multiple messages have this Message-ID (diff)
From: Marek Szyprowski <m.szyprowski@samsung.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	linux-media@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org,
	robin.murphy@arm.com, Lars-Peter Clausen <lars@metafoo.de>,
	sakari.ailus@iki.fi, Shuah Khan <shuahkhan@gmail.com>
Subject: Re: [RFC/PATCH] media: omap3isp: Set maximum DMA segment size
Date: Tue, 17 Nov 2015 13:15:10 +0100	[thread overview]
Message-ID: <564B1A4E.7040001@samsung.com> (raw)
In-Reply-To: <1560214.1Y1q0qLZA4@avalon>

Hi Laurent,

I really have no idea how this problem should be addressed. I've already 
proposed
to handle it in videobuf2-dc, but this has been rejected. Maybe the only 
way will
be to add dma_set_max_seg_size(isp->dev, DMA_BIT_MASK(32)) to every v4l2 
driver,
which use videobuf2-dc and add a check in videobuf2-dc.

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland

On 2015-11-09 15:18, Laurent Pinchart wrote:
> Hello everybody,
>
> Ping ?
>
> On Tuesday 13 October 2015 16:18:36 Laurent Pinchart wrote:
>> The maximum DMA segment size controls the IOMMU mapping granularity. Its
>> default value is 64kB, resulting in potentially non-contiguous IOMMU
>> mappings. Configure it to 4GB to ensure that buffers get mapped
>> contiguously.
>>
>> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>> ---
>>   drivers/media/platform/omap3isp/isp.c | 4 ++++
>>   drivers/media/platform/omap3isp/isp.h | 1 +
>>   2 files changed, 5 insertions(+)
>>
>> I'm posting this as an RFC because I'm not happy with the patch, even if it
>> gets the job done.
>>
>> On ARM the maximum DMA segment size is used when creating IOMMU mappings. As
>> a large number of devices require contiguous memory buffers (this is a very
>> common requirement for video-related embedded devices) the default 64kB
>> value doesn't work.
>>
>> I haven't investigated the history behind this API in details but I have a
>> feeling something is not quite right. We force most drivers to explicitly
>> set the maximum segment size from a default that seems valid for specific
>> use cases only. Furthermore, as the DMA parameters are not stored directly
>> in struct device this require allocation of external memory for which we
>> have no proper management rule, making automatic handling of the DMA
>> parameters in frameworks or helper functions cumbersome (for a discussion
>> on this topic see http://www.spinics.net/lists/linux-media/msg92467.html
>> and http://lists.infradead.org/pipermail/linux-arm-kernel/2014-> November/305913.html).
>>
>> Is it time to fix this mess ?
>>
>> diff --git a/drivers/media/platform/omap3isp/isp.c
>> b/drivers/media/platform/omap3isp/isp.c index 17430a6ed85a..ebf7dc76e94d
>> 100644
>> --- a/drivers/media/platform/omap3isp/isp.c
>> +++ b/drivers/media/platform/omap3isp/isp.c
>> @@ -2444,6 +2444,10 @@ static int isp_probe(struct platform_device *pdev)
>>   	if (ret)
>>   		goto error;
>>
>> +	isp->dev->dma_parms = &isp->dma_parms;
>> +	dma_set_max_seg_size(isp->dev, DMA_BIT_MASK(32));
>> +	dma_set_seg_boundary(isp->dev, 0xffffffff);
>> +
>>   	platform_set_drvdata(pdev, isp);
>>
>>   	/* Regulators */
>> diff --git a/drivers/media/platform/omap3isp/isp.h
>> b/drivers/media/platform/omap3isp/isp.h index e579943175c4..4b2231cf01be
>> 100644
>> --- a/drivers/media/platform/omap3isp/isp.h
>> +++ b/drivers/media/platform/omap3isp/isp.h
>> @@ -193,6 +193,7 @@ struct isp_device {
>>   	u32 syscon_offset;
>>   	u32 phy_type;
>>
>> +	struct device_dma_parameters dma_parms;
>>   	struct dma_iommu_mapping *mapping;
>>
>>   	/* ISP Obj */


  parent reply	other threads:[~2015-11-17 12:15 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-13 13:18 [RFC/PATCH] media: omap3isp: Set maximum DMA segment size Laurent Pinchart
2015-10-13 13:18 ` Laurent Pinchart
2015-10-13 13:18 ` Laurent Pinchart
     [not found] ` <1444742316-27986-1-git-send-email-laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-11-09 14:18   ` Laurent Pinchart
2015-11-09 14:18     ` Laurent Pinchart
2015-11-09 14:18     ` Laurent Pinchart
2015-11-09 15:27     ` Robin Murphy
2015-11-09 15:27       ` Robin Murphy
2015-11-09 15:27       ` Robin Murphy
2015-11-17 12:15     ` Marek Szyprowski [this message]
2015-11-17 12:15       ` Marek Szyprowski
2015-11-17 12:15       ` Marek Szyprowski

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=564B1A4E.7040001@samsung.com \
    --to=m.szyprowski-sze3o3uu22jbdgjk7y7tuq@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org \
    --cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=sakari.ailus-X3B1VOXEql0@public.gmane.org \
    --cc=shuahkhan-Re5JQEeQqe8AvxtiuMwx3w@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.