menu "MMC Host controller Support"

config MMC
	bool "MMC/SD/SDIO card support"
	default ARM || PPC || SANDBOX
	select DM_MMC if DM
	help
	  This selects MultiMediaCard, Secure Digital and Secure
	  Digital I/O support.

	  If you want MMC/SD/SDIO support, you should say Y here and
	  also to your specific host controller driver.

config MMC_WRITE
	bool "support for MMC/SD write operations"
	depends on MMC
	default y
	help
	  Enable write access to MMC and SD Cards

config MMC_PWRSEQ
	bool "HW reset support for eMMC"
	depends on PWRSEQ
	help
	  Ths select Hardware reset support aka pwrseq-emmc for eMMC
	  devices.

config MMC_BROKEN_CD
	bool "Poll for broken card detection case"
	help
	  If card  detection feature is broken, just poll to detect.

config DM_MMC
	bool "Enable MMC controllers using Driver Model"
	depends on DM
	select BLK
	help
	  This enables the MultiMediaCard (MMC) uclass which supports MMC and
	  Secure Digital I/O (SDIO) cards. Both removable (SD, micro-SD, etc.)
	  and non-removable (e.g. eMMC chip) devices are supported. These
	  appear as block devices in U-Boot and can support filesystems such
	  as EXT4 and FAT.

config SPL_DM_MMC
	bool "Enable MMC controllers using Driver Model in SPL"
	depends on SPL_DM && DM_MMC
	default n if ARCH_MVEBU && !MVEBU_SPL_BOOT_DEVICE_MMC
	default y
	select SPL_BLK
	help
	  This enables the MultiMediaCard (MMC) uclass which supports MMC and
	  Secure Digital I/O (SDIO) cards. Both removable (SD, micro-SD, etc.)
	  and non-removable (e.g. eMMC chip) devices are supported. These
	  appear as block devices in U-Boot and can support filesystems such
	  as EXT4 and FAT.

if MMC

config MMC_SDHCI_ADMA_HELPERS
	bool

config MMC_SPI
	bool "Support for SPI-based MMC controller"
	depends on DM_MMC && DM_SPI
	help
	  This selects SPI-based MMC controllers.
	  If you have an MMC controller on a SPI bus, say Y here.

	  If unsure, say N.

config MMC_SPI_CRC_ON
	bool "Support CRC for SPI-based MMC controller"
	depends on MMC_SPI
	default y
	help
	  This enables CRC for SPI-based MMC controllers.

	  If unsure, say N.

config ARM_PL180_MMCI
	bool "ARM AMBA Multimedia Card Interface and compatible support"
	help
	  This selects the ARM(R) AMBA(R) PrimeCell Multimedia Card
	  Interface (PL180, PL181 and compatible) support.
	  If you have an ARM(R) platform with a Multimedia Card slot,
	  say Y or M here.

config MMC_QUIRKS
	bool "Enable quirks"
	default y
	help
	  Some cards and hosts may sometimes behave unexpectedly (quirks).
	  This option enable workarounds to handle those quirks. Some of them
	  are enabled by default, other may require additional flags or are
	  enabled by the host driver.

config SYS_MMC_MAX_BLK_COUNT
	int "Block count limit"
	default 65535
	help
	  The block count limit on MMC based devices. We default to 65535 due
	  to a 16bit register limit on some hardware.

config MMC_HW_PARTITIONING
	bool "Support for HW partitioning command(eMMC)"
	default y
	help
	  This adds a command and an API to do hardware partitioning on eMMC
	  devices.

config SUPPORT_EMMC_RPMB
	bool "Support eMMC replay protected memory block (RPMB)"
	imply CMD_MMC_RPMB
	help
	  Enable support for reading, writing and programming the
	  key for the Replay Protection Memory Block partition in eMMC.

config SUPPORT_EMMC_BOOT
	bool "Support some additional features of the eMMC boot partitions"
	help
	  Enable support for eMMC boot partitions. This also enables
	  extensions within the mmc command.

