xref: /freebsd/sys/contrib/device-tree/Bindings/firmware/nvidia,tegra186-bpmp.yaml (revision aa1a8ff2d6dbc51ef058f46f3db5a8bb77967145)
1e67e8565SEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2e67e8565SEmmanuel Vadot%YAML 1.2
3e67e8565SEmmanuel Vadot---
4e67e8565SEmmanuel Vadot$id: http://devicetree.org/schemas/firmware/nvidia,tegra186-bpmp.yaml#
5e67e8565SEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6e67e8565SEmmanuel Vadot
7e67e8565SEmmanuel Vadottitle: NVIDIA Tegra Boot and Power Management Processor (BPMP)
8e67e8565SEmmanuel Vadot
9e67e8565SEmmanuel Vadotmaintainers:
10e67e8565SEmmanuel Vadot  - Thierry Reding <thierry.reding@gmail.com>
11e67e8565SEmmanuel Vadot  - Jon Hunter <jonathanh@nvidia.com>
12e67e8565SEmmanuel Vadot
13e67e8565SEmmanuel Vadotdescription: |
14e67e8565SEmmanuel Vadot  The BPMP is a specific processor in Tegra chip, which is designed for
15e67e8565SEmmanuel Vadot  booting process handling and offloading the power management, clock
16e67e8565SEmmanuel Vadot  management, and reset control tasks from the CPU. The binding document
17e67e8565SEmmanuel Vadot  defines the resources that would be used by the BPMP firmware driver,
18e67e8565SEmmanuel Vadot  which can create the interprocessor communication (IPC) between the
19e67e8565SEmmanuel Vadot  CPU and BPMP.
20e67e8565SEmmanuel Vadot
21e67e8565SEmmanuel Vadot  This node is a mailbox consumer. See the following files for details
22e67e8565SEmmanuel Vadot  of the mailbox subsystem, and the specifiers implemented by the
23e67e8565SEmmanuel Vadot  relevant provider(s):
24e67e8565SEmmanuel Vadot
25e67e8565SEmmanuel Vadot    - .../mailbox/mailbox.txt
26e67e8565SEmmanuel Vadot    - .../mailbox/nvidia,tegra186-hsp.yaml
27e67e8565SEmmanuel Vadot
28e67e8565SEmmanuel Vadot  This node is a clock, power domain, and reset provider. See the
29e67e8565SEmmanuel Vadot  following files for general documentation of those features, and the
30e67e8565SEmmanuel Vadot  specifiers implemented by this node:
31e67e8565SEmmanuel Vadot
32e67e8565SEmmanuel Vadot    - .../clock/clock-bindings.txt
33e67e8565SEmmanuel Vadot    - <dt-bindings/clock/tegra186-clock.h>
34e67e8565SEmmanuel Vadot    - ../power/power-domain.yaml
35e67e8565SEmmanuel Vadot    - <dt-bindings/power/tegra186-powergate.h>
36e67e8565SEmmanuel Vadot    - .../reset/reset.txt
37e67e8565SEmmanuel Vadot    - <dt-bindings/reset/tegra186-reset.h>
38e67e8565SEmmanuel Vadot
39e67e8565SEmmanuel Vadot  The BPMP implements some services which must be represented by
40e67e8565SEmmanuel Vadot  separate nodes. For example, it can provide access to certain I2C
41e67e8565SEmmanuel Vadot  controllers, and the I2C bindings represent each I2C controller as a
42e67e8565SEmmanuel Vadot  device tree node. Such nodes should be nested directly inside the main
43e67e8565SEmmanuel Vadot  BPMP node.
44e67e8565SEmmanuel Vadot
45e67e8565SEmmanuel Vadot  Software can determine whether a child node of the BPMP node
46e67e8565SEmmanuel Vadot  represents a device by checking for a compatible property. Any node
47e67e8565SEmmanuel Vadot  with a compatible property represents a device that can be
48e67e8565SEmmanuel Vadot  instantiated. Nodes without a compatible property may be used to
49e67e8565SEmmanuel Vadot  provide configuration information regarding the BPMP itself, although
50e67e8565SEmmanuel Vadot  no such configuration nodes are currently defined by this binding.
51e67e8565SEmmanuel Vadot
52e67e8565SEmmanuel Vadot  The BPMP firmware defines no single global name-/numbering-space for
53e67e8565SEmmanuel Vadot  such services. Put another way, the numbering scheme for I2C buses is
54e67e8565SEmmanuel Vadot  distinct from the numbering scheme for any other service the BPMP may
55e67e8565SEmmanuel Vadot  provide (e.g. a future hypothetical SPI bus service). As such, child
56e67e8565SEmmanuel Vadot  device nodes will have no reg property, and the BPMP node will have no
57e67e8565SEmmanuel Vadot  "#address-cells" or "#size-cells" property.
58e67e8565SEmmanuel Vadot
59e67e8565SEmmanuel Vadot  The shared memory area for the IPC TX and RX between CPU and BPMP are
60*aa1a8ff2SEmmanuel Vadot  predefined and work on top of either sysram, which is an SRAM inside the
61*aa1a8ff2SEmmanuel Vadot  chip, or in normal SDRAM.
62*aa1a8ff2SEmmanuel Vadot  See ".../sram/sram.yaml" for the bindings for the SRAM case.
63*aa1a8ff2SEmmanuel Vadot  See "../reserved-memory/nvidia,tegra264-bpmp-shmem.yaml" for bindings for
64*aa1a8ff2SEmmanuel Vadot  the SDRAM case.
65e67e8565SEmmanuel Vadot
66e67e8565SEmmanuel Vadotproperties:
67e67e8565SEmmanuel Vadot  compatible:
68e67e8565SEmmanuel Vadot    oneOf:
69e67e8565SEmmanuel Vadot      - items:
70e67e8565SEmmanuel Vadot          - enum:
71e67e8565SEmmanuel Vadot              - nvidia,tegra194-bpmp
72e67e8565SEmmanuel Vadot              - nvidia,tegra234-bpmp
73e67e8565SEmmanuel Vadot          - const: nvidia,tegra186-bpmp
74e67e8565SEmmanuel Vadot      - const: nvidia,tegra186-bpmp
75e67e8565SEmmanuel Vadot
76e67e8565SEmmanuel Vadot  mboxes:
77e67e8565SEmmanuel Vadot    description: A phandle and channel specifier for the mailbox used to
78e67e8565SEmmanuel Vadot      communicate with the BPMP.
79e67e8565SEmmanuel Vadot    maxItems: 1
80e67e8565SEmmanuel Vadot
81e67e8565SEmmanuel Vadot  shmem:
82e67e8565SEmmanuel Vadot    description: List of the phandle to the TX and RX shared memory area
83e67e8565SEmmanuel Vadot      that the IPC between CPU and BPMP is based on.
84e67e8565SEmmanuel Vadot    minItems: 2
85e67e8565SEmmanuel Vadot    maxItems: 2
86e67e8565SEmmanuel Vadot
87*aa1a8ff2SEmmanuel Vadot  memory-region:
88*aa1a8ff2SEmmanuel Vadot    description: phandle to reserved memory region used for IPC between
89*aa1a8ff2SEmmanuel Vadot      CPU-NS and BPMP.
90*aa1a8ff2SEmmanuel Vadot    maxItems: 1
91*aa1a8ff2SEmmanuel Vadot
92e67e8565SEmmanuel Vadot  "#clock-cells":
93e67e8565SEmmanuel Vadot    const: 1
94e67e8565SEmmanuel Vadot
95e67e8565SEmmanuel Vadot  "#power-domain-cells":
96e67e8565SEmmanuel Vadot    const: 1
97e67e8565SEmmanuel Vadot
98e67e8565SEmmanuel Vadot  "#reset-cells":
99e67e8565SEmmanuel Vadot    const: 1
100e67e8565SEmmanuel Vadot
101e67e8565SEmmanuel Vadot  interconnects:
102e67e8565SEmmanuel Vadot    items:
103e67e8565SEmmanuel Vadot      - description: memory read client
104e67e8565SEmmanuel Vadot      - description: memory write client
105e67e8565SEmmanuel Vadot      - description: DMA read client
106e67e8565SEmmanuel Vadot      - description: DMA write client
107e67e8565SEmmanuel Vadot
108e67e8565SEmmanuel Vadot  interconnect-names:
109e67e8565SEmmanuel Vadot    items:
110e67e8565SEmmanuel Vadot      - const: read
111e67e8565SEmmanuel Vadot      - const: write
112e67e8565SEmmanuel Vadot      - const: dma-mem # dma-read
113e67e8565SEmmanuel Vadot      - const: dma-write
114e67e8565SEmmanuel Vadot
115e67e8565SEmmanuel Vadot  iommus:
116e67e8565SEmmanuel Vadot    maxItems: 1
117e67e8565SEmmanuel Vadot
118e67e8565SEmmanuel Vadot  i2c:
119e67e8565SEmmanuel Vadot    type: object
120e67e8565SEmmanuel Vadot
121e67e8565SEmmanuel Vadot  thermal:
122e67e8565SEmmanuel Vadot    type: object
123e67e8565SEmmanuel Vadot
124e67e8565SEmmanuel VadotadditionalProperties: false
125e67e8565SEmmanuel Vadot
126*aa1a8ff2SEmmanuel VadotoneOf:
127*aa1a8ff2SEmmanuel Vadot  - required:
128*aa1a8ff2SEmmanuel Vadot      - memory-region
129*aa1a8ff2SEmmanuel Vadot  - required:
130*aa1a8ff2SEmmanuel Vadot      - shmem
131*aa1a8ff2SEmmanuel Vadot
132e67e8565SEmmanuel Vadotrequired:
133e67e8565SEmmanuel Vadot  - compatible
134e67e8565SEmmanuel Vadot  - mboxes
135e67e8565SEmmanuel Vadot  - "#clock-cells"
136e67e8565SEmmanuel Vadot  - "#power-domain-cells"
137e67e8565SEmmanuel Vadot  - "#reset-cells"
138e67e8565SEmmanuel Vadot
139e67e8565SEmmanuel Vadotexamples:
140e67e8565SEmmanuel Vadot  - |
141e67e8565SEmmanuel Vadot    #include <dt-bindings/interrupt-controller/arm-gic.h>
142e67e8565SEmmanuel Vadot    #include <dt-bindings/mailbox/tegra186-hsp.h>
143e67e8565SEmmanuel Vadot    #include <dt-bindings/memory/tegra186-mc.h>
144e67e8565SEmmanuel Vadot
145e67e8565SEmmanuel Vadot    hsp_top0: hsp@3c00000 {
146e67e8565SEmmanuel Vadot        compatible = "nvidia,tegra186-hsp";
147e67e8565SEmmanuel Vadot        reg = <0x03c00000 0xa0000>;
148e67e8565SEmmanuel Vadot        interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
149e67e8565SEmmanuel Vadot        interrupt-names = "doorbell";
150e67e8565SEmmanuel Vadot        #mbox-cells = <2>;
151e67e8565SEmmanuel Vadot    };
152e67e8565SEmmanuel Vadot
153e67e8565SEmmanuel Vadot    sram@30000000 {
154e67e8565SEmmanuel Vadot        compatible = "nvidia,tegra186-sysram", "mmio-sram";
155e67e8565SEmmanuel Vadot        reg = <0x30000000 0x50000>;
156e67e8565SEmmanuel Vadot        #address-cells = <1>;
157e67e8565SEmmanuel Vadot        #size-cells = <1>;
158e67e8565SEmmanuel Vadot        ranges = <0x0 0x30000000 0x50000>;
159e67e8565SEmmanuel Vadot
160e67e8565SEmmanuel Vadot        cpu_bpmp_tx: sram@4e000 {
161e67e8565SEmmanuel Vadot            reg = <0x4e000 0x1000>;
162e67e8565SEmmanuel Vadot            label = "cpu-bpmp-tx";
163e67e8565SEmmanuel Vadot            pool;
164e67e8565SEmmanuel Vadot        };
165e67e8565SEmmanuel Vadot
166e67e8565SEmmanuel Vadot        cpu_bpmp_rx: sram@4f000 {
167e67e8565SEmmanuel Vadot            reg = <0x4f000 0x1000>;
168e67e8565SEmmanuel Vadot            label = "cpu-bpmp-rx";
169e67e8565SEmmanuel Vadot            pool;
170e67e8565SEmmanuel Vadot        };
171e67e8565SEmmanuel Vadot    };
172e67e8565SEmmanuel Vadot
173e67e8565SEmmanuel Vadot    bpmp {
174e67e8565SEmmanuel Vadot        compatible = "nvidia,tegra186-bpmp";
175e67e8565SEmmanuel Vadot        interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>,
176e67e8565SEmmanuel Vadot                        <&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>,
177e67e8565SEmmanuel Vadot                        <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>,
178e67e8565SEmmanuel Vadot                        <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>;
179e67e8565SEmmanuel Vadot        interconnect-names = "read", "write", "dma-mem", "dma-write";
180e67e8565SEmmanuel Vadot        iommus = <&smmu TEGRA186_SID_BPMP>;
181*aa1a8ff2SEmmanuel Vadot        mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>;
182e67e8565SEmmanuel Vadot        shmem = <&cpu_bpmp_tx>, <&cpu_bpmp_rx>;
183e67e8565SEmmanuel Vadot        #clock-cells = <1>;
184e67e8565SEmmanuel Vadot        #power-domain-cells = <1>;
185e67e8565SEmmanuel Vadot        #reset-cells = <1>;
186e67e8565SEmmanuel Vadot
187e67e8565SEmmanuel Vadot        i2c {
188e67e8565SEmmanuel Vadot            compatible = "nvidia,tegra186-bpmp-i2c";
189e67e8565SEmmanuel Vadot            nvidia,bpmp-bus-id = <5>;
190e67e8565SEmmanuel Vadot            #address-cells = <1>;
191e67e8565SEmmanuel Vadot            #size-cells = <0>;
192e67e8565SEmmanuel Vadot        };
193e67e8565SEmmanuel Vadot
194e67e8565SEmmanuel Vadot        thermal {
195e67e8565SEmmanuel Vadot            compatible = "nvidia,tegra186-bpmp-thermal";
196e67e8565SEmmanuel Vadot            #thermal-sensor-cells = <1>;
197e67e8565SEmmanuel Vadot        };
198e67e8565SEmmanuel Vadot    };
199*aa1a8ff2SEmmanuel Vadot
200*aa1a8ff2SEmmanuel Vadot  - |
201*aa1a8ff2SEmmanuel Vadot    #include <dt-bindings/mailbox/tegra186-hsp.h>
202*aa1a8ff2SEmmanuel Vadot
203*aa1a8ff2SEmmanuel Vadot    bpmp {
204*aa1a8ff2SEmmanuel Vadot        compatible = "nvidia,tegra186-bpmp";
205*aa1a8ff2SEmmanuel Vadot        interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>,
206*aa1a8ff2SEmmanuel Vadot                        <&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>,
207*aa1a8ff2SEmmanuel Vadot                        <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>,
208*aa1a8ff2SEmmanuel Vadot                        <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>;
209*aa1a8ff2SEmmanuel Vadot        interconnect-names = "read", "write", "dma-mem", "dma-write";
210*aa1a8ff2SEmmanuel Vadot        mboxes = <&hsp_top1 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>;
211*aa1a8ff2SEmmanuel Vadot        memory-region = <&dram_cpu_bpmp_mail>;
212*aa1a8ff2SEmmanuel Vadot        #clock-cells = <1>;
213*aa1a8ff2SEmmanuel Vadot        #power-domain-cells = <1>;
214*aa1a8ff2SEmmanuel Vadot        #reset-cells = <1>;
215*aa1a8ff2SEmmanuel Vadot    };
216