[PATCH v2] spi: imx: fix the burst length at DMA mode and CPU mode

Carlos Song carlos.song at nxp.com
Wed Jan 31 18:02:36 PST 2024



> -----Original Message-----
> From: Francesco Dolcini <francesco at dolcini.it>
> Sent: Thursday, February 1, 2024 3:42 AM
> To: Carlos Song <carlos.song at nxp.com>
> Cc: broonie at kernel.org; shawnguo at kernel.org; s.hauer at pengutronix.de;
> kernel at pengutronix.de; dl-linux-imx <linux-imx at nxp.com>; benjamin at bigler.one;
> stefanmoring at gmail.com; linux-spi at vger.kernel.org;
> linux-arm-kernel at lists.infradead.org; linux-kernel at vger.kernel.org
> Subject: [EXT] Re: [PATCH v2] spi: imx: fix the burst length at DMA mode and CPU
> mode
> 
> Caution: This is an external email. Please take care when clicking links or opening
> attachments. When in doubt, report the message using the 'Report this email'
> button
> 
> 
> On Wed, Jan 31, 2024 at 06:19:16PM +0800, carlos.song at nxp.com wrote:
> > From: Carlos Song <carlos.song at nxp.com>
> >
> > For DMA mode, the bus width of the DMA is equal to the size of data
> > word, so burst length should be configured as bits per word.
> >
> > For CPU mode, because of the spi transfer len is in byte, so burst
> > length should be configured as bits per byte * spi_imx->count.
> >
> > Signed-off-by: Carlos Song <carlos.song at nxp.com>
> > Reviewed-by: Clark Wang <xiaoning.wang at nxp.com>
> > Fixes: e9b220aeacf1 ("spi: spi-imx: correctly configure burst length
> > when using dma")
> > Fixes: 5f66db08cbd3 ("spi: imx: Take in account bits per word instead
> > of assuming 8-bits")
> > ---
> > Changes for V2:
> > - Removed BITS_PER_BYTE defination
> > ---
> >  drivers/spi/spi-imx.c | 7 +++----
> >  1 file changed, 3 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index
> > 546cdce525fc..0436e7a161ef 100644
> > --- a/drivers/spi/spi-imx.c
> > +++ b/drivers/spi/spi-imx.c
> > @@ -660,15 +660,14 @@ static int mx51_ecspi_prepare_transfer(struct
> spi_imx_data *spi_imx,
> >                       << MX51_ECSPI_CTRL_BL_OFFSET;
> >       else {
> >               if (spi_imx->usedma) {
> > -                     ctrl |= (spi_imx->bits_per_word *
> > -
> spi_imx_bytes_per_word(spi_imx->bits_per_word) - 1)
> > +                     ctrl |= (spi_imx->bits_per_word - 1)
> >                               << MX51_ECSPI_CTRL_BL_OFFSET;
> >               } else {
> >                       if (spi_imx->count >=
> MX51_ECSPI_CTRL_MAX_BURST)
> > -                             ctrl |= (MX51_ECSPI_CTRL_MAX_BURST - 1)
> > +                             ctrl |= (MX51_ECSPI_CTRL_MAX_BURST *
> > + BITS_PER_BYTE - 1)
> >                                               <<
> MX51_ECSPI_CTRL_BL_OFFSET;
> >                       else
> > -                             ctrl |= (spi_imx->count *
> spi_imx->bits_per_word - 1)
> > +                             ctrl |= (spi_imx->count * BITS_PER_BYTE
> > + - 1)
> >                                               <<
> MX51_ECSPI_CTRL_BL_OFFSET;
> >               }
> >       }
> 
> Add #include <linux/bits.h> given you are using BITS_PER_BYTE
> 
Hi, 

Thanks for your advice!
I found that <linux/property.h> has been included in spi-imx.c driver.
And <linux/bits.h> has been included in <linux/property.h>.
So I didn't add the "#include <linux/bits.h>" on purpose.

BR
Carlos
> Francesco




More information about the linux-arm-kernel mailing list