config MMC_IO_VOLTAGE
	bool "Support IO voltage configuration"
	help
	  IO voltage configuration allows selecting the voltage level of the IO
	  lines (not the level of main supply). This is required for UHS
	  support. For eMMC this not mandatory, but not enabling this option may
	  prevent the driver of using the faster modes.

config SPL_MMC_IO_VOLTAGE
	bool "Support IO voltage configuration in SPL"
	depends on SPL_MMC
	help
	  IO voltage configuration allows selecting the voltage level of the IO
	  lines (not the level of main supply). This is required for UHS
	  support. For eMMC this not mandatory, but not enabling this option may
	  prevent the driver of using the faster modes.

config MMC_UHS_SUPPORT
	bool "enable UHS support"
	depends on MMC_IO_VOLTAGE
	help
	  The Ultra High Speed (UHS) bus is available on some SDHC and SDXC
	  cards. The IO voltage must be switchable from 3.3v to 1.8v. The bus
	  frequency can go up to 208MHz (SDR104)

config SPL_MMC_UHS_SUPPORT
	bool "enable UHS support in SPL"
	depends on SPL_MMC_IO_VOLTAGE
	help
	  The Ultra High Speed (UHS) bus is available on some SDHC and SDXC
	  cards. The IO voltage must be switchable from 3.3v to 1.8v. The bus
	  frequency can go up to 208MHz (SDR104)

config MMC_HS400_ES_SUPPORT
	bool "enable HS400 Enhanced Strobe support"
	help
	  The HS400 Enhanced Strobe mode is support by some eMMC. The bus
	  frequency is up to 200MHz. This mode does not tune the IO.

config SPL_MMC_HS400_ES_SUPPORT
	bool "enable HS400 Enhanced Strobe support in SPL"
	depends on SPL_MMC
	help
	  The HS400 Enhanced Strobe mode is support by some eMMC. The bus
	  frequency is up to 200MHz. This mode does not tune the IO.

config MMC_HS400_SUPPORT
	bool "enable HS400 support"
	select MMC_HS200_SUPPORT
	help
	  The HS400 mode is support by some eMMC. The bus frequency is up to
	  200MHz. This mode requires tuning the IO.

config SPL_MMC_HS400_SUPPORT
	bool "enable HS400 support in SPL"
	depends on SPL_MMC
	select SPL_MMC_HS200_SUPPORT
	help
	  The HS400 mode is support by some eMMC. The bus frequency is up to
	  200MHz. This mode requires tuning the IO.

config MMC_HS200_SUPPORT
	bool "enable HS200 support"
	help
	  The HS200 mode is support by some eMMC. The bus frequency is up to
	  200MHz. This mode requires tuning the IO.

config SPL_MMC_HS200_SUPPORT
	bool "enable HS200 support in SPL"
	depends on SPL_MMC
	help
	  The HS200 mode is support by some eMMC. The bus frequency is up to
	  200MHz. This mode requires tuning the IO.

config MMC_VERBOSE
	bool "Output more information about the MMC"
	default y
	help
	  Enable the output of more information about the card such as the
	  operating mode.

config MMC_TRACE
	bool "MMC debugging"
	help
	  This is an option for use by developer. Enable MMC core debugging.

	  If you need to see the MMC core message, say Y.

config MMC_DAVINCI
	bool "TI DAVINCI Multimedia Card Interface support"
	depends on ARCH_DAVINCI
	default y
	help
	  This selects the TI DAVINCI Multimedia card Interface.
	  If you have an DAVINCI board with a Multimedia Card slot,
	  say Y here.  If unsure, say N.

config MMC_DW
	bool "Synopsys DesignWare Memory Card Interface"
	select BOUNCE_BUFFER
	help
	  This selects support for the Synopsys DesignWare Mobile Storage IP
	  block, this provides host support for SD and MMC interfaces, in both
	  PIO, internal DMA mode and external DMA mode.

config MMC_DW_CORTINA
	bool "Cortina specific extensions for Synopsys DW Memory Card Interface"
	depends on DM_MMC
	depends on MMC_DW
	depends on BLK
	help
	  This selects support for Cortina SoC specific extensions to the
	  Synopsys DesignWare Memory Card Interface driver. Select this option
	  for platforms based on Cortina CAxxxx Soc's.

