menu "MMC Host controller Support"

config MMC
	bool "MMC/SD/SDIO card support"
	default ARM || PPC || SANDBOX
	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 GENERIC_MMC
	bool "Generic MMC driver framework"
	default MMC

config DM_MMC
	bool "Enable MMC controllers using Driver Model"
	depends on DM
	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 DM_MMC_OPS
	bool "Support MMC controller operations using Driver Model"
	depends on DM_MMC
	default y if DM_MMC
	help
	  Driver model provides a means of supporting device operations. This
	  option moves MMC operations under the control of driver model. The
	  option will be removed as soon as all DM_MMC drivers use it, as it
	  will the only supported behaviour.

if MMC

config SPL_MMC_TINY
	bool "Tiny MMC framework in SPL"
	help
	  Enable MMC framework tinification support. This option is useful if
	  if your SPL is extremely size constrained. Heed the warning, enable
	  this option if and only if you know exactly what you are doing, if
	  you are reading this help text, you most likely have no idea :-)

	  The MMC framework is reduced to bare minimum to be useful. No malloc
	  support is needed for the MMC framework operation with this option
	  enabled. The framework supports exactly one MMC device and exactly
	  one MMC driver. The MMC driver can be adjusted to avoid any malloc
	  operations too, which can remove the need for malloc support in SPL
	  and thus further reduce footprint.

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"
	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_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_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_MXS
	bool "Freescale MXS Multimedia Card Interface support"
	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"
	help
	  This selects PCI-based MMC controllers.
	  If you have an MMC controller on a PCI bus, say Y here.

	  If unsure, say N.

config MMC_OMAP_HS
	bool "TI OMAP High Speed Multimedia Card Interface support"
	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_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 RMOBILE
	help
	  Support for the on-chip SDHI 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_OPS
	depends on OF_CONTROL
	help
	  This selects support for the SD/MMC Host Controller on UniPhier SoCs.

config MMC_SANDBOX
	bool "Sandbox MMC support"
	depends on SANDBOX
	depends on BLK && DM_MMC_OPS && 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_ATMEL
	bool "Atmel SDHCI controller support"
	depends on ARCH_AT91
	depends on DM_MMC && BLK && DM_MMC_OPS && 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_CADENCE
	bool "SDHCI support for the Cadence SD/SDIO/eMMC controller"
	depends on BLK && DM_MMC_OPS
	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_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_OPS
	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 && DM_MMC_OPS
	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 TEGRA
	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 MMC_SDHCI_ZYNQ
	bool "Arasan SDHCI controller support"
	depends on ARCH_ZYNQ || ARCH_ZYNQMP
	depends on DM_MMC && OF_CONTROL && BLK && DM_MMC_OPS
	depends on MMC_SDHCI
	help
	  Support for Arasan SDHCI host controller on Zynq/ZynqMP ARM SoCs platform

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

endif

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
