[PATCH/RFC 0/5] mmc: renesas_sdhi: add support for R-Car Gen3 SDHI DMAC

Simon Horman
2017-06-08T13:09:44Z

Hi,

this series adds support for the internal DMAC used by r8a779[56] SoCs.
This is achieved by adding a new variant of the SDHI driver for this
DMA controller with compat strings for the r8a779[56] SoCs.
Compat strings for these SoCs are also removed from the existing SYS DMAC
variant of the SDHI driver.

Based on mmc/next

Headline performance boost: 9.5MB/s -> 39.7MB/s
More run-time information below.

Simon Horman (4):
mmc: sh_mobile_sdhi: set max_segs and max_blk_count values R-Car Gen3
mmc: tmio: add complete to DMA ops
mmc: renesas_sdhi: add support for R-Car Gen3 SDHI DMAC
mmc: renesas-sdhi: remove gen3 support from sysc dmac driver

Yoshihiro Shimoda (1):
mmc: tmio: add max_segs and max_blk_count in tmio_mmc_data

drivers/mmc/host/Kconfig | 17 ++
drivers/mmc/host/Makefile | 8 +-
drivers/mmc/host/renesas_sdhi.h | 2 +
drivers/mmc/host/renesas_sdhi_core.c | 2 +
drivers/mmc/host/renesas_sdhi_internal_dmac.c | 275 ++++++++++++++++++++++++++
drivers/mmc/host/renesas_sdhi_sys_dmac.c | 23 +--
drivers/mmc/host/tmio_mmc.h | 2 +
drivers/mmc/host/tmio_mmc_core.c | 16 +-
include/linux/mfd/tmio.h | 2 +
9 files changed, 319 insertions(+), 28 deletions(-)
create mode 100644 drivers/mmc/host/renesas_sdhi_internal_dmac.c

--
2.1.4

M3-W ES1.0

fd9437fc8884 (topic/sdhi-gen3-dma-2017) mmc: renesas-sdhi: remove gen3 support from sysc dmac driver

# dmesg | egrep '(sd|mmc)'
[ 1.412911] sdhci: Secure Digital Host Controller Interface driver
[ 1.419120] sdhci: Copyright(c) Pierre Ossman
[ 1.423990] renesas_sdhi_internal_dmac ee100000.sd: Got CD GPIO
[ 1.429951] renesas_sdhi_internal_dmac ee100000.sd: Got WP GPIO
[ 1.560503] renesas_sdhi_internal_dmac ee140000.sd: mmc0 base at 0xee140000 max clock rate 200 MHz
[ 1.569871] renesas_sdhi_internal_dmac ee160000.sd: Got CD GPIO
[ 1.575846] renesas_sdhi_internal_dmac ee160000.sd: Got WP GPIO
[ 1.590584] sdhci-pltfm: SDHCI platform and OF driver helper
[ 1.638687] renesas_sdhi_internal_dmac ee100000.sd: Got CD GPIO
[ 1.644661] renesas_sdhi_internal_dmac ee100000.sd: Got WP GPIO
[ 1.772556] renesas_sdhi_internal_dmac ee100000.sd: mmc1 base at 0xee100000 max clock rate 200 MHz
[ 1.782613] renesas_sdhi_internal_dmac ee160000.sd: Got CD GPIO
[ 1.788580] renesas_sdhi_internal_dmac ee160000.sd: Got WP GPIO
[ 1.842940] mmc0: new high speed MMC card at address 0001
[ 1.852857] mmcblk0: mmc0:0001 eMMC 28.8 GiB
[ 1.857624] mmcblk0boot0: mmc0:0001 eMMC partition 1 4.00 MiB
[ 1.867734] mmcblk0boot1: mmc0:0001 eMMC partition 2 4.00 MiB
[ 1.877858] mmcblk0rpmb: mmc0:0001 eMMC partition 3 4.00 MiB
[ 1.887028] mmcblk0: p1
[ 1.916589] renesas_sdhi_internal_dmac ee160000.sd: mmc2 base at 0xee160000 max clock rate 200 MHz
[ 2.060534] mmc1: new ultra high speed SDR50 SDHC card at address e624
[ 2.071600] mmcblk1: mmc1:e624 SU08G 7.40 GiB
[ 2.086875] mmcblk1: p1
[ 2.260532] mmc2: new ultra high speed SDR50 SDHC card at address 0001
[ 2.267407] mmcblk2: mmc2:0001 00000 29.8 GiB
[ 2.281572] mmcblk2: p1

# grep sd /proc/interrupts
100: 24972 0 GIC-0 197 Level ee100000.sd
101: 604 0 GIC-0 199 Level ee140000.sd
102: 24980 0 GIC-0 200 Level ee160000.sd
178: 0 0 e6053000.gpio 12 Edge ee100000.sd cd
197: 0 0 e6054000.gpio 15 Edge ee160000.sd cd