config MMC_DW_EXYNOS
	bool "Exynos specific extensions for Synopsys DW Memory Card Interface"
	depends on ARCH_EXYNOS
	depends on MMC_DW
	default y
	help
	  This selects support for Samsung Exynos SoC specific extensions to the
	  Synopsys DesignWare Memory Card Interface driver. Select this option
	  for platforms based on Exynos4 and Exynos5 SoC's.

config MMC_DW_K3
	bool "K3 specific extensions for Synopsys DW Memory Card Interface"
	depends on MMC_DW
	help
	  This selects support for Hisilicon K3 SoC specific extensions to the
	  Synopsys DesignWare Memory Card Interface driver. Select this option
	  for platforms based on Hisilicon K3 SoC's.

config MMC_DW_ROCKCHIP
	bool "Rockchip SD/MMC controller support"
	depends on DM_MMC && OF_CONTROL
	depends on MMC_DW
	help
	  This enables support for the Rockchip SD/MMM controller, which is
	  based on Designware IP. The device is compatible with at least
	  SD 3.0, SDIO 3.0 and MMC 4.5 and supports common eMMC chips as well
	  as removeable SD and micro-SD cards.

config MMC_DW_SOCFPGA
	bool "SOCFPGA specific extensions for Synopsys DW Memory Card Interface"
	depends on ARCH_SOCFPGA
	depends on MMC_DW
	default y
	help
	  This selects support for Altera SOCFPGA specific extensions to the
	  Synopsys DesignWare Memory Card Interface driver. Select this option
	  for platforms based on Altera SOCFPGA.

config MMC_DW_SNPS
	bool "Extensions for DW Memory Card Interface used in Synopsys ARC devboards"
	depends on MMC_DW
	depends on DM_MMC
	depends on OF_CONTROL
	depends on CLK
	help
	  This selects support for Synopsys DesignWare Memory Card Interface driver
	  extensions used in various Synopsys ARC devboards.

config NEXELL_DWMMC
	bool "Nexell SD/MMC controller support"
	depends on ARCH_NEXELL
	depends on MMC_DW
	depends on DM_MMC
	depends on PINCTRL_NEXELL
	default y

config MMC_MESON_GX
	bool "Meson GX EMMC controller support"
	depends on DM_MMC && BLK && ARCH_MESON
	help
	 Support for EMMC host controller on Meson GX ARM SoCs platform (S905)

config MMC_MXC
	bool "Freescale i.MX21/27/31 or MPC512x Multimedia Card support"
	help
	  This selects the Freescale i.MX21, i.MX27, i.MX31 or MPC512x
	  Multimedia Card Interface. If you have an i.MX or MPC512x platform
	  with a Multimedia Card slot, say Y here.

	  If unsure, say N.

config MMC_OWL
	bool "Actions OWL Multimedia Card Interface support"
	depends on ARCH_OWL && DM_MMC && BLK
	help
	  This selects the OWL SD/MMC host controller found on board
	  based on Actions S700/S900 SoC.

config MMC_MXS
	bool "Freescale MXS Multimedia Card Interface support"
	depends on MX23 || MX28 || MX6 || MX7
	select BOUNCE_BUFFER
	select APBH_DMA
	select APBH_DMA_BURST if ARCH_MX6 || ARCH_MX7
	select APBH_DMA_BURST8 if ARCH_MX6 || ARCH_MX7
	help
	  This selects the Freescale SSP MMC controller found on MXS based
	  platforms like mx23/28.

	  If unsure, say N.

config MMC_PCI
	bool "Support for MMC controllers on PCI"
	depends on MMC_SDHCI
	help
	  This selects PCI-based MMC controllers.
	  If you have an MMC controller on a PCI bus, say Y here.

config MMC_OCTEONTX
	bool "Marvell Octeon Multimedia Card Interface support"
	depends on (ARCH_OCTEON || ARCH_OCTEONTX || ARCH_OCTEONTX2)
	depends on DM_MMC
	help
	  This selects the Octeon Multimedia card Interface.
	  If you have an OcteonTX/TX2 or MIPS Octeon board with a
	  Multimedia Card slot, say Y here.

	  If unsure, say N.

