You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/01/22 06:59:33 UTC

[incubator-nuttx] branch master updated: driver/mmcsd: add option to limit block count in multiple-block transfer mode.

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 021363f  driver/mmcsd: add option to limit block count in multiple-block transfer mode.
021363f is described below

commit 021363f1dbf48f2af6a9974b6dfdd0063b2c431f
Author: Xu Xingliang <xu...@xiaomi.com>
AuthorDate: Tue Dec 21 19:55:38 2021 +0800

    driver/mmcsd: add option to limit block count in multiple-block transfer mode.
    
    Signed-off-by: Xu Xingliang <xu...@xiaomi.com>
---
 arch/arm/src/cxd56xx/cxd56_sdhci.c                 |   2 +-
 .../arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig  |   2 +-
 boards/arm/kinetis/freedom-k64f/README.txt         |   4 +-
 .../kinetis/freedom-k64f/configs/cdcacm/defconfig  |   2 +-
 .../kinetis/freedom-k64f/configs/demo/defconfig    |   2 +-
 .../arm/kinetis/freedom-k64f/configs/nsh/defconfig |   2 +-
 boards/arm/kinetis/freedom-k66f/README.txt         |   4 +-
 .../arm/kinetis/freedom-k66f/configs/nsh/defconfig |   2 +-
 .../mcu123-lpc214x/configs/composite/defconfig     |   2 +-
 boards/arm/lpc54xx/lpcxpresso-lpc54628/README.txt  |   2 +-
 boards/arm/sam34/arduino-due/README.txt            |   4 +-
 boards/arm/sam34/sam4e-ek/README.txt               |   4 +-
 boards/arm/sam34/sam4l-xplained/README.txt         |   4 +-
 boards/arm/sama5/sama5d3-xplained/README.txt       |   6 +-
 boards/arm/sama5/sama5d3x-ek/README.txt            |   6 +-
 .../arm/sama5/sama5d3x-ek/configs/demo/defconfig   |   2 +-
 .../sama5/sama5d3x-ek/configs/nxplayer/defconfig   |   2 +-
 boards/arm/sama5/sama5d4-ek/README.txt             |   6 +-
 boards/arm/sama5/sama5d4-ek/configs/ipv6/defconfig |   2 +-
 boards/arm/sama5/sama5d4-ek/configs/knsh/defconfig |   2 +-
 boards/arm/sama5/sama5d4-ek/configs/nsh/defconfig  |   2 +-
 boards/arm/sama5/sama5d4-ek/configs/nxwm/defconfig |   2 +-
 boards/arm/samd2l2/samd20-xplained/README.txt      |   4 +-
 boards/arm/samd2l2/samd21-xplained/README.txt      |   4 +-
 boards/arm/samd2l2/saml21-xplained/README.txt      |   4 +-
 boards/arm/samv7/same70-qmtech/README.txt          |   2 +-
 .../configs/mcuboot-confirm/defconfig              |   2 +-
 .../same70-qmtech/configs/mcuboot-loader/defconfig |   2 +-
 .../arm/samv7/same70-qmtech/configs/nsh/defconfig  |   2 +-
 boards/arm/samv7/same70-xplained/README.txt        |   4 +-
 .../samv7/same70-xplained/configs/adc/defconfig    |   2 +-
 .../configs/mcuboot-confirm/defconfig              |   2 +-
 .../configs/mcuboot-loader/defconfig               |   2 +-
 .../samv7/same70-xplained/configs/netnsh/defconfig |   2 +-
 .../samv7/same70-xplained/configs/nsh/defconfig    |   2 +-
 .../samv7/same70-xplained/configs/twm4nx/defconfig |   2 +-
 boards/arm/samv7/samv71-xult/README.txt            |   4 +-
 .../arm/samv7/samv71-xult/configs/knsh/defconfig   |   2 +-
 .../samv71-xult/configs/mrf24j40-starhub/defconfig |   2 +-
 .../samv7/samv71-xult/configs/mxtxplnd/defconfig   |   2 +-
 .../arm/samv7/samv71-xult/configs/netnsh/defconfig |   2 +-
 boards/arm/samv7/samv71-xult/configs/nsh/defconfig |   2 +-
 .../arm/samv7/samv71-xult/configs/nxwm/defconfig   |   2 +-
 boards/arm/samv7/samv71-xult/configs/vnc/defconfig |   2 +-
 .../arm/samv7/samv71-xult/configs/vnxwm/defconfig  |   2 +-
 boards/arm/stm32/olimex-stm32-p407/README.txt      |   2 +-
 boards/arm/stm32/stm3220g-eval/README.txt          |   4 +-
 .../arm/stm32/stm3220g-eval/configs/nsh/defconfig  |   2 +-
 .../arm/stm32/stm3220g-eval/configs/nsh2/defconfig |   2 +-
 .../arm/stm32/stm3220g-eval/configs/nxwm/defconfig |   2 +-
 boards/arm/stm32/stm3240g-eval/README.txt          |   4 +-
 .../arm/stm32/stm3240g-eval/configs/nsh2/defconfig |   2 +-
 .../stm32/stm32f4discovery/configs/ipv6/defconfig  |   2 +-
 .../stm32f4discovery/configs/netnsh/defconfig      |   2 +-
 .../arm/stm32f7/stm32f746-ws/configs/nsh/defconfig |   2 +-
 .../arm/xmc4/xmc4500-relax/configs/nsh/defconfig   |   2 +-
 boards/sim/sim/sim/configs/pf_ieee802154/defconfig |   2 +-
 boards/sim/sim/sim/configs/pktradio/defconfig      |   2 +-
 boards/sim/sim/sim/configs/sixlowpan/defconfig     |   2 +-
 .../z80/ez80/makerlisp/configs/nsh_flash/defconfig |   2 +-
 .../z80/ez80/makerlisp/configs/nsh_ram/defconfig   |   2 +-
 boards/z80/ez80/makerlisp/configs/sdboot/defconfig |   2 +-
 boards/z80/ez80/z20x/configs/nsh/defconfig         |   2 +-
 boards/z80/ez80/z20x/configs/sdboot/defconfig      |   2 +-
 drivers/mmcsd/Kconfig                              |  14 ++-
 drivers/mmcsd/mmcsd_sdio.c                         | 127 +++++++++++----------
 66 files changed, 159 insertions(+), 146 deletions(-)

diff --git a/arch/arm/src/cxd56xx/cxd56_sdhci.c b/arch/arm/src/cxd56xx/cxd56_sdhci.c
index c736c3d..6914f60 100644
--- a/arch/arm/src/cxd56xx/cxd56_sdhci.c
+++ b/arch/arm/src/cxd56xx/cxd56_sdhci.c
@@ -68,7 +68,7 @@
 #  error "Callback support requires CONFIG_SCHED_WORKQUEUE and CONFIG_SCHED_HPWORK"
 #endif
 
-#if !defined(CONFIG_MMCSD_MULTIBLOCK_DISABLE) && !defined(CONFIG_SDIO_BLOCKSETUP)
+#if (CONFIG_MMCSD_MULTIBLOCK_LIMIT != 1) && !defined(CONFIG_SDIO_BLOCKSETUP)
 #  error "This driver requires CONFIG_SDIO_BLOCKSETUP"
 #endif
 
diff --git a/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig b/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig
index be10f8f..f633e97 100644
--- a/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig
+++ b/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig
@@ -35,7 +35,7 @@ CONFIG_IMXRT_USDHC1_WIDTH_D1_D4=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INTELHEX_BINARY=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_BUILTIN_APPS=y
diff --git a/boards/arm/kinetis/freedom-k64f/README.txt b/boards/arm/kinetis/freedom-k64f/README.txt
index b81ff18..cdc2414 100644
--- a/boards/arm/kinetis/freedom-k64f/README.txt
+++ b/boards/arm/kinetis/freedom-k64f/README.txt
@@ -448,8 +448,8 @@ SD Card Support
     Device Drivers -> MMC/SD Driver Support
       CONFIG_MMCSD=y                        : Enable MMC/SD support
       CONFIG_MMSCD_NSLOTS=1                 : One slot per driver instance
-      CONFIG_MMCSD_MULTIBLOCK_DISABLE=y     : (REVISIT)
-      CONFIG_MMCSD_HAVE_CARDDETECT=y         : Supports card-detect PIOs
+      CONFIG_MMCSD_MULTIBLOCK_LIMIT=1       : (REVISIT)
+      CONFIG_MMCSD_HAVE_CARDDETECT=y        : Supports card-detect PIOs
       CONFIG_MMCSD_MMCSUPPORT=n             : Interferes with some SD cards
       CONFIG_MMCSD_SPI=n                    : No SPI-based MMC/SD support
       CONFIG_MMCSD_SDIO=y                   : SDIO-based MMC/SD support
