mmc_spi: speedup for slow cards, less wear-out
authorWolfgang Muees <wolfgang.mues@auerswald.de>
Wed, 8 Apr 2009 09:14:07 +0000 (10:14 +0100)
committerPierre Ossman <pierre@ossman.eu>
Sat, 13 Jun 2009 20:42:56 +0000 (22:42 +0200)
Speedup for slow cards by transfering more data at once.
This patch also reduces the amount of wear-out of the flash
blocks because fewer partial blocks are written.

Signed-off-by: Wolfgang Muees <wolfgang.mues@auerswald.de>
Signed-off-by: Pierre Ossman <pierre@ossman.eu>
drivers/mmc/host/mmc_spi.c

index f48349d18c9264ba988b12d0373c7a4d5d7da8eb..a789db8eed28155c46f2f3c83ae7ceef90afe024 100644 (file)
  */
 #define r1b_timeout            (HZ * 3)
 
+/* One of the critical speed parameters is the amount of data which may
+ * be transfered in one command. If this value is too low, the SD card
+ * controller has to do multiple partial block writes (argggh!). With
+ * today (2008) SD cards there is little speed gain if we transfer more
+ * than 64 KBytes at a time. So use this value until there is any indication
+ * that we should do more here.
+ */
+#define MMC_SPI_BLOCKSATONCE   128
 
 /****************************************************************************/
 
@@ -1366,6 +1374,10 @@ static int mmc_spi_probe(struct spi_device *spi)
 
        mmc->ops = &mmc_spi_ops;
        mmc->max_blk_size = MMC_SPI_BLOCKSIZE;
+       mmc->max_hw_segs = MMC_SPI_BLOCKSATONCE;
+       mmc->max_phys_segs = MMC_SPI_BLOCKSATONCE;
+       mmc->max_req_size = MMC_SPI_BLOCKSATONCE * MMC_SPI_BLOCKSIZE;
+       mmc->max_blk_count = MMC_SPI_BLOCKSATONCE;
 
        mmc->caps = MMC_CAP_SPI;