[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