diff --git a/boards/arm/kinetis/freedom-k64f/configs/cdcacm/defconfig b/boards/arm/kinetis/freedom-k64f/configs/cdcacm/defconfig
index a24c3dc..47b42f6 100644
--- a/boards/arm/kinetis/freedom-k64f/configs/cdcacm/defconfig
+++ b/boards/arm/kinetis/freedom-k64f/configs/cdcacm/defconfig
@@ -38,7 +38,7 @@ CONFIG_KINETIS_SDHC=y
 CONFIG_KINETIS_UART0=y
 CONFIG_KINETIS_USBOTG=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MOTOROLA_SREC=y
 CONFIG_NSH_ARCHINIT=y
diff --git a/boards/arm/kinetis/freedom-k64f/configs/demo/defconfig b/boards/arm/kinetis/freedom-k64f/configs/demo/defconfig
index 13699fa..bac0ff6 100644
--- a/boards/arm/kinetis/freedom-k64f/configs/demo/defconfig
+++ b/boards/arm/kinetis/freedom-k64f/configs/demo/defconfig
@@ -42,7 +42,7 @@ CONFIG_KINETIS_PORTEINTS=y
 CONFIG_KINETIS_SDHC=y
 CONFIG_KINETIS_UART0=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MOTOROLA_SREC=y
 CONFIG_NETDB_DNSCLIENT=y
diff --git a/boards/arm/kinetis/freedom-k64f/configs/nsh/defconfig b/boards/arm/kinetis/freedom-k64f/configs/nsh/defconfig
index 041fec9..45d106c 100644
--- a/boards/arm/kinetis/freedom-k64f/configs/nsh/defconfig
+++ b/boards/arm/kinetis/freedom-k64f/configs/nsh/defconfig
@@ -37,7 +37,7 @@ CONFIG_KINETIS_PORTEINTS=y
 CONFIG_KINETIS_SDHC=y
 CONFIG_KINETIS_UART0=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MOTOROLA_SREC=y
 CONFIG_NSH_ARCHINIT=y
diff --git a/boards/arm/kinetis/freedom-k66f/README.txt b/boards/arm/kinetis/freedom-k66f/README.txt
index 53501be..688f8c3 100644
--- a/boards/arm/kinetis/freedom-k66f/README.txt
+++ b/boards/arm/kinetis/freedom-k66f/README.txt
@@ -451,8 +451,8 @@ SD Card Support
     Device Drivers -> MMC/SD Driver Support
       CONFIG_MMCSD=y                        : Enable MMC/SD support
       CONFIG_MMSCD_NSLOTS=1                 : One slot per driver instance
-      CONFIG_MMCSD_MULTIBLOCK_DISABLE=y     : (REVISIT)
-      CONFIG_MMCSD_HAVE_CARDDETECT=y         : Supports card-detect PIOs
+      CONFIG_MMCSD_MULTIBLOCK_LIMIT=1       : (REVISIT)
+      CONFIG_MMCSD_HAVE_CARDDETECT=y        : Supports card-detect PIOs
       CONFIG_MMCSD_MMCSUPPORT=n             : Interferes with some SD cards
       CONFIG_MMCSD_SPI=n                    : No SPI-based MMC/SD support
       CONFIG_MMCSD_SDIO=y                   : SDIO-based MMC/SD support
diff --git a/boards/arm/kinetis/freedom-k66f/configs/nsh/defconfig b/boards/arm/kinetis/freedom-k66f/configs/nsh/defconfig
index 7ae54bf..83934bf 100644
--- a/boards/arm/kinetis/freedom-k66f/configs/nsh/defconfig
+++ b/boards/arm/kinetis/freedom-k66f/configs/nsh/defconfig
@@ -63,7 +63,7 @@ CONFIG_KINETIS_UART_BREAKS=y
 CONFIG_KINETIS_UART_EXTEDED_BREAK=y
 CONFIG_LIBC_STRERROR=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_BUILTIN_APPS=y
diff --git a/boards/arm/lpc214x/mcu123-lpc214x/configs/composite/defconfig b/boards/arm/lpc214x/mcu123-lpc214x/configs/composite/defconfig
index 7a7afa1..b01330d 100644
--- a/boards/arm/lpc214x/mcu123-lpc214x/configs/composite/defconfig
+++ b/boards/arm/lpc214x/mcu123-lpc214x/configs/composite/defconfig
@@ -33,7 +33,7 @@ CONFIG_IDLETHREAD_STACKSIZE=2048
 CONFIG_INIT_ENTRYPOINT="conn_main"
 CONFIG_INTELHEX_BINARY=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_PREALLOC_TIMERS=4
 CONFIG_RAM_SIZE=32768
 CONFIG_RAM_START=0x40000000
diff --git a/boards/arm/lpc54xx/lpcxpresso-lpc54628/README.txt b/boards/arm/lpc54xx/lpcxpresso-lpc54628/README.txt
index 2c600a1..78b019a 100644
--- a/boards/arm/lpc54xx/lpcxpresso-lpc54628/README.txt
+++ b/boards/arm/lpc54xx/lpcxpresso-lpc54628/README.txt
@@ -455,7 +455,7 @@ Configurations
 
          CONFIG_MMCSD=y
          CONFIG_MMCSD_NSLOTS=1
-         CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+         CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
          CONFIG_MMCSD_HAVE_CARDDETECT=y
          CONFIG_MMCSD_HAVE_WRITEPROTECT=y
          CONFIG_ARCH_HAVE_SDIO=y
diff --git a/boards/arm/sam34/arduino-due/README.txt b/boards/arm/sam34/arduino-due/README.txt
index 9f8cee3..957bbce 100644
--- a/boards/arm/sam34/arduino-due/README.txt
+++ b/boards/arm/sam34/arduino-due/README.txt
@@ -798,8 +798,8 @@ Configuration sub-directories
 
          CONFIG_MMCSD=y                    : Enable MMC/SD support
          CONFIG_MMCSD_NSLOTS=1             : Only one MMC/SD card slot
-         CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers
-         CONFIG_MMCSD_HAVE_CARDDETECT=y     : I/O1 module as a card detect GPIO
+         CONFIG_MMCSD_MULTIBLOCK_LIMIT=0   : Should not need to disable multi-block transfers
+         CONFIG_MMCSD_HAVE_CARDDETECT=y    : I/O1 module as a card detect GPIO
          CONFIG_MMCSD_SPI=y                : Use the SPI interface to the MMC/SD card
          CONFIG_MMCSD_SPICLOCK=20000000    : This is a guess for the optimal MMC/SD frequency
          CONFIG_MMCSD_SPIMODE=0            : Mode 0 is required
diff --git a/boards/arm/sam34/sam4e-ek/README.txt b/boards/arm/sam34/sam4e-ek/README.txt
index 4b37fee..ff34a8d 100644
--- a/boards/arm/sam34/sam4e-ek/README.txt
+++ b/boards/arm/sam34/sam4e-ek/README.txt
@@ -675,9 +675,9 @@ HSMCI
     Device Drivers -> MMC/SD Driver Support
       CONFIG_MMCSD=y                          : Enable MMC/SD support
       CONFIG_MMCSD_NSLOTS=1                   : One slot per driver instance
-      CONFIG_MMCSD_HAVE_CARDDETECT=y           : Supports card-detect PIOs
+      CONFIG_MMCSD_HAVE_CARDDETECT=y          : Supports card-detect PIOs
       CONFIG_MMCSD_SDIO=y                     : SDIO-based MMC/SD support
-      CONFIG_MMCSD_MULTIBLOCK_DISABLE=y       : Probably works but is untested
+      CONFIG_MMCSD_MULTIBLOCK_LIMIT=1         : Probably works but is untested
 
       CONFIG_SDIO_DMA=y                       : Use SDIO DMA
       CONFIG_SDIO_BLOCKSETUP=y                : Needs to know block sizes
diff --git a/boards/arm/sam34/sam4l-xplained/README.txt b/boards/arm/sam34/sam4l-xplained/README.txt
index c5211f2..6d4e33f 100644
--- a/boards/arm/sam34/sam4l-xplained/README.txt
+++ b/boards/arm/sam34/sam4l-xplained/README.txt
@@ -515,8 +515,8 @@ Configuration sub-directories
 
          CONFIG_MMCSD=y                    : Enable MMC/SD support
          CONFIG_MMCSD_NSLOTS=1             : Only one MMC/SD card slot
-         CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers
-         CONFIG_MMCSD_HAVE_CARDDETECT=y     : I/O1 module as a card detect GPIO
+         CONFIG_MMCSD_MULTIBLOCK_LIMIT=0   : Should not need to disable multi-block transfers
+         CONFIG_MMCSD_HAVE_CARDDETECT=y    : I/O1 module as a card detect GPIO
          CONFIG_MMCSD_SPI=y                : Use the SPI interface to the MMC/SD card
          CONFIG_MMCSD_SPICLOCK=20000000    : This is a guess for the optimal MMC/SD frequency
          CONFIG_MMCSD_SPIMODE=0            : Mode 0 is required