config MVEBU_MMC
	bool "Kirkwood MMC controller support"
	depends on DM_MMC && BLK && ARCH_KIRKWOOD
	help
	  Support for MMC host controller on Kirkwood SoCs.
	  If you are on a Kirkwood architecture, say Y here.

	  If unsure, say N.

config MMC_OMAP_HS
	bool "TI OMAP High Speed Multimedia Card Interface support"
	select DM_REGULATOR_PBIAS if DM_MMC && DM_REGULATOR
	select DM_REGULATOR_PBIAS if DM_MMC && DM_REGULATOR
	help
	  This selects the TI OMAP High Speed Multimedia card Interface.
	  If you have an omap2plus board with a Multimedia Card slot,
	  say Y here.

	  If unsure, say N.

config MMC_OMAP_HS_ADMA
	bool "ADMA support for OMAP HS MMC"
	depends on MMC_OMAP_HS && !OMAP34XX
	default y if !AM33XX
	help
	  This enables support for the ADMA2 controller (SDA3.00 Part A2 DMA
	  controller). If supported by the hardware, selecting this option will
	  increase performances.

config MMC_OMAP36XX_PINS
	bool "Enable MMC1 on OMAP36xx/37xx"
	depends on OMAP34XX && MMC_OMAP_HS
	help
	  This enables extended-drain in the MMC/SD/SDIO1I/O and
	  GPIO-associated I/O cells (gpio_126, gpio_127, and gpio_129)
	  specific to the OMAP36xx/37xx using MMC1

	  If you have a controller with this interface, say Y here.

	  If unsure, say N.

config HSMMC2_8BIT
	bool "Enable 8-bit interface for eMMC (interface #2)"
	depends on MMC_OMAP_HS && (OMAP44XX || OMAP54XX || DRA7XX || AM33XX || \
		AM43XX || ARCH_KEYSTONE)

config SH_MMCIF
	bool "SuperH/Renesas ARM SoCs on-chip MMCIF host controller support"
	depends on ARCH_RMOBILE || SH
	help
	  Support for the on-chip MMCIF host controller on SuperH/Renesas ARM SoCs platform

config MMC_UNIPHIER
	bool "UniPhier SD/MMC Host Controller support"
	depends on ARCH_UNIPHIER
	depends on BLK && DM_MMC
	depends on OF_CONTROL
	help
	  This selects support for the Matsushita SD/MMC Host Controller on
	  SocioNext UniPhier SoCs.

config RENESAS_SDHI
	bool "Renesas R-Car SD/MMC Host Controller support"
	depends on ARCH_RMOBILE
	depends on BLK && DM_MMC
	depends on OF_CONTROL
	select BOUNCE_BUFFER
	help
	  This selects support for the Matsushita SD/MMC Host Controller on
	  Renesas R-Car SoCs.

config MMC_BCM2835
	bool "BCM2835 family custom SD/MMC Host Controller support"
	depends on ARCH_BCM283X
	depends on BLK && DM_MMC
	depends on OF_CONTROL
	default y
	help
	  This selects support for the custom SD host controller in the BCM2835
	  family of devices.

	  If you have a BCM2835 platform with SD or MMC devices, say Y here.

	  If unsure, say N.

config JZ47XX_MMC
	bool "Ingenic JZ47xx SD/MMC Host Controller support"
	depends on ARCH_JZ47XX
	help
	  This selects support for the SD Card Controller on Ingenic JZ47xx SoCs.

config MMC_SANDBOX
	bool "Sandbox MMC support"
	depends on SANDBOX
	depends on BLK && DM_MMC && OF_CONTROL
	help
	  This select a dummy sandbox MMC driver. At present this does nothing
	  other than allow sandbox to be build with MMC support. This
	  improves build coverage for sandbox and makes it easier to detect
	  MMC build errors with sandbox.

config MMC_SDHCI
	bool "Secure Digital Host Controller Interface support"
	help
	  This selects the generic Secure Digital Host Controller Interface.
	  It is used by manufacturers such as Texas Instruments(R), Ricoh(R)
	  and Toshiba(R). Most controllers found in laptops are of this type.

	  If you have a controller with this interface, say Y here.

	  If unsure, say N.

