Hi, On Thu, May 15, 2008 at 10:30 PM, Felipe Balbi <felipebalbi@xxxxxxxxxxxxxxxxxxxxx> wrote: > Hi, > > this list moved to linux-omap@xxxxxxxxxxxxxxx ;-) > > On Thu, May 15, 2008 at 4:25 PM, Kumar, Purushotam <purushotam@xxxxxx> wrote: >> This patch will increase performance significantly. In my testing with a SD Extreme III high speed 2GB SD card using FAT file system on OMAP35X TI EVM, write speed has improved by 2x whereas read speed has improved by 3 times for MMCSD when CONFIG_MMC_BLOCK_BOUNCE is enabled. It is supposed that larger/bounce buffers will be used by mmc core if CONFIG_MMC_BLOCK_BOUNCE is defined. But, in the mmc core, size of buffer is set to mmc->max_req_size if mmc->max_req_size is smaller than MMC_QUEUE_BOUNCESZ i.e. bounce buffer size (which is 64KB). By default, mmc->max_req_size is set to 4K. So, buffers of 4K will be used instead of 64K even if CONFIG_MMC_BLOCK_BOUNCE is defined without this patch. This patches forces mmc core to use bounce buffer of size MMC_QUEUE_BOUNCESZ and so performance is increased. >> >> Signed-off-by: Purushotam Kumar <purushotam@xxxxxx> >> --- >> Index: linux-omap-2.6/drivers/mmc/host/omap_hsmmc.c >> =================================================================== >> --- linux-omap-2.6.orig/drivers/mmc/host/omap_hsmmc.c >> +++ linux-omap-2.6/drivers/mmc/host/omap_hsmmc.c >> @@ -782,6 +782,15 @@ static int __init omap_mmc_probe(struct >> else >> host->dbclk_enabled = 1; >> >> +#ifdef CONFIG_MMC_BLOCK_BOUNCE >> + mmc->max_phys_segs = 1; >> + mmc->max_hw_segs = 1; >> +#endif >> + mmc->max_blk_size = 512; /* Block Length at max can be 1024 */ >> + mmc->max_blk_count = 0xFFFF; /* No. of Blocks is 16 bits */ >> + mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; >> + mmc->max_seg_size = mmc->max_req_size; >> + >> mmc->ocr_avail = mmc_slot(host).ocr_mask; >> mmc->caps |= MMC_CAP_MULTIWRITE | MMC_CAP_MMC_HIGHSPEED | >> MMC_CAP_SD_HIGHSPEED; > > Do you have any measurements results to share :-p > similar ways omap.c does, but it's almost same or degraded. It was tested on apollon (OMAP2420) Thank you, Kyungmin Park # iozone -A -s 128m -q 256k -U /mmc -f /mmc/test -e % before 131072 4 3014 2317 6577 6575 131072 8 2918 2702 6577 6568 131072 16 2895 2287 6560 6556 131072 32 2839 2430 6567 6551 131072 64 2929 2688 6548 6545 131072 128 2956 2534 6572 6565 131072 256 2861 2356 6571 6569 % after 131072 4 2917 2784 6383 6379 131072 8 2806 2615 6377 6397 131072 16 2834 2953 6383 6379 131072 32 2844 2492 6376 6375 131072 64 2976 2625 6395 6379 Here's patch diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c index 549517c..a0c0d38 100644 --- a/drivers/mmc/host/omap.c +++ b/drivers/mmc/host/omap.c @@ -1332,12 +1335,17 @@ static int __init mmc_omap_new_slot(struct mmc_omap_host mmc->f_max = min(host->pdata->max_freq, mmc->f_max); mmc->ocr_avail = slot->pdata->ocr_mask; +#ifdef CONFIG_MMC_BLOCK_BOUNCE + mmc->max_phys_segs = 1; + mmc->max_hw_segs = 1; +#else /* Use scatterlist DMA to reduce per-transfer costs. * NOTE max_seg_size assumption that small blocks aren't * normally used (except e.g. for reading SD registers). */ mmc->max_phys_segs = 32; mmc->max_hw_segs = 32; +#endif mmc->max_blk_size = 2048; /* BLEN is 11 bits (+1) */ mmc->max_blk_count = 2048; /* NBLK is 11 bits (+1) */ mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html