diff --git a/boards/arm/sama5/sama5d3-xplained/README.txt b/boards/arm/sama5/sama5d3-xplained/README.txt
index 964e258..6ed7daa 100644
--- a/boards/arm/sama5/sama5d3-xplained/README.txt
+++ b/boards/arm/sama5/sama5d3-xplained/README.txt
@@ -1224,8 +1224,8 @@ HSMCI Card Slots
     Device Drivers -> MMC/SD Driver Support
       CONFIG_MMCSD=y                        : Enable MMC/SD support
       CONFIG_MMSCD_NSLOTS=1                 : One slot per driver instance
-      CONFIG_MMCSD_MULTIBLOCK_DISABLE=y     : (REVISIT)
-      CONFIG_MMCSD_HAVE_CARDDETECT=y         : Supports card-detect PIOs
+      CONFIG_MMCSD_MULTIBLOCK_LIMIT=1       : (REVISIT)
+      CONFIG_MMCSD_HAVE_CARDDETECT=y        : Supports card-detect PIOs
       CONFIG_MMCSD_MMCSUPPORT=n             : Interferes with some SD cards
       CONFIG_MMCSD_SPI=n                    : No SPI-based MMC/SD support
       CONFIG_MMCSD_SDIO=y                   : SDIO-based MMC/SD support
@@ -3318,7 +3318,7 @@ To-Do List
    endpoint support in the EHCI driver is untested (but works in similar
    EHCI drivers).
 
-2) HSCMI. CONFIG_MMCSD_MULTIBLOCK_DISABLE=y is set to disable multi-block
+2) HSCMI. CONFIG_MMCSD_MULTIBLOCK_LIMIT=1 is set to disable multi-block
    transfers because of some issues that I saw during testing.  The is very
    low priority to me but might be important to you if you are need very
    high performance SD card accesses.
diff --git a/boards/arm/sama5/sama5d3x-ek/README.txt b/boards/arm/sama5/sama5d3x-ek/README.txt
index 0dc33d3..9d81e34 100644
--- a/boards/arm/sama5/sama5d3x-ek/README.txt
+++ b/boards/arm/sama5/sama5d3x-ek/README.txt
@@ -1267,8 +1267,8 @@ HSMCI Card Slots
     Device Drivers -> MMC/SD Driver Support
       CONFIG_MMCSD=y                        : Enable MMC/SD support
       CONFIG_MMSCD_NSLOTS=1                 : One slot per driver instance
-      CONFIG_MMCSD_MULTIBLOCK_DISABLE=y     : (REVISIT)
-      CONFIG_MMCSD_HAVE_CARDDETECT=y         : Supports card-detect PIOs
+      CONFIG_MMCSD_MULTIBLOCK_LIMIT=1       : (REVISIT)
+      CONFIG_MMCSD_HAVE_CARDDETECT=y        : Supports card-detect PIOs
       CONFIG_MMCSD_MMCSUPPORT=n             : Interferes with some SD cards
       CONFIG_MMCSD_SPI=n                    : No SPI-based MMC/SD support
       CONFIG_MMCSD_SDIO=y                   : SDIO-based MMC/SD support
@@ -3775,7 +3775,7 @@ To-Do List
    endpoint support in the EHCI driver is untested (but works in similar
    EHCI drivers).
 
-3) HSCMI. CONFIG_MMCSD_MULTIBLOCK_DISABLE=y is set to disable multi-block
+3) HSCMI. CONFIG_MMCSD_MULTIBLOCK_LIMIT=1 is set to disable multi-block
    transfers because of some issues that I saw during testing.  The is very
    low priority to me but might be important to you if you are need very
    high performance SD card accesses.
diff --git a/boards/arm/sama5/sama5d3x-ek/configs/demo/defconfig b/boards/arm/sama5/sama5d3x-ek/configs/demo/defconfig
index 466c7fb..ab75638 100644
--- a/boards/arm/sama5/sama5d3x-ek/configs/demo/defconfig
+++ b/boards/arm/sama5/sama5d3x-ek/configs/demo/defconfig
@@ -34,7 +34,7 @@ CONFIG_HOST_WINDOWS=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INTELHEX_BINARY=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MM_REGIONS=2
 CONFIG_MTD=y
diff --git a/boards/arm/sama5/sama5d3x-ek/configs/nxplayer/defconfig b/boards/arm/sama5/sama5d3x-ek/configs/nxplayer/defconfig
index 36e0edd..8d2bf67 100644
--- a/boards/arm/sama5/sama5d3x-ek/configs/nxplayer/defconfig
+++ b/boards/arm/sama5/sama5d3x-ek/configs/nxplayer/defconfig
@@ -41,7 +41,7 @@ CONFIG_I2C_RESET=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INTELHEX_BINARY=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MM_REGIONS=2
 CONFIG_NSH_ARCHINIT=y
diff --git a/boards/arm/sama5/sama5d4-ek/README.txt b/boards/arm/sama5/sama5d4-ek/README.txt
index 4e75593..8ba43ff 100644
--- a/boards/arm/sama5/sama5d4-ek/README.txt
+++ b/boards/arm/sama5/sama5d4-ek/README.txt
@@ -1633,8 +1633,8 @@ HSMCI Card Slots
     Device Drivers -> MMC/SD Driver Support
       CONFIG_MMCSD=y                        : Enable MMC/SD support
       CONFIG_MMSCD_NSLOTS=1                 : One slot per driver instance
-      CONFIG_MMCSD_MULTIBLOCK_DISABLE=y     : (REVISIT)
-      CONFIG_MMCSD_HAVE_CARDDETECT=y         : Supports card-detect PIOs
+      CONFIG_MMCSD_MULTIBLOCK_LIMIT=1       : (REVISIT)
+      CONFIG_MMCSD_HAVE_CARDDETECT=y        : Supports card-detect PIOs
       CONFIG_MMCSD_MMCSUPPORT=n             : Interferes with some SD cards
       CONFIG_MMCSD_SPI=n                    : No SPI-based MMC/SD support
       CONFIG_MMCSD_SDIO=y                   : SDIO-based MMC/SD support
@@ -4929,7 +4929,7 @@ To-Do List
    endpoint support in the EHCI driver is untested (but works in similar
    EHCI drivers).
 
-2) HSCMI. CONFIG_MMCSD_MULTIBLOCK_DISABLE=y is set to disable multi-block
+2) HSCMI. CONFIG_MMCSD_MULTIBLOCK_LIMIT=1 is set to disable multi-block
    transfers because of some issues that I saw during testing.  The is very
    low priority to me but might be important to you if you are need very
    high performance SD card accesses.
diff --git a/boards/arm/sama5/sama5d4-ek/configs/ipv6/defconfig b/boards/arm/sama5/sama5d4-ek/configs/ipv6/defconfig
index d9405c2..07bc2a8 100644
--- a/boards/arm/sama5/sama5d4-ek/configs/ipv6/defconfig
+++ b/boards/arm/sama5/sama5d4-ek/configs/ipv6/defconfig
@@ -55,7 +55,7 @@ CONFIG_INPUT=y
 CONFIG_INPUT_MXT=y
 CONFIG_INTELHEX_BINARY=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MQ_MAXMSGSIZE=64
 CONFIG_NET=y
diff --git a/boards/arm/sama5/sama5d4-ek/configs/knsh/defconfig b/boards/arm/sama5/sama5d4-ek/configs/knsh/defconfig
index e97cc98..0efc437 100644
--- a/boards/arm/sama5/sama5d4-ek/configs/knsh/defconfig
+++ b/boards/arm/sama5/sama5d4-ek/configs/knsh/defconfig
@@ -49,7 +49,7 @@ CONFIG_HOST_WINDOWS=y
 CONFIG_INTELHEX_BINARY=y
 CONFIG_LIBC_EXECFUNCS=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MM_PGALLOC=y
 CONFIG_NSH_FILE_APPS=y
diff --git a/boards/arm/sama5/sama5d4-ek/configs/nsh/defconfig b/boards/arm/sama5/sama5d4-ek/configs/nsh/defconfig
index 943e50c..8c02248 100644
--- a/boards/arm/sama5/sama5d4-ek/configs/nsh/defconfig
+++ b/boards/arm/sama5/sama5d4-ek/configs/nsh/defconfig
@@ -55,7 +55,7 @@ CONFIG_INPUT_MXT=y
 CONFIG_INTELHEX_BINARY=y
 CONFIG_LIBC_HOSTNAME="SAMA5D4-EK"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MQ_MAXMSGSIZE=64
 CONFIG_NET=y
