1*c66ec88fSEmmanuel VadotNVIDIA Tegra Boot and Power Management Processor (BPMP) 2*c66ec88fSEmmanuel Vadot 3*c66ec88fSEmmanuel VadotThe BPMP is a specific processor in Tegra chip, which is designed for 4*c66ec88fSEmmanuel Vadotbooting process handling and offloading the power management, clock 5*c66ec88fSEmmanuel Vadotmanagement, and reset control tasks from the CPU. The binding document 6*c66ec88fSEmmanuel Vadotdefines the resources that would be used by the BPMP firmware driver, 7*c66ec88fSEmmanuel Vadotwhich can create the interprocessor communication (IPC) between the CPU 8*c66ec88fSEmmanuel Vadotand BPMP. 9*c66ec88fSEmmanuel Vadot 10*c66ec88fSEmmanuel VadotRequired properties: 11*c66ec88fSEmmanuel Vadot- compatible 12*c66ec88fSEmmanuel Vadot Array of strings 13*c66ec88fSEmmanuel Vadot One of: 14*c66ec88fSEmmanuel Vadot - "nvidia,tegra186-bpmp" 15*c66ec88fSEmmanuel Vadot- mboxes : The phandle of mailbox controller and the mailbox specifier. 16*c66ec88fSEmmanuel Vadot- shmem : List of the phandle of the TX and RX shared memory area that 17*c66ec88fSEmmanuel Vadot the IPC between CPU and BPMP is based on. 18*c66ec88fSEmmanuel Vadot- #clock-cells : Should be 1. 19*c66ec88fSEmmanuel Vadot- #power-domain-cells : Should be 1. 20*c66ec88fSEmmanuel Vadot- #reset-cells : Should be 1. 21*c66ec88fSEmmanuel Vadot 22*c66ec88fSEmmanuel VadotThis node is a mailbox consumer. See the following files for details of 23*c66ec88fSEmmanuel Vadotthe mailbox subsystem, and the specifiers implemented by the relevant 24*c66ec88fSEmmanuel Vadotprovider(s): 25*c66ec88fSEmmanuel Vadot 26*c66ec88fSEmmanuel Vadot- .../mailbox/mailbox.txt 27*c66ec88fSEmmanuel Vadot- .../mailbox/nvidia,tegra186-hsp.txt 28*c66ec88fSEmmanuel Vadot 29*c66ec88fSEmmanuel VadotThis node is a clock, power domain, and reset provider. See the following 30*c66ec88fSEmmanuel Vadotfiles for general documentation of those features, and the specifiers 31*c66ec88fSEmmanuel Vadotimplemented by this node: 32*c66ec88fSEmmanuel Vadot 33*c66ec88fSEmmanuel Vadot- .../clock/clock-bindings.txt 34*c66ec88fSEmmanuel Vadot- <dt-bindings/clock/tegra186-clock.h> 35*c66ec88fSEmmanuel Vadot- ../power/power-domain.yaml 36*c66ec88fSEmmanuel Vadot- <dt-bindings/power/tegra186-powergate.h> 37*c66ec88fSEmmanuel Vadot- .../reset/reset.txt 38*c66ec88fSEmmanuel Vadot- <dt-bindings/reset/tegra186-reset.h> 39*c66ec88fSEmmanuel Vadot 40*c66ec88fSEmmanuel VadotThe BPMP implements some services which must be represented by separate nodes. 41*c66ec88fSEmmanuel VadotFor example, it can provide access to certain I2C controllers, and the I2C 42*c66ec88fSEmmanuel Vadotbindings represent each I2C controller as a device tree node. Such nodes should 43*c66ec88fSEmmanuel Vadotbe nested directly inside the main BPMP node. 44*c66ec88fSEmmanuel Vadot 45*c66ec88fSEmmanuel VadotSoftware can determine whether a child node of the BPMP node represents a device 46*c66ec88fSEmmanuel Vadotby checking for a compatible property. Any node with a compatible property 47*c66ec88fSEmmanuel Vadotrepresents a device that can be instantiated. Nodes without a compatible 48*c66ec88fSEmmanuel Vadotproperty may be used to provide configuration information regarding the BPMP 49*c66ec88fSEmmanuel Vadotitself, although no such configuration nodes are currently defined by this 50*c66ec88fSEmmanuel Vadotbinding. 51*c66ec88fSEmmanuel Vadot 52*c66ec88fSEmmanuel VadotThe BPMP firmware defines no single global name-/numbering-space for such 53*c66ec88fSEmmanuel Vadotservices. Put another way, the numbering scheme for I2C buses is distinct from 54*c66ec88fSEmmanuel Vadotthe numbering scheme for any other service the BPMP may provide (e.g. a future 55*c66ec88fSEmmanuel Vadothypothetical SPI bus service). As such, child device nodes will have no reg 56*c66ec88fSEmmanuel Vadotproperty, and the BPMP node will have no #address-cells or #size-cells property. 57*c66ec88fSEmmanuel Vadot 58*c66ec88fSEmmanuel VadotThe shared memory bindings for BPMP 59*c66ec88fSEmmanuel Vadot----------------------------------- 60*c66ec88fSEmmanuel Vadot 61*c66ec88fSEmmanuel VadotThe shared memory area for the IPC TX and RX between CPU and BPMP are 62*c66ec88fSEmmanuel Vadotpredefined and work on top of sysram, which is an SRAM inside the chip. 63*c66ec88fSEmmanuel Vadot 64*c66ec88fSEmmanuel VadotSee ".../sram/sram.txt" for the bindings. 65*c66ec88fSEmmanuel Vadot 66*c66ec88fSEmmanuel VadotExample: 67*c66ec88fSEmmanuel Vadot 68*c66ec88fSEmmanuel Vadothsp_top0: hsp@3c00000 { 69*c66ec88fSEmmanuel Vadot ... 70*c66ec88fSEmmanuel Vadot #mbox-cells = <2>; 71*c66ec88fSEmmanuel Vadot}; 72*c66ec88fSEmmanuel Vadot 73*c66ec88fSEmmanuel Vadotsysram@30000000 { 74*c66ec88fSEmmanuel Vadot compatible = "nvidia,tegra186-sysram", "mmio-sram"; 75*c66ec88fSEmmanuel Vadot reg = <0x0 0x30000000 0x0 0x50000>; 76*c66ec88fSEmmanuel Vadot #address-cells = <2>; 77*c66ec88fSEmmanuel Vadot #size-cells = <2>; 78*c66ec88fSEmmanuel Vadot ranges = <0 0x0 0x0 0x30000000 0x0 0x50000>; 79*c66ec88fSEmmanuel Vadot 80*c66ec88fSEmmanuel Vadot cpu_bpmp_tx: shmem@4e000 { 81*c66ec88fSEmmanuel Vadot compatible = "nvidia,tegra186-bpmp-shmem"; 82*c66ec88fSEmmanuel Vadot reg = <0x0 0x4e000 0x0 0x1000>; 83*c66ec88fSEmmanuel Vadot label = "cpu-bpmp-tx"; 84*c66ec88fSEmmanuel Vadot pool; 85*c66ec88fSEmmanuel Vadot }; 86*c66ec88fSEmmanuel Vadot 87*c66ec88fSEmmanuel Vadot cpu_bpmp_rx: shmem@4f000 { 88*c66ec88fSEmmanuel Vadot compatible = "nvidia,tegra186-bpmp-shmem"; 89*c66ec88fSEmmanuel Vadot reg = <0x0 0x4f000 0x0 0x1000>; 90*c66ec88fSEmmanuel Vadot label = "cpu-bpmp-rx"; 91*c66ec88fSEmmanuel Vadot pool; 92*c66ec88fSEmmanuel Vadot }; 93*c66ec88fSEmmanuel Vadot}; 94*c66ec88fSEmmanuel Vadot 95*c66ec88fSEmmanuel Vadotbpmp { 96*c66ec88fSEmmanuel Vadot compatible = "nvidia,tegra186-bpmp"; 97*c66ec88fSEmmanuel Vadot mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB TEGRA_HSP_DB_MASTER_BPMP>; 98*c66ec88fSEmmanuel Vadot shmem = <&cpu_bpmp_tx &cpu_bpmp_rx>; 99*c66ec88fSEmmanuel Vadot #clock-cells = <1>; 100*c66ec88fSEmmanuel Vadot #power-domain-cells = <1>; 101*c66ec88fSEmmanuel Vadot #reset-cells = <1>; 102*c66ec88fSEmmanuel Vadot 103*c66ec88fSEmmanuel Vadot i2c { 104*c66ec88fSEmmanuel Vadot compatible = "..."; 105*c66ec88fSEmmanuel Vadot ... 106*c66ec88fSEmmanuel Vadot }; 107*c66ec88fSEmmanuel Vadot}; 108