config MMC_SDHCI_IO_ACCESSORS
	bool
	depends on MMC_SDHCI
	help
	  This is silent Kconfig symbol that is selected by the drivers that
	  need to overwrite SDHCI IO memory accessors.

config MMC_SDHCI_SDMA
	bool "Support SDHCI SDMA"
	depends on MMC_SDHCI
	help
	  This enables support for the SDMA (Single Operation DMA) defined
	  in the SD Host Controller Standard Specification Version 1.00 .

config SPL_MMC_SDHCI_SDMA
	bool "Support SDHCI SDMA in SPL"
	depends on SPL_MMC && MMC_SDHCI
	default y if MMC_SDHCI_SDMA
	help
	  This enables support for the SDMA (Single Operation DMA) defined
	  in the SD Host Controller Standard Specification Version 1.00 in SPL.

config MMC_SDHCI_ADMA
	bool "Support SDHCI ADMA2"
	depends on MMC_SDHCI
	select MMC_SDHCI_ADMA_HELPERS
	help
	  This enables support for the ADMA (Advanced DMA) defined
	  in the SD Host Controller Standard Specification Version 3.00

config SPL_MMC_SDHCI_ADMA
	bool "Support SDHCI ADMA2 in SPL"
	depends on SPL_MMC && MMC_SDHCI
	select MMC_SDHCI_ADMA_HELPERS
	help
	  This enables support for the ADMA (Advanced DMA) defined
	  in the SD Host Controller Standard Specification Version 3.00 in SPL.

config FIXED_SDHCI_ALIGNED_BUFFER
	hex "SDRAM address for fixed buffer"
	depends on SPL && MVEBU_SPL_BOOT_DEVICE_MMC
	default 0x00180000
	help
	  On the Marvell Armada 38x when the SPL runs it located in internal
	  SRAM which is the L2 cache locked to memory. When the MMC buffers
	  are located on the stack (or bss), the SDIO controller (SDHCI) can't
	  write into this L2 cache memory.

	  This specifies the address of a fixed buffer located in SDRAM that
	  will be used for all SDHCI transfers in the SPL.

config MMC_SDHCI_ASPEED
	bool "Aspeed SDHCI controller"
	depends on ARCH_ASPEED
	depends on DM_MMC
	depends on MMC_SDHCI
	select MISC
	help
	  Enables support for the Aspeed SDHCI 2.0 controller present on Aspeed
	  SoCs. This device is compatible with SD 3.0 and/or MMC 4.3
	  specifications. On the AST2600, the device is also compatible with
	  MMC 5.1 and eMMC 3.0.

config MMC_SDHCI_ATMEL
	bool "Atmel SDHCI controller support"
	depends on ARCH_AT91
	depends on DM_MMC && BLK && ARCH_AT91
	depends on MMC_SDHCI
	help
	  This enables support for the Atmel SDHCI controller, which supports
	  the embedded MultiMedia Card (e.MMC) Specification V4.51, the SD
	  Memory Card Specification V3.0, and the SDIO V3.0 specification.
	  It is compliant with the SD Host Controller Standard V3.0
	  specification.

config MMC_SDHCI_BCM2835
	tristate "SDHCI support for the BCM2835 SD/MMC Controller"
	depends on ARCH_BCM283X
	depends on MMC_SDHCI
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the BCM2835 SD/MMC controller.

	  If you have a BCM2835 platform with SD or MMC devices,
	  say Y here.

	  If unsure, say N.

config MMC_SDHCI_BCMSTB
	tristate "SDHCI support for the BCMSTB SD/MMC Controller"
	depends on MMC_SDHCI
	help
	  This selects the Broadcom set-top box SD/MMC controller.

	  If you have a BCMSTB platform with SD or MMC devices,
	  say Y here.

	  If unsure, say N.