diff --git a/boards/arm/sama5/sama5d4-ek/configs/nxwm/defconfig b/boards/arm/sama5/sama5d4-ek/configs/nxwm/defconfig
index 4ca7476..70db44f 100644
--- a/boards/arm/sama5/sama5d4-ek/configs/nxwm/defconfig
+++ b/boards/arm/sama5/sama5d4-ek/configs/nxwm/defconfig
@@ -58,7 +58,7 @@ CONFIG_INTELHEX_BINARY=y
 CONFIG_LIBC_FLOATINGPOINT=y
 CONFIG_LIBM=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MQ_MAXMSGSIZE=64
 CONFIG_NET=y
diff --git a/boards/arm/samd2l2/samd20-xplained/README.txt b/boards/arm/samd2l2/samd20-xplained/README.txt
index e89d017..8fffa32 100644
--- a/boards/arm/samd2l2/samd20-xplained/README.txt
+++ b/boards/arm/samd2l2/samd20-xplained/README.txt
@@ -750,9 +750,9 @@ Configuration sub-directories
 
          CONFIG_MMCSD=y                    : Enable MMC/SD support
          CONFIG_MMCSD_NSLOTS=1             : Only one MMC/SD card slot
-         CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers
+         CONFIG_MMCSD_MULTIBLOCK_LIMIT=0   : Should not need to disable multi-block transfers
          CONFIG_MMCSD_MMCSUPPORT=n         : May interfere with some SD cards
-         CONFIG_MMCSD_HAVE_CARDDETECT=y     : I/O1 module as a card detect GPIO
+         CONFIG_MMCSD_HAVE_CARDDETECT=y    : I/O1 module as a card detect GPIO
          CONFIG_MMCSD_SPI=y                : Use the SPI interface to the MMC/SD card
          CONFIG_MMCSD_SPICLOCK=20000000    : This is a guess for the optimal MMC/SD frequency
          CONFIG_MMCSD_SPIMODE=0            : Mode 0 is required
diff --git a/boards/arm/samd2l2/samd21-xplained/README.txt b/boards/arm/samd2l2/samd21-xplained/README.txt
index 3139739..2952422 100644
--- a/boards/arm/samd2l2/samd21-xplained/README.txt
+++ b/boards/arm/samd2l2/samd21-xplained/README.txt
@@ -621,9 +621,9 @@ Configuration sub-directories
 
          CONFIG_MMCSD=y                    : Enable MMC/SD support
          CONFIG_MMCSD_NSLOTS=1             : Only one MMC/SD card slot
-         CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers
+         CONFIG_MMCSD_MULTIBLOCK_LIMIT=0   : Should not need to disable multi-block transfers
          CONFIG_MMCSD_MMCSUPPORT=n         : May interfere with some SD cards
-         CONFIG_MMCSD_HAVE_CARDDETECT=y     : I/O1 module as a card detect GPIO
+         CONFIG_MMCSD_HAVE_CARDDETECT=y    : I/O1 module as a card detect GPIO
          CONFIG_MMCSD_SPI=y                : Use the SPI interface to the MMC/SD card
          CONFIG_MMCSD_SPICLOCK=20000000    : This is a guess for the optimal MMC/SD frequency
          CONFIG_MMCSD_SPIMODE=0            : Mode 0 is required
diff --git a/boards/arm/samd2l2/saml21-xplained/README.txt b/boards/arm/samd2l2/saml21-xplained/README.txt
index b40a3da..7905048 100644
--- a/boards/arm/samd2l2/saml21-xplained/README.txt
+++ b/boards/arm/samd2l2/saml21-xplained/README.txt
@@ -782,9 +782,9 @@ Configuration sub-directories
 
          CONFIG_MMCSD=y                    : Enable MMC/SD support
          CONFIG_MMCSD_NSLOTS=1             : Only one MMC/SD card slot
-         CONFIG_MMCSD_MULTIBLOCK_DISABLE=n : Should not need to disable multi-block transfers
+         CONFIG_MMCSD_MULTIBLOCK_LIMIT=0   : Should not need to disable multi-block transfers
          CONFIG_MMCSD_MMCSUPPORT=n         : May interfere with some SD cards
-         CONFIG_MMCSD_HAVE_CARDDETECT=y     : I/O1 module as a card detect GPIO
+         CONFIG_MMCSD_HAVE_CARDDETECT=y    : I/O1 module as a card detect GPIO
          CONFIG_MMCSD_SPI=y                : Use the SPI interface to the MMC/SD card
          CONFIG_MMCSD_SPICLOCK=20000000    : This is a guess for the optimal MMC/SD frequency
          CONFIG_MMCSD_SPIMODE=0            : Mode 0 is required
diff --git a/boards/arm/samv7/same70-qmtech/README.txt b/boards/arm/samv7/same70-qmtech/README.txt
index 517d5d7..4ddc77b 100644
--- a/boards/arm/samv7/same70-qmtech/README.txt
+++ b/boards/arm/samv7/same70-qmtech/README.txt
@@ -99,7 +99,7 @@ the SD slots can be enabled with the following settings:
   Device Drivers -> MMC/SD Driver Support
     CONFIG_MMCSD=y                        : Enable MMC/SD support
     CONFIG_MMSCD_NSLOTS=1                 : One slot per driver instance
-    CONFIG_MMCSD_MULTIBLOCK_DISABLE=y     : (REVISIT)
+    CONFIG_MMCSD_MULTIBLOCK_LIMIT=1       : (REVISIT)
     CONFIG_MMCSD_HAVE_CARDDETECT=y        : Supports card-detect PIOs
     CONFIG_MMCSD_MMCSUPPORT=n             : Interferes with some SD cards
     CONFIG_MMCSD_SPI=n                    : No SPI-based MMC/SD support
diff --git a/boards/arm/samv7/same70-qmtech/configs/mcuboot-confirm/defconfig b/boards/arm/samv7/same70-qmtech/configs/mcuboot-confirm/defconfig
index 337f76e..eeab5d4 100644
--- a/boards/arm/samv7/same70-qmtech/configs/mcuboot-confirm/defconfig
+++ b/boards/arm/samv7/same70-qmtech/configs/mcuboot-confirm/defconfig
@@ -33,7 +33,7 @@ CONFIG_FS_FAT=y
 CONFIG_FS_PROCFS=y
 CONFIG_INIT_ENTRYPOINT="mcuboot_confirm_main"
 CONFIG_MCUBOOT_SLOT_CONFIRM_EXAMPLE=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_BUILTIN_APPS=y
diff --git a/boards/arm/samv7/same70-qmtech/configs/mcuboot-loader/defconfig b/boards/arm/samv7/same70-qmtech/configs/mcuboot-loader/defconfig
index 2f15187..d9cb7ef 100644
--- a/boards/arm/samv7/same70-qmtech/configs/mcuboot-loader/defconfig
+++ b/boards/arm/samv7/same70-qmtech/configs/mcuboot-loader/defconfig
@@ -34,7 +34,7 @@ CONFIG_FS_PROCFS=y
 CONFIG_INIT_ENTRYPOINT="mcuboot_loader_main"
 CONFIG_MCUBOOT_BOOTLOADER=y
 CONFIG_MCUBOOT_ENABLE_LOGGING=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_BUILTIN_APPS=y
diff --git a/boards/arm/samv7/same70-qmtech/configs/nsh/defconfig b/boards/arm/samv7/same70-qmtech/configs/nsh/defconfig
index a80f0c4..02be69d 100644
--- a/boards/arm/samv7/same70-qmtech/configs/nsh/defconfig
+++ b/boards/arm/samv7/same70-qmtech/configs/nsh/defconfig
@@ -33,7 +33,7 @@ CONFIG_FAT_LFN=y
 CONFIG_FS_FAT=y
 CONFIG_FS_PROCFS=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_BUILTIN_APPS=y
diff --git a/boards/arm/samv7/same70-xplained/README.txt b/boards/arm/samv7/same70-xplained/README.txt
index ab3aa02..5012df1 100644
--- a/boards/arm/samv7/same70-xplained/README.txt
+++ b/boards/arm/samv7/same70-xplained/README.txt
@@ -162,8 +162,8 @@ the SD slots can be enabled with the following settings:
   Device Drivers -> MMC/SD Driver Support
     CONFIG_MMCSD=y                        : Enable MMC/SD support
     CONFIG_MMSCD_NSLOTS=1                 : One slot per driver instance
-    CONFIG_MMCSD_MULTIBLOCK_DISABLE=y     : (REVISIT)
-    CONFIG_MMCSD_HAVE_CARDDETECT=y         : Supports card-detect PIOs
+    CONFIG_MMCSD_MULTIBLOCK_LIMIT=1       : (REVISIT)
+    CONFIG_MMCSD_HAVE_CARDDETECT=y        : Supports card-detect PIOs
     CONFIG_MMCSD_MMCSUPPORT=n             : Interferes with some SD cards
     CONFIG_MMCSD_SPI=n                    : No SPI-based MMC/SD support
     CONFIG_MMCSD_SDIO=y                   : SDIO-based MMC/SD support
