mmc: sdhci: use pipeline mmc requests to improve performance
authorHaibo Chen <haibo.chen@freescale.com>
Tue, 9 Dec 2014 09:04:05 +0000 (17:04 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 19 Jan 2015 08:56:25 +0000 (09:56 +0100)
commit348487cb28e66b032bae1b38424d81bf5b444408
treeb484e039977c15b9894ead7500346cc1bb1e9392
parent2070d805bc8cf14fcc9447273928af7e531697fe
mmc: sdhci: use pipeline mmc requests to improve performance

This patch is based on the patches by Per Forlin, Tony Lin and Ryan QIAN.

This patch complete the API 'post_req' and 'pre_req' in sdhci host side,

Test Env:
1. i.MX6Q-SABREAUTO board, CPU @ 996MHz, use ADMA in uSDHC controller.
2. Test command:
$ echo 1 > /proc/sys/vm/drop_caches
write to sd card:
$ dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=2000 conv=fsync
read the sd card:
$ dd if=/dev/mmcblk0 of=/dev/null bs=1M count=2000

3. TOSHIBA 16GB SD3.0 card, running at 4 bit, SDR104 @ 198MHZ
Performance with and without this patch:
      -------------------------------------------------
  |                    | read speed | write speed |
  |------------------------------------------------
  | with this patch    | ~76.7 MB/s |  ~23.3 MB/s |
  |------------------------------------------------
  |without this patch  | ~60.5 MB/s |  ~22.5 MB/s |
  -------------------------------------------------

4. SanDisk 8GB SD3.0 card, running at 4 bit, DDR50 @ 50MHZ
Performance with and without this patch:
      -------------------------------------------------
  |                    | read speed | write speed |
  |------------------------------------------------
  | with this patch    | ~40.5 MB/s |  ~15.6 MB/s |
  |------------------------------------------------
  |without this patch  | ~36.1 MB/s |  ~14.1 MB/s |
  -------------------------------------------------

5. Kingston 8GB SD2.0 card, running at 4 bit, High-speed @ 50MHZ
Performance with and without this patch:
      -------------------------------------------------
  |                    | read speed | write speed |
  |------------------------------------------------
  | with this patch    | ~22.7 MB/s |  ~8.2 MB/s  |
  |------------------------------------------------
  |without this patch  | ~21.3 MB/s |  ~8.0 MB/s  |
  -------------------------------------------------

6. About eMMC, Sandisk 8GB eMMC on i.MX6DL-sabresd board, CPU @ 792MHZ,
   eMMC running at 8 bit, DDR52 @ 52MHZ.
Performance with and without this patch:
      -------------------------------------------------
  |                    | read speed | write speed |
  |------------------------------------------------
  | with this patch    | ~37.3 MB/s |  ~10.5 MB/s |
  |------------------------------------------------
  |without this patch  | ~33.4 MB/s |  ~10.5 MB/s |
  -------------------------------------------------

Signed-off-by: Haibo Chen <haibo.chen@freescale.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci.c
include/linux/mmc/sdhci.h