Decrease the SPI FIFO size in BMC6348 boards to avoid random reads/writes.

The parameter BCM63XX_SPI_MAX_PREPEND is causing the SPI driver exceeds the 
hardware capabilities when reading transfer lengths over 58 bytes. Decreasing 
the SPI fifo size exactly  the BCM63XX_SPI_MAX_PREPEND lenght solves the 
problem.

I noticed it when I connected an external SPI flash memory to my old livebox1, 
the flash memory was correctly recognized as another mtd device with its 
partition, and everything seemed to be going well. When using dd, with block 
sizes <=58 all reads went fine, but over 58 all the reads were totally random. 
I know the SPI driver is far from being perfect, but I think It's a good idea 
to fix this if someone decides to use the BCM6348 SPI interface in his board.

With this patch the random reads never happens, when you exceed the limit it 
returns the error
unable to do transfers larger than FIFO size (%i > %i)
As done before the patch. It seems the driver still needs further work.


Signed-off-by: Daniel Gonzalez <dgcb...@gmail.com>

Index: 
target/linux/brcm63xx/patches-3.10/351-bcm6348-decrease_fifo_size_to_fix_random_reads.patch
===================================================================
--- 
target/linux/brcm63xx/patches-3.10/351-bcm6348-decrease_fifo_size_to_fix_random_reads.patch
 (revision 0)
+++ 
target/linux/brcm63xx/patches-3.10/351-bcm6348-decrease_fifo_size_to_fix_random_reads.patch
 (working copy)
@@ -0,0 +1,20 @@
+--- a/arch/mips/bcm63xx/dev-spi.c
++++ b/arch/mips/bcm63xx/dev-spi.c
+@@ -18,6 +18,8 @@
+ #include <bcm63xx_dev_spi.h>
+ #include <bcm63xx_regs.h>
+ 
++#define BCM63XX_SPI_MAX_PREPEND               15
++
+ /*
+  * register offsets
+  */
+@@ -79,7 +81,7 @@
+ 
+       if (BCMCPU_IS_6338() || BCMCPU_IS_6348()) {
+               spi_resources[0].end += BCM_6348_RSET_SPI_SIZE - 1;
+-              spi_pdata.fifo_size = SPI_6348_MSG_DATA_SIZE;
++              spi_pdata.fifo_size = SPI_6348_MSG_DATA_SIZE - 
BCM63XX_SPI_MAX_PREPEND;
+               spi_pdata.msg_type_shift = SPI_6348_MSG_TYPE_SHIFT;
+               spi_pdata.msg_ctl_width = SPI_6348_MSG_CTL_WIDTH;
+       }
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to