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
	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
