2016-07-05 09:04:24 +00:00
|
|
|
NVIDIA Tegra Boot and Power Management Processor (BPMP)
|
|
|
|
|
|
|
|
The BPMP is a specific processor in Tegra chip, which is designed for
|
|
|
|
booting process handling and offloading the power management, clock
|
|
|
|
management, and reset control tasks from the CPU. The binding document
|
|
|
|
defines the resources that would be used by the BPMP firmware driver,
|
|
|
|
which can create the interprocessor communication (IPC) between the CPU
|
|
|
|
and BPMP.
|
|
|
|
|
|
|
|
Required properties:
|
|
|
|
- name : Should be bpmp
|
|
|
|
- compatible
|
|
|
|
Array of strings
|
|
|
|
One of:
|
|
|
|
- "nvidia,tegra186-bpmp"
|
|
|
|
- mboxes : The phandle of mailbox controller and the mailbox specifier.
|
|
|
|
- shmem : List of the phandle of the TX and RX shared memory area that
|
|
|
|
the IPC between CPU and BPMP is based on.
|
|
|
|
- #clock-cells : Should be 1.
|
2016-07-19 19:14:40 +00:00
|
|
|
- #power-domain-cells : Should be 1.
|
2016-07-05 09:04:24 +00:00
|
|
|
- #reset-cells : Should be 1.
|
|
|
|
|
|
|
|
This node is a mailbox consumer. See the following files for details of
|
|
|
|
the mailbox subsystem, and the specifiers implemented by the relevant
|
|
|
|
provider(s):
|
|
|
|
|
|
|
|
- .../mailbox/mailbox.txt
|
|
|
|
- .../mailbox/nvidia,tegra186-hsp.txt
|
|
|
|
|
2016-07-19 19:14:40 +00:00
|
|
|
This node is a clock, power domain, and reset provider. See the following
|
|
|
|
files for general documentation of those features, and the specifiers
|
|
|
|
implemented by this node:
|
2016-07-05 09:04:24 +00:00
|
|
|
|
|
|
|
- .../clock/clock-bindings.txt
|
|
|
|
- <dt-bindings/clock/tegra186-clock.h>
|
2016-07-19 19:14:40 +00:00
|
|
|
- ../power/power_domain.txt
|
|
|
|
- <dt-bindings/power/tegra186-powergate.h>
|
2016-07-05 09:04:24 +00:00
|
|
|
- .../reset/reset.txt
|
|
|
|
- <dt-bindings/reset/tegra186-reset.h>
|
|
|
|
|
2016-07-19 19:14:41 +00:00
|
|
|
The BPMP implements some services which must be represented by separate nodes.
|
|
|
|
For example, it can provide access to certain I2C controllers, and the I2C
|
|
|
|
bindings represent each I2C controller as a device tree node. Such nodes should
|
|
|
|
be nested directly inside the main BPMP node.
|
|
|
|
|
|
|
|
Software can determine whether a child node of the BPMP node represents a device
|
|
|
|
by checking for a compatible property. Any node with a compatible property
|
|
|
|
represents a device that can be instantiated. Nodes without a compatible
|
|
|
|
property may be used to provide configuration information regarding the BPMP
|
|
|
|
itself, although no such configuration nodes are currently defined by this
|
|
|
|
binding.
|
|
|
|
|
|
|
|
The BPMP firmware defines no single global name-/numbering-space for such
|
|
|
|
services. Put another way, the numbering scheme for I2C buses is distinct from
|
|
|
|
the numbering scheme for any other service the BPMP may provide (e.g. a future
|
|
|
|
hypothetical SPI bus service). As such, child device nodes will have no reg
|
|
|
|
property, and the BPMP node will have no #address-cells or #size-cells property.
|
|
|
|
|
2016-07-05 09:04:24 +00:00
|
|
|
The shared memory bindings for BPMP
|
|
|
|
-----------------------------------
|
|
|
|
|
|
|
|
The shared memory area for the IPC TX and RX between CPU and BPMP are
|
|
|
|
predefined and work on top of sysram, which is an SRAM inside the chip.
|
|
|
|
|
|
|
|
See ".../sram/sram.txt" for the bindings.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
hsp_top0: hsp@03c00000 {
|
|
|
|
...
|
|
|
|
#mbox-cells = <2>;
|
|
|
|
};
|
|
|
|
|
|
|
|
sysram@30000000 {
|
|
|
|
compatible = "nvidia,tegra186-sysram", "mmio-sram";
|
|
|
|
reg = <0x0 0x30000000 0x0 0x50000>;
|
|
|
|
#address-cells = <2>;
|
|
|
|
#size-cells = <2>;
|
|
|
|
ranges = <0 0x0 0x0 0x30000000 0x0 0x50000>;
|
|
|
|
|
|
|
|
cpu_bpmp_tx: shmem@4e000 {
|
|
|
|
compatible = "nvidia,tegra186-bpmp-shmem";
|
|
|
|
reg = <0x0 0x4e000 0x0 0x1000>;
|
|
|
|
label = "cpu-bpmp-tx";
|
|
|
|
pool;
|
|
|
|
};
|
|
|
|
|
|
|
|
cpu_bpmp_rx: shmem@4f000 {
|
|
|
|
compatible = "nvidia,tegra186-bpmp-shmem";
|
|
|
|
reg = <0x0 0x4f000 0x0 0x1000>;
|
|
|
|
label = "cpu-bpmp-rx";
|
|
|
|
pool;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
bpmp {
|
|
|
|
compatible = "nvidia,tegra186-bpmp";
|
|
|
|
mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>;
|
|
|
|
shmem = <&cpu_bpmp_tx &cpu_bpmp_rx>;
|
|
|
|
#clock-cells = <1>;
|
2016-07-19 19:14:40 +00:00
|
|
|
#power-domain-cells = <1>;
|
2016-07-05 09:04:24 +00:00
|
|
|
#reset-cells = <1>;
|
2016-07-19 19:14:41 +00:00
|
|
|
|
|
|
|
i2c {
|
|
|
|
compatible = "...";
|
|
|
|
...
|
|
|
|
};
|
2016-07-05 09:04:24 +00:00
|
|
|
};
|