config MMC_SDHCI_CADENCE
	bool "SDHCI support for the Cadence SD/SDIO/eMMC controller"
	depends on BLK && DM_MMC
	depends on MMC_SDHCI
	depends on OF_CONTROL
	help
	  This selects the Cadence SD/SDIO/eMMC driver.

	  If you have a controller with this interface, say Y here.

	  If unsure, say N.

config MMC_SDHCI_AM654
	bool "SDHCI Controller on TI's Am654 devices"
	depends on ARCH_K3
	depends on MMC_SDHCI
	depends on DM_MMC && OF_CONTROL && BLK
	depends on REGMAP
	select MMC_SDHCI_IO_ACCESSORS
	help
	  Support for Secure Digital Host Controller Interface (SDHCI)
	  controllers present on TI's AM654 SOCs.

config MMC_SDHCI_IPROC
	bool "SDHCI support for the iProc SD/MMC Controller"
	depends on MMC_SDHCI
	help
	  This selects the iProc SD/MMC controller.

	  If you have a Broadcom IPROC platform with SD or MMC devices,
	  say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_F_SDH30
	bool "SDHCI support for Fujitsu Semiconductor/Socionext F_SDH30"
	depends on BLK && DM_MMC
	depends on MMC_SDHCI
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  Needed by some Fujitsu/Socionext SoC for MMC / SD / SDIO support.
	  If you have a controller with this interface, say Y or M here.
	  If unsure, say N.

config MMC_SDHCI_KONA
	bool "SDHCI support on Broadcom KONA platform"
	depends on MMC_SDHCI
	help
	  This selects the Broadcom Kona Secure Digital Host Controller
	  Interface(SDHCI) support.
	  This is used in Broadcom mobile SoCs.

	  If you have a controller with this interface, say Y here.

config MMC_SDHCI_MSM
	bool "Qualcomm SDHCI controller"
	depends on BLK && DM_MMC
	depends on MMC_SDHCI
	help
	  Enables support for SDHCI 2.0 controller present on some Qualcomm
          Snapdragon devices. This device is compatible with eMMC v4.5 and
          SD 3.0 specifications. Both SD and eMMC devices are supported.
	  Card-detect gpios are not supported.

config MMC_SDHCI_MV
	bool "SDHCI support on Marvell platform"
	depends on ARCH_MVEBU
	depends on MMC_SDHCI
	depends on DM_MMC
	help
	  This selects the Secure Digital Host Controller Interface on
	  Marvell platform.

	  If you have a controller with this interface, say Y here.

	  If unsure, say N.

config MMC_SDHCI_NPCM
	bool "SDHCI support on Nuvoton NPCM device"
	depends on MMC_SDHCI
	depends on DM_MMC
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  on Nuvoton NPCM device.

	  If you have a controller with this interface, say Y here.

	  If unsure, say N.

config MMC_SDHCI_PIC32
	bool "Microchip PIC32 on-chip SDHCI support"
	depends on DM_MMC && MACH_PIC32
	depends on MMC_SDHCI
	help
	  Support for Microchip PIC32 SDHCI controller.

config MMC_SDHCI_ROCKCHIP
	bool "Arasan SDHCI controller for Rockchip support"
	depends on ARCH_ROCKCHIP
	depends on DM_MMC && BLK
	depends on MMC_SDHCI
	help
	  Support for Arasan SDHCI host controller on Rockchip ARM SoCs platform

config MMC_SDHCI_S5P
	bool "SDHCI support on Samsung S5P SoC"
	depends on MMC_SDHCI
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  on Samsung S5P SoCs.

	  If you have a controller with this interface, say Y here.

	  If unsure, say N.

config MMC_SDHCI_STI
	bool "SDHCI support for STMicroelectronics SoC"
	depends on MMC_SDHCI && OF_CONTROL
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  on STMicroelectronics STiH410 SoC.

config MMC_SDHCI_XENON
	bool "SDHCI support for the Xenon SDHCI controller"
	depends on MMC_SDHCI && DM_MMC && OF_CONTROL
	help
	  Support for Xenon SDHCI host controller on Marvell Armada 3700
	  7k/8k ARM SoCs platforms

	  If you have a controller with this interface, say Y here.

	  If unsure, say N.

