Merge tag 'powerpc-5.5-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[linux-2.6-microblaze.git] / Documentation / devicetree / bindings / memory-controllers / nvidia,tegra30-mc.yaml
1 # SPDX-License-Identifier: (GPL-2.0)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/memory-controllers/nvidia,tegra30-mc.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: NVIDIA Tegra30 SoC Memory Controller
8
9 maintainers:
10   - Dmitry Osipenko <digetx@gmail.com>
11   - Jon Hunter <jonathanh@nvidia.com>
12   - Thierry Reding <thierry.reding@gmail.com>
13
14 description: |
15   Tegra30 Memory Controller architecturally consists of the following parts:
16
17     Arbitration Domains, which can handle a single request or response per
18     clock from a group of clients. Typically, a system has a single Arbitration
19     Domain, but an implementation may divide the client space into multiple
20     Arbitration Domains to increase the effective system bandwidth.
21
22     Protocol Arbiter, which manage a related pool of memory devices. A system
23     may have a single Protocol Arbiter or multiple Protocol Arbiters.
24
25     Memory Crossbar, which routes request and responses between Arbitration
26     Domains and Protocol Arbiters. In the simplest version of the system, the
27     Memory Crossbar is just a pass through between a single Arbitration Domain
28     and a single Protocol Arbiter.
29
30     Global Resources, which include things like configuration registers which
31     are shared across the Memory Subsystem.
32
33   The Tegra30 Memory Controller handles memory requests from internal clients
34   and arbitrates among them to allocate memory bandwidth for DDR3L and LPDDR2
35   SDRAMs.
36
37 properties:
38   compatible:
39     const: nvidia,tegra30-mc
40
41   reg:
42     maxItems: 1
43
44   clocks:
45     maxItems: 1
46
47   clock-names:
48     items:
49       - const: mc
50
51   interrupts:
52     maxItems: 1
53
54   "#reset-cells":
55     const: 1
56
57   "#iommu-cells":
58     const: 1
59
60 patternProperties:
61   "^emc-timings-[0-9]+$":
62     type: object
63     properties:
64       nvidia,ram-code:
65         $ref: /schemas/types.yaml#/definitions/uint32
66         description:
67           Value of RAM_CODE this timing set is used for.
68
69     patternProperties:
70       "^timing-[0-9]+$":
71         type: object
72         properties:
73           clock-frequency:
74             description:
75               Memory clock rate in Hz.
76             minimum: 1000000
77             maximum: 900000000
78
79           nvidia,emem-configuration:
80             allOf:
81               - $ref: /schemas/types.yaml#/definitions/uint32-array
82             description: |
83               Values to be written to the EMEM register block. See section
84               "18.13.1 MC Registers" in the TRM.
85             items:
86               - description: MC_EMEM_ARB_CFG
87               - description: MC_EMEM_ARB_OUTSTANDING_REQ
88               - description: MC_EMEM_ARB_TIMING_RCD
89               - description: MC_EMEM_ARB_TIMING_RP
90               - description: MC_EMEM_ARB_TIMING_RC
91               - description: MC_EMEM_ARB_TIMING_RAS
92               - description: MC_EMEM_ARB_TIMING_FAW
93               - description: MC_EMEM_ARB_TIMING_RRD
94               - description: MC_EMEM_ARB_TIMING_RAP2PRE
95               - description: MC_EMEM_ARB_TIMING_WAP2PRE
96               - description: MC_EMEM_ARB_TIMING_R2R
97               - description: MC_EMEM_ARB_TIMING_W2W
98               - description: MC_EMEM_ARB_TIMING_R2W
99               - description: MC_EMEM_ARB_TIMING_W2R
100               - description: MC_EMEM_ARB_DA_TURNS
101               - description: MC_EMEM_ARB_DA_COVERS
102               - description: MC_EMEM_ARB_MISC0
103               - description: MC_EMEM_ARB_RING1_THROTTLE
104
105         required:
106           - clock-frequency
107           - nvidia,emem-configuration
108
109         additionalProperties: false
110
111     required:
112       - nvidia,ram-code
113
114     additionalProperties: false
115
116 required:
117   - compatible
118   - reg
119   - interrupts
120   - clocks
121   - clock-names
122   - "#reset-cells"
123   - "#iommu-cells"
124
125 additionalProperties: false
126
127 examples:
128   - |
129     memory-controller@7000f000 {
130         compatible = "nvidia,tegra30-mc";
131         reg = <0x7000f000 0x400>;
132         clocks = <&tegra_car 32>;
133         clock-names = "mc";
134
135         interrupts = <0 77 4>;
136
137         #iommu-cells = <1>;
138         #reset-cells = <1>;
139
140         emc-timings-1 {
141             nvidia,ram-code = <1>;
142
143             timing-667000000 {
144                 clock-frequency = <667000000>;
145
146                 nvidia,emem-configuration = <
147                     0x0000000a /* MC_EMEM_ARB_CFG */
148                     0xc0000079 /* MC_EMEM_ARB_OUTSTANDING_REQ */
149                     0x00000003 /* MC_EMEM_ARB_TIMING_RCD */
150                     0x00000004 /* MC_EMEM_ARB_TIMING_RP */
151                     0x00000010 /* MC_EMEM_ARB_TIMING_RC */
152                     0x0000000b /* MC_EMEM_ARB_TIMING_RAS */
153                     0x0000000a /* MC_EMEM_ARB_TIMING_FAW */
154                     0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
155                     0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
156                     0x0000000b /* MC_EMEM_ARB_TIMING_WAP2PRE */
157                     0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
158                     0x00000002 /* MC_EMEM_ARB_TIMING_W2W */
159                     0x00000004 /* MC_EMEM_ARB_TIMING_R2W */
160                     0x00000008 /* MC_EMEM_ARB_TIMING_W2R */
161                     0x08040202 /* MC_EMEM_ARB_DA_TURNS */
162                     0x00130b10 /* MC_EMEM_ARB_DA_COVERS */
163                     0x70ea1f11 /* MC_EMEM_ARB_MISC0 */
164                     0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
165                 >;
166             };
167         };
168     };