All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chuanhua Han <chuanhua.han@nxp.com>
To: Esben Haabendal <esben.haabendal@gmail.com>
Cc: Boris Brezillon <boris.brezillon@bootlin.com>,
	"broonie@kernel.org" <broonie@kernel.org>,
	"linux-spi@vger.kernel.org" <linux-spi@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH 1/2] spi: spi-mem: Add the spi_set_xfer_bpw function
Date: Wed, 10 Oct 2018 02:42:54 +0000	[thread overview]
Message-ID: <AM6PR04MB435784E00F0C68A310CD281B97E00@AM6PR04MB4357.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <87tvlv2wo7.fsf@gmail.com>



> -----Original Message-----
> From: Esben Haabendal <esbenhaabendal@gmail.com> On Behalf Of Esben
> Haabendal
> Sent: 2018年10月9日 19:21
> To: Chuanhua Han <chuanhua.han@nxp.com>
> Cc: Boris Brezillon <boris.brezillon@bootlin.com>; broonie@kernel.org;
> linux-spi@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH 1/2] spi: spi-mem: Add the spi_set_xfer_bpw function
> 
> Chuanhua Han <chuanhua.han@nxp.com> writes:
> 
> >> -----Original Message-----
> >> From: Boris Brezillon <boris.brezillon@bootlin.com>
> >> Sent: 2018年10月9日 18:05
> >> To: Chuanhua Han <chuanhua.han@nxp.com>
> >> Cc: broonie@kernel.org; linux-spi@vger.kernel.org;
> >> linux-kernel@vger.kernel.org; eha@deif.com
> >> Subject: Re: [PATCH 1/2] spi: spi-mem: Add the spi_set_xfer_bpw
> >> function
> >>
> >> On Tue, 9 Oct 2018 09:52:23 +0000
> >> Chuanhua Han <chuanhua.han@nxp.com> wrote:
> >>
> >> > 1. In the dspi driver (spi controller), bits_per_word
> >> > (dspi->bits_per_word = transfer->bits_per_word) passed from the
> >> > upper layer (spi-mem.c) is used. In this way, I can only assign the
> >> > appropriate value of transfer->bits_per_word before passing to the
> >> > controller, that is, the controller driver does not know the value
> >> > of bits_per_word, and it will use this value when the upper level
> >> > sets what value is passed.
> >>
> >> I think you're missing my point: ->bits_per_word is not what you're
> >> looking for if what you're trying to do is use 32-bits accesses when
> >> things are properly aligned.
> >>
> > In the dspi driver (spi controller driver), it is based on whether
> > ->bits_per_word is
> > larger than 16 to decide whether to use the XSPI mode (32bit) to transfer
> data.
> 
> Not completely true.  XSPI mode is enabled, also for words smaller than or
> equal to 16 bits.  But TX FIFO and CMD FIFO is written together, just as for
> non-XSPI mode.
> 
> > If ->bits_per_word is not set and the default bits_per_word =8 is
> > passed to the dspi driver, the XSPI mode (32bit) is not used for data
> > transfer in the dspi driver
> 
> Not true.  XSPI mode is unconditionally enabled in dspi_init().  But XSPI
> mode does not overrule the value of transfer->bits_per_word.
> The meaning of XSPI mode is the following:
> 
> 1. Frame (word) size is max 32 bits (with normal SPI mode, max is 16 bits).
> 2. For frames (words) with more than 16 bits per frame (word), each frame
> transfer results in 2 TX FIFO pop operations.
> 3. Command cycling is possible, enabled when SPI_CTARE[DTCP] > 1.
> 
> Command cycling is currently not implemented.  If implemented, it would be
> possible to send multiple frames (words) by writing one time to CMD FIFO and
> multiple times to TX FIFO.  This could possibly improve performance
> 
> Another possibility would be to use EOQ mode, if supported by the DSPI
> controller in the CPU.  It allows for filling TX FIFO, and getting IRQ only after
> last TX FIFO entry is sent.  This is also a likely performance improvement.
> 
> >> > 2. As I understand, bits_per_word does not exist for non-byte
> >> > alignment, but for the need to reserve non-byte transmission mode
> >> > that meets the controller.
> >>
> >> Exactly. It's an optimization you have to take care of inside your
> >> driver. The core cannot help you with that.
> >>
> > The core layer is the upper layer. If you don't set ->bits_per_word,
> > bits_per_word will use the default value of 8, so that the
> > controller's specific mode for transferring data cannot be used (eg:
> > XSPI mode).
> 
> XSPI mode is independent of bits_per_word.  In XSPI mode, you can send
> frames as small as 4 bits, and up to 32 bits.  In normal SPI mode, you can
> send frames from 4 to 16 bits.
> 
> >> > 3. In addition, now the
> >> > XSPI of dspi cannot transfer data normally, so this problem needs
> >> > to be solved.
> >>
> >> I still don't understand what the problem is.
> >>
> > The problem is that I tested the XSPI mode and could not work, that
> > is, the data could not be transmitted normally.
> 
> What does "could not be transmitted normally" mean?
> 
> I am using XSPI mode on LS1021A, talking to a lot of different SPI devices.
> And they all work, and I believe everything is quite "normal".
> 
Since I don't have the board of LS1021, I can't test it. I use other boards with DSPI (such as LS1043, LS2088, etc.), 
and I test sp-flash connected on DSPI. If XSPI mode is used at this time, data cannot be transmitted normally.
> /Esben

  reply	other threads:[~2018-10-10  2:43 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-21  7:06 [PATCH 1/2] spi: spi-mem: Add the spi_set_xfer_bpw function Chuanhua Han
2018-09-21  7:06 ` [PATCH 2/2] spi: spi-fsl-dspi: Fix support for XSPI transport mode Chuanhua Han
2018-09-28  6:37   ` Chuanhua Han
2018-09-28  6:55   ` Boris Brezillon
2018-09-29 14:56   ` Esben Haabendal
2018-09-29 15:43     ` Boris Brezillon
2018-09-30  2:49     ` Chuanhua Han
2018-09-21  7:06 ` [PATCH] spi: spi-mem: Adjust op len based on message/transfer size limitations Chuanhua Han
2018-09-21  7:15   ` Chuanhua Han
2018-09-28  6:37 ` [PATCH 1/2] spi: spi-mem: Add the spi_set_xfer_bpw function Chuanhua Han
2018-09-28  6:44 ` Boris Brezillon
2018-09-28  6:59   ` Chuanhua Han
2018-09-28  7:18     ` Boris Brezillon
2018-09-28  7:29       ` Chuanhua Han
2018-09-28 13:26       ` Mark Brown
2018-10-09  9:52       ` Chuanhua Han
2018-10-09 10:05         ` Boris Brezillon
2018-10-09 10:24           ` Chuanhua Han
2018-10-09 11:20             ` Esben Haabendal
2018-10-10  2:42               ` Chuanhua Han [this message]
2018-10-10  6:38                 ` Esben Haabendal
2018-10-09 10:33           ` Mark Brown
2018-10-09 13:50             ` Esben Haabendal
2018-10-09 10:53         ` Esben Haabendal

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=AM6PR04MB435784E00F0C68A310CD281B97E00@AM6PR04MB4357.eurprd04.prod.outlook.com \
    --to=chuanhua.han@nxp.com \
    --cc=boris.brezillon@bootlin.com \
    --cc=broonie@kernel.org \
    --cc=esben.haabendal@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-spi@vger.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.