menu "MMC Host controller Support"

config MMC
	bool "MMC/SD/SDIO card support"
	default ARM || PPC || SANDBOX
	select HAVE_BLOCK_DEVICE
	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 y
	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 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 SH_SDHI
	bool "SuperH/Renesas ARM SoCs on-chip SDHI host controller support"
	depends on ARCH_RMOBILE
	help
	  Support for the on-chip SDHI host controller on SuperH/Renesas ARM SoCs platform

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 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 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 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
	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_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_SPEAR
	bool "SDHCI support on ST SPEAr platform"
	depends on MMC_SDHCI
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  often referrered to as the HSMMC block in some of the ST SPEAR range
	  of SoC

	  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_ESDHC
	bool "Freescale/NXP eSDHC controller support"
	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 FSL_USDHC
	bool "Freescale/NXP i.MX uSDHC controller support"
	depends on MX6 || MX7 ||ARCH_MX7ULP || IMX8 || IMX8M || IMX8ULP || IMXRT
	select FSL_ESDHC_IMX
	help
	  This enables the Ultra Secured Digital Host Controller enhancements

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
