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