1# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/arm/tegra/nvidia,tegra20-pmc.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Tegra Power Management Controller (PMC)
8
9maintainers:
10  - Thierry Reding <thierry.reding@gmail.com>
11  - Jonathan Hunter <jonathanh@nvidia.com>
12
13properties:
14  compatible:
15    enum:
16      - nvidia,tegra20-pmc
17      - nvidia,tegra30-pmc
18      - nvidia,tegra114-pmc
19      - nvidia,tegra124-pmc
20      - nvidia,tegra210-pmc
21
22  reg:
23    maxItems: 1
24    description:
25      Offset and length of the register set for the device.
26
27  clock-names:
28    items:
29      - const: pclk
30      - const: clk32k_in
31    description:
32      Must includes entries pclk and clk32k_in.
33      pclk is the Tegra clock of that name and clk32k_in is 32KHz clock
34      input to Tegra.
35
36  clocks:
37    maxItems: 2
38    description:
39      Must contain an entry for each entry in clock-names.
40      See ../clocks/clocks-bindings.txt for details.
41
42  '#clock-cells':
43    const: 1
44    description:
45      Tegra PMC has clk_out_1, clk_out_2, and clk_out_3.
46      PMC also has blink control which allows 32Khz clock output to
47      Tegra blink pad.
48      Consumer of PMC clock should specify the desired clock by having
49      the clock ID in its "clocks" phandle cell with pmc clock provider.
50      See include/dt-bindings/soc/tegra-pmc.h for the list of Tegra PMC
51      clock IDs.
52
53  '#interrupt-cells':
54    const: 2
55    description:
56      Specifies number of cells needed to encode an interrupt source.
57      The value must be 2.
58
59  interrupt-controller: true
60
61  nvidia,invert-interrupt:
62    $ref: /schemas/types.yaml#/definitions/flag
63    description: Inverts the PMU interrupt signal.
64      The PMU is an external Power Management Unit, whose interrupt output
65      signal is fed into the PMC. This signal is optionally inverted, and
66      then fed into the ARM GIC. The PMC is not involved in the detection
67      or handling of this interrupt signal, merely its inversion.
68
69  nvidia,core-power-req-active-high:
70    $ref: /schemas/types.yaml#/definitions/flag
71    description: Core power request active-high.
72
73  nvidia,sys-clock-req-active-high:
74    $ref: /schemas/types.yaml#/definitions/flag
75    description: System clock request active-high.
76
77  nvidia,combined-power-req:
78    $ref: /schemas/types.yaml#/definitions/flag
79    description: combined power request for CPU and Core.
80
81  nvidia,cpu-pwr-good-en:
82    $ref: /schemas/types.yaml#/definitions/flag
83    description:
84      CPU power good signal from external PMIC to PMC is enabled.
85
86  nvidia,suspend-mode:
87    $ref: /schemas/types.yaml#/definitions/uint32
88    enum: [0, 1, 2]
89    description:
90      The suspend mode that the platform should use.
91      Mode 0 is for LP0, CPU + Core voltage off and DRAM in self-refresh
92      Mode 1 is for LP1, CPU voltage off and DRAM in self-refresh
93      Mode 2 is for LP2, CPU voltage off
94
95  nvidia,cpu-pwr-good-time:
96    $ref: /schemas/types.yaml#/definitions/uint32
97    description: CPU power good time in uSec.
98
99  nvidia,cpu-pwr-off-time:
100    $ref: /schemas/types.yaml#/definitions/uint32
101    description: CPU power off time in uSec.
102
103  nvidia,core-pwr-good-time:
104    $ref: /schemas/types.yaml#/definitions/uint32-array
105    description:
106      <Oscillator-stable-time Power-stable-time>
107      Core power good time in uSec.
108
109  nvidia,core-pwr-off-time:
110    $ref: /schemas/types.yaml#/definitions/uint32
111    description: Core power off time in uSec.
112
113  nvidia,lp0-vec:
114    $ref: /schemas/types.yaml#/definitions/uint32-array
115    description:
116      <start length> Starting address and length of LP0 vector.
117      The LP0 vector contains the warm boot code that is executed
118      by AVP when resuming from the LP0 state.
119      The AVP (Audio-Video Processor) is an ARM7 processor and
120      always being the first boot processor when chip is power on
121      or resume from deep sleep mode. When the system is resumed
122      from the deep sleep mode, the warm boot code will restore
123      some PLLs, clocks and then brings up CPU0 for resuming the
124      system.
125
126  i2c-thermtrip:
127    type: object
128    description:
129      On Tegra30, Tegra114 and Tegra124 if i2c-thermtrip subnode exists,
130      hardware-triggered thermal reset will be enabled.
131
132    properties:
133      nvidia,i2c-controller-id:
134        $ref: /schemas/types.yaml#/definitions/uint32
135        description:
136          ID of I2C controller to send poweroff command to PMU.
137          Valid values are described in section 9.2.148
138          "APBDEV_PMC_SCRATCH53_0" of the Tegra K1 Technical Reference
139          Manual.
140
141      nvidia,bus-addr:
142        $ref: /schemas/types.yaml#/definitions/uint32
143        description: Bus address of the PMU on the I2C bus.
144
145      nvidia,reg-addr:
146        $ref: /schemas/types.yaml#/definitions/uint32
147        description: PMU I2C register address to issue poweroff command.
148
149      nvidia,reg-data:
150        $ref: /schemas/types.yaml#/definitions/uint32
151        description: Poweroff command to write to PMU.
152
153      nvidia,pinmux-id:
154        $ref: /schemas/types.yaml#/definitions/uint32
155        description:
156          Pinmux used by the hardware when issuing Poweroff command.
157          Defaults to 0. Valid values are described in section 12.5.2
158          "Pinmux Support" of the Tegra4 Technical Reference Manual.
159
160    required:
161      - nvidia,i2c-controller-id
162      - nvidia,bus-addr
163      - nvidia,reg-addr
164      - nvidia,reg-data
165
166    additionalProperties: false
167
168  powergates:
169    type: object
170    description: |
171      This node contains a hierarchy of power domain nodes, which should
172      match the powergates on the Tegra SoC. Each powergate node
173      represents a power-domain on the Tegra SoC that can be power-gated
174      by the Tegra PMC.
175      Hardware blocks belonging to a power domain should contain
176      "power-domains" property that is a phandle pointing to corresponding
177      powergate node.
178      The name of the powergate node should be one of the below. Note that
179      not every powergate is applicable to all Tegra devices and the following
180      list shows which powergates are applicable to which devices.
181      Please refer to Tegra TRM for mode details on the powergate nodes to
182      use for each power-gate block inside Tegra.
183      Name		Description			            Devices Applicable
184      3d		  3D Graphics			            Tegra20/114/124/210
185      3d0		  3D Graphics 0		            Tegra30
186      3d1		  3D Graphics 1		            Tegra30
187      aud		  Audio				                Tegra210
188      dfd		  Debug				                Tegra210
189      dis		  Display A			              Tegra114/124/210
190      disb		Display B			              Tegra114/124/210
191      heg		  2D Graphics		            	Tegra30/114/124/210
192      iram		Internal RAM		            Tegra124/210
193      mpe		  MPEG Encode			            All
194      nvdec		NVIDIA Video Decode Engine	Tegra210
195      nvjpg		NVIDIA JPEG Engine		      Tegra210
196      pcie		PCIE				                Tegra20/30/124/210
197      sata		SATA				                Tegra30/124/210
198      sor		  Display interfaces       		Tegra124/210
199      ve2		  Video Encode Engine 2		    Tegra210
200      venc		Video Encode Engine		      All
201      vdec		Video Decode Engine		      Tegra20/30/114/124
202      vic		  Video Imaging Compositor	  Tegra124/210
203      xusba		USB Partition A			        Tegra114/124/210
204      xusbb		USB Partition B 		        Tegra114/124/210
205      xusbc		USB Partition C			        Tegra114/124/210
206
207    patternProperties:
208      "^[a-z0-9]+$":
209        type: object
210
211        properties:
212          clocks:
213            minItems: 1
214            maxItems: 8
215            description:
216              Must contain an entry for each clock required by the PMC
217              for controlling a power-gate.
218              See ../clocks/clock-bindings.txt document for more details.
219
220          resets:
221            minItems: 1
222            maxItems: 8
223            description:
224              Must contain an entry for each reset required by the PMC
225              for controlling a power-gate.
226              See ../reset/reset.txt for more details.
227
228          '#power-domain-cells':
229            const: 0
230            description: Must be 0.
231
232        required:
233          - clocks
234          - resets
235          - '#power-domain-cells'
236
237    additionalProperties: false
238
239patternProperties:
240  "^[a-f0-9]+-[a-f0-9]+$":
241    type: object
242    description:
243      This is a Pad configuration node. On Tegra SOCs a pad is a set of
244      pins which are configured as a group. The pin grouping is a fixed
245      attribute of the hardware. The PMC can be used to set pad power state
246      and signaling voltage. A pad can be either in active or power down mode.
247      The support for power state and signaling voltage configuration varies
248      depending on the pad in question. 3.3V and 1.8V signaling voltages
249      are supported on pins where software controllable signaling voltage
250      switching is available.
251
252      The pad configuration state nodes are placed under the pmc node and they
253      are referred to by the pinctrl client properties. For more information
254      see Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt.
255      The pad name should be used as the value of the pins property in pin
256      configuration nodes.
257
258      The following pads are present on Tegra124 and Tegra132
259      audio, bb, cam, comp, csia, csb, cse, dsi, dsib, dsic, dsid, hdmi, hsic,
260      hv, lvds, mipi-bias, nand, pex-bias, pex-clk1, pex-clk2, pex-cntrl,
261      sdmmc1, sdmmc3, sdmmc4, sys_ddc, uart, usb0, usb1, usb2, usb_bias.
262
263      The following pads are present on Tegra210
264      audio, audio-hv, cam, csia, csib, csic, csid, csie, csif, dbg,
265      debug-nonao, dmic, dp, dsi, dsib, dsic, dsid, emmc, emmc2, gpio, hdmi,
266      hsic, lvds, mipi-bias, pex-bias, pex-clk1, pex-clk2, pex-cntrl, sdmmc1,
267      sdmmc3, spi, spi-hv, uart, usb0, usb1, usb2, usb3, usb-bias.
268
269    properties:
270      pins:
271        $ref: /schemas/types.yaml#/definitions/string
272        description: Must contain name of the pad(s) to be configured.
273
274      low-power-enable:
275        $ref: /schemas/types.yaml#/definitions/flag
276        description: Configure the pad into power down mode.
277
278      low-power-disable:
279        $ref: /schemas/types.yaml#/definitions/flag
280        description: Configure the pad into active mode.
281
282      power-source:
283        $ref: /schemas/types.yaml#/definitions/uint32
284        description:
285          Must contain either TEGRA_IO_PAD_VOLTAGE_1V8 or
286          TEGRA_IO_PAD_VOLTAGE_3V3 to select between signaling voltages.
287          The values are defined in
288          include/dt-bindings/pinctrl/pinctrl-tegra-io-pad.h.
289          Power state can be configured on all Tegra124 and Tegra132
290          pads. None of the Tegra124 or Tegra132 pads support signaling
291          voltage switching.
292          All of the listed Tegra210 pads except pex-cntrl support power
293          state configuration. Signaling voltage switching is supported
294          on below Tegra210 pads.
295          audio, audio-hv, cam, dbg, dmic, gpio, pex-cntrl, sdmmc1,
296          sdmmc3, spi, spi-hv, and uart.
297
298    required:
299      - pins
300
301    additionalProperties: false
302
303  core-domain:
304    type: object
305    description: |
306      The vast majority of hardware blocks of Tegra SoC belong to a
307      Core power domain, which has a dedicated voltage rail that powers
308      the blocks.
309
310    properties:
311      operating-points-v2:
312        description:
313          Should contain level, voltages and opp-supported-hw property.
314          The supported-hw is a bitfield indicating SoC speedo or process
315          ID mask.
316
317      "#power-domain-cells":
318        const: 0
319
320    required:
321      - operating-points-v2
322      - "#power-domain-cells"
323
324    additionalProperties: false
325
326  core-supply:
327    description:
328      Phandle to voltage regulator connected to the SoC Core power rail.
329
330required:
331  - compatible
332  - reg
333  - clock-names
334  - clocks
335  - '#clock-cells'
336
337additionalProperties: false
338
339dependencies:
340  "nvidia,suspend-mode": ["nvidia,core-pwr-off-time", "nvidia,cpu-pwr-off-time"]
341  "nvidia,core-pwr-off-time": ["nvidia,core-pwr-good-time"]
342  "nvidia,cpu-pwr-off-time": ["nvidia,cpu-pwr-good-time"]
343
344examples:
345  - |
346
347    #include <dt-bindings/clock/tegra210-car.h>
348    #include <dt-bindings/pinctrl/pinctrl-tegra-io-pad.h>
349    #include <dt-bindings/soc/tegra-pmc.h>
350
351    tegra_pmc: pmc@7000e400 {
352              compatible = "nvidia,tegra210-pmc";
353              reg = <0x7000e400 0x400>;
354              core-supply = <&regulator>;
355              clocks = <&tegra_car TEGRA210_CLK_PCLK>, <&clk32k_in>;
356              clock-names = "pclk", "clk32k_in";
357              #clock-cells = <1>;
358
359              nvidia,invert-interrupt;
360              nvidia,suspend-mode = <0>;
361              nvidia,cpu-pwr-good-time = <0>;
362              nvidia,cpu-pwr-off-time = <0>;
363              nvidia,core-pwr-good-time = <4587 3876>;
364              nvidia,core-pwr-off-time = <39065>;
365              nvidia,core-power-req-active-high;
366              nvidia,sys-clock-req-active-high;
367
368              pd_core: core-domain {
369                      operating-points-v2 = <&core_opp_table>;
370                      #power-domain-cells = <0>;
371              };
372
373              powergates {
374                    pd_audio: aud {
375                            clocks = <&tegra_car TEGRA210_CLK_APE>,
376                                     <&tegra_car TEGRA210_CLK_APB2APE>;
377                            resets = <&tegra_car 198>;
378                            power-domains = <&pd_core>;
379                            #power-domain-cells = <0>;
380                    };
381
382                    pd_xusbss: xusba {
383                            clocks = <&tegra_car TEGRA210_CLK_XUSB_SS>;
384                            resets = <&tegra_car TEGRA210_CLK_XUSB_SS>;
385                            power-domains = <&pd_core>;
386                            #power-domain-cells = <0>;
387                    };
388              };
389    };
390