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/nvidia,tegra20-sdhci.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: NVIDIA Tegra Secure Digital Host Controller
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Thierry Reding <thierry.reding@gmail.com>
1162306a36Sopenharmony_ci  - Jon Hunter <jonathanh@nvidia.com>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  This controller on Tegra family SoCs provides an interface for MMC, SD, and
1562306a36Sopenharmony_ci  SDIO types of memory cards.
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci  This file documents differences between the core properties described by
1862306a36Sopenharmony_ci  mmc-controller.yaml and the properties for the Tegra SDHCI controller.
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ciproperties:
2162306a36Sopenharmony_ci  compatible:
2262306a36Sopenharmony_ci    oneOf:
2362306a36Sopenharmony_ci      - enum:
2462306a36Sopenharmony_ci          - nvidia,tegra20-sdhci
2562306a36Sopenharmony_ci          - nvidia,tegra30-sdhci
2662306a36Sopenharmony_ci          - nvidia,tegra114-sdhci
2762306a36Sopenharmony_ci          - nvidia,tegra124-sdhci
2862306a36Sopenharmony_ci          - nvidia,tegra210-sdhci
2962306a36Sopenharmony_ci          - nvidia,tegra186-sdhci
3062306a36Sopenharmony_ci          - nvidia,tegra194-sdhci
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci      - items:
3362306a36Sopenharmony_ci          - const: nvidia,tegra132-sdhci
3462306a36Sopenharmony_ci          - const: nvidia,tegra124-sdhci
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci      - items:
3762306a36Sopenharmony_ci          - enum:
3862306a36Sopenharmony_ci              - nvidia,tegra194-sdhci
3962306a36Sopenharmony_ci              - nvidia,tegra234-sdhci
4062306a36Sopenharmony_ci          - const: nvidia,tegra186-sdhci
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci  reg:
4362306a36Sopenharmony_ci    maxItems: 1
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci  interrupts:
4662306a36Sopenharmony_ci    maxItems: 1
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci  assigned-clocks: true
4962306a36Sopenharmony_ci  assigned-clock-parents: true
5062306a36Sopenharmony_ci  assigned-clock-rates: true
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci  clocks:
5362306a36Sopenharmony_ci    minItems: 1
5462306a36Sopenharmony_ci    maxItems: 2
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci  clock-names:
5762306a36Sopenharmony_ci    minItems: 1
5862306a36Sopenharmony_ci    maxItems: 2
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci  resets:
6162306a36Sopenharmony_ci    items:
6262306a36Sopenharmony_ci      - description: module reset
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci  reset-names:
6562306a36Sopenharmony_ci    items:
6662306a36Sopenharmony_ci      - const: sdhci
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci  power-gpios:
6962306a36Sopenharmony_ci    description: specify GPIOs for power control
7062306a36Sopenharmony_ci    maxItems: 1
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci  interconnects:
7362306a36Sopenharmony_ci    items:
7462306a36Sopenharmony_ci      - description: memory read client
7562306a36Sopenharmony_ci      - description: memory write client
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci  interconnect-names:
7862306a36Sopenharmony_ci    items:
7962306a36Sopenharmony_ci      - const: dma-mem # read
8062306a36Sopenharmony_ci      - const: write
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci  iommus:
8362306a36Sopenharmony_ci    maxItems: 1
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci  operating-points-v2: true
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci  power-domains:
8862306a36Sopenharmony_ci    items:
8962306a36Sopenharmony_ci      - description: phandle to the core power domain
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci  nvidia,default-tap:
9262306a36Sopenharmony_ci    description: Specify the default inbound sampling clock trimmer value for
9362306a36Sopenharmony_ci      non-tunable modes.
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci      The values are used for compensating trace length differences by
9662306a36Sopenharmony_ci      adjusting the sampling point. The values are programmed to the Vendor
9762306a36Sopenharmony_ci      Clock Control Register. Please refer to the reference manual of the SoC
9862306a36Sopenharmony_ci      for correct values.
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci      The DQS trim values are only used on controllers which support HS400
10162306a36Sopenharmony_ci      timing. Only SDMMC4 on Tegra210 and Tegra186 supports HS400.
10262306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci  nvidia,default-trim:
10562306a36Sopenharmony_ci    description: Specify the default outbound clock trimmer value.
10662306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci  nvidia,dqs-trim:
10962306a36Sopenharmony_ci    description: Specify DQS trim value for HS400 timing.
11062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci  nvidia,pad-autocal-pull-down-offset-1v8:
11362306a36Sopenharmony_ci    description: Specify drive strength calibration offsets for 1.8 V
11462306a36Sopenharmony_ci      signaling modes.
11562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci  nvidia,pad-autocal-pull-down-offset-1v8-timeout:
11862306a36Sopenharmony_ci    description: Specify drive strength used as a fallback in case the
11962306a36Sopenharmony_ci      automatic calibration times out on a 1.8 V signaling mode.
12062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci  nvidia,pad-autocal-pull-down-offset-3v3:
12362306a36Sopenharmony_ci    description: Specify drive strength calibration offsets for 3.3 V
12462306a36Sopenharmony_ci      signaling modes.
12562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci  nvidia,pad-autocal-pull-down-offset-3v3-timeout:
12862306a36Sopenharmony_ci    description: Specify drive strength used as a fallback in case the
12962306a36Sopenharmony_ci      automatic calibration times out on a 3.3 V signaling mode.
13062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci  nvidia,pad-autocal-pull-down-offset-sdr104:
13362306a36Sopenharmony_ci    description: Specify drive strength calibration offsets for SDR104 mode.
13462306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci  nvidia,pad-autocal-pull-down-offset-hs400:
13762306a36Sopenharmony_ci    description: Specify drive strength calibration offsets for HS400 mode.
13862306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci  nvidia,pad-autocal-pull-up-offset-1v8:
14162306a36Sopenharmony_ci    description: Specify drive strength calibration offsets for 1.8 V
14262306a36Sopenharmony_ci      signaling modes.
14362306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci  nvidia,pad-autocal-pull-up-offset-1v8-timeout:
14662306a36Sopenharmony_ci    description: Specify drive strength used as a fallback in case the
14762306a36Sopenharmony_ci      automatic calibration times out on a 1.8 V signaling mode.
14862306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci  nvidia,pad-autocal-pull-up-offset-3v3:
15162306a36Sopenharmony_ci    description: Specify drive strength calibration offsets for 3.3 V
15262306a36Sopenharmony_ci      signaling modes.
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci      The property values are drive codes which are programmed into the
15562306a36Sopenharmony_ci      PD_OFFSET and PU_OFFSET sections of the SDHCI_TEGRA_AUTO_CAL_CONFIG
15662306a36Sopenharmony_ci      register. A higher value corresponds to higher drive strength. Please
15762306a36Sopenharmony_ci      refer to the reference manual of the SoC for correct values. The SDR104
15862306a36Sopenharmony_ci      and HS400 timing specific values are used in corresponding modes if
15962306a36Sopenharmony_ci      specified.
16062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci  nvidia,pad-autocal-pull-up-offset-3v3-timeout:
16362306a36Sopenharmony_ci    description: Specify drive strength used as a fallback in case the
16462306a36Sopenharmony_ci      automatic calibration times out on a 3.3 V signaling mode.
16562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci  nvidia,pad-autocal-pull-up-offset-sdr104:
16862306a36Sopenharmony_ci    description: Specify drive strength calibration offsets for SDR104 mode.
16962306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci  nvidia,pad-autocal-pull-up-offset-hs400:
17262306a36Sopenharmony_ci    description: Specify drive strength calibration offsets for HS400 mode.
17362306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci  nvidia,only-1-8v:
17662306a36Sopenharmony_ci    description: The presence of this property indicates that the controller
17762306a36Sopenharmony_ci      operates at a 1.8 V fixed I/O voltage.
17862306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/flag
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_cirequired:
18162306a36Sopenharmony_ci  - compatible
18262306a36Sopenharmony_ci  - reg
18362306a36Sopenharmony_ci  - interrupts
18462306a36Sopenharmony_ci  - clocks
18562306a36Sopenharmony_ci  - resets
18662306a36Sopenharmony_ci  - reset-names
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ciallOf:
18962306a36Sopenharmony_ci  - $ref: mmc-controller.yaml
19062306a36Sopenharmony_ci  - if:
19162306a36Sopenharmony_ci      properties:
19262306a36Sopenharmony_ci        compatible:
19362306a36Sopenharmony_ci          contains:
19462306a36Sopenharmony_ci            enum:
19562306a36Sopenharmony_ci              - nvidia,tegra20-sdhci
19662306a36Sopenharmony_ci              - nvidia,tegra30-sdhci
19762306a36Sopenharmony_ci              - nvidia,tegra114-sdhci
19862306a36Sopenharmony_ci              - nvidia,tegra124-sdhci
19962306a36Sopenharmony_ci    then:
20062306a36Sopenharmony_ci      properties:
20162306a36Sopenharmony_ci        clocks:
20262306a36Sopenharmony_ci          items:
20362306a36Sopenharmony_ci            - description: module clock
20462306a36Sopenharmony_ci    else:
20562306a36Sopenharmony_ci      properties:
20662306a36Sopenharmony_ci        clocks:
20762306a36Sopenharmony_ci          items:
20862306a36Sopenharmony_ci            - description: module clock
20962306a36Sopenharmony_ci            - description: timeout clock
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci        clock-names:
21262306a36Sopenharmony_ci          items:
21362306a36Sopenharmony_ci            - const: sdhci
21462306a36Sopenharmony_ci            - const: tmclk
21562306a36Sopenharmony_ci      required:
21662306a36Sopenharmony_ci        - clock-names
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci  - if:
21962306a36Sopenharmony_ci      properties:
22062306a36Sopenharmony_ci        compatible:
22162306a36Sopenharmony_ci          contains:
22262306a36Sopenharmony_ci            const: nvidia,tegra210-sdhci
22362306a36Sopenharmony_ci    then:
22462306a36Sopenharmony_ci      properties:
22562306a36Sopenharmony_ci        pinctrl-names:
22662306a36Sopenharmony_ci          oneOf:
22762306a36Sopenharmony_ci            - items:
22862306a36Sopenharmony_ci                - const: sdmmc-3v3
22962306a36Sopenharmony_ci                  description: pad configuration for 3.3 V
23062306a36Sopenharmony_ci                - const: sdmmc-1v8
23162306a36Sopenharmony_ci                  description: pad configuration for 1.8 V
23262306a36Sopenharmony_ci                - const: sdmmc-3v3-drv
23362306a36Sopenharmony_ci                  description: pull-up/down configuration for 3.3 V
23462306a36Sopenharmony_ci                - const: sdmmc-1v8-drv
23562306a36Sopenharmony_ci                  description: pull-up/down configuration for 1.8 V
23662306a36Sopenharmony_ci            - items:
23762306a36Sopenharmony_ci                - const: sdmmc-3v3-drv
23862306a36Sopenharmony_ci                  description: pull-up/down configuration for 3.3 V
23962306a36Sopenharmony_ci                - const: sdmmc-1v8-drv
24062306a36Sopenharmony_ci                  description: pull-up/down configuration for 1.8 V
24162306a36Sopenharmony_ci            - items:
24262306a36Sopenharmony_ci                - const: sdmmc-1v8-drv
24362306a36Sopenharmony_ci                  description: pull-up/down configuration for 1.8 V
24462306a36Sopenharmony_ci      required:
24562306a36Sopenharmony_ci        - clock-names
24662306a36Sopenharmony_ci  - if:
24762306a36Sopenharmony_ci      properties:
24862306a36Sopenharmony_ci        compatible:
24962306a36Sopenharmony_ci          contains:
25062306a36Sopenharmony_ci            enum:
25162306a36Sopenharmony_ci              - nvidia,tegra186-sdhci
25262306a36Sopenharmony_ci              - nvidia,tegra194-sdhci
25362306a36Sopenharmony_ci    then:
25462306a36Sopenharmony_ci      properties:
25562306a36Sopenharmony_ci        pinctrl-names:
25662306a36Sopenharmony_ci          items:
25762306a36Sopenharmony_ci            - const: sdmmc-3v3
25862306a36Sopenharmony_ci              description: pad configuration for 3.3 V
25962306a36Sopenharmony_ci            - const: sdmmc-1v8
26062306a36Sopenharmony_ci              description: pad configuration for 1.8 V
26162306a36Sopenharmony_ci      required:
26262306a36Sopenharmony_ci        - clock-names
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ciunevaluatedProperties: false
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ciexamples:
26762306a36Sopenharmony_ci  - |
26862306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_ci    mmc@c8000200 {
27162306a36Sopenharmony_ci        compatible = "nvidia,tegra20-sdhci";
27262306a36Sopenharmony_ci        reg = <0xc8000200 0x200>;
27362306a36Sopenharmony_ci        interrupts = <47>;
27462306a36Sopenharmony_ci        clocks = <&tegra_car 14>;
27562306a36Sopenharmony_ci        resets = <&tegra_car 14>;
27662306a36Sopenharmony_ci        reset-names = "sdhci";
27762306a36Sopenharmony_ci        cd-gpios = <&gpio 69 0>; /* gpio PI5 */
27862306a36Sopenharmony_ci        wp-gpios = <&gpio 57 0>; /* gpio PH1 */
27962306a36Sopenharmony_ci        power-gpios = <&gpio 155 0>; /* gpio PT3 */
28062306a36Sopenharmony_ci        bus-width = <8>;
28162306a36Sopenharmony_ci    };
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ci  - |
28462306a36Sopenharmony_ci    #include <dt-bindings/clock/tegra210-car.h>
28562306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_ci    mmc@700b0000 {
28862306a36Sopenharmony_ci        compatible = "nvidia,tegra210-sdhci";
28962306a36Sopenharmony_ci        reg = <0x700b0000 0x200>;
29062306a36Sopenharmony_ci        interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
29162306a36Sopenharmony_ci        clocks = <&tegra_car TEGRA210_CLK_SDMMC1>,
29262306a36Sopenharmony_ci                 <&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
29362306a36Sopenharmony_ci        clock-names = "sdhci", "tmclk";
29462306a36Sopenharmony_ci        resets = <&tegra_car 14>;
29562306a36Sopenharmony_ci        reset-names = "sdhci";
29662306a36Sopenharmony_ci        pinctrl-names = "sdmmc-3v3", "sdmmc-1v8",
29762306a36Sopenharmony_ci                        "sdmmc-3v3-drv", "sdmmc-1v8-drv";
29862306a36Sopenharmony_ci        pinctrl-0 = <&sdmmc1_3v3>;
29962306a36Sopenharmony_ci        pinctrl-1 = <&sdmmc1_1v8>;
30062306a36Sopenharmony_ci        pinctrl-2 = <&sdmmc1_3v3_drv>;
30162306a36Sopenharmony_ci        pinctrl-3 = <&sdmmc1_1v8_drv>;
30262306a36Sopenharmony_ci        nvidia,pad-autocal-pull-up-offset-3v3 = <0x00>;
30362306a36Sopenharmony_ci        nvidia,pad-autocal-pull-down-offset-3v3 = <0x7d>;
30462306a36Sopenharmony_ci        nvidia,pad-autocal-pull-up-offset-1v8 = <0x7b>;
30562306a36Sopenharmony_ci        nvidia,pad-autocal-pull-down-offset-1v8 = <0x7b>;
30662306a36Sopenharmony_ci        nvidia,default-tap = <0x2>;
30762306a36Sopenharmony_ci        nvidia,default-trim = <0x4>;
30862306a36Sopenharmony_ci        assigned-clocks = <&tegra_car TEGRA210_CLK_SDMMC4>,
30962306a36Sopenharmony_ci                          <&tegra_car TEGRA210_CLK_PLL_C4_OUT0>,
31062306a36Sopenharmony_ci                          <&tegra_car TEGRA210_CLK_PLL_C4>;
31162306a36Sopenharmony_ci        assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_C4_OUT0>;
31262306a36Sopenharmony_ci        assigned-clock-rates = <200000000>, <1000000000>, <1000000000>;
31362306a36Sopenharmony_ci    };
314