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