[U-Boot] [PATCH] mx28: fix i.MX28 spi driver

Alexander Keller alexander.keller.85 at gmx.de
Tue Jan 17 00:33:08 CET 2012


> On 01/14/2012 03:10 PM, Marek Vasut wrote:
> >> The generic spi flash driver (drivers/mtd/spi/spi_flash.c) uses the
> >> spi low level driver's spi_xfer() function with len=0 to deassert the
> >> SPI flash' chip select. But the i.MX28 spi driver rejects this call
> >> due to len=0.
> >>
> >> This patch implements an exception for len=0 with the SPI_XFER_END
> >> flag set. This results in an extra read with the chip select being
> >> deasserted afterwards. There seems to be no way to deassert the signal
> >> by hand.
> > 
> > This seems good, but it doesn't look too correct either (is there really
> no 
> > other way to deassert CS than doing dummy read?). 
> Not that I am aware of. Did you wrote that mxs_spi driver? How did you
> interpret the 
> chips reference manual. I understood it this way: you need to tell the
> controller
> to deassert chip select before the final transfer.
> 
> I could be possible to change the driver implementation and use GPIOs for 
> chip select. But I think that's not the philisophy of this controller.
> 
> > Do you see an issue with 
> > current implementation on some board please?
> Yes, I installed an SST25VF032B SPI on the MX28EVK in preparation of our 
> own board. The chip was detected correctly after power on, but erasing
> (that's one place where the status register polling is used) more than one
> page
> does not work and then after reset the device is not correctly detected.
> 
> I would expect problems on the M28EVK (Denx) also. You might want to turn 
> SPI + spi_flash debugging to see it. Also I found a posting from
> Alexander Keller on the u-boot list from 12/13/2011. Perhaps the can check

I just want to confirm and thanks to Matthias for this patch. I already stated my problems by writing the SPI flash ...

So, I use the IMX28EVK with a Winbond W25Q64CV SPI flash chip and it's working great now.

Thanks for the great work.

Alexander


> if
> this patch fixes his problems also.
> 
> Matthias
> > 
> >>
> >> Signed-off-by: Matthias Fuchs <matthias.fuchs at esd.eu>
> >> ---
> >>  drivers/spi/mxs_spi.c |   12 +++++++++---
> >>  1 files changed, 9 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/drivers/spi/mxs_spi.c b/drivers/spi/mxs_spi.c
> >> index 4c27fef..adb9ca8 100644
> >> --- a/drivers/spi/mxs_spi.c
> >> +++ b/drivers/spi/mxs_spi.c
> >> @@ -129,9 +129,15 @@ int spi_xfer(struct spi_slave *slave, unsigned int
> >> bitlen, int len = bitlen / 8;
> >>  	const char *tx = dout;
> >>  	char *rx = din;
> >> -
> >> -	if (bitlen == 0)
> >> -		return 0;
> >> +	char dummy;
> >> +
> >> +	if (bitlen == 0) {
> >> +		if (flags & SPI_XFER_END) {
> >> +			rx = &dummy;
> >> +			len = 1;
> >> +		} else
> >> +			return 0;
> >> +	}
> >>
> >>  	if (!rx && !tx)
> >>  		return 0;
> > _______________________________________________
> > U-Boot mailing list
> > U-Boot at lists.denx.de
> > http://lists.denx.de/mailman/listinfo/u-boot
> 
> 
> -- 
> -------------------------------------------------------------------------
> Dipl.-Ing. Matthias Fuchs
> Head of System Design
> 
> esd electronic system design gmbh
> Vahrenwalder Str. 207 - 30165 Hannover - GERMANY
> Phone: +49-511-37298-0 - Fax: +49-511-37298-68
> Please visit our homepage http://www.esd.eu
> Quality Products - Made in Germany
> -------------------------------------------------------------------------
> Geschäftsführer: Klaus Detering
> Amtsgericht Hannover HRB 51373 - VAT-ID DE 115672832
> -------------------------------------------------------------------------


More information about the U-Boot mailing list