162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/mmc/marvell,xenon-sdhci.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: Marvell Xenon SDHCI Controller 862306a36Sopenharmony_ci 962306a36Sopenharmony_cidescription: | 1062306a36Sopenharmony_ci This file documents differences between the core MMC properties described by 1162306a36Sopenharmony_ci mmc-controller.yaml and the properties used by the Xenon implementation. 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci Multiple SDHCs might be put into a single Xenon IP, to save size and cost. 1462306a36Sopenharmony_ci Each SDHC is independent and owns independent resources, such as register 1562306a36Sopenharmony_ci sets, clock and PHY. 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci Each SDHC should have an independent device tree node. 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cimaintainers: 2062306a36Sopenharmony_ci - Ulf Hansson <ulf.hansson@linaro.org> 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciproperties: 2362306a36Sopenharmony_ci compatible: 2462306a36Sopenharmony_ci oneOf: 2562306a36Sopenharmony_ci - enum: 2662306a36Sopenharmony_ci - marvell,armada-cp110-sdhci 2762306a36Sopenharmony_ci - marvell,armada-ap806-sdhci 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci - items: 3062306a36Sopenharmony_ci - const: marvell,armada-ap807-sdhci 3162306a36Sopenharmony_ci - const: marvell,armada-ap806-sdhci 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci - items: 3462306a36Sopenharmony_ci - const: marvell,armada-3700-sdhci 3562306a36Sopenharmony_ci - const: marvell,sdhci-xenon 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci reg: 3862306a36Sopenharmony_ci minItems: 1 3962306a36Sopenharmony_ci maxItems: 2 4062306a36Sopenharmony_ci description: | 4162306a36Sopenharmony_ci For "marvell,armada-3700-sdhci", two register areas. The first one 4262306a36Sopenharmony_ci for Xenon IP register. The second one for the Armada 3700 SoC PHY PAD 4362306a36Sopenharmony_ci Voltage Control register. Please follow the examples with compatible 4462306a36Sopenharmony_ci "marvell,armada-3700-sdhci" in below. 4562306a36Sopenharmony_ci Please also check property marvell,pad-type in below. 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci For other compatible strings, one register area for Xenon IP. 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci clocks: 5062306a36Sopenharmony_ci minItems: 1 5162306a36Sopenharmony_ci maxItems: 2 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci clock-names: 5462306a36Sopenharmony_ci minItems: 1 5562306a36Sopenharmony_ci items: 5662306a36Sopenharmony_ci - const: core 5762306a36Sopenharmony_ci - const: axi 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci interrupts: 6062306a36Sopenharmony_ci maxItems: 1 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci marvell,xenon-sdhc-id: 6362306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 6462306a36Sopenharmony_ci minimum: 0 6562306a36Sopenharmony_ci maximum: 7 6662306a36Sopenharmony_ci description: | 6762306a36Sopenharmony_ci Indicate the corresponding bit index of current SDHC in SDHC System 6862306a36Sopenharmony_ci Operation Control Register Bit[7:0]. Set/clear the corresponding bit to 6962306a36Sopenharmony_ci enable/disable current SDHC. 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci marvell,xenon-phy-type: 7262306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/string 7362306a36Sopenharmony_ci enum: 7462306a36Sopenharmony_ci - emmc 5.1 phy 7562306a36Sopenharmony_ci - emmc 5.0 phy 7662306a36Sopenharmony_ci description: | 7762306a36Sopenharmony_ci Xenon support multiple types of PHYs. To select eMMC 5.1 PHY, set: 7862306a36Sopenharmony_ci marvell,xenon-phy-type = "emmc 5.1 phy" eMMC 5.1 PHY is the default 7962306a36Sopenharmony_ci choice if this property is not provided. To select eMMC 5.0 PHY, set: 8062306a36Sopenharmony_ci marvell,xenon-phy-type = "emmc 5.0 phy" 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci All those types of PHYs can support eMMC, SD and SDIO. Please note that 8362306a36Sopenharmony_ci this property only presents the type of PHY. It doesn't stand for the 8462306a36Sopenharmony_ci entire SDHC type or property. For example, "emmc 5.1 phy" doesn't mean 8562306a36Sopenharmony_ci that this Xenon SDHC only supports eMMC 5.1. 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci marvell,xenon-phy-znr: 8862306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 8962306a36Sopenharmony_ci minimum: 0 9062306a36Sopenharmony_ci maximum: 0x1f 9162306a36Sopenharmony_ci default: 0xf 9262306a36Sopenharmony_ci description: | 9362306a36Sopenharmony_ci Set PHY ZNR value. 9462306a36Sopenharmony_ci Only available for eMMC PHY. 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci marvell,xenon-phy-zpr: 9762306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 9862306a36Sopenharmony_ci minimum: 0 9962306a36Sopenharmony_ci maximum: 0x1f 10062306a36Sopenharmony_ci default: 0xf 10162306a36Sopenharmony_ci description: | 10262306a36Sopenharmony_ci Set PHY ZPR value. 10362306a36Sopenharmony_ci Only available for eMMC PHY. 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci marvell,xenon-phy-nr-success-tun: 10662306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 10762306a36Sopenharmony_ci minimum: 1 10862306a36Sopenharmony_ci maximum: 7 10962306a36Sopenharmony_ci default: 0x4 11062306a36Sopenharmony_ci description: | 11162306a36Sopenharmony_ci Set the number of required consecutive successful sampling points 11262306a36Sopenharmony_ci used to identify a valid sampling window, in tuning process. 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci marvell,xenon-phy-tun-step-divider: 11562306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 11662306a36Sopenharmony_ci default: 64 11762306a36Sopenharmony_ci description: | 11862306a36Sopenharmony_ci Set the divider for calculating TUN_STEP. 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci marvell,xenon-phy-slow-mode: 12162306a36Sopenharmony_ci type: boolean 12262306a36Sopenharmony_ci description: | 12362306a36Sopenharmony_ci If this property is selected, transfers will bypass PHY. 12462306a36Sopenharmony_ci Only available when bus frequency lower than 55MHz in SDR mode. 12562306a36Sopenharmony_ci Disabled by default. Please only try this property if timing issues 12662306a36Sopenharmony_ci always occur with PHY enabled in eMMC HS SDR, SD SDR12, SD SDR25, 12762306a36Sopenharmony_ci SD Default Speed and HS mode and eMMC legacy speed mode. 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci marvell,xenon-tun-count: 13062306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 13162306a36Sopenharmony_ci default: 0x9 13262306a36Sopenharmony_ci description: | 13362306a36Sopenharmony_ci Xenon SDHC SoC usually doesn't provide re-tuning counter in 13462306a36Sopenharmony_ci Capabilities Register 3 Bit[11:8]. 13562306a36Sopenharmony_ci This property provides the re-tuning counter. 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ciallOf: 13862306a36Sopenharmony_ci - $ref: mmc-controller.yaml# 13962306a36Sopenharmony_ci - if: 14062306a36Sopenharmony_ci properties: 14162306a36Sopenharmony_ci compatible: 14262306a36Sopenharmony_ci contains: 14362306a36Sopenharmony_ci const: marvell,armada-3700-sdhci 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci then: 14662306a36Sopenharmony_ci properties: 14762306a36Sopenharmony_ci reg: 14862306a36Sopenharmony_ci items: 14962306a36Sopenharmony_ci - description: Xenon IP registers 15062306a36Sopenharmony_ci - description: Armada 3700 SoC PHY PAD Voltage Control register 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci marvell,pad-type: 15362306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/string 15462306a36Sopenharmony_ci enum: 15562306a36Sopenharmony_ci - sd 15662306a36Sopenharmony_ci - fixed-1-8v 15762306a36Sopenharmony_ci description: | 15862306a36Sopenharmony_ci Type of Armada 3700 SoC PHY PAD Voltage Controller register. 15962306a36Sopenharmony_ci If "sd" is selected, SoC PHY PAD is set as 3.3V at the beginning 16062306a36Sopenharmony_ci and is switched to 1.8V when later in higher speed mode. 16162306a36Sopenharmony_ci If "fixed-1-8v" is selected, SoC PHY PAD is fixed 1.8V, such as for 16262306a36Sopenharmony_ci eMMC. 16362306a36Sopenharmony_ci Please follow the examples with compatible 16462306a36Sopenharmony_ci "marvell,armada-3700-sdhci" in below. 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci required: 16762306a36Sopenharmony_ci - marvell,pad-type 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci - if: 17062306a36Sopenharmony_ci properties: 17162306a36Sopenharmony_ci compatible: 17262306a36Sopenharmony_ci contains: 17362306a36Sopenharmony_ci enum: 17462306a36Sopenharmony_ci - marvell,armada-cp110-sdhci 17562306a36Sopenharmony_ci - marvell,armada-ap807-sdhci 17662306a36Sopenharmony_ci - marvell,armada-ap806-sdhci 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci then: 17962306a36Sopenharmony_ci properties: 18062306a36Sopenharmony_ci clocks: 18162306a36Sopenharmony_ci minItems: 2 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci clock-names: 18462306a36Sopenharmony_ci items: 18562306a36Sopenharmony_ci - const: core 18662306a36Sopenharmony_ci - const: axi 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_cirequired: 19062306a36Sopenharmony_ci - compatible 19162306a36Sopenharmony_ci - reg 19262306a36Sopenharmony_ci - clocks 19362306a36Sopenharmony_ci - clock-names 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ciunevaluatedProperties: false 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ciexamples: 19862306a36Sopenharmony_ci - | 19962306a36Sopenharmony_ci // For eMMC 20062306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 20162306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/irq.h> 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci mmc@aa0000 { 20462306a36Sopenharmony_ci compatible = "marvell,armada-ap807-sdhci", "marvell,armada-ap806-sdhci"; 20562306a36Sopenharmony_ci reg = <0xaa0000 0x1000>; 20662306a36Sopenharmony_ci interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>; 20762306a36Sopenharmony_ci clocks = <&emmc_clk 0>, <&axi_clk 0>; 20862306a36Sopenharmony_ci clock-names = "core", "axi"; 20962306a36Sopenharmony_ci bus-width = <4>; 21062306a36Sopenharmony_ci marvell,xenon-phy-slow-mode; 21162306a36Sopenharmony_ci marvell,xenon-tun-count = <11>; 21262306a36Sopenharmony_ci non-removable; 21362306a36Sopenharmony_ci no-sd; 21462306a36Sopenharmony_ci no-sdio; 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci /* Vmmc and Vqmmc are both fixed */ 21762306a36Sopenharmony_ci }; 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci - | 22062306a36Sopenharmony_ci // For SD/SDIO 22162306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 22262306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/irq.h> 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci mmc@ab0000 { 22562306a36Sopenharmony_ci compatible = "marvell,armada-cp110-sdhci"; 22662306a36Sopenharmony_ci reg = <0xab0000 0x1000>; 22762306a36Sopenharmony_ci interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>; 22862306a36Sopenharmony_ci vqmmc-supply = <&sd_vqmmc_regulator>; 22962306a36Sopenharmony_ci vmmc-supply = <&sd_vmmc_regulator>; 23062306a36Sopenharmony_ci clocks = <&sdclk 0>, <&axi_clk 0>; 23162306a36Sopenharmony_ci clock-names = "core", "axi"; 23262306a36Sopenharmony_ci bus-width = <4>; 23362306a36Sopenharmony_ci marvell,xenon-tun-count = <9>; 23462306a36Sopenharmony_ci }; 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ci - | 23762306a36Sopenharmony_ci // For eMMC with compatible "marvell,armada-3700-sdhci": 23862306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 23962306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/irq.h> 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci mmc@aa0000 { 24262306a36Sopenharmony_ci compatible = "marvell,armada-3700-sdhci", "marvell,sdhci-xenon"; 24362306a36Sopenharmony_ci reg = <0xaa0000 0x1000>, 24462306a36Sopenharmony_ci <0x17808 0x4>; 24562306a36Sopenharmony_ci interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>; 24662306a36Sopenharmony_ci clocks = <&emmcclk 0>; 24762306a36Sopenharmony_ci clock-names = "core"; 24862306a36Sopenharmony_ci bus-width = <8>; 24962306a36Sopenharmony_ci mmc-ddr-1_8v; 25062306a36Sopenharmony_ci mmc-hs400-1_8v; 25162306a36Sopenharmony_ci non-removable; 25262306a36Sopenharmony_ci no-sd; 25362306a36Sopenharmony_ci no-sdio; 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci /* Vmmc and Vqmmc are both fixed */ 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci marvell,pad-type = "fixed-1-8v"; 25862306a36Sopenharmony_ci }; 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_ci - | 26162306a36Sopenharmony_ci // For SD/SDIO with compatible "marvell,armada-3700-sdhci": 26262306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 26362306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/irq.h> 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci mmc@ab0000 { 26662306a36Sopenharmony_ci compatible = "marvell,armada-3700-sdhci", "marvell,sdhci-xenon"; 26762306a36Sopenharmony_ci reg = <0xab0000 0x1000>, 26862306a36Sopenharmony_ci <0x17808 0x4>; 26962306a36Sopenharmony_ci interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>; 27062306a36Sopenharmony_ci vqmmc-supply = <&sd_regulator>; 27162306a36Sopenharmony_ci /* Vmmc is fixed */ 27262306a36Sopenharmony_ci clocks = <&sdclk 0>; 27362306a36Sopenharmony_ci clock-names = "core"; 27462306a36Sopenharmony_ci bus-width = <4>; 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci marvell,pad-type = "sd"; 27762306a36Sopenharmony_ci }; 278