diff --git a/boards/arm/samv7/same70-xplained/configs/adc/defconfig b/boards/arm/samv7/same70-xplained/configs/adc/defconfig
index 0090301..3d64e10 100644
--- a/boards/arm/samv7/same70-xplained/configs/adc/defconfig
+++ b/boards/arm/samv7/same70-xplained/configs/adc/defconfig
@@ -46,7 +46,7 @@ CONFIG_FS_FAT=y
 CONFIG_FS_PROCFS=y
 CONFIG_I2CTOOL_MAXBUS=0
 CONFIG_INIT_ENTRYPOINT="nsh_main"
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
diff --git a/boards/arm/samv7/same70-xplained/configs/mcuboot-confirm/defconfig b/boards/arm/samv7/same70-xplained/configs/mcuboot-confirm/defconfig
index 5089a97..395c5b4 100644
--- a/boards/arm/samv7/same70-xplained/configs/mcuboot-confirm/defconfig
+++ b/boards/arm/samv7/same70-xplained/configs/mcuboot-confirm/defconfig
@@ -43,7 +43,7 @@ CONFIG_FS_PROCFS=y
 CONFIG_I2CTOOL_MAXBUS=0
 CONFIG_INIT_ENTRYPOINT="mcuboot_confirm_main"
 CONFIG_MCUBOOT_SLOT_CONFIRM_EXAMPLE=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD_AT24XX=y
 CONFIG_MTD_AT25=y
diff --git a/boards/arm/samv7/same70-xplained/configs/mcuboot-loader/defconfig b/boards/arm/samv7/same70-xplained/configs/mcuboot-loader/defconfig
index fba8684..bb2b3fd 100644
--- a/boards/arm/samv7/same70-xplained/configs/mcuboot-loader/defconfig
+++ b/boards/arm/samv7/same70-xplained/configs/mcuboot-loader/defconfig
@@ -44,7 +44,7 @@ CONFIG_I2CTOOL_MAXBUS=0
 CONFIG_INIT_ENTRYPOINT="mcuboot_loader_main"
 CONFIG_MCUBOOT_BOOTLOADER=y
 CONFIG_MCUBOOT_ENABLE_LOGGING=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD_AT24XX=y
 CONFIG_MTD_AT25=y
diff --git a/boards/arm/samv7/same70-xplained/configs/netnsh/defconfig b/boards/arm/samv7/same70-xplained/configs/netnsh/defconfig
index ab4fc06..f9cae39 100644
--- a/boards/arm/samv7/same70-xplained/configs/netnsh/defconfig
+++ b/boards/arm/samv7/same70-xplained/configs/netnsh/defconfig
@@ -44,7 +44,7 @@ CONFIG_I2CTOOL_MAXBUS=0
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_IOB_NBUFFERS=24
 CONFIG_LIBC_HOSTNAME="SAME70-Xplained"
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
diff --git a/boards/arm/samv7/same70-xplained/configs/nsh/defconfig b/boards/arm/samv7/same70-xplained/configs/nsh/defconfig
index a2596f9..725eed8 100644
--- a/boards/arm/samv7/same70-xplained/configs/nsh/defconfig
+++ b/boards/arm/samv7/same70-xplained/configs/nsh/defconfig
@@ -42,7 +42,7 @@ CONFIG_FS_PROCFS=y
 CONFIG_HOST_WINDOWS=y
 CONFIG_I2CTOOL_MAXBUS=0
 CONFIG_INIT_ENTRYPOINT="nsh_main"
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
diff --git a/boards/arm/samv7/same70-xplained/configs/twm4nx/defconfig b/boards/arm/samv7/same70-xplained/configs/twm4nx/defconfig
index 455fd0c..e2524bc 100644
--- a/boards/arm/samv7/same70-xplained/configs/twm4nx/defconfig
+++ b/boards/arm/samv7/same70-xplained/configs/twm4nx/defconfig
@@ -46,7 +46,7 @@ CONFIG_I2C_DRIVER=y
 CONFIG_INIT_ENTRYPOINT="twm4nx_main"
 CONFIG_IOB_NBUFFERS=24
 CONFIG_LIBC_HOSTNAME="SAME70-Xplained"
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MM_REGIONS=2
 CONFIG_MQ_MAXMSGSIZE=64
diff --git a/boards/arm/samv7/samv71-xult/README.txt b/boards/arm/samv7/samv71-xult/README.txt
index 4608515..1227b3b 100644
--- a/boards/arm/samv7/samv71-xult/README.txt
+++ b/boards/arm/samv7/samv71-xult/README.txt
@@ -79,7 +79,7 @@ to be resolved.  General problems are listed below.  But see the STATUS
 section associated with each configuration for additional issues specific
 to a particular configuration.
 
-  1. HSCMI. CONFIG_MMCSD_MULTIBLOCK_DISABLE=y is set to disable multi-block
+  1. HSCMI. CONFIG_MMCSD_MULTIBLOCK_LIMIT=1 is set to disable multi-block
      transfers only because I have not yet had a chance to verify this.  The
      is very low priority to me but might be important to you if you are need
      very high performance SD card accesses.
@@ -275,7 +275,7 @@ Enabling HSMCI support. The SAMV7-XULT provides a one, full-size SD memory card
   Device Drivers -> MMC/SD Driver Support
     CONFIG_MMCSD=y                        : Enable MMC/SD support
     CONFIG_MMSCD_NSLOTS=1                 : One slot per driver instance
-    CONFIG_MMCSD_MULTIBLOCK_DISABLE=y     : (REVISIT)
+    CONFIG_MMCSD_MULTIBLOCK_LIMIT=1     : (REVISIT)
     CONFIG_MMCSD_HAVE_CARDDETECT=y         : Supports card-detect PIOs
     CONFIG_MMCSD_MMCSUPPORT=n             : Interferes with some SD cards
     CONFIG_MMCSD_SPI=n                    : No SPI-based MMC/SD support
diff --git a/boards/arm/samv7/samv71-xult/configs/knsh/defconfig b/boards/arm/samv7/samv71-xult/configs/knsh/defconfig
index f457d2b..8814ca0 100644
--- a/boards/arm/samv7/samv71-xult/configs/knsh/defconfig
+++ b/boards/arm/samv7/samv71-xult/configs/knsh/defconfig
@@ -44,7 +44,7 @@ CONFIG_HOST_WINDOWS=y
 CONFIG_I2CTOOL_MAXBUS=0
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INTELHEX_BINARY=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
diff --git a/boards/arm/samv7/samv71-xult/configs/mrf24j40-starhub/defconfig b/boards/arm/samv7/samv71-xult/configs/mrf24j40-starhub/defconfig
index 15e7567..6780206 100644
--- a/boards/arm/samv7/samv71-xult/configs/mrf24j40-starhub/defconfig
+++ b/boards/arm/samv7/samv71-xult/configs/mrf24j40-starhub/defconfig
@@ -55,7 +55,7 @@ CONFIG_IOB_NBUFFERS=32
 CONFIG_IOB_NCHAINS=16
 CONFIG_LIBC_HOSTNAME="MRF24J40-Hub"
 CONFIG_MAC802154_NTXDESC=32
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
diff --git a/boards/arm/samv7/samv71-xult/configs/mxtxplnd/defconfig b/boards/arm/samv7/samv71-xult/configs/mxtxplnd/defconfig
index cd22ac4..1c70eff 100644
--- a/boards/arm/samv7/samv71-xult/configs/mxtxplnd/defconfig
+++ b/boards/arm/samv7/samv71-xult/configs/mxtxplnd/defconfig
@@ -49,7 +49,7 @@ CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INPUT=y
 CONFIG_INPUT_MXT=y
 CONFIG_LCD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MQ_MAXMSGSIZE=64
 CONFIG_MTD=y
diff --git a/boards/arm/samv7/samv71-xult/configs/netnsh/defconfig b/boards/arm/samv7/samv71-xult/configs/netnsh/defconfig
index 9436501..7d402a1 100644
--- a/boards/arm/samv7/samv71-xult/configs/netnsh/defconfig
+++ b/boards/arm/samv7/samv71-xult/configs/netnsh/defconfig
@@ -44,7 +44,7 @@ CONFIG_HOST_WINDOWS=y
 CONFIG_I2CTOOL_MAXBUS=0
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_LIBC_HOSTNAME="SAMV71-XULT"
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
diff --git a/boards/arm/samv7/samv71-xult/configs/nsh/defconfig b/boards/arm/samv7/samv71-xult/configs/nsh/defconfig
index 67f4f5c..7c54a6d 100644
--- a/boards/arm/samv7/samv71-xult/configs/nsh/defconfig
+++ b/boards/arm/samv7/samv71-xult/configs/nsh/defconfig
@@ -43,7 +43,7 @@ CONFIG_HOST_WINDOWS=y
 CONFIG_I2CTOOL_MAXBUS=0
 CONFIG_I2C_RESET=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
