xref: /freebsd-src/sys/contrib/device-tree/Bindings/memory-controllers/nvidia,tegra124-mc.yaml (revision 5def4c47d4bd90b209b9b4a4ba9faec15846d8fd)
1c66ec88fSEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0)
2c66ec88fSEmmanuel Vadot%YAML 1.2
3c66ec88fSEmmanuel Vadot---
4c66ec88fSEmmanuel Vadot$id: http://devicetree.org/schemas/memory-controllers/nvidia,tegra124-mc.yaml#
5c66ec88fSEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6c66ec88fSEmmanuel Vadot
7c66ec88fSEmmanuel Vadottitle: NVIDIA Tegra124 SoC Memory Controller
8c66ec88fSEmmanuel Vadot
9c66ec88fSEmmanuel Vadotmaintainers:
10c66ec88fSEmmanuel Vadot  - Jon Hunter <jonathanh@nvidia.com>
11c66ec88fSEmmanuel Vadot  - Thierry Reding <thierry.reding@gmail.com>
12c66ec88fSEmmanuel Vadot
13c66ec88fSEmmanuel Vadotdescription: |
14c66ec88fSEmmanuel Vadot  Tegra124 SoC features a hybrid 2x32-bit / 1x64-bit memory controller.
15c66ec88fSEmmanuel Vadot  These are interleaved to provide high performance with the load shared across
16c66ec88fSEmmanuel Vadot  two memory channels. The Tegra124 Memory Controller handles memory requests
17c66ec88fSEmmanuel Vadot  from internal clients and arbitrates among them to allocate memory bandwidth
18c66ec88fSEmmanuel Vadot  for DDR3L and LPDDR3 SDRAMs.
19c66ec88fSEmmanuel Vadot
20c66ec88fSEmmanuel Vadotproperties:
21c66ec88fSEmmanuel Vadot  compatible:
22c66ec88fSEmmanuel Vadot    const: nvidia,tegra124-mc
23c66ec88fSEmmanuel Vadot
24c66ec88fSEmmanuel Vadot  reg:
25c66ec88fSEmmanuel Vadot    maxItems: 1
26c66ec88fSEmmanuel Vadot
27c66ec88fSEmmanuel Vadot  clocks:
28c66ec88fSEmmanuel Vadot    maxItems: 1
29c66ec88fSEmmanuel Vadot
30c66ec88fSEmmanuel Vadot  clock-names:
31c66ec88fSEmmanuel Vadot    items:
32c66ec88fSEmmanuel Vadot      - const: mc
33c66ec88fSEmmanuel Vadot
34c66ec88fSEmmanuel Vadot  interrupts:
35c66ec88fSEmmanuel Vadot    maxItems: 1
36c66ec88fSEmmanuel Vadot
37c66ec88fSEmmanuel Vadot  "#reset-cells":
38c66ec88fSEmmanuel Vadot    const: 1
39c66ec88fSEmmanuel Vadot
40c66ec88fSEmmanuel Vadot  "#iommu-cells":
41c66ec88fSEmmanuel Vadot    const: 1
42c66ec88fSEmmanuel Vadot
43*5def4c47SEmmanuel Vadot  "#interconnect-cells":
44*5def4c47SEmmanuel Vadot    const: 1
45*5def4c47SEmmanuel Vadot
46c66ec88fSEmmanuel VadotpatternProperties:
47c66ec88fSEmmanuel Vadot  "^emc-timings-[0-9]+$":
48c66ec88fSEmmanuel Vadot    type: object
49c66ec88fSEmmanuel Vadot    properties:
50c66ec88fSEmmanuel Vadot      nvidia,ram-code:
51c66ec88fSEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
52c66ec88fSEmmanuel Vadot        description:
53c66ec88fSEmmanuel Vadot          Value of RAM_CODE this timing set is used for.
54c66ec88fSEmmanuel Vadot
55c66ec88fSEmmanuel Vadot    patternProperties:
56c66ec88fSEmmanuel Vadot      "^timing-[0-9]+$":
57c66ec88fSEmmanuel Vadot        type: object
58c66ec88fSEmmanuel Vadot        properties:
59c66ec88fSEmmanuel Vadot          clock-frequency:
60c66ec88fSEmmanuel Vadot            description:
61c66ec88fSEmmanuel Vadot              Memory clock rate in Hz.
62c66ec88fSEmmanuel Vadot            minimum: 1000000
63c66ec88fSEmmanuel Vadot            maximum: 1066000000
64c66ec88fSEmmanuel Vadot
65c66ec88fSEmmanuel Vadot          nvidia,emem-configuration:
66c66ec88fSEmmanuel Vadot            $ref: /schemas/types.yaml#/definitions/uint32-array
67c66ec88fSEmmanuel Vadot            description: |
68c66ec88fSEmmanuel Vadot              Values to be written to the EMEM register block. See section
69c66ec88fSEmmanuel Vadot              "15.6.1 MC Registers" in the TRM.
70c66ec88fSEmmanuel Vadot            items:
71c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_CFG
72c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_OUTSTANDING_REQ
73c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_RCD
74c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_RP
75c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_RC
76c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_RAS
77c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_FAW
78c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_RRD
79c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_RAP2PRE
80c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_WAP2PRE
81c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_R2R
82c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_W2W
83c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_R2W
84c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_TIMING_W2R
85c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_DA_TURNS
86c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_DA_COVERS
87c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_MISC0
88c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_MISC1
89c66ec88fSEmmanuel Vadot              - description: MC_EMEM_ARB_RING1_THROTTLE
90c66ec88fSEmmanuel Vadot
91c66ec88fSEmmanuel Vadot        required:
92c66ec88fSEmmanuel Vadot          - clock-frequency
93c66ec88fSEmmanuel Vadot          - nvidia,emem-configuration
94c66ec88fSEmmanuel Vadot
95c66ec88fSEmmanuel Vadot        additionalProperties: false
96c66ec88fSEmmanuel Vadot
97c66ec88fSEmmanuel Vadot    required:
98c66ec88fSEmmanuel Vadot      - nvidia,ram-code
99c66ec88fSEmmanuel Vadot
100c66ec88fSEmmanuel Vadot    additionalProperties: false
101c66ec88fSEmmanuel Vadot
102c66ec88fSEmmanuel Vadotrequired:
103c66ec88fSEmmanuel Vadot  - compatible
104c66ec88fSEmmanuel Vadot  - reg
105c66ec88fSEmmanuel Vadot  - interrupts
106c66ec88fSEmmanuel Vadot  - clocks
107c66ec88fSEmmanuel Vadot  - clock-names
108c66ec88fSEmmanuel Vadot  - "#reset-cells"
109c66ec88fSEmmanuel Vadot  - "#iommu-cells"
110*5def4c47SEmmanuel Vadot  - "#interconnect-cells"
111c66ec88fSEmmanuel Vadot
112c66ec88fSEmmanuel VadotadditionalProperties: false
113c66ec88fSEmmanuel Vadot
114c66ec88fSEmmanuel Vadotexamples:
115c66ec88fSEmmanuel Vadot  - |
116c66ec88fSEmmanuel Vadot    memory-controller@70019000 {
117c66ec88fSEmmanuel Vadot        compatible = "nvidia,tegra124-mc";
118c66ec88fSEmmanuel Vadot        reg = <0x70019000 0x1000>;
119c66ec88fSEmmanuel Vadot        clocks = <&tegra_car 32>;
120c66ec88fSEmmanuel Vadot        clock-names = "mc";
121c66ec88fSEmmanuel Vadot
122c66ec88fSEmmanuel Vadot        interrupts = <0 77 4>;
123c66ec88fSEmmanuel Vadot
124c66ec88fSEmmanuel Vadot        #iommu-cells = <1>;
125c66ec88fSEmmanuel Vadot        #reset-cells = <1>;
126*5def4c47SEmmanuel Vadot        #interconnect-cells = <1>;
127c66ec88fSEmmanuel Vadot
128c66ec88fSEmmanuel Vadot        emc-timings-3 {
129c66ec88fSEmmanuel Vadot            nvidia,ram-code = <3>;
130c66ec88fSEmmanuel Vadot
131c66ec88fSEmmanuel Vadot            timing-12750000 {
132c66ec88fSEmmanuel Vadot                clock-frequency = <12750000>;
133c66ec88fSEmmanuel Vadot
134c66ec88fSEmmanuel Vadot                nvidia,emem-configuration = <
135c66ec88fSEmmanuel Vadot                    0x40040001 /* MC_EMEM_ARB_CFG */
136c66ec88fSEmmanuel Vadot                    0x8000000a /* MC_EMEM_ARB_OUTSTANDING_REQ */
137c66ec88fSEmmanuel Vadot                    0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
138c66ec88fSEmmanuel Vadot                    0x00000001 /* MC_EMEM_ARB_TIMING_RP */
139c66ec88fSEmmanuel Vadot                    0x00000002 /* MC_EMEM_ARB_TIMING_RC */
140c66ec88fSEmmanuel Vadot                    0x00000000 /* MC_EMEM_ARB_TIMING_RAS */
141c66ec88fSEmmanuel Vadot                    0x00000002 /* MC_EMEM_ARB_TIMING_FAW */
142c66ec88fSEmmanuel Vadot                    0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
143c66ec88fSEmmanuel Vadot                    0x00000002 /* MC_EMEM_ARB_TIMING_RAP2PRE */
144c66ec88fSEmmanuel Vadot                    0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
145c66ec88fSEmmanuel Vadot                    0x00000003 /* MC_EMEM_ARB_TIMING_R2R */
146c66ec88fSEmmanuel Vadot                    0x00000002 /* MC_EMEM_ARB_TIMING_W2W */
147c66ec88fSEmmanuel Vadot                    0x00000003 /* MC_EMEM_ARB_TIMING_R2W */
148c66ec88fSEmmanuel Vadot                    0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
149c66ec88fSEmmanuel Vadot                    0x06030203 /* MC_EMEM_ARB_DA_TURNS */
150c66ec88fSEmmanuel Vadot                    0x000a0402 /* MC_EMEM_ARB_DA_COVERS */
151c66ec88fSEmmanuel Vadot                    0x77e30303 /* MC_EMEM_ARB_MISC0 */
152c66ec88fSEmmanuel Vadot                    0x70000f03 /* MC_EMEM_ARB_MISC1 */
153c66ec88fSEmmanuel Vadot                    0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
154c66ec88fSEmmanuel Vadot                >;
155c66ec88fSEmmanuel Vadot            };
156c66ec88fSEmmanuel Vadot        };
157c66ec88fSEmmanuel Vadot    };
158