config MMC_SDHCI_TANGIER
	bool "Tangier SDHCI controller support"
	depends on DM_MMC && BLK
	depends on MMC_SDHCI
	help
	  This selects support for SDHCI controller on Tanginer
	  SoC. Note that this controller does not sit on PCI bus and,
	  hence, cannot be enumerated by standard PCI means.

	  If you're using an Intel Tangier SoC (available on Intel
	  Edison board), say Y here.

	  If unsure, say N.

config MMC_SDHCI_TEGRA
	bool "SDHCI platform support for the Tegra SD/MMC Controller"
	depends on ARCH_TEGRA
	select BOUNCE_BUFFER
	default y
	help
	  This selects the Tegra SD/MMC controller. If you have a Tegra
	  platform with SD or MMC devices, say Y here.

	  If unsure, say N.

config TEGRA124_MMC_DISABLE_EXT_LOOPBACK
	bool "Disable external clock loopback"
	depends on MMC_SDHCI_TEGRA && TEGRA124
	help
	  Disable the external clock loopback and use the internal one on SDMMC3
	  as per the SDMMC_VENDOR_MISC_CNTRL_0 register's SDMMC_SPARE1 bits
	  being set to 0xfffd according to the TRM.

	  TODO(marcel.ziswiler@toradex.com): Move to device tree controlled
	  approach once proper kernel integration made it mainline.

config MMC_SDHCI_ZYNQ
	bool "Arasan SDHCI controller support"
	depends on DM_MMC && OF_CONTROL && BLK
	depends on MMC_SDHCI
	help
	  Support for Arasan SDHCI host controller on Zynq/ZynqMP ARM SoCs platform

config ZYNQ_SDHCI_MAX_FREQ
	int "Set the maximum frequency of the controller"
	depends on MMC_SDHCI_ZYNQ
	help
	  Set the maximum frequency of the controller.

config ZYNQ_SDHCI_MIN_FREQ
	int "Set the minimum frequency of the controller"
	depends on MMC_SDHCI_ZYNQ
	default 0
	help
	  Set the minimum frequency of the controller.

config ZYNQ_HISPD_BROKEN
	bool "High speed broken for Zynq SDHCI controller"
	depends on MMC_SDHCI_ZYNQ
	help
	  Set if high speed mode is broken.

config MMC_SUNXI
	bool "Allwinner sunxi SD/MMC Host Controller support"
	depends on ARCH_SUNXI
	default y
	help
	  This selects support for the SD/MMC Host Controller on
	  Allwinner sunxi SoCs.

config MMC_SUNXI_HAS_NEW_MODE
	bool
	depends on MMC_SUNXI

config MMC_SUNXI_HAS_MODE_SWITCH
	bool
	depends on MMC_SUNXI

config MMC_PITON
	bool "MMC support for OpenPiton SoC"
	depends on DM_MMC && BLK
	help
	  This selects support for the SD host controller on OpenPiton SoC.
	  Note that this SD controller directly exposes the contents of the
	  SD card as memory mapped, so there is no manual configuration
	  required

config GENERIC_ATMEL_MCI
	bool "Atmel Multimedia Card Interface support"
	depends on DM_MMC && BLK && ARCH_AT91
	help
	  This enables support for Atmel High Speed Multimedia Card Interface
	  (HSMCI), which supports the MultiMedia Card (MMC) Specification V4.3,
	  the SD Memory Card Specification V2.0, the SDIO V2.0 specification
	  and CE-ATA V1.1.

config STM32_SDMMC2
	bool "STMicroelectronics STM32H7 SD/MMC Host Controller support"
	depends on DM_MMC && BLK && OF_CONTROL
	help
	  This selects support for the SD/MMC controller on STM32H7 SoCs.
	  If you have a board based on such a SoC and with a SD/MMC slot,
	  say Y or M here.

config FTSDC010
	bool "Ftsdc010 SD/MMC controller Support"
	help
	  This SD/MMC controller is present in Andestech SoCs which is based on Faraday IP.

config FTSDC010_SDIO
	bool "Support ftsdc010 sdio"
	depends on FTSDC010
	help
		This can enable ftsdc010 sdio function.

