1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/arm/tegra/nvidia,tegra186-pmc.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra Power Management Controller (PMC)
8
9maintainers:
10  - Thierry Reding <thierry.reding@gmail.com>
11  - Jon Hunter <jonathanh@nvidia.com>
12
13properties:
14  compatible:
15    enum:
16      - nvidia,tegra186-pmc
17      - nvidia,tegra194-pmc
18      - nvidia,tegra234-pmc
19
20  reg:
21    minItems: 4
22    maxItems: 5
23
24  reg-names:
25    minItems: 4
26    items:
27      - const: pmc
28      - const: wake
29      - const: aotag
30      - const: scratch
31      - const: misc
32
33  interrupt-controller: true
34
35  "#interrupt-cells":
36    description: Specifies the number of cells needed to encode an
37      interrupt source. The value must be 2.
38    const: 2
39
40  nvidia,invert-interrupt:
41    description: If present, inverts the PMU interrupt signal.
42    $ref: /schemas/types.yaml#/definitions/flag
43
44if:
45  properties:
46    compatible:
47      contains:
48        const: nvidia,tegra186-pmc
49then:
50  properties:
51    reg:
52      maxItems: 4
53
54    reg-names:
55      maxItems: 4
56else:
57  properties:
58    reg:
59      minItems: 5
60
61    reg-names:
62      minItems: 5
63
64patternProperties:
65  "^[a-z0-9]+-[a-z0-9]+$":
66    if:
67      type: object
68    then:
69      description: |
70        These are pad configuration nodes. On Tegra SoCs a pad is a set of
71        pins which are configured as a group. The pin grouping is a fixed
72        attribute of the hardware. The PMC can be used to set pad power
73        state and signaling voltage. A pad can be either in active or
74        power down mode. The support for power state and signaling voltage
75        configuration varies depending on the pad in question. 3.3 V and
76        1.8 V signaling voltages are supported on pins where software
77        controllable signaling voltage switching is available.
78
79        Pad configurations are described with pin configuration nodes
80        which are placed under the pmc node and they are referred to by
81        the pinctrl client properties. For more information see
82
83          Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
84
85        The following pads are present on Tegra186:
86
87          csia, csib, dsi, mipi-bias, pex-clk-bias, pex-clk3, pex-clk2,
88          pex-clk1, usb0, usb1, usb2, usb-bias, uart, audio, hsic, dbg,
89          hdmi-dp0, hdmi-dp1, pex-cntrl, sdmmc2-hv, sdmmc4, cam, dsib,
90          dsic, dsid, csic, csid, csie, dsif, spi, ufs, dmic-hv, edp,
91          sdmmc1-hv, sdmmc3-hv, conn, audio-hv, ao-hv
92
93        The following pads are present on Tegra194:
94
95          csia, csib, mipi-bias, pex-clk-bias, pex-clk3, pex-clk2,
96          pex-clk1, eqos, pex-clk-2-bias, pex-clk-2, dap3, dap5, uart,
97          pwr-ctl, soc-gpio53, audio, gp-pwm2, gp-pwm3, soc-gpio12,
98          soc-gpio13, soc-gpio10, uart4, uart5, dbg, hdmi-dp3, hdmi-dp2,
99          hdmi-dp0, hdmi-dp1, pex-cntrl, pex-ctl2, pex-l0-rst,
100          pex-l1-rst, sdmmc4, pex-l5-rst, cam, csic, csid, csie, csif,
101          spi, ufs, csig, csih, edp, sdmmc1-hv, sdmmc3-hv, conn,
102          audio-hv, ao-hv
103
104      properties:
105        pins:
106          $ref: /schemas/types.yaml#/definitions/string
107          description: Must contain the name of the pad(s) to be
108            configured.
109
110        low-power-enable:
111          description: Configure the pad into power down mode.
112          $ref: /schemas/types.yaml#/definitions/flag
113
114        low-power-disable:
115          description: Configure the pad into active mode.
116          $ref: /schemas/types.yaml#/definitions/flag
117
118        power-source:
119          $ref: /schemas/types.yaml#/definitions/uint32
120          description: |
121            Must contain either TEGRA_IO_PAD_VOLTAGE_1V8 or
122            TEGRA_IO_PAD_VOLTAGE_3V3 to select between signalling
123            voltages.
124
125            The values are defined in
126
127              include/dt-bindings/pinctrl/pinctrl-tegra-io-pad.h
128
129            The power state can be configured on all of the above pads
130            except for ao-hv. Following pads have software configurable
131            signaling voltages: sdmmc2-hv, dmic-hv, sdmmc1-hv, sdmmc3-hv,
132            audio-hv, ao-hv.
133
134        phandle: true
135
136      required:
137        - pins
138
139      additionalProperties: false
140
141required:
142  - compatible
143  - reg
144  - reg-names
145
146additionalProperties: false
147
148dependencies:
149  interrupt-controller: ['#interrupt-cells']
150  "#interrupt-cells":
151    required:
152      - interrupt-controller
153
154examples:
155  - |
156    #include <dt-bindings/clock/tegra186-clock.h>
157    #include <dt-bindings/interrupt-controller/arm-gic.h>
158    #include <dt-bindings/pinctrl/pinctrl-tegra-io-pad.h>
159    #include <dt-bindings/memory/tegra186-mc.h>
160    #include <dt-bindings/reset/tegra186-reset.h>
161
162    pmc@c3600000 {
163        compatible = "nvidia,tegra186-pmc";
164        reg = <0x0c360000 0x10000>,
165              <0x0c370000 0x10000>,
166              <0x0c380000 0x10000>,
167              <0x0c390000 0x10000>;
168        reg-names = "pmc", "wake", "aotag", "scratch";
169        nvidia,invert-interrupt;
170
171        sdmmc1_3v3: sdmmc1-3v3 {
172            pins = "sdmmc1-hv";
173            power-source = <TEGRA_IO_PAD_VOLTAGE_3V3>;
174        };
175
176        sdmmc1_1v8: sdmmc1-1v8 {
177            pins = "sdmmc1-hv";
178            power-source = <TEGRA_IO_PAD_VOLTAGE_1V8>;
179        };
180    };
181
182    sdmmc1: mmc@3400000 {
183        compatible = "nvidia,tegra186-sdhci";
184        reg = <0x03400000 0x10000>;
185        interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
186        clocks = <&bpmp TEGRA186_CLK_SDMMC1>,
187                 <&bpmp TEGRA186_CLK_SDMMC_LEGACY_TM>;
188        clock-names = "sdhci", "tmclk";
189        resets = <&bpmp TEGRA186_RESET_SDMMC1>;
190        reset-names = "sdhci";
191        interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCRA &emc>,
192                        <&mc TEGRA186_MEMORY_CLIENT_SDMMCWA &emc>;
193        interconnect-names = "dma-mem", "write";
194        iommus = <&smmu TEGRA186_SID_SDMMC1>;
195        pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
196        pinctrl-0 = <&sdmmc1_3v3>;
197        pinctrl-1 = <&sdmmc1_1v8>;
198    };
199