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