| # 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>; |
| }; |
| }; |