···11-NVIDIA Tegra Boot and Power Management Processor (BPMP)22-33-The BPMP is a specific processor in Tegra chip, which is designed for44-booting process handling and offloading the power management, clock55-management, and reset control tasks from the CPU. The binding document66-defines the resources that would be used by the BPMP firmware driver,77-which can create the interprocessor communication (IPC) between the CPU88-and BPMP.99-1010-Required properties:1111-- compatible1212- Array of strings1313- One of:1414- - "nvidia,tegra186-bpmp"1515-- mboxes : The phandle of mailbox controller and the mailbox specifier.1616-- shmem : List of the phandle of the TX and RX shared memory area that1717- the IPC between CPU and BPMP is based on.1818-- #clock-cells : Should be 1.1919-- #power-domain-cells : Should be 1.2020-- #reset-cells : Should be 1.2121-2222-This node is a mailbox consumer. See the following files for details of2323-the mailbox subsystem, and the specifiers implemented by the relevant2424-provider(s):2525-2626-- .../mailbox/mailbox.txt2727-- .../mailbox/nvidia,tegra186-hsp.txt2828-2929-This node is a clock, power domain, and reset provider. See the following3030-files for general documentation of those features, and the specifiers3131-implemented by this node:3232-3333-- .../clock/clock-bindings.txt3434-- <dt-bindings/clock/tegra186-clock.h>3535-- ../power/power-domain.yaml3636-- <dt-bindings/power/tegra186-powergate.h>3737-- .../reset/reset.txt3838-- <dt-bindings/reset/tegra186-reset.h>3939-4040-The BPMP implements some services which must be represented by separate nodes.4141-For example, it can provide access to certain I2C controllers, and the I2C4242-bindings represent each I2C controller as a device tree node. Such nodes should4343-be nested directly inside the main BPMP node.4444-4545-Software can determine whether a child node of the BPMP node represents a device4646-by checking for a compatible property. Any node with a compatible property4747-represents a device that can be instantiated. Nodes without a compatible4848-property may be used to provide configuration information regarding the BPMP4949-itself, although no such configuration nodes are currently defined by this5050-binding.5151-5252-The BPMP firmware defines no single global name-/numbering-space for such5353-services. Put another way, the numbering scheme for I2C buses is distinct from5454-the numbering scheme for any other service the BPMP may provide (e.g. a future5555-hypothetical SPI bus service). As such, child device nodes will have no reg5656-property, and the BPMP node will have no #address-cells or #size-cells property.5757-5858-The shared memory bindings for BPMP5959------------------------------------6060-6161-The shared memory area for the IPC TX and RX between CPU and BPMP are6262-predefined and work on top of sysram, which is an SRAM inside the chip.6363-6464-See ".../sram/sram.txt" for the bindings.6565-6666-Example:6767-6868-hsp_top0: hsp@3c00000 {6969- ...7070- #mbox-cells = <2>;7171-};7272-7373-sysram@30000000 {7474- compatible = "nvidia,tegra186-sysram", "mmio-sram";7575- reg = <0x0 0x30000000 0x0 0x50000>;7676- #address-cells = <2>;7777- #size-cells = <2>;7878- ranges = <0 0x0 0x0 0x30000000 0x0 0x50000>;7979-8080- cpu_bpmp_tx: shmem@4e000 {8181- compatible = "nvidia,tegra186-bpmp-shmem";8282- reg = <0x0 0x4e000 0x0 0x1000>;8383- label = "cpu-bpmp-tx";8484- pool;8585- };8686-8787- cpu_bpmp_rx: shmem@4f000 {8888- compatible = "nvidia,tegra186-bpmp-shmem";8989- reg = <0x0 0x4f000 0x0 0x1000>;9090- label = "cpu-bpmp-rx";9191- pool;9292- };9393-};9494-9595-bpmp {9696- compatible = "nvidia,tegra186-bpmp";9797- mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>;9898- shmem = <&cpu_bpmp_tx &cpu_bpmp_rx>;9999- #clock-cells = <1>;100100- #power-domain-cells = <1>;101101- #reset-cells = <1>;102102-103103- i2c {104104- compatible = "...";105105- ...106106- };107107-};
···11+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)22+%YAML 1.233+---44+$id: http://devicetree.org/schemas/firmware/nvidia,tegra186-bpmp.yaml#55+$schema: http://devicetree.org/meta-schemas/core.yaml#66+77+title: NVIDIA Tegra Boot and Power Management Processor (BPMP)88+99+maintainers:1010+ - Thierry Reding <thierry.reding@gmail.com>1111+ - Jon Hunter <jonathanh@nvidia.com>1212+1313+description: |1414+ The BPMP is a specific processor in Tegra chip, which is designed for1515+ booting process handling and offloading the power management, clock1616+ management, and reset control tasks from the CPU. The binding document1717+ defines the resources that would be used by the BPMP firmware driver,1818+ which can create the interprocessor communication (IPC) between the1919+ CPU and BPMP.2020+2121+ This node is a mailbox consumer. See the following files for details2222+ of the mailbox subsystem, and the specifiers implemented by the2323+ relevant provider(s):2424+2525+ - .../mailbox/mailbox.txt2626+ - .../mailbox/nvidia,tegra186-hsp.yaml2727+2828+ This node is a clock, power domain, and reset provider. See the2929+ following files for general documentation of those features, and the3030+ specifiers implemented by this node:3131+3232+ - .../clock/clock-bindings.txt3333+ - <dt-bindings/clock/tegra186-clock.h>3434+ - ../power/power-domain.yaml3535+ - <dt-bindings/power/tegra186-powergate.h>3636+ - .../reset/reset.txt3737+ - <dt-bindings/reset/tegra186-reset.h>3838+3939+ The BPMP implements some services which must be represented by4040+ separate nodes. For example, it can provide access to certain I2C4141+ controllers, and the I2C bindings represent each I2C controller as a4242+ device tree node. Such nodes should be nested directly inside the main4343+ BPMP node.4444+4545+ Software can determine whether a child node of the BPMP node4646+ represents a device by checking for a compatible property. Any node4747+ with a compatible property represents a device that can be4848+ instantiated. Nodes without a compatible property may be used to4949+ provide configuration information regarding the BPMP itself, although5050+ no such configuration nodes are currently defined by this binding.5151+5252+ The BPMP firmware defines no single global name-/numbering-space for5353+ such services. Put another way, the numbering scheme for I2C buses is5454+ distinct from the numbering scheme for any other service the BPMP may5555+ provide (e.g. a future hypothetical SPI bus service). As such, child5656+ device nodes will have no reg property, and the BPMP node will have no5757+ "#address-cells" or "#size-cells" property.5858+5959+ The shared memory area for the IPC TX and RX between CPU and BPMP are6060+ predefined and work on top of sysram, which is an SRAM inside the6161+ chip. See ".../sram/sram.yaml" for the bindings.6262+6363+properties:6464+ compatible:6565+ oneOf:6666+ - items:6767+ - enum:6868+ - nvidia,tegra194-bpmp6969+ - nvidia,tegra234-bpmp7070+ - const: nvidia,tegra186-bpmp7171+ - const: nvidia,tegra186-bpmp7272+7373+ mboxes:7474+ description: A phandle and channel specifier for the mailbox used to7575+ communicate with the BPMP.7676+ maxItems: 17777+7878+ shmem:7979+ description: List of the phandle to the TX and RX shared memory area8080+ that the IPC between CPU and BPMP is based on.8181+ minItems: 28282+ maxItems: 28383+8484+ "#clock-cells":8585+ const: 18686+8787+ "#power-domain-cells":8888+ const: 18989+9090+ "#reset-cells":9191+ const: 19292+9393+ interconnects:9494+ items:9595+ - description: memory read client9696+ - description: memory write client9797+ - description: DMA read client9898+ - description: DMA write client9999+100100+ interconnect-names:101101+ items:102102+ - const: read103103+ - const: write104104+ - const: dma-mem # dma-read105105+ - const: dma-write106106+107107+ iommus:108108+ maxItems: 1109109+110110+ i2c:111111+ type: object112112+113113+ thermal:114114+ type: object115115+116116+additionalProperties: false117117+118118+required:119119+ - compatible120120+ - mboxes121121+ - shmem122122+ - "#clock-cells"123123+ - "#power-domain-cells"124124+ - "#reset-cells"125125+126126+examples:127127+ - |128128+ #include <dt-bindings/interrupt-controller/arm-gic.h>129129+ #include <dt-bindings/mailbox/tegra186-hsp.h>130130+ #include <dt-bindings/memory/tegra186-mc.h>131131+132132+ hsp_top0: hsp@3c00000 {133133+ compatible = "nvidia,tegra186-hsp";134134+ reg = <0x03c00000 0xa0000>;135135+ interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;136136+ interrupt-names = "doorbell";137137+ #mbox-cells = <2>;138138+ };139139+140140+ sram@30000000 {141141+ compatible = "nvidia,tegra186-sysram", "mmio-sram";142142+ reg = <0x30000000 0x50000>;143143+ #address-cells = <1>;144144+ #size-cells = <1>;145145+ ranges = <0x0 0x30000000 0x50000>;146146+147147+ cpu_bpmp_tx: sram@4e000 {148148+ reg = <0x4e000 0x1000>;149149+ label = "cpu-bpmp-tx";150150+ pool;151151+ };152152+153153+ cpu_bpmp_rx: sram@4f000 {154154+ reg = <0x4f000 0x1000>;155155+ label = "cpu-bpmp-rx";156156+ pool;157157+ };158158+ };159159+160160+ bpmp {161161+ compatible = "nvidia,tegra186-bpmp";162162+ interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>,163163+ <&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>,164164+ <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>,165165+ <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>;166166+ interconnect-names = "read", "write", "dma-mem", "dma-write";167167+ iommus = <&smmu TEGRA186_SID_BPMP>;168168+ mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB169169+ TEGRA_HSP_DB_MASTER_BPMP>;170170+ shmem = <&cpu_bpmp_tx>, <&cpu_bpmp_rx>;171171+ #clock-cells = <1>;172172+ #power-domain-cells = <1>;173173+ #reset-cells = <1>;174174+175175+ i2c {176176+ compatible = "nvidia,tegra186-bpmp-i2c";177177+ nvidia,bpmp-bus-id = <5>;178178+ #address-cells = <1>;179179+ #size-cells = <0>;180180+ };181181+182182+ thermal {183183+ compatible = "nvidia,tegra186-bpmp-thermal";184184+ #thermal-sensor-cells = <1>;185185+ };186186+ };