diff --git a/boards/arm/samv7/samv71-xult/configs/nxwm/defconfig b/boards/arm/samv7/samv71-xult/configs/nxwm/defconfig
index 943746f..7c442f3 100644
--- a/boards/arm/samv7/samv71-xult/configs/nxwm/defconfig
+++ b/boards/arm/samv7/samv71-xult/configs/nxwm/defconfig
@@ -53,7 +53,7 @@ CONFIG_LCD=y
 CONFIG_LCD_NOGETRUN=y
 CONFIG_LIBC_FLOATINGPOINT=y
 CONFIG_LIBM=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MQ_MAXMSGSIZE=64
 CONFIG_MTD=y
diff --git a/boards/arm/samv7/samv71-xult/configs/vnc/defconfig b/boards/arm/samv7/samv71-xult/configs/vnc/defconfig
index 916bf6e..b973bde 100644
--- a/boards/arm/samv7/samv71-xult/configs/vnc/defconfig
+++ b/boards/arm/samv7/samv71-xult/configs/vnc/defconfig
@@ -51,7 +51,7 @@ CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_IOB_NBUFFERS=72
 CONFIG_IOB_THROTTLE=32
 CONFIG_LIBC_HOSTNAME="SAMV71-XULT"
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MQ_MAXMSGSIZE=64
 CONFIG_MTD=y
diff --git a/boards/arm/samv7/samv71-xult/configs/vnxwm/defconfig b/boards/arm/samv7/samv71-xult/configs/vnxwm/defconfig
index e0a10f2..4238b1f 100644
--- a/boards/arm/samv7/samv71-xult/configs/vnxwm/defconfig
+++ b/boards/arm/samv7/samv71-xult/configs/vnxwm/defconfig
@@ -54,7 +54,7 @@ CONFIG_IOB_THROTTLE=32
 CONFIG_LIBC_FLOATINGPOINT=y
 CONFIG_LIBC_HOSTNAME="SAMV71-XULT"
 CONFIG_LIBM=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MQ_MAXMSGSIZE=64
 CONFIG_MTD=y
diff --git a/boards/arm/stm32/olimex-stm32-p407/README.txt b/boards/arm/stm32/olimex-stm32-p407/README.txt
index 6821698..db081f3 100644
--- a/boards/arm/stm32/olimex-stm32-p407/README.txt
+++ b/boards/arm/stm32/olimex-stm32-p407/README.txt
@@ -103,7 +103,7 @@ microSD Card Interface
       # CONFIG_MMCSD_MMCSUPPORT is not set     : Interferes with some SD cards
       # CONFIG_MMCSD_SPI is not set            : No SPI-based MMC/SD support
       CONFIG_MMCSD_SDIO=y                      : SDIO-based MMC/SD support
-      CONFIG_MMCSD_MULTIBLOCK_DISABLE=y        : Disable to keep things simple
+      CONFIG_MMCSD_MULTIBLOCK_LIMIT=1          : Disable to keep things simple
       CONFIG_SDIO_DMA=y                        : Use SDIO DMA
       # CONFIG_SDIO_BLOCKSETUP is not set      : (not implemented)
 
diff --git a/boards/arm/stm32/stm3220g-eval/README.txt b/boards/arm/stm32/stm3220g-eval/README.txt
index 0690169..d0ba1c7 100644
--- a/boards/arm/stm32/stm3220g-eval/README.txt
+++ b/boards/arm/stm32/stm3220g-eval/README.txt
@@ -777,9 +777,9 @@ Where <subdir> is one of the following:
        "If you use a large I/O buffer to access the file system, then the
         MMCSD driver will perform multiple block SD transfers.  With DMA
         ON, this seems to result in CRC errors detected by the hardware
-        during the transfer.  Workaround:  CONFIG_MMCSD_MULTIBLOCK_DISABLE=y"
+        during the transfer.  Workaround:  CONFIG_MMCSD_MULTIBLOCK_LIMIT=1"
 
-       For this reason, CONFIG_MMCSD_MULTIBLOCK_DISABLE=y appears in the defconfig
+       For this reason, CONFIG_MMCSD_MULTIBLOCK_LIMIT=1 appears in the defconfig
        file.
 
     7. Another DMA-related concern.  I see this statement in the reference
diff --git a/boards/arm/stm32/stm3220g-eval/configs/nsh/defconfig b/boards/arm/stm32/stm3220g-eval/configs/nsh/defconfig
index 7c125db..8bb25af 100644
--- a/boards/arm/stm32/stm3220g-eval/configs/nsh/defconfig
+++ b/boards/arm/stm32/stm3220g-eval/configs/nsh/defconfig
@@ -29,7 +29,7 @@ CONFIG_I2C_POLLED=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INTELHEX_BINARY=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MTD=y
 CONFIG_NET=y
 CONFIG_NETDB_DNSCLIENT=y
diff --git a/boards/arm/stm32/stm3220g-eval/configs/nsh2/defconfig b/boards/arm/stm32/stm3220g-eval/configs/nsh2/defconfig
index 34a1bdd..8671802 100644
--- a/boards/arm/stm32/stm3220g-eval/configs/nsh2/defconfig
+++ b/boards/arm/stm32/stm3220g-eval/configs/nsh2/defconfig
@@ -34,7 +34,7 @@ CONFIG_I2C_POLLED=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INTELHEX_BINARY=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD=y
 CONFIG_NET=y
diff --git a/boards/arm/stm32/stm3220g-eval/configs/nxwm/defconfig b/boards/arm/stm32/stm3220g-eval/configs/nxwm/defconfig
index f959eb3..abcc141 100644
--- a/boards/arm/stm32/stm3220g-eval/configs/nxwm/defconfig
+++ b/boards/arm/stm32/stm3220g-eval/configs/nxwm/defconfig
@@ -38,7 +38,7 @@ CONFIG_LCD=y
 CONFIG_LCD_MAXCONTRAST=1
 CONFIG_LCD_NOGETRUN=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MQ_MAXMSGSIZE=64
 CONFIG_NET=y
 CONFIG_NETINIT_NOMAC=y
diff --git a/boards/arm/stm32/stm3240g-eval/README.txt b/boards/arm/stm32/stm3240g-eval/README.txt
index 5a3466a..1cdc606 100644
--- a/boards/arm/stm32/stm3240g-eval/README.txt
+++ b/boards/arm/stm32/stm3240g-eval/README.txt
@@ -1124,9 +1124,9 @@ Where <subdir> is one of the following:
        "If you use a large I/O buffer to access the file system, then the
         MMCSD driver will perform multiple block SD transfers.  With DMA
         ON, this seems to result in CRC errors detected by the hardware
-        during the transfer.  Workaround:  CONFIG_MMCSD_MULTIBLOCK_DISABLE=y"
+        during the transfer.  Workaround:  CONFIG_MMCSD_MULTIBLOCK_LIMIT=1"
 
-       For this reason, CONFIG_MMCSD_MULTIBLOCK_DISABLE=y appears in the defconfig
+       For this reason, CONFIG_MMCSD_MULTIBLOCK_LIMIT=1 appears in the defconfig
        file.
 
     7. Another DMA-related concern.  I see this statement in the reference
diff --git a/boards/arm/stm32/stm3240g-eval/configs/nsh2/defconfig b/boards/arm/stm32/stm3240g-eval/configs/nsh2/defconfig
index e476abc..c1e9278 100644
--- a/boards/arm/stm32/stm3240g-eval/configs/nsh2/defconfig
+++ b/boards/arm/stm32/stm3240g-eval/configs/nsh2/defconfig
@@ -35,7 +35,7 @@ CONFIG_I2C_POLLED=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INTELHEX_BINARY=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MTD=y
 CONFIG_NET=y
diff --git a/boards/arm/stm32/stm32f4discovery/configs/ipv6/defconfig b/boards/arm/stm32/stm32f4discovery/configs/ipv6/defconfig
index 85d2ba8..b9e99f8 100644
--- a/boards/arm/stm32/stm32f4discovery/configs/ipv6/defconfig
+++ b/boards/arm/stm32/stm32f4discovery/configs/ipv6/defconfig
@@ -34,7 +34,7 @@ CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INTELHEX_BINARY=y
 CONFIG_LIBC_HOSTNAME="STM32F4-Discovery"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_NET=y
 CONFIG_NETINIT_IPv6NETMASK_8=0xff80
