Hi, On Tue, Oct 15, 2013 at 11:27 PM, Martin Fuzzey <mfuz...@parkeon.com> wrote: > When writing buffers that are not 32 bit aligned data loss occurs. > > This can also occur when the total transfer size is not a multiple of 4 bytes > since the extra bytes are written first causing the rest to be unaligned. > > This can be seen by writing to SPI flash a 57 byte file containing 00 01 .. > 38: > > U-Boot > dhcp data.bin > ... > Bytes transferred = 57 (39 hex) > U-Boot > md.b $loadaddr > 72000000: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ................ > 72000010: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f ................ > 72000020: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f !"#$%&'()*+,-./ > 72000030: 30 31 32 33 34 35 36 37 38 ff ff ff ff ff ff ff 012345678....... > U-Boot > sf write $loadaddr 0 $filesize > > U-Boot > mw.b $loadaddr ff 100 > U-Boot > sf read $loadaddr 0 100 > U-Boot > md.b $loadaddr > 72000000: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ................ > 72000010: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f ................ > 72000020: 20 21 22 23 24 29 2a 2b 2c 31 32 33 34 ff ff ff !"#$)*+,1234... > 72000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ > > [bytes 25-28, 2d-30, 35-38 are missing] > > Activating debug in the write command gave: > spi_xchg_single: bitlen 256 dout 0x72000000 din 0x0 > Sending SPI 0x10203 > Sending SPI 0x4050607 > Sending SPI 0x8090a0b > Sending SPI 0xc0d0e0f > Sending SPI 0x10111213 > Sending SPI 0x14151617 > Sending SPI 0x18191a1b > Sending SPI 0x1c1d1e1f > SPI Rx: 0xffffffff 0xffffffff > ... > SPI Rx: 0xffffffff 0xffffffff > spi_xchg_single: bitlen 200 dout 0x72000020 din 0x0 > Sending SPI 0x20 > Sending SPI 0x21222324 > Sending SPI 0x292a2b2c <=== What happened to 25262728? > Sending SPI 0x31323334 > Sending SPI 0xffffffff > ... > SF: program success 57 bytes @ 0x0 Thanks for your log, for showing the exact issues.
> > > The problem was that the pointer was being incremented twice for the non > aligned case. > > Signed-off-by: Martin Fuzzey <mfuz...@parkeon.com> > --- > drivers/spi/mxc_spi.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c > index 859c43f..964a2b7 100644 > --- a/drivers/spi/mxc_spi.c > +++ b/drivers/spi/mxc_spi.c > @@ -274,8 +274,8 @@ int spi_xchg_single(struct spi_slave *slave, unsigned int > bitlen, > } else { > data = *(u32 *)dout; > data = cpu_to_be32(data); > + dout += 4; > } > - dout += 4; > } > debug("Sending SPI 0x%x\n", data); > reg_write(®s->txdata, data); > This patch pushed on master, please check it on http://git.denx.de/?p=u-boot.git;a=commitdiff;h=6d5ce1bd0048617d48c05de1a84fae8696081127 -- Thanks, Jagan. -------- Jagannadha Sutradharudu Teki, E: jagannadh.t...@gmail.com, P: +91-9676773388 Engineer - System Software Hacker U-boot - SPI Custodian and Zynq APSOC Ln: http://www.linkedin.com/in/jaganteki _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot