All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Ujfalusi <peter.ujfalusi@ti.com>
To: Russell King - ARM Linux <linux@armlinux.org.uk>,
	Ulf Hansson <ulf.hansson@linaro.org>
Cc: Tony Lindgren <tony@atomide.com>,
	linux-omap <linux-omap@vger.kernel.org>,
	"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Kishon <kishon@ti.com>
Subject: Re: [PATCH] mmc: core: Lower max_seg_size if too high for DMA
Date: Tue, 11 Dec 2018 16:33:26 +0200	[thread overview]
Message-ID: <1ecb5b44-92a9-cf05-cb5f-eabb1f3b001f@ti.com> (raw)
In-Reply-To: <20181211134937.GE9507@n2100.armlinux.org.uk>

Russell,

On 11/12/2018 15.49, Russell King - ARM Linux wrote:
>>> The only thing I can think of doing is adding into omap_hsmmc:
>>>
>>>         mmc->max_seg_size = min(mmc->max_req_size,
>>>                                 min(dma_get_max_seg_size(host->rx_chan->device->dev),
>>>                                     dma_get_max_seg_size(host->tx_chan->device->dev)));
>>>
>>> to limit the maximum segment size to that of the device _and_ dma
>>> engine's capabilities.
>>>
>>> Doing this solves the problem for me.
>>
>> Thanks for the suggestion - it sounds like a reasonable way to fix the
>> problem, at least for now.
> 
> I don't think there's any "at least for now" about this approach - it's
> not something that the MMC core can know about, because whether a driver
> uses DMA engine or not, and how many channels it uses is completely
> driver specific.

I agree.

> The only questionable thing is around the dma_get_max_seg_size()
> interface, but the only way that's going to get solved is to eliminate
> it entirely as it isn't a per-device property with some DMA engines
> such as omap-dma - it's a per-request property.  That also means
> killing the check in the DMA debug code, which isn't going to go down
> very well.
> 
>> Do you want to send to patch or do you expect someone else to do it?
> 
> I'll send a patch once I've checked the corner cases, and whether
> we should go further and include other DMA parameters from the
> dma engine.

There is one thing which I'm trying to figure out:
sDMA (and EDMA also) have limitation on the length of each sg segment.

To make things a bit more interesting the limit is not in bytes, but in
number of bursts:

65535 * burst * addr_width = max_sg_segment_len in bytes.

We can not set this to a static value as depending on the addr_width and
burst it can be different for each transfer.

- Péter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2018-12-11 14:33 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-31 15:57 [PATCH] mmc: core: Lower max_seg_size if too high for DMA Tony Lindgren
2018-10-31 15:57 ` Tony Lindgren
2018-11-12 16:48 ` Peter Ujfalusi
2018-11-12 16:48   ` Peter Ujfalusi
2018-11-19 12:08 ` Ulf Hansson
2018-11-19 12:08   ` Ulf Hansson
2018-11-29 19:13   ` Tony Lindgren
2018-11-29 19:13     ` Tony Lindgren
2018-11-29 20:11     ` Ulf Hansson
2018-11-29 20:11       ` Ulf Hansson
2018-12-11 13:13       ` Russell King - ARM Linux
2018-12-11 13:13         ` Russell King - ARM Linux
2018-12-11 13:39         ` Ulf Hansson
2018-12-11 13:39           ` Ulf Hansson
2018-12-11 13:49           ` Russell King - ARM Linux
2018-12-11 13:49             ` Russell King - ARM Linux
2018-12-11 14:33             ` Peter Ujfalusi [this message]
2018-12-11 14:42               ` Russell King - ARM Linux
2018-12-11 14:42                 ` Russell King - ARM Linux
2018-12-11 13:49         ` Peter Ujfalusi
2018-12-11 14:23           ` Tony Lindgren
2018-12-11 14:23             ` Tony Lindgren

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=1ecb5b44-92a9-cf05-cb5f-eabb1f3b001f@ti.com \
    --to=peter.ujfalusi@ti.com \
    --cc=kishon@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=tony@atomide.com \
    --cc=ulf.hansson@linaro.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.