Marvell Xenon SDHCI Controller device tree bindings
This file documents differences between the core mmc properties
described by mmc.txt and the properties used by the Xenon implementation.

Multiple SDHCs might be put into a single Xenon IP, to save size and cost.
Each SDHC is independent and owns independent resources, such as register sets,
clock and PHY.
Each SDHC should have an independent device tree node.

Required Properties:
- compatible: should be one of the following
  - "marvell,armada-3700-sdhci": For controllers on Armada-3700 SoC.
  Must provide a second register area and marvell,pad-type.
  - "marvell,armada-ap806-sdhci": For controllers on Armada AP806.
  - "marvell,armada-ap807-sdhci": For controllers on Armada AP807.
  - "marvell,armada-cp110-sdhci": For controllers on Armada CP110.

- clocks:
  Array of clocks required for SDHC.
  Require at least input clock for Xenon IP core. For Armada AP806 and
  CP110, the AXI clock is also mandatory.

- clock-names:
  Array of names corresponding to clocks property.
  The input clock for Xenon IP core should be named as "core".
  The input clock for the AXI bus must be named as "axi".

- reg:
  * For "marvell,armada-3700-sdhci", two register areas.
    The first one for Xenon IP register. The second one for the Armada 3700 SoC
    PHY PAD Voltage Control register.
    Please follow the examples with compatible "marvell,armada-3700-sdhci"
    in below.
    Please also check property marvell,pad-type in below.

  * For other compatible strings, one register area for Xenon IP.

Optional Properties:
- marvell,xenon-sdhc-id:
  Indicate the corresponding bit index of current SDHC in
  SDHC System Operation Control Register Bit[7:0].
  Set/clear the corresponding bit to enable/disable current SDHC.
  If Xenon IP contains only one SDHC, this property is optional.

- marvell,xenon-phy-type:
  Xenon support multiple types of PHYs.
  To select eMMC 5.1 PHY, set:
  marvell,xenon-phy-type = "emmc 5.1 phy"
  eMMC 5.1 PHY is the default choice if this property is not provided.
  To select eMMC 5.0 PHY, set:
  marvell,xenon-phy-type = "emmc 5.0 phy"

  All those types of PHYs can support eMMC, SD and SDIO.
  Please note that this property only presents the type of PHY.
  It doesn't stand for the entire SDHC type or property.
  For example, "emmc 5.1 phy" doesn't mean that this Xenon SDHC only
  supports eMMC 5.1.

- marvell,xenon-phy-znr:
  Set PHY ZNR value.
  Only available for eMMC PHY.
  Valid range = [0:0x1F].
  ZNR is set as 0xF by default if this property is not provided.

- marvell,xenon-phy-zpr:
  Set PHY ZPR value.
  Only available for eMMC PHY.
  Valid range = [0:0x1F].
  ZPR is set as 0xF by default if this property is not provided.

- marvell,xenon-phy-nr-success-tun:
  Set the number of required consecutive successful sampling points
  used to identify a valid sampling window, in tuning process.
  Valid range = [1:7].
  Set as 0x4 by default if this property is not provided.

- marvell,xenon-phy-tun-step-divider:
  Set the divider for calculating TUN_STEP.
  Set as 64 by default if this property is not provided.

- marvell,xenon-phy-slow-mode:
  If this property is selected, transfers will bypass PHY.
  Only available when bus frequency lower than 55MHz in SDR mode.
  Disabled by default. Please only try this property if timing issues
  always occur with PHY enabled in eMMC HS SDR, SD SDR12, SD SDR25,
  SD Default Speed and HS mode and eMMC legacy speed mode.

- marvell,xenon-tun-count:
  Xenon SDHC SoC usually doesn't provide re-tuning counter in
  Capabilities Register 3 Bit[11:8].
  This property provides the re-tuning counter.
  If this property is not set, default re-tuning counter will
  be set as 0x9 in driver.

- marvell,pad-type:
  Type of Armada 3700 SoC PHY PAD Voltage Controller register.
  Only valid when "marvell,armada-3700-sdhci" is selected.
  Two types: "sd" and "fixed-1-8v".
  If "sd" is selected, SoC PHY PAD is set as 3.3V at the beginning and is
  switched to 1.8V when later in higher speed mode.
  If "fixed-1-8v" is selected, SoC PHY PAD is fixed 1.8V, such as for eMMC.
  Please follow the examples with compatible "marvell,armada-3700-sdhci"
  in below.

Example:
- For eMMC:

	sdhci@aa0000 {
		compatible = "marvell,armada-ap806-sdhci";
		reg = <0xaa0000 0x1000>;
		interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>
		clocks = <&emmc_clk>,<&axi_clk>;
		clock-names = "core", "axi";
		bus-width = <4>;
		marvell,xenon-phy-slow-mode;
		marvell,xenon-tun-count = <11>;
		non-removable;
		no-sd;
		no-sdio;

		/* Vmmc and Vqmmc are both fixed */
	};

- For SD/SDIO:

	sdhci@ab0000 {
		compatible = "marvell,armada-cp110-sdhci";
		reg = <0xab0000 0x1000>;
		interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>
		vqmmc-supply = <&sd_vqmmc_regulator>;
		vmmc-supply = <&sd_vmmc_regulator>;
		clocks = <&sdclk>, <&axi_clk>;
		clock-names = "core", "axi";
		bus-width = <4>;
		marvell,xenon-tun-count = <9>;
	};

- For eMMC with compatible "marvell,armada-3700-sdhci":

	sdhci@aa0000 {
		compatible = "marvell,armada-3700-sdhci";
		reg = <0xaa0000 0x1000>,
		      <phy_addr 0x4>;
		interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>
		clocks = <&emmcclk>;
		clock-names = "core";
		bus-width = <8>;
		mmc-ddr-1_8v;
		mmc-hs400-1_8v;
		non-removable;
		no-sd;
		no-sdio;

		/* Vmmc and Vqmmc are both fixed */

		marvell,pad-type = "fixed-1-8v";
	};

- For SD/SDIO with compatible "marvell,armada-3700-sdhci":

	sdhci@ab0000 {
		compatible = "marvell,armada-3700-sdhci";
		reg = <0xab0000 0x1000>,
		      <phy_addr 0x4>;
		interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>
		vqmmc-supply = <&sd_regulator>;
		/* Vmmc is fixed */
		clocks = <&sdclk>;
		clock-names = "core";
		bus-width = <4>;

		marvell,pad-type = "sd";
	};