# cat /sys/devices/platform/soc/ee100000.sd/mmc_host/mmc1/mmc1:e624
035344535530384780b1b8a11200d300
# dd if=/dev/mmcblk1 of=/dev/null bs=1M count=512 iflag=direct
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 13.5376 s, 39.7 MB/s

# cat /sys/devices/platform/soc/ee160000.sd/mmc_host/mmc2/mmc2:0001
1b534d3030303030103916141700f600
# dd if=/dev/mmcblk2 of=/dev/null bs=1M count=512 iflag=direct
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 17.5562 s, 30.6 MB/s

# grep sd /proc/interrupts
100: 49548 0 GIC-0 197 Level ee100000.sd
101: 604 0 GIC-0 199 Level ee140000.sd
102: 49556 0 GIC-0 200 Level ee160000.sd
178: 0 0 e6053000.gpio 12 Edge ee100000.sd cd
197: 0 0 e6054000.gpio 15 Edge ee160000.sd cd

-----------------------

6e75316c15df (mmc/next) mmc: tmio: make sure SDIO gets reinitialized after resume

# dmesg | egrep '(sd|mmc)'
[ 1.428112] sdhci: Secure Digital Host Controller Interface driver
[ 1.434620] sdhci: Copyright(c) Pierre Ossman
[ 1.439831] sh_mobile_sdhi ee100000.sd: Got CD GPIO
[ 1.444764] sh_mobile_sdhi ee100000.sd: Got WP GPIO
[ 1.571160] sh_mobile_sdhi ee140000.sd: mmc0 base at 0xee140000 max clock rate 200 MHz
[ 1.579496] sh_mobile_sdhi ee160000.sd: Got CD GPIO
[ 1.584434] sh_mobile_sdhi ee160000.sd: Got WP GPIO
[ 1.598138] sdhci-pltfm: SDHCI platform and OF driver helper
[ 1.647916] sh_mobile_sdhi ee100000.sd: Got CD GPIO
[ 1.652857] sh_mobile_sdhi ee100000.sd: Got WP GPIO
[ 1.779234] sh_mobile_sdhi ee100000.sd: mmc1 base at 0xee100000 max clock rate 200 MHz
[ 1.788368] sh_mobile_sdhi ee160000.sd: Got CD GPIO
[ 1.793300] sh_mobile_sdhi ee160000.sd: Got WP GPIO
[ 1.832493] mmc0: new high speed MMC card at address 0001
[ 1.842368] mmcblk0: mmc0:0001 eMMC 28.8 GiB
[ 1.851133] mmcblk0boot0: mmc0:0001 eMMC partition 1 4.00 MiB
[ 1.857245] mmcblk0boot1: mmc0:0001 eMMC partition 2 4.00 MiB
[ 1.867323] mmcblk0rpmb: mmc0:0001 eMMC partition 3 4.00 MiB
[ 1.876809] mmcblk0: p1
[ 1.919252] sh_mobile_sdhi ee160000.sd: mmc2 base at 0xee160000 max clock rate 200 MHz
[ 2.063208] mmc1: new ultra high speed SDR50 SDHC card at address e624
[ 2.074300] mmcblk1: mmc1:e624 SU08G 7.40 GiB
[ 2.089887] mmcblk1: p1
[ 2.263192] mmc2: new ultra high speed SDR50 SDHC card at address 0001
[ 2.270073] mmcblk2: mmc2:0001 00000 29.8 GiB
[ 2.284583] mmcblk2: p1

# grep sd /proc/interrupts
100: 2276 0 GIC-0 197 Level ee100000.sd
101: 3040 0 GIC-0 199 Level ee140000.sd
102: 2284 0 GIC-0 200 Level ee160000.sd
178: 0 0 e6053000.gpio 12 Edge ee100000.sd cd
197: 0 0 e6054000.gpio 15 Edge ee160000.sd cd

# cat /sys/devices/platform/soc/ee100000.sd/mmc_host/mmc1/mmc1:e624
035344535530384780b1b8a11200d300

# cat /sys/devices/platform/soc/ee160000.sd/mmc_host/mmc2/mmc2:0001
1b534d3030303030103916141700f600
# dd if=/dev/mmcblk2 of=/dev/null bs=1M count=512 iflag=direct
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 56.7809 s, 9.5 MB/s

# grep sd /proc/interrupts
100: 2276 0 GIC-0 197 Level ee100000.sd
101: 3040 0 GIC-0 199 Level ee140000.sd
102: 2124012 0 GIC-0 200 Level ee160000.sd
178: 0 0 e6053000.gpio 12 Edge ee100000.sd cd
197: 0 0 e6054000.gpio 15 Edge ee160000.sd cd