1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/memory-controllers/nvidia,tegra186-mc.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra186 (and later) SoC Memory Controller
8
9maintainers:
10  - Jon Hunter <jonathanh@nvidia.com>
11  - Thierry Reding <thierry.reding@gmail.com>
12
13description: |
14  The NVIDIA Tegra186 SoC features a 128 bit memory controller that is split
15  into four 32 bit channels to support LPDDR4 with x16 subpartitions. The MC
16  handles memory requests for 40-bit virtual addresses from internal clients
17  and arbitrates among them to allocate memory bandwidth.
18
19  Up to 15 GiB of physical memory can be supported. Security features such as
20  encryption of traffic to and from DRAM via general security apertures are
21  available for video and other secure applications, as well as DRAM ECC for
22  automotive safety applications (single bit error correction and double bit
23  error detection).
24
25properties:
26  $nodename:
27    pattern: "^memory-controller@[0-9a-f]+$"
28
29  compatible:
30    items:
31      - enum:
32          - nvidia,tegra186-mc
33          - nvidia,tegra194-mc
34
35  reg:
36    maxItems: 1
37
38  interrupts:
39    maxItems: 1
40
41  "#address-cells":
42    const: 2
43
44  "#size-cells":
45    const: 2
46
47  ranges: true
48
49  dma-ranges: true
50
51patternProperties:
52  "^external-memory-controller@[0-9a-f]+$":
53    description:
54      The bulk of the work involved in controlling the external memory
55      controller on NVIDIA Tegra186 and later is performed on the BPMP. This
56      coprocessor exposes the EMC clock that is used to set the frequency at
57      which the external memory is clocked and a remote procedure call that
58      can be used to obtain the set of available frequencies.
59    type: object
60    properties:
61      compatible:
62        items:
63          - enum:
64              - nvidia,tegra186-emc
65              - nvidia,tegra194-emc
66
67      reg:
68        maxItems: 1
69
70      interrupts:
71        maxItems: 1
72
73      clocks:
74        items:
75          - description: external memory clock
76
77      clock-names:
78        items:
79          - const: emc
80
81      nvidia,bpmp:
82        $ref: /schemas/types.yaml#/definitions/phandle
83        description:
84          phandle of the node representing the BPMP
85
86required:
87  - compatible
88  - reg
89  - interrupts
90  - "#address-cells"
91  - "#size-cells"
92
93additionalProperties: false
94
95examples:
96  - |
97    #include <dt-bindings/clock/tegra186-clock.h>
98    #include <dt-bindings/interrupt-controller/arm-gic.h>
99
100    memory-controller@2c00000 {
101        compatible = "nvidia,tegra186-mc";
102        reg = <0x0 0x02c00000 0x0 0xb0000>;
103        interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>;
104
105        #address-cells = <2>;
106        #size-cells = <2>;
107
108        ranges = <0x0 0x02c00000 0x02c00000 0x0 0xb0000>;
109
110        /*
111         * Memory clients have access to all 40 bits that the memory
112         * controller can address.
113         */
114        dma-ranges = <0x0 0x0 0x0 0x0 0x100 0x0>;
115
116        external-memory-controller@2c60000 {
117            compatible = "nvidia,tegra186-emc";
118            reg = <0x0 0x02c60000 0x0 0x50000>;
119            interrupts = <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
120            clocks = <&bpmp TEGRA186_CLK_EMC>;
121            clock-names = "emc";
122
123            nvidia,bpmp = <&bpmp>;
124        };
125    };
126
127    bpmp: bpmp {
128        compatible = "nvidia,tegra186-bpmp";
129        #clock-cells = <1>;
130    };
131