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/arasan,sdhci.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Arasan SDHCI Controller
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Adrian Hunter <adrian.hunter@intel.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciallOf:
1362306a36Sopenharmony_ci  - $ref: mmc-controller.yaml#
1462306a36Sopenharmony_ci  - if:
1562306a36Sopenharmony_ci      properties:
1662306a36Sopenharmony_ci        compatible:
1762306a36Sopenharmony_ci          contains:
1862306a36Sopenharmony_ci            const: arasan,sdhci-5.1
1962306a36Sopenharmony_ci    then:
2062306a36Sopenharmony_ci      required:
2162306a36Sopenharmony_ci        - phys
2262306a36Sopenharmony_ci        - phy-names
2362306a36Sopenharmony_ci  - if:
2462306a36Sopenharmony_ci      properties:
2562306a36Sopenharmony_ci        compatible:
2662306a36Sopenharmony_ci          contains:
2762306a36Sopenharmony_ci            enum:
2862306a36Sopenharmony_ci              - xlnx,zynqmp-8.9a
2962306a36Sopenharmony_ci              - xlnx,versal-8.9a
3062306a36Sopenharmony_ci              - xlnx,versal-net-emmc
3162306a36Sopenharmony_ci    then:
3262306a36Sopenharmony_ci      properties:
3362306a36Sopenharmony_ci        clock-output-names:
3462306a36Sopenharmony_ci          oneOf:
3562306a36Sopenharmony_ci            - items:
3662306a36Sopenharmony_ci                - const: clk_out_sd0
3762306a36Sopenharmony_ci                - const: clk_in_sd0
3862306a36Sopenharmony_ci            - items:
3962306a36Sopenharmony_ci                - const: clk_out_sd1
4062306a36Sopenharmony_ci                - const: clk_in_sd1
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciproperties:
4362306a36Sopenharmony_ci  compatible:
4462306a36Sopenharmony_ci    oneOf:
4562306a36Sopenharmony_ci      - const: arasan,sdhci-8.9a                # generic Arasan SDHCI 8.9a PHY
4662306a36Sopenharmony_ci      - const: arasan,sdhci-4.9a                # generic Arasan SDHCI 4.9a PHY
4762306a36Sopenharmony_ci      - const: arasan,sdhci-5.1                 # generic Arasan SDHCI 5.1 PHY
4862306a36Sopenharmony_ci      - items:
4962306a36Sopenharmony_ci          - const: rockchip,rk3399-sdhci-5.1    # rk3399 eMMC PHY
5062306a36Sopenharmony_ci          - const: arasan,sdhci-5.1
5162306a36Sopenharmony_ci        description:
5262306a36Sopenharmony_ci          For this device it is strongly suggested to include
5362306a36Sopenharmony_ci          arasan,soc-ctl-syscon.
5462306a36Sopenharmony_ci      - items:
5562306a36Sopenharmony_ci          - const: xlnx,zynqmp-8.9a             # ZynqMP SDHCI 8.9a PHY
5662306a36Sopenharmony_ci          - const: arasan,sdhci-8.9a
5762306a36Sopenharmony_ci        description:
5862306a36Sopenharmony_ci          For this device it is strongly suggested to include
5962306a36Sopenharmony_ci          clock-output-names and '#clock-cells'.
6062306a36Sopenharmony_ci      - items:
6162306a36Sopenharmony_ci          - const: xlnx,versal-8.9a             # Versal SDHCI 8.9a PHY
6262306a36Sopenharmony_ci          - const: arasan,sdhci-8.9a
6362306a36Sopenharmony_ci        description:
6462306a36Sopenharmony_ci          For this device it is strongly suggested to include
6562306a36Sopenharmony_ci          clock-output-names and '#clock-cells'.
6662306a36Sopenharmony_ci      - const: xlnx,versal-net-emmc     # Versal Net eMMC PHY
6762306a36Sopenharmony_ci        description:
6862306a36Sopenharmony_ci          For this device it is strongly suggested to include
6962306a36Sopenharmony_ci          clock-output-names and '#clock-cells'.
7062306a36Sopenharmony_ci      - items:
7162306a36Sopenharmony_ci          - const: intel,lgm-sdhci-5.1-emmc     # Intel LGM eMMC PHY
7262306a36Sopenharmony_ci          - const: arasan,sdhci-5.1
7362306a36Sopenharmony_ci        description:
7462306a36Sopenharmony_ci          For this device it is strongly suggested to include
7562306a36Sopenharmony_ci          arasan,soc-ctl-syscon.
7662306a36Sopenharmony_ci      - items:
7762306a36Sopenharmony_ci          - const: intel,lgm-sdhci-5.1-sdxc     # Intel LGM SDXC PHY
7862306a36Sopenharmony_ci          - const: arasan,sdhci-5.1
7962306a36Sopenharmony_ci        description:
8062306a36Sopenharmony_ci          For this device it is strongly suggested to include
8162306a36Sopenharmony_ci          arasan,soc-ctl-syscon.
8262306a36Sopenharmony_ci      - items:
8362306a36Sopenharmony_ci          - const: intel,keembay-sdhci-5.1-emmc # Intel Keem Bay eMMC PHY
8462306a36Sopenharmony_ci          - const: arasan,sdhci-5.1
8562306a36Sopenharmony_ci        description:
8662306a36Sopenharmony_ci          For this device it is strongly suggested to include
8762306a36Sopenharmony_ci          arasan,soc-ctl-syscon.
8862306a36Sopenharmony_ci      - const: intel,keembay-sdhci-5.1-sd       # Intel Keem Bay SD controller
8962306a36Sopenharmony_ci        description:
9062306a36Sopenharmony_ci          For this device it is strongly suggested to include
9162306a36Sopenharmony_ci          arasan,soc-ctl-syscon.
9262306a36Sopenharmony_ci      - const: intel,keembay-sdhci-5.1-sdio     # Intel Keem Bay SDIO controller
9362306a36Sopenharmony_ci        description:
9462306a36Sopenharmony_ci          For this device it is strongly suggested to include
9562306a36Sopenharmony_ci          arasan,soc-ctl-syscon.
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci  reg:
9862306a36Sopenharmony_ci    maxItems: 1
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci  clocks:
10162306a36Sopenharmony_ci    minItems: 2
10262306a36Sopenharmony_ci    maxItems: 3
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci  clock-names:
10562306a36Sopenharmony_ci    minItems: 2
10662306a36Sopenharmony_ci    items:
10762306a36Sopenharmony_ci      - const: clk_xin
10862306a36Sopenharmony_ci      - const: clk_ahb
10962306a36Sopenharmony_ci      - const: gate
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci  interrupts:
11262306a36Sopenharmony_ci    maxItems: 1
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci  phys:
11562306a36Sopenharmony_ci    maxItems: 1
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci  phy-names:
11862306a36Sopenharmony_ci    const: phy_arasan
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci  resets:
12162306a36Sopenharmony_ci    maxItems: 1
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci  arasan,soc-ctl-syscon:
12462306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle
12562306a36Sopenharmony_ci    description:
12662306a36Sopenharmony_ci      A phandle to a syscon device (see ../mfd/syscon.txt) used to access
12762306a36Sopenharmony_ci      core corecfg registers. Offsets of registers in this syscon are
12862306a36Sopenharmony_ci      determined based on the main compatible string for the device.
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci  clock-output-names:
13162306a36Sopenharmony_ci    minItems: 1
13262306a36Sopenharmony_ci    maxItems: 2
13362306a36Sopenharmony_ci    description:
13462306a36Sopenharmony_ci      Name of the card clock which will be exposed by this device.
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci  '#clock-cells':
13762306a36Sopenharmony_ci    enum: [0, 1]
13862306a36Sopenharmony_ci    description:
13962306a36Sopenharmony_ci      With this property in place we will export one or two clocks
14062306a36Sopenharmony_ci      representing the Card Clock. These clocks are expected to be
14162306a36Sopenharmony_ci      consumed by our PHY.
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci  xlnx,fails-without-test-cd:
14462306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/flag
14562306a36Sopenharmony_ci    description:
14662306a36Sopenharmony_ci      When present, the controller doesn't work when the CD line is not
14762306a36Sopenharmony_ci      connected properly, and the line is not connected properly.
14862306a36Sopenharmony_ci      Test mode can be used to force the controller to function.
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci  xlnx,int-clock-stable-broken:
15162306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/flag
15262306a36Sopenharmony_ci    description:
15362306a36Sopenharmony_ci      When present, the controller always reports that the internal clock
15462306a36Sopenharmony_ci      is stable even when it is not.
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci  xlnx,mio-bank:
15762306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
15862306a36Sopenharmony_ci    enum: [0, 1, 2]
15962306a36Sopenharmony_ci    default: 0
16062306a36Sopenharmony_ci    description:
16162306a36Sopenharmony_ci      The MIO bank number in which the command and data lines are configured.
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci  iommus:
16462306a36Sopenharmony_ci    maxItems: 1
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci  power-domains:
16762306a36Sopenharmony_ci    maxItems: 1
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_cidependencies:
17062306a36Sopenharmony_ci  '#clock-cells': [ clock-output-names ]
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_cirequired:
17362306a36Sopenharmony_ci  - compatible
17462306a36Sopenharmony_ci  - reg
17562306a36Sopenharmony_ci  - interrupts
17662306a36Sopenharmony_ci  - clocks
17762306a36Sopenharmony_ci  - clock-names
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ciunevaluatedProperties: false
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ciexamples:
18262306a36Sopenharmony_ci  - |
18362306a36Sopenharmony_ci    mmc@e0100000 {
18462306a36Sopenharmony_ci          compatible = "arasan,sdhci-8.9a";
18562306a36Sopenharmony_ci          reg = <0xe0100000 0x1000>;
18662306a36Sopenharmony_ci          clock-names = "clk_xin", "clk_ahb";
18762306a36Sopenharmony_ci          clocks = <&clkc 21>, <&clkc 32>;
18862306a36Sopenharmony_ci          interrupt-parent = <&gic>;
18962306a36Sopenharmony_ci          interrupts = <0 24 4>;
19062306a36Sopenharmony_ci    };
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci  - |
19362306a36Sopenharmony_ci    mmc@e2800000 {
19462306a36Sopenharmony_ci          compatible = "arasan,sdhci-5.1";
19562306a36Sopenharmony_ci          reg = <0xe2800000 0x1000>;
19662306a36Sopenharmony_ci          clock-names = "clk_xin", "clk_ahb";
19762306a36Sopenharmony_ci          clocks = <&cru 8>, <&cru 18>;
19862306a36Sopenharmony_ci          interrupt-parent = <&gic>;
19962306a36Sopenharmony_ci          interrupts = <0 24 4>;
20062306a36Sopenharmony_ci          phys = <&emmc_phy>;
20162306a36Sopenharmony_ci          phy-names = "phy_arasan";
20262306a36Sopenharmony_ci    };
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci  - |
20562306a36Sopenharmony_ci    #include <dt-bindings/clock/rk3399-cru.h>
20662306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
20762306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
20862306a36Sopenharmony_ci    mmc@fe330000 {
20962306a36Sopenharmony_ci          compatible = "rockchip,rk3399-sdhci-5.1", "arasan,sdhci-5.1";
21062306a36Sopenharmony_ci          reg = <0xfe330000 0x10000>;
21162306a36Sopenharmony_ci          interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
21262306a36Sopenharmony_ci          clocks = <&cru SCLK_EMMC>, <&cru ACLK_EMMC>;
21362306a36Sopenharmony_ci          clock-names = "clk_xin", "clk_ahb";
21462306a36Sopenharmony_ci          arasan,soc-ctl-syscon = <&grf>;
21562306a36Sopenharmony_ci          assigned-clocks = <&cru SCLK_EMMC>;
21662306a36Sopenharmony_ci          assigned-clock-rates = <200000000>;
21762306a36Sopenharmony_ci          clock-output-names = "emmc_cardclock";
21862306a36Sopenharmony_ci          phys = <&emmc_phy>;
21962306a36Sopenharmony_ci          phy-names = "phy_arasan";
22062306a36Sopenharmony_ci          #clock-cells = <0>;
22162306a36Sopenharmony_ci    };
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ci  - |
22462306a36Sopenharmony_ci    mmc@ff160000 {
22562306a36Sopenharmony_ci          compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a";
22662306a36Sopenharmony_ci          interrupt-parent = <&gic>;
22762306a36Sopenharmony_ci          interrupts = <0 48 4>;
22862306a36Sopenharmony_ci          reg = <0xff160000 0x1000>;
22962306a36Sopenharmony_ci          clocks = <&clk200>, <&clk200>;
23062306a36Sopenharmony_ci          clock-names = "clk_xin", "clk_ahb";
23162306a36Sopenharmony_ci          clock-output-names = "clk_out_sd0", "clk_in_sd0";
23262306a36Sopenharmony_ci          #clock-cells = <1>;
23362306a36Sopenharmony_ci          clk-phase-sd-hs = <63>, <72>;
23462306a36Sopenharmony_ci    };
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci  - |
23762306a36Sopenharmony_ci    mmc@f1040000 {
23862306a36Sopenharmony_ci          compatible = "xlnx,versal-8.9a", "arasan,sdhci-8.9a";
23962306a36Sopenharmony_ci          interrupt-parent = <&gic>;
24062306a36Sopenharmony_ci          interrupts = <0 126 4>;
24162306a36Sopenharmony_ci          reg = <0xf1040000 0x10000>;
24262306a36Sopenharmony_ci          clocks = <&clk200>, <&clk200>;
24362306a36Sopenharmony_ci          clock-names = "clk_xin", "clk_ahb";
24462306a36Sopenharmony_ci          clock-output-names = "clk_out_sd0", "clk_in_sd0";
24562306a36Sopenharmony_ci          #clock-cells = <1>;
24662306a36Sopenharmony_ci          clk-phase-sd-hs = <132>, <60>;
24762306a36Sopenharmony_ci    };
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci  - |
25062306a36Sopenharmony_ci    #define LGM_CLK_EMMC5
25162306a36Sopenharmony_ci    #define LGM_CLK_NGI
25262306a36Sopenharmony_ci    #define LGM_GCLK_EMMC
25362306a36Sopenharmony_ci    mmc@ec700000 {
25462306a36Sopenharmony_ci          compatible = "intel,lgm-sdhci-5.1-emmc", "arasan,sdhci-5.1";
25562306a36Sopenharmony_ci          reg = <0xec700000 0x300>;
25662306a36Sopenharmony_ci          interrupt-parent = <&ioapic1>;
25762306a36Sopenharmony_ci          interrupts = <44 1>;
25862306a36Sopenharmony_ci          clocks = <&cgu0 LGM_CLK_EMMC5>, <&cgu0 LGM_CLK_NGI>,
25962306a36Sopenharmony_ci                   <&cgu0 LGM_GCLK_EMMC>;
26062306a36Sopenharmony_ci          clock-names = "clk_xin", "clk_ahb", "gate";
26162306a36Sopenharmony_ci          clock-output-names = "emmc_cardclock";
26262306a36Sopenharmony_ci          #clock-cells = <0>;
26362306a36Sopenharmony_ci          phys = <&emmc_phy>;
26462306a36Sopenharmony_ci          phy-names = "phy_arasan";
26562306a36Sopenharmony_ci          arasan,soc-ctl-syscon = <&sysconf>;
26662306a36Sopenharmony_ci    };
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ci  - |
26962306a36Sopenharmony_ci    #define LGM_CLK_SDIO
27062306a36Sopenharmony_ci    #define LGM_GCLK_SDXC
27162306a36Sopenharmony_ci    mmc@ec600000 {
27262306a36Sopenharmony_ci          compatible = "intel,lgm-sdhci-5.1-sdxc", "arasan,sdhci-5.1";
27362306a36Sopenharmony_ci          reg = <0xec600000 0x300>;
27462306a36Sopenharmony_ci          interrupt-parent = <&ioapic1>;
27562306a36Sopenharmony_ci          interrupts = <43 1>;
27662306a36Sopenharmony_ci          clocks = <&cgu0 LGM_CLK_SDIO>, <&cgu0 LGM_CLK_NGI>,
27762306a36Sopenharmony_ci                   <&cgu0 LGM_GCLK_SDXC>;
27862306a36Sopenharmony_ci          clock-names = "clk_xin", "clk_ahb", "gate";
27962306a36Sopenharmony_ci          clock-output-names = "sdxc_cardclock";
28062306a36Sopenharmony_ci          #clock-cells = <0>;
28162306a36Sopenharmony_ci          phys = <&sdxc_phy>;
28262306a36Sopenharmony_ci          phy-names = "phy_arasan";
28362306a36Sopenharmony_ci          arasan,soc-ctl-syscon = <&sysconf>;
28462306a36Sopenharmony_ci    };
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ci  - |
28762306a36Sopenharmony_ci    #define KEEM_BAY_PSS_AUX_EMMC
28862306a36Sopenharmony_ci    #define KEEM_BAY_PSS_EMMC
28962306a36Sopenharmony_ci    mmc@33000000 {
29062306a36Sopenharmony_ci          compatible = "intel,keembay-sdhci-5.1-emmc", "arasan,sdhci-5.1";
29162306a36Sopenharmony_ci          interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
29262306a36Sopenharmony_ci          reg = <0x33000000 0x300>;
29362306a36Sopenharmony_ci          clock-names = "clk_xin", "clk_ahb";
29462306a36Sopenharmony_ci          clocks = <&scmi_clk KEEM_BAY_PSS_AUX_EMMC>,
29562306a36Sopenharmony_ci                   <&scmi_clk KEEM_BAY_PSS_EMMC>;
29662306a36Sopenharmony_ci          phys = <&emmc_phy>;
29762306a36Sopenharmony_ci          phy-names = "phy_arasan";
29862306a36Sopenharmony_ci          assigned-clocks = <&scmi_clk KEEM_BAY_PSS_AUX_EMMC>;
29962306a36Sopenharmony_ci          assigned-clock-rates = <200000000>;
30062306a36Sopenharmony_ci          clock-output-names = "emmc_cardclock";
30162306a36Sopenharmony_ci          #clock-cells = <0>;
30262306a36Sopenharmony_ci          arasan,soc-ctl-syscon = <&mmc_phy_syscon>;
30362306a36Sopenharmony_ci    };
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ci  - |
30662306a36Sopenharmony_ci    #define KEEM_BAY_PSS_AUX_SD0
30762306a36Sopenharmony_ci    #define KEEM_BAY_PSS_SD0
30862306a36Sopenharmony_ci    mmc@31000000 {
30962306a36Sopenharmony_ci          compatible = "intel,keembay-sdhci-5.1-sd";
31062306a36Sopenharmony_ci          interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
31162306a36Sopenharmony_ci          reg = <0x31000000 0x300>;
31262306a36Sopenharmony_ci          clock-names = "clk_xin", "clk_ahb";
31362306a36Sopenharmony_ci          clocks = <&scmi_clk KEEM_BAY_PSS_AUX_SD0>,
31462306a36Sopenharmony_ci                   <&scmi_clk KEEM_BAY_PSS_SD0>;
31562306a36Sopenharmony_ci          arasan,soc-ctl-syscon = <&sd0_phy_syscon>;
31662306a36Sopenharmony_ci    };
317