162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/firmware/nvidia,tegra186-bpmp.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: NVIDIA Tegra Boot and Power Management Processor (BPMP) 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Thierry Reding <thierry.reding@gmail.com> 1162306a36Sopenharmony_ci - Jon Hunter <jonathanh@nvidia.com> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cidescription: | 1462306a36Sopenharmony_ci The BPMP is a specific processor in Tegra chip, which is designed for 1562306a36Sopenharmony_ci booting process handling and offloading the power management, clock 1662306a36Sopenharmony_ci management, and reset control tasks from the CPU. The binding document 1762306a36Sopenharmony_ci defines the resources that would be used by the BPMP firmware driver, 1862306a36Sopenharmony_ci which can create the interprocessor communication (IPC) between the 1962306a36Sopenharmony_ci CPU and BPMP. 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci This node is a mailbox consumer. See the following files for details 2262306a36Sopenharmony_ci of the mailbox subsystem, and the specifiers implemented by the 2362306a36Sopenharmony_ci relevant provider(s): 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci - .../mailbox/mailbox.txt 2662306a36Sopenharmony_ci - .../mailbox/nvidia,tegra186-hsp.yaml 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci This node is a clock, power domain, and reset provider. See the 2962306a36Sopenharmony_ci following files for general documentation of those features, and the 3062306a36Sopenharmony_ci specifiers implemented by this node: 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci - .../clock/clock-bindings.txt 3362306a36Sopenharmony_ci - <dt-bindings/clock/tegra186-clock.h> 3462306a36Sopenharmony_ci - ../power/power-domain.yaml 3562306a36Sopenharmony_ci - <dt-bindings/power/tegra186-powergate.h> 3662306a36Sopenharmony_ci - .../reset/reset.txt 3762306a36Sopenharmony_ci - <dt-bindings/reset/tegra186-reset.h> 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci The BPMP implements some services which must be represented by 4062306a36Sopenharmony_ci separate nodes. For example, it can provide access to certain I2C 4162306a36Sopenharmony_ci controllers, and the I2C bindings represent each I2C controller as a 4262306a36Sopenharmony_ci device tree node. Such nodes should be nested directly inside the main 4362306a36Sopenharmony_ci BPMP node. 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci Software can determine whether a child node of the BPMP node 4662306a36Sopenharmony_ci represents a device by checking for a compatible property. Any node 4762306a36Sopenharmony_ci with a compatible property represents a device that can be 4862306a36Sopenharmony_ci instantiated. Nodes without a compatible property may be used to 4962306a36Sopenharmony_ci provide configuration information regarding the BPMP itself, although 5062306a36Sopenharmony_ci no such configuration nodes are currently defined by this binding. 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci The BPMP firmware defines no single global name-/numbering-space for 5362306a36Sopenharmony_ci such services. Put another way, the numbering scheme for I2C buses is 5462306a36Sopenharmony_ci distinct from the numbering scheme for any other service the BPMP may 5562306a36Sopenharmony_ci provide (e.g. a future hypothetical SPI bus service). As such, child 5662306a36Sopenharmony_ci device nodes will have no reg property, and the BPMP node will have no 5762306a36Sopenharmony_ci "#address-cells" or "#size-cells" property. 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci The shared memory area for the IPC TX and RX between CPU and BPMP are 6062306a36Sopenharmony_ci predefined and work on top of either sysram, which is an SRAM inside the 6162306a36Sopenharmony_ci chip, or in normal SDRAM. 6262306a36Sopenharmony_ci See ".../sram/sram.yaml" for the bindings for the SRAM case. 6362306a36Sopenharmony_ci See "../reserved-memory/nvidia,tegra264-bpmp-shmem.yaml" for bindings for 6462306a36Sopenharmony_ci the SDRAM case. 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ciproperties: 6762306a36Sopenharmony_ci compatible: 6862306a36Sopenharmony_ci oneOf: 6962306a36Sopenharmony_ci - items: 7062306a36Sopenharmony_ci - enum: 7162306a36Sopenharmony_ci - nvidia,tegra194-bpmp 7262306a36Sopenharmony_ci - nvidia,tegra234-bpmp 7362306a36Sopenharmony_ci - const: nvidia,tegra186-bpmp 7462306a36Sopenharmony_ci - const: nvidia,tegra186-bpmp 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci mboxes: 7762306a36Sopenharmony_ci description: A phandle and channel specifier for the mailbox used to 7862306a36Sopenharmony_ci communicate with the BPMP. 7962306a36Sopenharmony_ci maxItems: 1 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci shmem: 8262306a36Sopenharmony_ci description: List of the phandle to the TX and RX shared memory area 8362306a36Sopenharmony_ci that the IPC between CPU and BPMP is based on. 8462306a36Sopenharmony_ci minItems: 2 8562306a36Sopenharmony_ci maxItems: 2 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci memory-region: 8862306a36Sopenharmony_ci description: phandle to reserved memory region used for IPC between 8962306a36Sopenharmony_ci CPU-NS and BPMP. 9062306a36Sopenharmony_ci maxItems: 1 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci "#clock-cells": 9362306a36Sopenharmony_ci const: 1 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci "#power-domain-cells": 9662306a36Sopenharmony_ci const: 1 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci "#reset-cells": 9962306a36Sopenharmony_ci const: 1 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci interconnects: 10262306a36Sopenharmony_ci items: 10362306a36Sopenharmony_ci - description: memory read client 10462306a36Sopenharmony_ci - description: memory write client 10562306a36Sopenharmony_ci - description: DMA read client 10662306a36Sopenharmony_ci - description: DMA write client 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci interconnect-names: 10962306a36Sopenharmony_ci items: 11062306a36Sopenharmony_ci - const: read 11162306a36Sopenharmony_ci - const: write 11262306a36Sopenharmony_ci - const: dma-mem # dma-read 11362306a36Sopenharmony_ci - const: dma-write 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci iommus: 11662306a36Sopenharmony_ci maxItems: 1 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci i2c: 11962306a36Sopenharmony_ci type: object 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci thermal: 12262306a36Sopenharmony_ci type: object 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ciadditionalProperties: false 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_cioneOf: 12762306a36Sopenharmony_ci - required: 12862306a36Sopenharmony_ci - memory-region 12962306a36Sopenharmony_ci - required: 13062306a36Sopenharmony_ci - shmem 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_cirequired: 13362306a36Sopenharmony_ci - compatible 13462306a36Sopenharmony_ci - mboxes 13562306a36Sopenharmony_ci - "#clock-cells" 13662306a36Sopenharmony_ci - "#power-domain-cells" 13762306a36Sopenharmony_ci - "#reset-cells" 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ciexamples: 14062306a36Sopenharmony_ci - | 14162306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 14262306a36Sopenharmony_ci #include <dt-bindings/mailbox/tegra186-hsp.h> 14362306a36Sopenharmony_ci #include <dt-bindings/memory/tegra186-mc.h> 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci hsp_top0: hsp@3c00000 { 14662306a36Sopenharmony_ci compatible = "nvidia,tegra186-hsp"; 14762306a36Sopenharmony_ci reg = <0x03c00000 0xa0000>; 14862306a36Sopenharmony_ci interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>; 14962306a36Sopenharmony_ci interrupt-names = "doorbell"; 15062306a36Sopenharmony_ci #mbox-cells = <2>; 15162306a36Sopenharmony_ci }; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci sram@30000000 { 15462306a36Sopenharmony_ci compatible = "nvidia,tegra186-sysram", "mmio-sram"; 15562306a36Sopenharmony_ci reg = <0x30000000 0x50000>; 15662306a36Sopenharmony_ci #address-cells = <1>; 15762306a36Sopenharmony_ci #size-cells = <1>; 15862306a36Sopenharmony_ci ranges = <0x0 0x30000000 0x50000>; 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci cpu_bpmp_tx: sram@4e000 { 16162306a36Sopenharmony_ci reg = <0x4e000 0x1000>; 16262306a36Sopenharmony_ci label = "cpu-bpmp-tx"; 16362306a36Sopenharmony_ci pool; 16462306a36Sopenharmony_ci }; 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci cpu_bpmp_rx: sram@4f000 { 16762306a36Sopenharmony_ci reg = <0x4f000 0x1000>; 16862306a36Sopenharmony_ci label = "cpu-bpmp-rx"; 16962306a36Sopenharmony_ci pool; 17062306a36Sopenharmony_ci }; 17162306a36Sopenharmony_ci }; 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci bpmp { 17462306a36Sopenharmony_ci compatible = "nvidia,tegra186-bpmp"; 17562306a36Sopenharmony_ci interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>, 17662306a36Sopenharmony_ci <&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>, 17762306a36Sopenharmony_ci <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>, 17862306a36Sopenharmony_ci <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>; 17962306a36Sopenharmony_ci interconnect-names = "read", "write", "dma-mem", "dma-write"; 18062306a36Sopenharmony_ci iommus = <&smmu TEGRA186_SID_BPMP>; 18162306a36Sopenharmony_ci mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>; 18262306a36Sopenharmony_ci shmem = <&cpu_bpmp_tx>, <&cpu_bpmp_rx>; 18362306a36Sopenharmony_ci #clock-cells = <1>; 18462306a36Sopenharmony_ci #power-domain-cells = <1>; 18562306a36Sopenharmony_ci #reset-cells = <1>; 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci i2c { 18862306a36Sopenharmony_ci compatible = "nvidia,tegra186-bpmp-i2c"; 18962306a36Sopenharmony_ci nvidia,bpmp-bus-id = <5>; 19062306a36Sopenharmony_ci #address-cells = <1>; 19162306a36Sopenharmony_ci #size-cells = <0>; 19262306a36Sopenharmony_ci }; 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci thermal { 19562306a36Sopenharmony_ci compatible = "nvidia,tegra186-bpmp-thermal"; 19662306a36Sopenharmony_ci #thermal-sensor-cells = <1>; 19762306a36Sopenharmony_ci }; 19862306a36Sopenharmony_ci }; 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci - | 20162306a36Sopenharmony_ci #include <dt-bindings/mailbox/tegra186-hsp.h> 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci bpmp { 20462306a36Sopenharmony_ci compatible = "nvidia,tegra186-bpmp"; 20562306a36Sopenharmony_ci interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>, 20662306a36Sopenharmony_ci <&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>, 20762306a36Sopenharmony_ci <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>, 20862306a36Sopenharmony_ci <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>; 20962306a36Sopenharmony_ci interconnect-names = "read", "write", "dma-mem", "dma-write"; 21062306a36Sopenharmony_ci mboxes = <&hsp_top1 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>; 21162306a36Sopenharmony_ci memory-region = <&dram_cpu_bpmp_mail>; 21262306a36Sopenharmony_ci #clock-cells = <1>; 21362306a36Sopenharmony_ci #power-domain-cells = <1>; 21462306a36Sopenharmony_ci #reset-cells = <1>; 21562306a36Sopenharmony_ci }; 216