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