[U-Boot] [PATCH] SPI: Fix 32 bit transfers in mxc_spi.c

Guennadi Liakhovetski lg at denx.de
Thu Dec 3 01:25:19 CET 2009


On Wed, 2 Dec 2009, Wolfgang Denk wrote:

> Dear Guennadi,
> 
> In message <1257965907-5622-1-git-send-email-lilja.magnus at gmail.com> Magnus Lilja wrote:
> > Commit f9b6a1575d9f1ca192e4cb60e547aa66f08baa3f,  "i.MX31: fix SPI
> > driver for shorter than 32 bit" broke 32 bit transfers. This patch
> > makes single 32 bit transfer work again.
> > 
> > Tested on i.MX31 Litekit and i.MX31 PDK using 32 bit transfers to
> > the MC13783/ATLAS chip (using the 'date' command).
> > 
> > Signed-off-by: Magnus Lilja <lilja.magnus at gmail.com>
> > Cc: Guennadi Liakhovetski <lg at denx.de>
> > 
> > ---
> > 
> > I don't think transfers larger than 32 bits will work. It seems
> > like they worked in the original driver, but the above commit broke that.
> > This patch does not try to fix that problem.
> > 
> >  drivers/spi/mxc_spi.c |    2 ++
> >  1 files changed, 2 insertions(+), 0 deletions(-)
> > 
> > diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c
> > index fad9840..8b5d4be 100644
> > --- a/drivers/spi/mxc_spi.c
> > +++ b/drivers/spi/mxc_spi.c
> > @@ -142,6 +142,8 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
> >  				*(u8 *)din = data;
> >  			else if (bitlen < 17)
> >  				*(u16 *)din = data;
> > +			else
> > +				*in_l = data;
> >  		}
> >  	}
> 
> Could you please comment ?

Hm, I'm afraid, I broke more than just that. Now that I look at this loop, 
looks like I broke not only 32-bit transfers, but also all transfers with 
bitlen > 16, and this fix is then incomplete - it doesn't fix cases with 
bitlen > 32. Magnus, looks like you also only use single-block (bitlen=32) 
transfers? Do you have a chance to test > 32-bit transfers too?

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.

DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de


More information about the U-Boot mailing list