diff --git a/boards/arm/stm32/stm32f4discovery/configs/netnsh/defconfig b/boards/arm/stm32/stm32f4discovery/configs/netnsh/defconfig
index ae41695..a3e6b97 100644
--- a/boards/arm/stm32/stm32f4discovery/configs/netnsh/defconfig
+++ b/boards/arm/stm32/stm32f4discovery/configs/netnsh/defconfig
@@ -34,7 +34,7 @@ CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INTELHEX_BINARY=y
 CONFIG_LIBC_HOSTNAME="STM32F4-Discovery"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_NET=y
 CONFIG_NETDB_DNSCLIENT=y
diff --git a/boards/arm/stm32f7/stm32f746-ws/configs/nsh/defconfig b/boards/arm/stm32f7/stm32f746-ws/configs/nsh/defconfig
index 37a9373..c4373c0 100644
--- a/boards/arm/stm32f7/stm32f746-ws/configs/nsh/defconfig
+++ b/boards/arm/stm32f7/stm32f746-ws/configs/nsh/defconfig
@@ -51,7 +51,7 @@ CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_INIT_STACKSIZE=2500
 CONFIG_LIBC_STRERROR=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MMCSD_SDIO=y
 CONFIG_MM_REGIONS=3
 CONFIG_NSH_ARCHINIT=y
diff --git a/boards/arm/xmc4/xmc4500-relax/configs/nsh/defconfig b/boards/arm/xmc4/xmc4500-relax/configs/nsh/defconfig
index 1b015fe..f267db8 100644
--- a/boards/arm/xmc4/xmc4500-relax/configs/nsh/defconfig
+++ b/boards/arm/xmc4/xmc4500-relax/configs/nsh/defconfig
@@ -34,7 +34,7 @@ CONFIG_I2CTOOL_MAXBUS=0
 CONFIG_I2C_RESET=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
 CONFIG_MTD_AT25=y
diff --git a/boards/sim/sim/sim/configs/pf_ieee802154/defconfig b/boards/sim/sim/sim/configs/pf_ieee802154/defconfig
index 8306040..06832d2 100644
--- a/boards/sim/sim/sim/configs/pf_ieee802154/defconfig
+++ b/boards/sim/sim/sim/configs/pf_ieee802154/defconfig
@@ -37,7 +37,7 @@ CONFIG_IOB_BUFSIZE=128
 CONFIG_IOB_NBUFFERS=48
 CONFIG_LIBC_HOSTNAME="SAMV71-XULT"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
 CONFIG_MTD_AT25=y
diff --git a/boards/sim/sim/sim/configs/pktradio/defconfig b/boards/sim/sim/sim/configs/pktradio/defconfig
index 18e56a7..543b3fd 100644
--- a/boards/sim/sim/sim/configs/pktradio/defconfig
+++ b/boards/sim/sim/sim/configs/pktradio/defconfig
@@ -52,7 +52,7 @@ CONFIG_IOB_BUFSIZE=128
 CONFIG_IOB_NBUFFERS=48
 CONFIG_LIBC_HOSTNAME="SAMV71-XULT"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
 CONFIG_MTD_AT25=y
diff --git a/boards/sim/sim/sim/configs/sixlowpan/defconfig b/boards/sim/sim/sim/configs/sixlowpan/defconfig
index 3938740..e2bb5f6 100644
--- a/boards/sim/sim/sim/configs/sixlowpan/defconfig
+++ b/boards/sim/sim/sim/configs/sixlowpan/defconfig
@@ -53,7 +53,7 @@ CONFIG_IOB_BUFSIZE=128
 CONFIG_IOB_NBUFFERS=48
 CONFIG_LIBC_HOSTNAME="SAMV71-XULT"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_MTD=y
 CONFIG_MTD_AT24XX=y
 CONFIG_MTD_AT25=y
diff --git a/boards/z80/ez80/makerlisp/configs/nsh_flash/defconfig b/boards/z80/ez80/makerlisp/configs/nsh_flash/defconfig
index f024c09..9135426 100644
--- a/boards/z80/ez80/makerlisp/configs/nsh_flash/defconfig
+++ b/boards/z80/ez80/makerlisp/configs/nsh_flash/defconfig
@@ -29,7 +29,7 @@ CONFIG_FS_PROCFS=y
 CONFIG_HOST_WINDOWS=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_DISABLE_IFUPDOWN=y
 CONFIG_NSH_FILEIOSIZE=512
diff --git a/boards/z80/ez80/makerlisp/configs/nsh_ram/defconfig b/boards/z80/ez80/makerlisp/configs/nsh_ram/defconfig
index db6b5c8..b20b984 100644
--- a/boards/z80/ez80/makerlisp/configs/nsh_ram/defconfig
+++ b/boards/z80/ez80/makerlisp/configs/nsh_ram/defconfig
@@ -30,7 +30,7 @@ CONFIG_FS_PROCFS=y
 CONFIG_HOST_WINDOWS=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_DISABLE_IFUPDOWN=y
 CONFIG_NSH_FILEIOSIZE=512
diff --git a/boards/z80/ez80/makerlisp/configs/sdboot/defconfig b/boards/z80/ez80/makerlisp/configs/sdboot/defconfig
index e876bb5..dbaf06e 100644
--- a/boards/z80/ez80/makerlisp/configs/sdboot/defconfig
+++ b/boards/z80/ez80/makerlisp/configs/sdboot/defconfig
@@ -29,7 +29,7 @@ CONFIG_INIT_ENTRYPOINT="sd_main"
 CONFIG_LIBC_HEX2BIN=y
 CONFIG_MAKERLISP_SDBOOT=y
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
 CONFIG_PREALLOC_TIMERS=4
 CONFIG_PTHREAD_STACK_DEFAULT=1024
diff --git a/boards/z80/ez80/z20x/configs/nsh/defconfig b/boards/z80/ez80/z20x/configs/nsh/defconfig
index c76f8f3..0bac460 100644
--- a/boards/z80/ez80/z20x/configs/nsh/defconfig
+++ b/boards/z80/ez80/z20x/configs/nsh/defconfig
@@ -30,7 +30,7 @@ CONFIG_FS_PROCFS=y
 CONFIG_HOST_WINDOWS=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_DISABLE_IFUPDOWN=y
 CONFIG_NSH_FILEIOSIZE=512
diff --git a/boards/z80/ez80/z20x/configs/sdboot/defconfig b/boards/z80/ez80/z20x/configs/sdboot/defconfig
index 5a3a4e2..e66b27c 100644
--- a/boards/z80/ez80/z20x/configs/sdboot/defconfig
+++ b/boards/z80/ez80/z20x/configs/sdboot/defconfig
@@ -27,7 +27,7 @@ CONFIG_FS_FAT=y
 CONFIG_HOST_WINDOWS=y
 CONFIG_INIT_ENTRYPOINT="sd_main"
 CONFIG_MMCSD=y
-CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MULTIBLOCK_LIMIT=1
 CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
 CONFIG_PREALLOC_TIMERS=4
 CONFIG_PTHREAD_STACK_DEFAULT=1024
diff --git a/drivers/mmcsd/Kconfig b/drivers/mmcsd/Kconfig
index 529d133..912b5d2 100644
--- a/drivers/mmcsd/Kconfig
+++ b/drivers/mmcsd/Kconfig
@@ -41,13 +41,15 @@ config MMCSD_READONLY
 		Provide read-only access.  Default is
 		Read/Write
 
-config MMCSD_MULTIBLOCK_DISABLE
-	bool "Disable MMC/SD multiblock transfer"
-	default n
+config MMCSD_MULTIBLOCK_LIMIT
+	int "Max block count can read/write in single transfer"
+	default 0
 	---help---
-		Use only the single block transfer method.
-		This setting is used to work around buggy SDIO drivers that cannot handle
-		multiple block transfers.
+		The max block can be handled in single transfer.
+		Default to 0, means no limitation. Block count larger than this
+		limit will be splited to multiple multi-block transfer. Set it to 1 will
+		only use single-block transfer mode, and can be used to work around
+		buggy SDIO drivers that cannot handle multiple block transfers.
 
 config MMCSD_MMCSUPPORT
 	bool "MMC cards support"
diff --git a/drivers/mmcsd/mmcsd_sdio.c b/drivers/mmcsd/mmcsd_sdio.c
index 622463c..4943c39 100644
--- a/drivers/mmcsd/mmcsd_sdio.c
+++ b/drivers/mmcsd/mmcsd_sdio.c
@@ -87,6 +87,12 @@
 
 #define IS_EMPTY(priv) (priv->type == MMCSD_CARDTYPE_UNKNOWN)
 
+#if CONFIG_MMCSD_MULTIBLOCK_LIMIT == 0
+# define MMCSD_MULTIBLOCK_LIMIT  SSIZE_MAX
+#else
+# define MMCSD_MULTIBLOCK_LIMIT  CONFIG_MMCSD_MULTIBLOCK_LIMIT
+#endif
+
 /****************************************************************************
  * Private Types
  ****************************************************************************/
