xref: /freebsd/sys/contrib/device-tree/Bindings/firmware/nvidia,tegra186-bpmp.txt (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
1*c66ec88fSEmmanuel VadotNVIDIA Tegra Boot and Power Management Processor (BPMP)
2*c66ec88fSEmmanuel Vadot
3*c66ec88fSEmmanuel VadotThe BPMP is a specific processor in Tegra chip, which is designed for
4*c66ec88fSEmmanuel Vadotbooting process handling and offloading the power management, clock
5*c66ec88fSEmmanuel Vadotmanagement, and reset control tasks from the CPU. The binding document
6*c66ec88fSEmmanuel Vadotdefines the resources that would be used by the BPMP firmware driver,
7*c66ec88fSEmmanuel Vadotwhich can create the interprocessor communication (IPC) between the CPU
8*c66ec88fSEmmanuel Vadotand BPMP.
9*c66ec88fSEmmanuel Vadot
10*c66ec88fSEmmanuel VadotRequired properties:
11*c66ec88fSEmmanuel Vadot- compatible
12*c66ec88fSEmmanuel Vadot    Array of strings
13*c66ec88fSEmmanuel Vadot    One of:
14*c66ec88fSEmmanuel Vadot    - "nvidia,tegra186-bpmp"
15*c66ec88fSEmmanuel Vadot- mboxes : The phandle of mailbox controller and the mailbox specifier.
16*c66ec88fSEmmanuel Vadot- shmem : List of the phandle of the TX and RX shared memory area that
17*c66ec88fSEmmanuel Vadot	  the IPC between CPU and BPMP is based on.
18*c66ec88fSEmmanuel Vadot- #clock-cells : Should be 1.
19*c66ec88fSEmmanuel Vadot- #power-domain-cells : Should be 1.
20*c66ec88fSEmmanuel Vadot- #reset-cells : Should be 1.
21*c66ec88fSEmmanuel Vadot
22*c66ec88fSEmmanuel VadotThis node is a mailbox consumer. See the following files for details of
23*c66ec88fSEmmanuel Vadotthe mailbox subsystem, and the specifiers implemented by the relevant
24*c66ec88fSEmmanuel Vadotprovider(s):
25*c66ec88fSEmmanuel Vadot
26*c66ec88fSEmmanuel Vadot- .../mailbox/mailbox.txt
27*c66ec88fSEmmanuel Vadot- .../mailbox/nvidia,tegra186-hsp.txt
28*c66ec88fSEmmanuel Vadot
29*c66ec88fSEmmanuel VadotThis node is a clock, power domain, and reset provider. See the following
30*c66ec88fSEmmanuel Vadotfiles for general documentation of those features, and the specifiers
31*c66ec88fSEmmanuel Vadotimplemented by this node:
32*c66ec88fSEmmanuel Vadot
33*c66ec88fSEmmanuel Vadot- .../clock/clock-bindings.txt
34*c66ec88fSEmmanuel Vadot- <dt-bindings/clock/tegra186-clock.h>
35*c66ec88fSEmmanuel Vadot- ../power/power-domain.yaml
36*c66ec88fSEmmanuel Vadot- <dt-bindings/power/tegra186-powergate.h>
37*c66ec88fSEmmanuel Vadot- .../reset/reset.txt
38*c66ec88fSEmmanuel Vadot- <dt-bindings/reset/tegra186-reset.h>
39*c66ec88fSEmmanuel Vadot
40*c66ec88fSEmmanuel VadotThe BPMP implements some services which must be represented by separate nodes.
41*c66ec88fSEmmanuel VadotFor example, it can provide access to certain I2C controllers, and the I2C
42*c66ec88fSEmmanuel Vadotbindings represent each I2C controller as a device tree node. Such nodes should
43*c66ec88fSEmmanuel Vadotbe nested directly inside the main BPMP node.
44*c66ec88fSEmmanuel Vadot
45*c66ec88fSEmmanuel VadotSoftware can determine whether a child node of the BPMP node represents a device
46*c66ec88fSEmmanuel Vadotby checking for a compatible property. Any node with a compatible property
47*c66ec88fSEmmanuel Vadotrepresents a device that can be instantiated. Nodes without a compatible
48*c66ec88fSEmmanuel Vadotproperty may be used to provide configuration information regarding the BPMP
49*c66ec88fSEmmanuel Vadotitself, although no such configuration nodes are currently defined by this
50*c66ec88fSEmmanuel Vadotbinding.
51*c66ec88fSEmmanuel Vadot
52*c66ec88fSEmmanuel VadotThe BPMP firmware defines no single global name-/numbering-space for such
53*c66ec88fSEmmanuel Vadotservices. Put another way, the numbering scheme for I2C buses is distinct from
54*c66ec88fSEmmanuel Vadotthe numbering scheme for any other service the BPMP may provide (e.g. a future
55*c66ec88fSEmmanuel Vadothypothetical SPI bus service). As such, child device nodes will have no reg
56*c66ec88fSEmmanuel Vadotproperty, and the BPMP node will have no #address-cells or #size-cells property.
57*c66ec88fSEmmanuel Vadot
58*c66ec88fSEmmanuel VadotThe shared memory bindings for BPMP
59*c66ec88fSEmmanuel Vadot-----------------------------------
60*c66ec88fSEmmanuel Vadot
61*c66ec88fSEmmanuel VadotThe shared memory area for the IPC TX and RX between CPU and BPMP are
62*c66ec88fSEmmanuel Vadotpredefined and work on top of sysram, which is an SRAM inside the chip.
63*c66ec88fSEmmanuel Vadot
64*c66ec88fSEmmanuel VadotSee ".../sram/sram.txt" for the bindings.
65*c66ec88fSEmmanuel Vadot
66*c66ec88fSEmmanuel VadotExample:
67*c66ec88fSEmmanuel Vadot
68*c66ec88fSEmmanuel Vadothsp_top0: hsp@3c00000 {
69*c66ec88fSEmmanuel Vadot	...
70*c66ec88fSEmmanuel Vadot	#mbox-cells = <2>;
71*c66ec88fSEmmanuel Vadot};
72*c66ec88fSEmmanuel Vadot
73*c66ec88fSEmmanuel Vadotsysram@30000000 {
74*c66ec88fSEmmanuel Vadot	compatible = "nvidia,tegra186-sysram", "mmio-sram";
75*c66ec88fSEmmanuel Vadot	reg = <0x0 0x30000000 0x0 0x50000>;
76*c66ec88fSEmmanuel Vadot	#address-cells = <2>;
77*c66ec88fSEmmanuel Vadot	#size-cells = <2>;
78*c66ec88fSEmmanuel Vadot	ranges = <0 0x0 0x0 0x30000000 0x0 0x50000>;
79*c66ec88fSEmmanuel Vadot
80*c66ec88fSEmmanuel Vadot	cpu_bpmp_tx: shmem@4e000 {
81*c66ec88fSEmmanuel Vadot		compatible = "nvidia,tegra186-bpmp-shmem";
82*c66ec88fSEmmanuel Vadot		reg = <0x0 0x4e000 0x0 0x1000>;
83*c66ec88fSEmmanuel Vadot		label = "cpu-bpmp-tx";
84*c66ec88fSEmmanuel Vadot		pool;
85*c66ec88fSEmmanuel Vadot	};
86*c66ec88fSEmmanuel Vadot
87*c66ec88fSEmmanuel Vadot	cpu_bpmp_rx: shmem@4f000 {
88*c66ec88fSEmmanuel Vadot		compatible = "nvidia,tegra186-bpmp-shmem";
89*c66ec88fSEmmanuel Vadot		reg = <0x0 0x4f000 0x0 0x1000>;
90*c66ec88fSEmmanuel Vadot		label = "cpu-bpmp-rx";
91*c66ec88fSEmmanuel Vadot		pool;
92*c66ec88fSEmmanuel Vadot	};
93*c66ec88fSEmmanuel Vadot};
94*c66ec88fSEmmanuel Vadot
95*c66ec88fSEmmanuel Vadotbpmp {
96*c66ec88fSEmmanuel Vadot	compatible = "nvidia,tegra186-bpmp";
97*c66ec88fSEmmanuel Vadot	mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>;
98*c66ec88fSEmmanuel Vadot	shmem = <&cpu_bpmp_tx &cpu_bpmp_rx>;
99*c66ec88fSEmmanuel Vadot	#clock-cells = <1>;
100*c66ec88fSEmmanuel Vadot	#power-domain-cells = <1>;
101*c66ec88fSEmmanuel Vadot	#reset-cells = <1>;
102*c66ec88fSEmmanuel Vadot
103*c66ec88fSEmmanuel Vadot	i2c {
104*c66ec88fSEmmanuel Vadot		compatible = "...";
105*c66ec88fSEmmanuel Vadot		...
106*c66ec88fSEmmanuel Vadot	};
107*c66ec88fSEmmanuel Vadot};
108