xref: /openbmc/linux/Documentation/devicetree/bindings/memory-controllers/nvidia,tegra20-emc.yaml (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
1de3d7018SDmitry Osipenko# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2de3d7018SDmitry Osipenko%YAML 1.2
3de3d7018SDmitry Osipenko---
4de3d7018SDmitry Osipenko$id: http://devicetree.org/schemas/memory-controllers/nvidia,tegra20-emc.yaml#
5de3d7018SDmitry Osipenko$schema: http://devicetree.org/meta-schemas/core.yaml#
6de3d7018SDmitry Osipenko
7de3d7018SDmitry Osipenkotitle: NVIDIA Tegra20 SoC External Memory Controller
8de3d7018SDmitry Osipenko
9de3d7018SDmitry Osipenkomaintainers:
10de3d7018SDmitry Osipenko  - Dmitry Osipenko <digetx@gmail.com>
11de3d7018SDmitry Osipenko  - Jon Hunter <jonathanh@nvidia.com>
12de3d7018SDmitry Osipenko  - Thierry Reding <thierry.reding@gmail.com>
13de3d7018SDmitry Osipenko
14de3d7018SDmitry Osipenkodescription: |
15de3d7018SDmitry Osipenko  The External Memory Controller (EMC) interfaces with the off-chip SDRAM to
16de3d7018SDmitry Osipenko  service the request stream sent from Memory Controller. The EMC also has
17de3d7018SDmitry Osipenko  various performance-affecting settings beyond the obvious SDRAM configuration
18de3d7018SDmitry Osipenko  parameters and initialization settings. Tegra20 EMC supports multiple JEDEC
19de3d7018SDmitry Osipenko  standard protocols: DDR1, LPDDR2 and DDR2.
20de3d7018SDmitry Osipenko
21de3d7018SDmitry Osipenkoproperties:
22de3d7018SDmitry Osipenko  compatible:
23de3d7018SDmitry Osipenko    const: nvidia,tegra20-emc
24de3d7018SDmitry Osipenko
25de3d7018SDmitry Osipenko  reg:
26de3d7018SDmitry Osipenko    maxItems: 1
27de3d7018SDmitry Osipenko
28de3d7018SDmitry Osipenko  clocks:
29de3d7018SDmitry Osipenko    maxItems: 1
30de3d7018SDmitry Osipenko
31de3d7018SDmitry Osipenko  interrupts:
32de3d7018SDmitry Osipenko    maxItems: 1
33de3d7018SDmitry Osipenko
34de3d7018SDmitry Osipenko  "#address-cells":
35de3d7018SDmitry Osipenko    const: 1
36de3d7018SDmitry Osipenko
37de3d7018SDmitry Osipenko  "#size-cells":
38de3d7018SDmitry Osipenko    const: 0
39de3d7018SDmitry Osipenko
40de3d7018SDmitry Osipenko  "#interconnect-cells":
41de3d7018SDmitry Osipenko    const: 0
42de3d7018SDmitry Osipenko
43de3d7018SDmitry Osipenko  nvidia,memory-controller:
44de3d7018SDmitry Osipenko    $ref: /schemas/types.yaml#/definitions/phandle
45de3d7018SDmitry Osipenko    description:
46de3d7018SDmitry Osipenko      Phandle of the Memory Controller node.
47de3d7018SDmitry Osipenko
48de3d7018SDmitry Osipenko  power-domains:
49de3d7018SDmitry Osipenko    maxItems: 1
50de3d7018SDmitry Osipenko    description:
51de3d7018SDmitry Osipenko      Phandle of the SoC "core" power domain.
52de3d7018SDmitry Osipenko
53de3d7018SDmitry Osipenko  operating-points-v2:
54de3d7018SDmitry Osipenko    description:
55de3d7018SDmitry Osipenko      Should contain freqs and voltages and opp-supported-hw property, which
56de3d7018SDmitry Osipenko      is a bitfield indicating SoC process ID mask.
57de3d7018SDmitry Osipenko
58de3d7018SDmitry Osipenko  nvidia,use-ram-code:
59de3d7018SDmitry Osipenko    type: boolean
60de3d7018SDmitry Osipenko    description:
61de3d7018SDmitry Osipenko      If present, the emc-tables@ sub-nodes will be addressed.
62de3d7018SDmitry Osipenko
63de3d7018SDmitry Osipenko$defs:
64de3d7018SDmitry Osipenko  emc-table:
65de3d7018SDmitry Osipenko    type: object
66de3d7018SDmitry Osipenko    properties:
67de3d7018SDmitry Osipenko      compatible:
68de3d7018SDmitry Osipenko        const: nvidia,tegra20-emc-table
69de3d7018SDmitry Osipenko
70de3d7018SDmitry Osipenko      clock-frequency:
71de3d7018SDmitry Osipenko        description:
72de3d7018SDmitry Osipenko          Memory clock rate in kHz.
73de3d7018SDmitry Osipenko        minimum: 1000
74de3d7018SDmitry Osipenko        maximum: 900000
75de3d7018SDmitry Osipenko
76de3d7018SDmitry Osipenko      reg:
77de3d7018SDmitry Osipenko        maxItems: 1
78de3d7018SDmitry Osipenko        description:
79de3d7018SDmitry Osipenko          Either an opaque enumerator to tell different tables apart, or
80de3d7018SDmitry Osipenko          the valid frequency for which the table should be used (in kHz).
81de3d7018SDmitry Osipenko
82de3d7018SDmitry Osipenko      nvidia,emc-registers:
83de3d7018SDmitry Osipenko        description:
84de3d7018SDmitry Osipenko          EMC timing characterization data. These are the registers
85de3d7018SDmitry Osipenko          (see section "15.4.1 EMC Registers" in the TRM) whose values
86de3d7018SDmitry Osipenko          need to be specified, according to the board documentation.
87de3d7018SDmitry Osipenko        $ref: /schemas/types.yaml#/definitions/uint32-array
88de3d7018SDmitry Osipenko        items:
89de3d7018SDmitry Osipenko          - description: EMC_RC
90de3d7018SDmitry Osipenko          - description: EMC_RFC
91de3d7018SDmitry Osipenko          - description: EMC_RAS
92de3d7018SDmitry Osipenko          - description: EMC_RP
93de3d7018SDmitry Osipenko          - description: EMC_R2W
94de3d7018SDmitry Osipenko          - description: EMC_W2R
95de3d7018SDmitry Osipenko          - description: EMC_R2P
96de3d7018SDmitry Osipenko          - description: EMC_W2P
97de3d7018SDmitry Osipenko          - description: EMC_RD_RCD
98de3d7018SDmitry Osipenko          - description: EMC_WR_RCD
99de3d7018SDmitry Osipenko          - description: EMC_RRD
100de3d7018SDmitry Osipenko          - description: EMC_REXT
101de3d7018SDmitry Osipenko          - description: EMC_WDV
102de3d7018SDmitry Osipenko          - description: EMC_QUSE
103de3d7018SDmitry Osipenko          - description: EMC_QRST
104de3d7018SDmitry Osipenko          - description: EMC_QSAFE
105de3d7018SDmitry Osipenko          - description: EMC_RDV
106de3d7018SDmitry Osipenko          - description: EMC_REFRESH
107de3d7018SDmitry Osipenko          - description: EMC_BURST_REFRESH_NUM
108de3d7018SDmitry Osipenko          - description: EMC_PDEX2WR
109de3d7018SDmitry Osipenko          - description: EMC_PDEX2RD
110de3d7018SDmitry Osipenko          - description: EMC_PCHG2PDEN
111de3d7018SDmitry Osipenko          - description: EMC_ACT2PDEN
112de3d7018SDmitry Osipenko          - description: EMC_AR2PDEN
113de3d7018SDmitry Osipenko          - description: EMC_RW2PDEN
114de3d7018SDmitry Osipenko          - description: EMC_TXSR
115de3d7018SDmitry Osipenko          - description: EMC_TCKE
116de3d7018SDmitry Osipenko          - description: EMC_TFAW
117de3d7018SDmitry Osipenko          - description: EMC_TRPAB
118de3d7018SDmitry Osipenko          - description: EMC_TCLKSTABLE
119de3d7018SDmitry Osipenko          - description: EMC_TCLKSTOP
120de3d7018SDmitry Osipenko          - description: EMC_TREFBW
121de3d7018SDmitry Osipenko          - description: EMC_QUSE_EXTRA
122de3d7018SDmitry Osipenko          - description: EMC_FBIO_CFG6
123de3d7018SDmitry Osipenko          - description: EMC_ODT_WRITE
124de3d7018SDmitry Osipenko          - description: EMC_ODT_READ
125de3d7018SDmitry Osipenko          - description: EMC_FBIO_CFG5
126de3d7018SDmitry Osipenko          - description: EMC_CFG_DIG_DLL
127de3d7018SDmitry Osipenko          - description: EMC_DLL_XFORM_DQS
128de3d7018SDmitry Osipenko          - description: EMC_DLL_XFORM_QUSE
129de3d7018SDmitry Osipenko          - description: EMC_ZCAL_REF_CNT
130de3d7018SDmitry Osipenko          - description: EMC_ZCAL_WAIT_CNT
131de3d7018SDmitry Osipenko          - description: EMC_AUTO_CAL_INTERVAL
132de3d7018SDmitry Osipenko          - description: EMC_CFG_CLKTRIM_0
133de3d7018SDmitry Osipenko          - description: EMC_CFG_CLKTRIM_1
134de3d7018SDmitry Osipenko          - description: EMC_CFG_CLKTRIM_2
135de3d7018SDmitry Osipenko
136de3d7018SDmitry Osipenko    required:
137de3d7018SDmitry Osipenko      - clock-frequency
138de3d7018SDmitry Osipenko      - compatible
139de3d7018SDmitry Osipenko      - reg
140de3d7018SDmitry Osipenko      - nvidia,emc-registers
141de3d7018SDmitry Osipenko
142de3d7018SDmitry Osipenko    additionalProperties: false
143de3d7018SDmitry Osipenko
144de3d7018SDmitry OsipenkopatternProperties:
145de3d7018SDmitry Osipenko  "^emc-table@[0-9]+$":
146de3d7018SDmitry Osipenko    $ref: "#/$defs/emc-table"
147de3d7018SDmitry Osipenko
148de3d7018SDmitry Osipenko  "^emc-tables@[a-z0-9-]+$":
149de3d7018SDmitry Osipenko    type: object
150de3d7018SDmitry Osipenko    properties:
151de3d7018SDmitry Osipenko      reg:
152de3d7018SDmitry Osipenko        maxItems: 1
153de3d7018SDmitry Osipenko        description:
154de3d7018SDmitry Osipenko          An opaque enumerator to tell different tables apart.
155de3d7018SDmitry Osipenko
156de3d7018SDmitry Osipenko      nvidia,ram-code:
157de3d7018SDmitry Osipenko        $ref: /schemas/types.yaml#/definitions/uint32
158de3d7018SDmitry Osipenko        description:
159de3d7018SDmitry Osipenko          Value of RAM_CODE this timing set is used for.
160de3d7018SDmitry Osipenko
161de3d7018SDmitry Osipenko      "#address-cells":
162de3d7018SDmitry Osipenko        const: 1
163de3d7018SDmitry Osipenko
164de3d7018SDmitry Osipenko      "#size-cells":
165de3d7018SDmitry Osipenko        const: 0
166de3d7018SDmitry Osipenko
167ce004ae6SDmitry Osipenko      lpddr2:
168*6a66fb9fSKrzysztof Kozlowski        $ref: ddr/jedec,lpddr2.yaml#
169ce004ae6SDmitry Osipenko        type: object
170ce004ae6SDmitry Osipenko
171de3d7018SDmitry Osipenko    patternProperties:
172de3d7018SDmitry Osipenko      "^emc-table@[0-9]+$":
173de3d7018SDmitry Osipenko        $ref: "#/$defs/emc-table"
174de3d7018SDmitry Osipenko
175ce004ae6SDmitry Osipenko    oneOf:
176ce004ae6SDmitry Osipenko      - required:
177de3d7018SDmitry Osipenko          - nvidia,ram-code
178de3d7018SDmitry Osipenko
179ce004ae6SDmitry Osipenko      - required:
180ce004ae6SDmitry Osipenko          - lpddr2
181ce004ae6SDmitry Osipenko
182de3d7018SDmitry Osipenko    additionalProperties: false
183de3d7018SDmitry Osipenko
184de3d7018SDmitry Osipenkorequired:
185de3d7018SDmitry Osipenko  - compatible
186de3d7018SDmitry Osipenko  - reg
187de3d7018SDmitry Osipenko  - interrupts
188de3d7018SDmitry Osipenko  - clocks
189de3d7018SDmitry Osipenko  - nvidia,memory-controller
190de3d7018SDmitry Osipenko  - "#interconnect-cells"
191de3d7018SDmitry Osipenko  - operating-points-v2
192de3d7018SDmitry Osipenko
193de3d7018SDmitry OsipenkoadditionalProperties: false
194de3d7018SDmitry Osipenko
195de3d7018SDmitry Osipenkoexamples:
196de3d7018SDmitry Osipenko  - |
197de3d7018SDmitry Osipenko    external-memory-controller@7000f400 {
198de3d7018SDmitry Osipenko        compatible = "nvidia,tegra20-emc";
199de3d7018SDmitry Osipenko        reg = <0x7000f400 0x400>;
200de3d7018SDmitry Osipenko        interrupts = <0 78 4>;
201de3d7018SDmitry Osipenko        clocks = <&clock_controller 57>;
202de3d7018SDmitry Osipenko
203de3d7018SDmitry Osipenko        nvidia,memory-controller = <&mc>;
204de3d7018SDmitry Osipenko        operating-points-v2 = <&dvfs_opp_table>;
205de3d7018SDmitry Osipenko        power-domains = <&domain>;
206de3d7018SDmitry Osipenko
207de3d7018SDmitry Osipenko        #interconnect-cells = <0>;
208de3d7018SDmitry Osipenko        #address-cells = <1>;
209de3d7018SDmitry Osipenko        #size-cells = <0>;
210de3d7018SDmitry Osipenko
211de3d7018SDmitry Osipenko        nvidia,use-ram-code;
212de3d7018SDmitry Osipenko
213de3d7018SDmitry Osipenko        emc-tables@0 {
214de3d7018SDmitry Osipenko            nvidia,ram-code = <0>;
215de3d7018SDmitry Osipenko            reg = <0>;
216de3d7018SDmitry Osipenko
217de3d7018SDmitry Osipenko            #address-cells = <1>;
218de3d7018SDmitry Osipenko            #size-cells = <0>;
219de3d7018SDmitry Osipenko
220de3d7018SDmitry Osipenko            emc-table@333000 {
221de3d7018SDmitry Osipenko                reg = <333000>;
222de3d7018SDmitry Osipenko                compatible = "nvidia,tegra20-emc-table";
223de3d7018SDmitry Osipenko                clock-frequency = <333000>;
224de3d7018SDmitry Osipenko                nvidia,emc-registers = <0x00000018 0x00000033
225de3d7018SDmitry Osipenko                        0x00000012 0x00000004 0x00000004 0x00000005
226de3d7018SDmitry Osipenko                        0x00000003 0x0000000c 0x00000006 0x00000006
227de3d7018SDmitry Osipenko                        0x00000003 0x00000001 0x00000004 0x00000005
228de3d7018SDmitry Osipenko                        0x00000004 0x00000009 0x0000000d 0x00000bff
229de3d7018SDmitry Osipenko                        0x00000000 0x00000003 0x00000003 0x00000006
230de3d7018SDmitry Osipenko                        0x00000006 0x00000001 0x00000011 0x000000c8
231de3d7018SDmitry Osipenko                        0x00000003 0x0000000e 0x00000007 0x00000008
232de3d7018SDmitry Osipenko                        0x00000002 0x00000000 0x00000000 0x00000002
233de3d7018SDmitry Osipenko                        0x00000000 0x00000000 0x00000083 0xf0440303
234de3d7018SDmitry Osipenko                        0x007fe010 0x00001414 0x00000000 0x00000000
235de3d7018SDmitry Osipenko                        0x00000000 0x00000000 0x00000000 0x00000000>;
236de3d7018SDmitry Osipenko            };
237de3d7018SDmitry Osipenko        };
238ce004ae6SDmitry Osipenko
239ce004ae6SDmitry Osipenko        emc-tables@1 {
240ce004ae6SDmitry Osipenko            reg = <1>;
241ce004ae6SDmitry Osipenko
242ce004ae6SDmitry Osipenko            lpddr2 {
243ce004ae6SDmitry Osipenko                compatible = "elpida,B8132B2PB-6D-F", "jedec,lpddr2-s4";
244ce004ae6SDmitry Osipenko                revision-id1 = <1>;
245ce004ae6SDmitry Osipenko                density = <2048>;
246ce004ae6SDmitry Osipenko                io-width = <16>;
247ce004ae6SDmitry Osipenko            };
248ce004ae6SDmitry Osipenko        };
249de3d7018SDmitry Osipenko    };
250