From: Eddie Huang <eddie.huang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
To: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: "Leilk Liu (刘磊)"
<Leilk.Liu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>,
"Mark Rutland" <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
"Matthias Brugger"
<matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"Rob Herring" <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
"Pawel Moll" <pawel.moll-5wv7dgnIgG8@public.gmane.org>,
"Ian Campbell"
<ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org>,
"Kumar Gala" <galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
"Catalin Marinas" <catalin.marinas-5wv7dgnIgG8@public.gmane.org>,
"Will Deacon" <will.deacon-5wv7dgnIgG8@public.gmane.org>,
"HongZhou Yang"
<hongzhou.yang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>,
"Sascha Hauer" <s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>,
"devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
srv_heupstream
<srv_heupstream-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>,
"Sascha Hauer" <s.hauer@pengutron>
Subject: Re: [PATCH 2/3] spi: mediatek: Add spi bus for Mediatek MT8173
Date: Wed, 17 Jun 2015 17:08:03 +0800 [thread overview]
Message-ID: <1434532083.19346.27.camel@mtksdaap41> (raw)
In-Reply-To: <1433923569.22080.1.camel@mtksdaap41>
Hi Mark,
On Wed, 2015-06-10 at 16:06 +0800, Eddie Huang wrote:
> On Tue, 2015-06-09 at 11:39 +0100, Mark Brown wrote:
> > On Tue, Jun 09, 2015 at 06:05:21PM +0800, Eddie Huang wrote:
> >
> > > --- a/drivers/spi/spi.c
> > > +++ b/drivers/spi/spi.c
> > > @@ -539,8 +539,8 @@ static int __spi_map_msg(struct spi_master *master,
> > > struct spi_message *msg)
> > > if (!master->can_dma)
> > > return 0;
> >
> > > - tx_dev = master->dma_tx->device->dev;
> > > - rx_dev = master->dma_rx->device->dev;
> > > + tx_dev = master->dma_tx ? master->dma_tx->device->dev :
> > > master->dev;
> > > + rx_dev = master->dma_rx ? master->dma_rx->device->dev : master-
> >
> > > Is this what you want ? Actually, I don't like first one at all.
> >
> > Not quite what I'd been thinking of - we can't just pick the device in
> > the core safely, the device might be a MFD or have some other
> > restriction that needs us to use a separate struct device. However most
> > of those cases are likely to point towards implementing a dmaengine
> > device so probably the above will work for most cases and is fine. Can
> > you send a proper patch please?
>
After further investigate, we found problem when use can_dma() to
implement spi driver.
If can_dma() return true in __spi_map_msg() function, it will map data
buffer to sg_table, then pass this sg_table to transfer function. In
transfer function, spi hardware can do tx and rx at the same time (full
duplex), and the data size must be the same.
Here comes the problem, although total length of tx, rx is the same,
each entry in rx and tx scatterlist may not be the same (in the case
data buffer allocate from vmalloc). Other vendor have dmaengine driver
to send entry-by-entry automatically, so it is ok due to total length is
the same.But mediatek hw can only send tx and rx scatterlist entry one
by on, which means in full duplex, mediatek SPI hardware need send each
entry separately, will cause full duplex fail because tx/rx entry size
or entry number may not be the same.
The problem is not dma map discuss earlier, it is mediatek spi hardware
limitation that can't support scatterlist dma transfer in full-duplex
mode. We can only support both tx and rx has the same size continuous
memory data in full-duplex mode. I don't know whether should modify
spi.c to support mediatek spi, or we just return can_dma() false and do
transfer one continuous data in transfer function.
By the way, I think maybe it is better to change can_dma() to
can_dma_sg().
Eddie
Thanks
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2015-06-17 9:08 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-08 8:55 Add Mediatek SPI driver leilk.liu-NuS5LvNUpcJWk0Htik3J/w
2015-05-08 8:55 ` [PATCH 2/3] spi: mediatek: Add spi bus for Mediatek MT8173 leilk.liu
[not found] ` <1431075343-7887-3-git-send-email-leilk.liu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2015-05-08 17:53 ` Mark Brown
2015-05-12 12:39 ` leilk liu
2015-05-12 16:05 ` Mark Brown
[not found] ` <20150512160540.GB3066-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-13 9:26 ` Yingjoe Chen
2015-05-13 11:10 ` Mark Brown
2015-05-13 13:58 ` Yingjoe Chen
2015-05-15 7:38 ` leilk liu
2015-05-15 9:25 ` Mark Brown
[not found] ` <20150515092543.GY2761-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-06-08 10:15 ` Eddie Huang
2015-06-08 17:59 ` Mark Brown
[not found] ` <20150608175927.GO14071-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-06-09 10:05 ` Eddie Huang
2015-06-09 10:39 ` Mark Brown
[not found] ` <20150609103951.GA14071-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-06-10 8:06 ` Eddie Huang
2015-06-17 9:08 ` Eddie Huang [this message]
2015-06-17 12:47 ` Mark Brown
[not found] ` <20150617124758.GE3214-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-06-17 14:10 ` Eddie Huang
2015-06-17 16:10 ` Jakub Kiciński
2015-06-17 16:35 ` Mark Brown
[not found] ` <20150617163531.GU14071-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-06-18 8:11 ` Eddie Huang
[not found] ` <1431075343-7887-1-git-send-email-leilk.liu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2015-05-08 8:55 ` [PATCH 1/3] dt-bindings: ARM: Mediatek: Document devicetree bindings for spi bus leilk.liu-NuS5LvNUpcJWk0Htik3J/w
2015-05-08 8:55 ` [PATCH 3/3] arm64: dts: Add spi bus dts leilk.liu-NuS5LvNUpcJWk0Htik3J/w
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=1434532083.19346.27.camel@mtksdaap41 \
--to=eddie.huang-nus5lvnupcjwk0htik3j/w@public.gmane.org \
--cc=Leilk.Liu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=hongzhou.yang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=pawel.moll-5wv7dgnIgG8@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
--cc=s.hauer@pengutron \
--cc=srv_heupstream-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).