187 lines
5.6 KiB
YAML
187 lines
5.6 KiB
YAML
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/firmware/nvidia,tegra186-bpmp.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: NVIDIA Tegra Boot and Power Management Processor (BPMP)
|
|
|
|
maintainers:
|
|
- Thierry Reding <thierry.reding@gmail.com>
|
|
- Jon Hunter <jonathanh@nvidia.com>
|
|
|
|
description: |
|
|
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.
|
|
|
|
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.yaml
|
|
|
|
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:
|
|
|
|
- .../clock/clock-bindings.txt
|
|
- <dt-bindings/clock/tegra186-clock.h>
|
|
- ../power/power-domain.yaml
|
|
- <dt-bindings/power/tegra186-powergate.h>
|
|
- .../reset/reset.txt
|
|
- <dt-bindings/reset/tegra186-reset.h>
|
|
|
|
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.
|
|
|
|
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.yaml" for the bindings.
|
|
|
|
properties:
|
|
compatible:
|
|
oneOf:
|
|
- items:
|
|
- enum:
|
|
- nvidia,tegra194-bpmp
|
|
- nvidia,tegra234-bpmp
|
|
- const: nvidia,tegra186-bpmp
|
|
- const: nvidia,tegra186-bpmp
|
|
|
|
mboxes:
|
|
description: A phandle and channel specifier for the mailbox used to
|
|
communicate with the BPMP.
|
|
maxItems: 1
|
|
|
|
shmem:
|
|
description: List of the phandle to the TX and RX shared memory area
|
|
that the IPC between CPU and BPMP is based on.
|
|
minItems: 2
|
|
maxItems: 2
|
|
|
|
"#clock-cells":
|
|
const: 1
|
|
|
|
"#power-domain-cells":
|
|
const: 1
|
|
|
|
"#reset-cells":
|
|
const: 1
|
|
|
|
interconnects:
|
|
items:
|
|
- description: memory read client
|
|
- description: memory write client
|
|
- description: DMA read client
|
|
- description: DMA write client
|
|
|
|
interconnect-names:
|
|
items:
|
|
- const: read
|
|
- const: write
|
|
- const: dma-mem # dma-read
|
|
- const: dma-write
|
|
|
|
iommus:
|
|
maxItems: 1
|
|
|
|
i2c:
|
|
type: object
|
|
|
|
thermal:
|
|
type: object
|
|
|
|
additionalProperties: false
|
|
|
|
required:
|
|
- compatible
|
|
- mboxes
|
|
- shmem
|
|
- "#clock-cells"
|
|
- "#power-domain-cells"
|
|
- "#reset-cells"
|
|
|
|
examples:
|
|
- |
|
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
|
#include <dt-bindings/mailbox/tegra186-hsp.h>
|
|
#include <dt-bindings/memory/tegra186-mc.h>
|
|
|
|
hsp_top0: hsp@3c00000 {
|
|
compatible = "nvidia,tegra186-hsp";
|
|
reg = <0x03c00000 0xa0000>;
|
|
interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
|
|
interrupt-names = "doorbell";
|
|
#mbox-cells = <2>;
|
|
};
|
|
|
|
sram@30000000 {
|
|
compatible = "nvidia,tegra186-sysram", "mmio-sram";
|
|
reg = <0x30000000 0x50000>;
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
ranges = <0x0 0x30000000 0x50000>;
|
|
|
|
cpu_bpmp_tx: sram@4e000 {
|
|
reg = <0x4e000 0x1000>;
|
|
label = "cpu-bpmp-tx";
|
|
pool;
|
|
};
|
|
|
|
cpu_bpmp_rx: sram@4f000 {
|
|
reg = <0x4f000 0x1000>;
|
|
label = "cpu-bpmp-rx";
|
|
pool;
|
|
};
|
|
};
|
|
|
|
bpmp {
|
|
compatible = "nvidia,tegra186-bpmp";
|
|
interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>,
|
|
<&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>,
|
|
<&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>,
|
|
<&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>;
|
|
interconnect-names = "read", "write", "dma-mem", "dma-write";
|
|
iommus = <&smmu TEGRA186_SID_BPMP>;
|
|
mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB
|
|
TEGRA_HSP_DB_MASTER_BPMP>;
|
|
shmem = <&cpu_bpmp_tx>, <&cpu_bpmp_rx>;
|
|
#clock-cells = <1>;
|
|
#power-domain-cells = <1>;
|
|
#reset-cells = <1>;
|
|
|
|
i2c {
|
|
compatible = "nvidia,tegra186-bpmp-i2c";
|
|
nvidia,bpmp-bus-id = <5>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
};
|
|
|
|
thermal {
|
|
compatible = "nvidia,tegra186-bpmp-thermal";
|
|
#thermal-sensor-cells = <1>;
|
|
};
|
|
};
|