@@ -175,20 +181,20 @@ static bool    mmcsd_wrprotected(FAR struct mmcsd_state_s *priv);
 static int     mmcsd_eventwait(FAR struct mmcsd_state_s *priv,
                  sdio_eventset_t failevents);
 static int     mmcsd_transferready(FAR struct mmcsd_state_s *priv);
-#ifndef CONFIG_MMCSD_MULTIBLOCK_DISABLE
+#if MMCSD_MULTIBLOCK_LIMIT != 1
 static int     mmcsd_stoptransmission(FAR struct mmcsd_state_s *priv);
 #endif
 static int     mmcsd_setblocklen(FAR struct mmcsd_state_s *priv,
                  uint32_t blocklen);
 static ssize_t mmcsd_readsingle(FAR struct mmcsd_state_s *priv,
                  FAR uint8_t *buffer, off_t startblock);
-#ifndef CONFIG_MMCSD_MULTIBLOCK_DISABLE
+#if MMCSD_MULTIBLOCK_LIMIT != 1
 static ssize_t mmcsd_readmultiple(FAR struct mmcsd_state_s *priv,
                  FAR uint8_t *buffer, off_t startblock, size_t nblocks);
 #endif
 static ssize_t mmcsd_writesingle(FAR struct mmcsd_state_s *priv,
                  FAR const uint8_t *buffer, off_t startblock);
-#ifndef CONFIG_MMCSD_MULTIBLOCK_DISABLE
+#if MMCSD_MULTIBLOCK_LIMIT != 1
 static ssize_t mmcsd_writemultiple(FAR struct mmcsd_state_s *priv,
                  FAR const uint8_t *buffer, off_t startblock,
                  size_t nblocks);
@@ -1287,7 +1293,7 @@ errorout:
  *
  ****************************************************************************/
 
-#ifndef CONFIG_MMCSD_MULTIBLOCK_DISABLE
+#if MMCSD_MULTIBLOCK_LIMIT != 1
 static int mmcsd_stoptransmission(FAR struct mmcsd_state_s *priv)
 {
   int ret;
@@ -1482,7 +1488,7 @@ static ssize_t mmcsd_readsingle(FAR struct mmcsd_state_s *priv,
  *
  ****************************************************************************/
 
-#ifndef CONFIG_MMCSD_MULTIBLOCK_DISABLE
+#if MMCSD_MULTIBLOCK_LIMIT != 1
 static ssize_t mmcsd_readmultiple(FAR struct mmcsd_state_s *priv,
                                   FAR uint8_t *buffer, off_t startblock,
                                   size_t nblocks)
@@ -1793,7 +1799,7 @@ static ssize_t mmcsd_writesingle(FAR struct mmcsd_state_s *priv,
  *
  ****************************************************************************/
 
-#if !defined(CONFIG_MMCSD_MULTIBLOCK_DISABLE)
+#if MMCSD_MULTIBLOCK_LIMIT != 1
 static ssize_t mmcsd_writemultiple(FAR struct mmcsd_state_s *priv,
                                    FAR const uint8_t *buffer,
                                    off_t startblock, size_t nblocks)
@@ -2084,10 +2090,9 @@ static ssize_t mmcsd_read(FAR struct inode *inode, unsigned char *buffer,
                           blkcnt_t startsector, unsigned int nsectors)
 {
   FAR struct mmcsd_state_s *priv;
-#if defined(CONFIG_MMCSD_MULTIBLOCK_DISABLE)
   size_t sector;
   size_t endsector;
-#endif
+  ssize_t nread;
   ssize_t ret = nsectors;
 
   DEBUGASSERT(inode && inode->i_private);
@@ -2100,19 +2105,36 @@ static ssize_t mmcsd_read(FAR struct inode *inode, unsigned char *buffer,
       ret = mmcsd_takesem(priv);
       if (ret < 0)
         {
-          return (ssize_t)ret;
+          return ret;
         }
 
-#if defined(CONFIG_MMCSD_MULTIBLOCK_DISABLE)
-      /* Read each block using only the single block transfer method */
-
       ret = nsectors;
-      endsector = startsector + nsectors - 1;
-      for (sector = startsector; sector <= endsector; sector++)
+      endsector = startsector + nsectors;
+      for (sector = startsector; sector < endsector; sector += nread)
         {
           /* Read this sector into the user buffer */
 
-          ssize_t nread = mmcsd_readsingle(priv, buffer, sector);
+#if MMCSD_MULTIBLOCK_LIMIT == 1
+          /* Read each block using only the single block transfer method */
+
+          nread = mmcsd_readsingle(priv, buffer, sector);
+#else
+          nread = endsector - sector;
+          if (nread > MMCSD_MULTIBLOCK_LIMIT)
+            {
+              nread = MMCSD_MULTIBLOCK_LIMIT;
+            }
+
+          if (nread == 1)
+            {
+              nread = mmcsd_readsingle(priv, buffer, sector);
+            }
+          else
+            {
+              nread = mmcsd_readmultiple(priv, buffer, sector, nread);
+            }
+
+#endif
           if (nread < 0)
             {
               ret = nread;
@@ -2121,22 +2143,9 @@ static ssize_t mmcsd_read(FAR struct inode *inode, unsigned char *buffer,
 
           /* Increment the buffer pointer by the sector size */
 
-          buffer += priv->blocksize;
-        }
-
-#else
-      /* Use either the single- or multiple-block transfer method */
-
-      if (nsectors == 1)
-        {
-          ret = mmcsd_readsingle(priv, buffer, startsector);
-        }
-      else
-        {
-          ret = mmcsd_readmultiple(priv, buffer, startsector, nsectors);
+          buffer += nread * priv->blocksize;
         }
 
-#endif
       mmcsd_givesem(priv);
     }
 
@@ -2159,60 +2168,62 @@ static ssize_t mmcsd_write(FAR struct inode *inode,
                            blkcnt_t startsector, unsigned int nsectors)
 {
   FAR struct mmcsd_state_s *priv;
-#if defined(CONFIG_MMCSD_MULTIBLOCK_DISABLE)
   size_t sector;
   size_t endsector;
-#endif
+  ssize_t nwrite;
   ssize_t ret = nsectors;
 
   DEBUGASSERT(inode && inode->i_private);
   priv = (FAR struct mmcsd_state_s *)inode->i_private;
-
-  finfo("sector: %lu nsectors: %u sectorsize: %u\n",
-        (unsigned long)startsector, nsectors, priv->blocksize);
+  finfo("startsector: %" PRIuOFF " nsectors: %u sectorsize: %d\n",
+        startsector, nsectors, priv->blocksize);
 
   if (nsectors > 0)
     {
       ret = mmcsd_takesem(priv);
       if (ret < 0)
         {
-          return (ssize_t)ret;
+          return ret;
         }
 
-#if defined(CONFIG_MMCSD_MULTIBLOCK_DISABLE)
-      /* Write each block using only the single block transfer method */
-
       ret = nsectors;
-      endsector = startsector + nsectors - 1;
-      for (sector = startsector; sector <= endsector; sector++)
+      endsector = startsector + nsectors;
+      for (sector = startsector; sector < endsector; sector += nwrite)
         {
-          /* Write this block from the user buffer */
+          /* Write this sector into the user buffer */
 
-          ssize_t nread = mmcsd_writesingle(priv, buffer, sector);
-          if (nread < 0)
+#if MMCSD_MULTIBLOCK_LIMIT == 1
+          /* Write each block using only the single block transfer method */
+
+          nwrite = mmcsd_writesingle(priv, buffer, sector);
+#else
+          nwrite = endsector - sector;
+          if (nwrite > MMCSD_MULTIBLOCK_LIMIT)
             {
-              ret = nread;
-              break;
+              nwrite = MMCSD_MULTIBLOCK_LIMIT;
             }
 
-          /* Increment the buffer pointer by the block size */
+          if (nwrite == 1)
+            {
+              nwrite = mmcsd_writesingle(priv, buffer, sector);
+            }
+          else
+            {
+              nwrite = mmcsd_writemultiple(priv, buffer, sector, nwrite);
+            }
 
-          buffer += priv->blocksize;
-        }
+#endif
+          if (nwrite < 0)
+            {
+              ret = nwrite;
+              break;
+            }
 
-#else
-      /* Use either the single- or multiple-block transfer method */
+          /* Increment the buffer pointer by the sector size */
 
-      if (nsectors == 1)
-        {
-          ret = mmcsd_writesingle(priv, buffer, startsector);
-        }
-      else
-        {
-          ret = mmcsd_writemultiple(priv, buffer, startsector, nsectors);
+          buffer += nwrite * priv->blocksize;
         }
 
-#endif
       mmcsd_givesem(priv);
     }