5c8adefc67
If per tick is set to 10ms, it will cause nxsig_usleep(1000) in the sdio driver to sleep for 19ms, which is much longer than the expected 1ms, resulting in very low write performance. Add option to reduce CPU hogging by using sched_yield(), though it may also affect write performance when the CPU is busy. Signed-off-by: Yinzhe Wu <Yinzhe.Wu@sony.com> Reviewed-by: Yuezhang Mo <Yuezhang.Mo@sony.com> Reviewed-by: Jacky Cao <Jacky.Cao@sony.com> Tested-by: Yinzhe Wu <Yinzhe.Wu@sony.com>
196 lines
4.9 KiB
Plaintext
196 lines
4.9 KiB
Plaintext
#
|
|
# For a description of the syntax of this configuration file,
|
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
|
#
|
|
|
|
# MMC/SD-related platform capabilities
|
|
|
|
config ARCH_HAVE_SDIO
|
|
bool
|
|
default n
|
|
|
|
config ARCH_HAVE_SDIOWAIT_WRCOMPLETE
|
|
bool
|
|
default n
|
|
|
|
config ARCH_HAVE_SDIO_PREFLIGHT
|
|
bool
|
|
default n
|
|
|
|
menuconfig MMCSD
|
|
bool "MMC/SD Driver Support"
|
|
default n
|
|
---help---
|
|
Support for MMC/SD block drivers. MMC/SD block drivers based on
|
|
SPI and SDIO/MCI interfaces are supported. See include/nuttx/mmcsd.h
|
|
and include/nuttx/sdio.h for further information.
|
|
|
|
if MMCSD
|
|
|
|
config MMCSD_IOCSUPPORT
|
|
bool "Enable MMC/SD ioctl support"
|
|
default y
|
|
---help---
|
|
Disable it to save some code size if required.
|
|
|
|
config MMCSD_NSLOTS
|
|
int "Number of MMC/SD slots"
|
|
default 1
|
|
---help---
|
|
Number of MMC/SD slots supported by the
|
|
driver. Default is one.
|
|
|
|
config MMCSD_PROCFS
|
|
bool "MMCSD proc fs support"
|
|
default n
|
|
depends on FS_PROCFS_REGISTER
|
|
---help---
|
|
Enable procfs for mmcsd.
|
|
|
|
config MMCSD_READONLY
|
|
bool "Disable MMC/SD write access"
|
|
default n
|
|
---help---
|
|
Provide read-only access. Default is
|
|
Read/Write
|
|
|
|
config MMCSD_MULTIBLOCK_LIMIT
|
|
int "Max block count can read/write in single transfer"
|
|
default 0
|
|
---help---
|
|
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"
|
|
default y
|
|
---help---
|
|
Enable support for MMC cards
|
|
|
|
config MMCSD_HAVE_CARDDETECT
|
|
bool "MMC/SD card detect pin"
|
|
default y
|
|
---help---
|
|
SDIO driver card present detection is supported.
|
|
|
|
config MMCSD_HAVE_WRITEPROTECT
|
|
bool "MMC/SD write protect pin"
|
|
default y
|
|
---help---
|
|
SDIO driver write protection detection is supported.
|
|
|
|
config MMCSD_SPI
|
|
bool "MMC/SD SPI transfer support"
|
|
default y
|
|
depends on SPI
|
|
|
|
if MMCSD_SPI
|
|
|
|
config MMCSD_SPICLOCK
|
|
int "MMC/SD maximum SPI clock"
|
|
default 20000000
|
|
depends on MMCSD_SPI
|
|
---help---
|
|
Maximum SPI clock to drive MMC/SD card.
|
|
Default is 20MHz.
|
|
|
|
config MMCSD_SPIMODE
|
|
int "MMC/SD SPI mode"
|
|
default 0
|
|
---help---
|
|
Should be mode 0. However, sometimes this is useful for experimenting.
|
|
|
|
config MMCSD_IDMODE_CLOCK
|
|
int "MMC/SD ID Mode SPI clock"
|
|
default 400000
|
|
depends on MMCSD_SPI
|
|
---help---
|
|
SPI clock identify MMC/SD card.
|
|
Should be 400KHz or less.
|
|
|
|
config MMCSD_SPIRETRY_COUNT
|
|
int "MMC/SD read/write fail retry max count"
|
|
default 0
|
|
---help---
|
|
Try to recovery MMCSD read/write fail.
|
|
|
|
endif
|
|
|
|
config SDIO_DMA
|
|
bool
|
|
default n
|
|
|
|
config MMCSD_SDIO
|
|
bool "MMC/SD SDIO transfer support"
|
|
default n
|
|
depends on ARCH_HAVE_SDIO
|
|
|
|
if MMCSD_SDIO
|
|
|
|
config SDIO_MUXBUS
|
|
bool "SDIO bus share support"
|
|
default n
|
|
---help---
|
|
Set this SDIO interface if the SDIO interface
|
|
or hardware resources are shared with other drivers.
|
|
|
|
config MMCSD_SDIOWAIT_WRCOMPLETE
|
|
bool "Use D0 Busy to detect Write Complete"
|
|
default n
|
|
depends on ARCH_HAVE_SDIOWAIT_WRCOMPLETE
|
|
---help---
|
|
SDIO driver will use D0 Busy signalling to detect Write Complete.
|
|
This option when selected, will enable the MMCSD driver to use the
|
|
underlying SDIO drivers implementation of the SD specification's
|
|
D0 Busy signalling to detect Write Complete. This will avoid
|
|
potentially very long (600Ms+) busy waiting in the MMCSD driver.
|
|
|
|
To implement D0 Busy signalling, the underlying driver must
|
|
be capable of switching the D0 GPIO to be a rising edge sensitive
|
|
interrupt pin. It must then, condition that pin to detect the rising edge
|
|
on receipt of SDWAIT_WRCOMPLETE in the SDIO_WAITENABLE call and
|
|
return it back to regular SDIO mode, when either the ISR fires or pin is
|
|
found to be high in the SDIO_EVENTWAIT call.
|
|
|
|
config SDIO_WIDTH_D1_ONLY
|
|
bool "SDIO 1-bit transfer"
|
|
default n
|
|
---help---
|
|
Select 1-bit transfer mode. Default:
|
|
4-bit transfer mode.
|
|
|
|
config SDIO_BLOCKSETUP
|
|
bool "SDIO block setup"
|
|
default n
|
|
---help---
|
|
Some hardware needs to be informed of the selected blocksize and the
|
|
number of blocks. Others just work on the byte stream. This option
|
|
enables the block setup method in the SDIO vtable.
|
|
|
|
config MMCSD_BLOCK_WDATADELAY
|
|
int "The wait timeout to write one data block"
|
|
default 260
|
|
---help---
|
|
Some hardware needs to configure this delay to write one data block, because
|
|
the hardware needs more time for wear leveling and bad block management.
|
|
|
|
config MMCSD_CHECK_READY_STATUS_WITHOUT_SLEEP
|
|
bool "No sleep in ready-check function."
|
|
default n
|
|
---help---
|
|
Since nxsig_usleep returns at the tick after the next tick, when
|
|
CONFIG_USEC_PER_TICK is big, the real sleep time is much more than
|
|
desired in mmcsd_transferready(). As a result, write speed is
|
|
affected seriously.
|
|
|
|
When this configuration is enabled, the sleep in mmcsd_transferready
|
|
will be skipped. However, CPU will be hogged by the process during
|
|
this period of writing time.
|
|
|
|
endif
|
|
|
|
endif # MMCSD
|