config MMC_MTK
	bool "MediaTek SD/MMC Card Interface support"
	depends on ARCH_MEDIATEK || ARCH_MTMIPS
	depends on BLK && DM_MMC
	depends on OF_CONTROL
	help
	  This selects the MediaTek(R) Secure digital and Multimedia card Interface.
	  If you have a machine with a integrated SD/MMC card reader, say Y or M here.
	  This is needed if support for any SD/SDIO/MMC devices is required.
	  If unsure, say N.

endif

config FSL_SDHC_V2_3
	bool

config FSL_ESDHC
	bool "Freescale/NXP eSDHC controller support"
	select FSL_SDHC_V2_3 if ARCH_P1010 || ARCH_BSC9131 || ARCH_BSC9132 \
		|| ARCH_C29X
	help
	  This selects support for the eSDHC (Enhanced Secure Digital Host
	  Controller) found on numerous Freescale/NXP SoCs.

config FSL_ESDHC_SUPPORT_ADMA2
	bool "enable ADMA2 support"
	depends on FSL_ESDHC
	select MMC_SDHCI_ADMA_HELPERS
	help
	  This enables support for the ADMA2 transfer mode. If supported by the
	  eSDHC it will allow 64bit DMA addresses.

config FSL_ESDHC_33V_IO_RELIABILITY_WORKAROUND
	bool "enable eSDHC workaround for 3.3v IO reliability issue"
	depends on FSL_ESDHC && DM_MMC
	help
	  When eSDHC operates at 3.3v, damage can accumulate in an internal
	  level shifter at a higher than expected rate. The faster the interface
	  runs, the more damage accumulates. This issue now is found on LX2160A
	  eSDHC1 for only SD card. The hardware workaround is recommended to use
	  an on-board level shifter that is 1.8v on SoC side and 3.3v on SD card
	  side. For boards without hardware workaround, this option could be
	  enabled, ensuring 1.8v IO voltage and disabling eSDHC if no card.
	  This option assumes no hotplug, and u-boot has to make all the way to
	  to linux to use 1.8v UHS-I speed mode if has card.

config FSL_ESDHC_VS33_NOT_SUPPORT
	bool "3.3V power supply not supported"
	depends on FSL_ESDHC
	help
	  For eSDHC, power supply is through peripheral circuit. 3.3V support is
	  common. Select this if 3.3V power supply not supported.

config SYS_FSL_ESDHC_DEFAULT_BUS_WIDTH
	int
	depends on FSL_ESDHC
	default 1

config ESDHC_DETECT_QUIRK
	bool "QIXIS-based eSDHC quirk detection"
	depends on FSL_ESDHC && FSL_QIXIS

config FSL_ESDHC_IMX
	bool "Freescale/NXP i.MX eSDHC controller support"
	help
	  This selects support for the i.MX eSDHC (Enhanced Secure Digital Host
	  Controller) found on numerous Freescale/NXP SoCs.

config SYS_FSL_ESDHC_HAS_DDR_MODE
	bool "i.MX eSDHC controller supports DDR mode"
	depends on FSL_ESDHC_IMX

config FSL_USDHC
	bool "Freescale/NXP i.MX uSDHC controller support"
	depends on MX6 || MX7 ||ARCH_MX7ULP || IMX8 || IMX8M || IMX8ULP || IMX9 || IMXRT
	select FSL_ESDHC_IMX
	help
	  This enables the Ultra Secured Digital Host Controller enhancements

config FSL_ESDHC_PIN_MUX
	bool "Perform esdhc device-tree fixup"
	depends on (FSL_ESDHC || FSL_ESDHC_IMX) && OF_LIBFDT

endmenu

config SYS_FSL_ERRATUM_ESDHC111
	bool

config SYS_FSL_ERRATUM_ESDHC13
	bool

config SYS_FSL_ERRATUM_ESDHC135
	bool

config SYS_FSL_ERRATUM_ESDHC_A001
	bool

config SYS_FSL_ERRATUM_A011334
	bool

config SYS_FSL_ESDHC_UNRELIABLE_PULSE_DETECTION_WORKAROUND
	bool
