1e67e8565SEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2e67e8565SEmmanuel Vadot%YAML 1.2 3e67e8565SEmmanuel Vadot--- 4e67e8565SEmmanuel Vadot$id: http://devicetree.org/schemas/firmware/nvidia,tegra186-bpmp.yaml# 5e67e8565SEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml# 6e67e8565SEmmanuel Vadot 7e67e8565SEmmanuel Vadottitle: NVIDIA Tegra Boot and Power Management Processor (BPMP) 8e67e8565SEmmanuel Vadot 9e67e8565SEmmanuel Vadotmaintainers: 10e67e8565SEmmanuel Vadot - Thierry Reding <thierry.reding@gmail.com> 11e67e8565SEmmanuel Vadot - Jon Hunter <jonathanh@nvidia.com> 12e67e8565SEmmanuel Vadot 13e67e8565SEmmanuel Vadotdescription: | 14e67e8565SEmmanuel Vadot The BPMP is a specific processor in Tegra chip, which is designed for 15e67e8565SEmmanuel Vadot booting process handling and offloading the power management, clock 16e67e8565SEmmanuel Vadot management, and reset control tasks from the CPU. The binding document 17e67e8565SEmmanuel Vadot defines the resources that would be used by the BPMP firmware driver, 18e67e8565SEmmanuel Vadot which can create the interprocessor communication (IPC) between the 19e67e8565SEmmanuel Vadot CPU and BPMP. 20e67e8565SEmmanuel Vadot 21e67e8565SEmmanuel Vadot This node is a mailbox consumer. See the following files for details 22e67e8565SEmmanuel Vadot of the mailbox subsystem, and the specifiers implemented by the 23e67e8565SEmmanuel Vadot relevant provider(s): 24e67e8565SEmmanuel Vadot 25e67e8565SEmmanuel Vadot - .../mailbox/mailbox.txt 26e67e8565SEmmanuel Vadot - .../mailbox/nvidia,tegra186-hsp.yaml 27e67e8565SEmmanuel Vadot 28e67e8565SEmmanuel Vadot This node is a clock, power domain, and reset provider. See the 29e67e8565SEmmanuel Vadot following files for general documentation of those features, and the 30e67e8565SEmmanuel Vadot specifiers implemented by this node: 31e67e8565SEmmanuel Vadot 32e67e8565SEmmanuel Vadot - .../clock/clock-bindings.txt 33e67e8565SEmmanuel Vadot - <dt-bindings/clock/tegra186-clock.h> 34e67e8565SEmmanuel Vadot - ../power/power-domain.yaml 35e67e8565SEmmanuel Vadot - <dt-bindings/power/tegra186-powergate.h> 36e67e8565SEmmanuel Vadot - .../reset/reset.txt 37e67e8565SEmmanuel Vadot - <dt-bindings/reset/tegra186-reset.h> 38e67e8565SEmmanuel Vadot 39e67e8565SEmmanuel Vadot The BPMP implements some services which must be represented by 40e67e8565SEmmanuel Vadot separate nodes. For example, it can provide access to certain I2C 41e67e8565SEmmanuel Vadot controllers, and the I2C bindings represent each I2C controller as a 42e67e8565SEmmanuel Vadot device tree node. Such nodes should be nested directly inside the main 43e67e8565SEmmanuel Vadot BPMP node. 44e67e8565SEmmanuel Vadot 45e67e8565SEmmanuel Vadot Software can determine whether a child node of the BPMP node 46e67e8565SEmmanuel Vadot represents a device by checking for a compatible property. Any node 47e67e8565SEmmanuel Vadot with a compatible property represents a device that can be 48e67e8565SEmmanuel Vadot instantiated. Nodes without a compatible property may be used to 49e67e8565SEmmanuel Vadot provide configuration information regarding the BPMP itself, although 50e67e8565SEmmanuel Vadot no such configuration nodes are currently defined by this binding. 51e67e8565SEmmanuel Vadot 52e67e8565SEmmanuel Vadot The BPMP firmware defines no single global name-/numbering-space for 53e67e8565SEmmanuel Vadot such services. Put another way, the numbering scheme for I2C buses is 54e67e8565SEmmanuel Vadot distinct from the numbering scheme for any other service the BPMP may 55e67e8565SEmmanuel Vadot provide (e.g. a future hypothetical SPI bus service). As such, child 56e67e8565SEmmanuel Vadot device nodes will have no reg property, and the BPMP node will have no 57e67e8565SEmmanuel Vadot "#address-cells" or "#size-cells" property. 58e67e8565SEmmanuel Vadot 59e67e8565SEmmanuel Vadot The shared memory area for the IPC TX and RX between CPU and BPMP are 60*aa1a8ff2SEmmanuel Vadot predefined and work on top of either sysram, which is an SRAM inside the 61*aa1a8ff2SEmmanuel Vadot chip, or in normal SDRAM. 62*aa1a8ff2SEmmanuel Vadot See ".../sram/sram.yaml" for the bindings for the SRAM case. 63*aa1a8ff2SEmmanuel Vadot See "../reserved-memory/nvidia,tegra264-bpmp-shmem.yaml" for bindings for 64*aa1a8ff2SEmmanuel Vadot the SDRAM case. 65e67e8565SEmmanuel Vadot 66e67e8565SEmmanuel Vadotproperties: 67e67e8565SEmmanuel Vadot compatible: 68e67e8565SEmmanuel Vadot oneOf: 69e67e8565SEmmanuel Vadot - items: 70e67e8565SEmmanuel Vadot - enum: 71e67e8565SEmmanuel Vadot - nvidia,tegra194-bpmp 72e67e8565SEmmanuel Vadot - nvidia,tegra234-bpmp 73e67e8565SEmmanuel Vadot - const: nvidia,tegra186-bpmp 74e67e8565SEmmanuel Vadot - const: nvidia,tegra186-bpmp 75e67e8565SEmmanuel Vadot 76e67e8565SEmmanuel Vadot mboxes: 77e67e8565SEmmanuel Vadot description: A phandle and channel specifier for the mailbox used to 78e67e8565SEmmanuel Vadot communicate with the BPMP. 79e67e8565SEmmanuel Vadot maxItems: 1 80e67e8565SEmmanuel Vadot 81e67e8565SEmmanuel Vadot shmem: 82e67e8565SEmmanuel Vadot description: List of the phandle to the TX and RX shared memory area 83e67e8565SEmmanuel Vadot that the IPC between CPU and BPMP is based on. 84e67e8565SEmmanuel Vadot minItems: 2 85e67e8565SEmmanuel Vadot maxItems: 2 86e67e8565SEmmanuel Vadot 87*aa1a8ff2SEmmanuel Vadot memory-region: 88*aa1a8ff2SEmmanuel Vadot description: phandle to reserved memory region used for IPC between 89*aa1a8ff2SEmmanuel Vadot CPU-NS and BPMP. 90*aa1a8ff2SEmmanuel Vadot maxItems: 1 91*aa1a8ff2SEmmanuel Vadot 92e67e8565SEmmanuel Vadot "#clock-cells": 93e67e8565SEmmanuel Vadot const: 1 94e67e8565SEmmanuel Vadot 95e67e8565SEmmanuel Vadot "#power-domain-cells": 96e67e8565SEmmanuel Vadot const: 1 97e67e8565SEmmanuel Vadot 98e67e8565SEmmanuel Vadot "#reset-cells": 99e67e8565SEmmanuel Vadot const: 1 100e67e8565SEmmanuel Vadot 101e67e8565SEmmanuel Vadot interconnects: 102e67e8565SEmmanuel Vadot items: 103e67e8565SEmmanuel Vadot - description: memory read client 104e67e8565SEmmanuel Vadot - description: memory write client 105e67e8565SEmmanuel Vadot - description: DMA read client 106e67e8565SEmmanuel Vadot - description: DMA write client 107e67e8565SEmmanuel Vadot 108e67e8565SEmmanuel Vadot interconnect-names: 109e67e8565SEmmanuel Vadot items: 110e67e8565SEmmanuel Vadot - const: read 111e67e8565SEmmanuel Vadot - const: write 112e67e8565SEmmanuel Vadot - const: dma-mem # dma-read 113e67e8565SEmmanuel Vadot - const: dma-write 114e67e8565SEmmanuel Vadot 115e67e8565SEmmanuel Vadot iommus: 116e67e8565SEmmanuel Vadot maxItems: 1 117e67e8565SEmmanuel Vadot 118e67e8565SEmmanuel Vadot i2c: 119e67e8565SEmmanuel Vadot type: object 120e67e8565SEmmanuel Vadot 121e67e8565SEmmanuel Vadot thermal: 122e67e8565SEmmanuel Vadot type: object 123e67e8565SEmmanuel Vadot 124e67e8565SEmmanuel VadotadditionalProperties: false 125e67e8565SEmmanuel Vadot 126*aa1a8ff2SEmmanuel VadotoneOf: 127*aa1a8ff2SEmmanuel Vadot - required: 128*aa1a8ff2SEmmanuel Vadot - memory-region 129*aa1a8ff2SEmmanuel Vadot - required: 130*aa1a8ff2SEmmanuel Vadot - shmem 131*aa1a8ff2SEmmanuel Vadot 132e67e8565SEmmanuel Vadotrequired: 133e67e8565SEmmanuel Vadot - compatible 134e67e8565SEmmanuel Vadot - mboxes 135e67e8565SEmmanuel Vadot - "#clock-cells" 136e67e8565SEmmanuel Vadot - "#power-domain-cells" 137e67e8565SEmmanuel Vadot - "#reset-cells" 138e67e8565SEmmanuel Vadot 139e67e8565SEmmanuel Vadotexamples: 140e67e8565SEmmanuel Vadot - | 141e67e8565SEmmanuel Vadot #include <dt-bindings/interrupt-controller/arm-gic.h> 142e67e8565SEmmanuel Vadot #include <dt-bindings/mailbox/tegra186-hsp.h> 143e67e8565SEmmanuel Vadot #include <dt-bindings/memory/tegra186-mc.h> 144e67e8565SEmmanuel Vadot 145e67e8565SEmmanuel Vadot hsp_top0: hsp@3c00000 { 146e67e8565SEmmanuel Vadot compatible = "nvidia,tegra186-hsp"; 147e67e8565SEmmanuel Vadot reg = <0x03c00000 0xa0000>; 148e67e8565SEmmanuel Vadot interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>; 149e67e8565SEmmanuel Vadot interrupt-names = "doorbell"; 150e67e8565SEmmanuel Vadot #mbox-cells = <2>; 151e67e8565SEmmanuel Vadot }; 152e67e8565SEmmanuel Vadot 153e67e8565SEmmanuel Vadot sram@30000000 { 154e67e8565SEmmanuel Vadot compatible = "nvidia,tegra186-sysram", "mmio-sram"; 155e67e8565SEmmanuel Vadot reg = <0x30000000 0x50000>; 156e67e8565SEmmanuel Vadot #address-cells = <1>; 157e67e8565SEmmanuel Vadot #size-cells = <1>; 158e67e8565SEmmanuel Vadot ranges = <0x0 0x30000000 0x50000>; 159e67e8565SEmmanuel Vadot 160e67e8565SEmmanuel Vadot cpu_bpmp_tx: sram@4e000 { 161e67e8565SEmmanuel Vadot reg = <0x4e000 0x1000>; 162e67e8565SEmmanuel Vadot label = "cpu-bpmp-tx"; 163e67e8565SEmmanuel Vadot pool; 164e67e8565SEmmanuel Vadot }; 165e67e8565SEmmanuel Vadot 166e67e8565SEmmanuel Vadot cpu_bpmp_rx: sram@4f000 { 167e67e8565SEmmanuel Vadot reg = <0x4f000 0x1000>; 168e67e8565SEmmanuel Vadot label = "cpu-bpmp-rx"; 169e67e8565SEmmanuel Vadot pool; 170e67e8565SEmmanuel Vadot }; 171e67e8565SEmmanuel Vadot }; 172e67e8565SEmmanuel Vadot 173e67e8565SEmmanuel Vadot bpmp { 174e67e8565SEmmanuel Vadot compatible = "nvidia,tegra186-bpmp"; 175e67e8565SEmmanuel Vadot interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>, 176e67e8565SEmmanuel Vadot <&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>, 177e67e8565SEmmanuel Vadot <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>, 178e67e8565SEmmanuel Vadot <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>; 179e67e8565SEmmanuel Vadot interconnect-names = "read", "write", "dma-mem", "dma-write"; 180e67e8565SEmmanuel Vadot iommus = <&smmu TEGRA186_SID_BPMP>; 181*aa1a8ff2SEmmanuel Vadot mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>; 182e67e8565SEmmanuel Vadot shmem = <&cpu_bpmp_tx>, <&cpu_bpmp_rx>; 183e67e8565SEmmanuel Vadot #clock-cells = <1>; 184e67e8565SEmmanuel Vadot #power-domain-cells = <1>; 185e67e8565SEmmanuel Vadot #reset-cells = <1>; 186e67e8565SEmmanuel Vadot 187e67e8565SEmmanuel Vadot i2c { 188e67e8565SEmmanuel Vadot compatible = "nvidia,tegra186-bpmp-i2c"; 189e67e8565SEmmanuel Vadot nvidia,bpmp-bus-id = <5>; 190e67e8565SEmmanuel Vadot #address-cells = <1>; 191e67e8565SEmmanuel Vadot #size-cells = <0>; 192e67e8565SEmmanuel Vadot }; 193e67e8565SEmmanuel Vadot 194e67e8565SEmmanuel Vadot thermal { 195e67e8565SEmmanuel Vadot compatible = "nvidia,tegra186-bpmp-thermal"; 196e67e8565SEmmanuel Vadot #thermal-sensor-cells = <1>; 197e67e8565SEmmanuel Vadot }; 198e67e8565SEmmanuel Vadot }; 199*aa1a8ff2SEmmanuel Vadot 200*aa1a8ff2SEmmanuel Vadot - | 201*aa1a8ff2SEmmanuel Vadot #include <dt-bindings/mailbox/tegra186-hsp.h> 202*aa1a8ff2SEmmanuel Vadot 203*aa1a8ff2SEmmanuel Vadot bpmp { 204*aa1a8ff2SEmmanuel Vadot compatible = "nvidia,tegra186-bpmp"; 205*aa1a8ff2SEmmanuel Vadot interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>, 206*aa1a8ff2SEmmanuel Vadot <&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>, 207*aa1a8ff2SEmmanuel Vadot <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>, 208*aa1a8ff2SEmmanuel Vadot <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>; 209*aa1a8ff2SEmmanuel Vadot interconnect-names = "read", "write", "dma-mem", "dma-write"; 210*aa1a8ff2SEmmanuel Vadot mboxes = <&hsp_top1 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>; 211*aa1a8ff2SEmmanuel Vadot memory-region = <&dram_cpu_bpmp_mail>; 212*aa1a8ff2SEmmanuel Vadot #clock-cells = <1>; 213*aa1a8ff2SEmmanuel Vadot #power-domain-cells = <1>; 214*aa1a8ff2SEmmanuel Vadot #reset-cells = <1>; 215*aa1a8ff2SEmmanuel Vadot }; 216