18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0)
28c2ecf20Sopenharmony_ci%YAML 1.2
38c2ecf20Sopenharmony_ci---
48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/memory-controllers/nvidia,tegra124-mc.yaml#
58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_cititle: NVIDIA Tegra124 SoC Memory Controller
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cimaintainers:
108c2ecf20Sopenharmony_ci  - Jon Hunter <jonathanh@nvidia.com>
118c2ecf20Sopenharmony_ci  - Thierry Reding <thierry.reding@gmail.com>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cidescription: |
148c2ecf20Sopenharmony_ci  Tegra124 SoC features a hybrid 2x32-bit / 1x64-bit memory controller.
158c2ecf20Sopenharmony_ci  These are interleaved to provide high performance with the load shared across
168c2ecf20Sopenharmony_ci  two memory channels. The Tegra124 Memory Controller handles memory requests
178c2ecf20Sopenharmony_ci  from internal clients and arbitrates among them to allocate memory bandwidth
188c2ecf20Sopenharmony_ci  for DDR3L and LPDDR3 SDRAMs.
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ciproperties:
218c2ecf20Sopenharmony_ci  compatible:
228c2ecf20Sopenharmony_ci    const: nvidia,tegra124-mc
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci  reg:
258c2ecf20Sopenharmony_ci    maxItems: 1
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci  clocks:
288c2ecf20Sopenharmony_ci    maxItems: 1
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci  clock-names:
318c2ecf20Sopenharmony_ci    items:
328c2ecf20Sopenharmony_ci      - const: mc
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci  interrupts:
358c2ecf20Sopenharmony_ci    maxItems: 1
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci  "#reset-cells":
388c2ecf20Sopenharmony_ci    const: 1
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci  "#iommu-cells":
418c2ecf20Sopenharmony_ci    const: 1
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_cipatternProperties:
448c2ecf20Sopenharmony_ci  "^emc-timings-[0-9]+$":
458c2ecf20Sopenharmony_ci    type: object
468c2ecf20Sopenharmony_ci    properties:
478c2ecf20Sopenharmony_ci      nvidia,ram-code:
488c2ecf20Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
498c2ecf20Sopenharmony_ci        description:
508c2ecf20Sopenharmony_ci          Value of RAM_CODE this timing set is used for.
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci    patternProperties:
538c2ecf20Sopenharmony_ci      "^timing-[0-9]+$":
548c2ecf20Sopenharmony_ci        type: object
558c2ecf20Sopenharmony_ci        properties:
568c2ecf20Sopenharmony_ci          clock-frequency:
578c2ecf20Sopenharmony_ci            description:
588c2ecf20Sopenharmony_ci              Memory clock rate in Hz.
598c2ecf20Sopenharmony_ci            minimum: 1000000
608c2ecf20Sopenharmony_ci            maximum: 1066000000
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci          nvidia,emem-configuration:
638c2ecf20Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/uint32-array
648c2ecf20Sopenharmony_ci            description: |
658c2ecf20Sopenharmony_ci              Values to be written to the EMEM register block. See section
668c2ecf20Sopenharmony_ci              "15.6.1 MC Registers" in the TRM.
678c2ecf20Sopenharmony_ci            items:
688c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_CFG
698c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_OUTSTANDING_REQ
708c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_RCD
718c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_RP
728c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_RC
738c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_RAS
748c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_FAW
758c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_RRD
768c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_RAP2PRE
778c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_WAP2PRE
788c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_R2R
798c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_W2W
808c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_R2W
818c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_TIMING_W2R
828c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_DA_TURNS
838c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_DA_COVERS
848c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_MISC0
858c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_MISC1
868c2ecf20Sopenharmony_ci              - description: MC_EMEM_ARB_RING1_THROTTLE
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci        required:
898c2ecf20Sopenharmony_ci          - clock-frequency
908c2ecf20Sopenharmony_ci          - nvidia,emem-configuration
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_ci        additionalProperties: false
938c2ecf20Sopenharmony_ci
948c2ecf20Sopenharmony_ci    required:
958c2ecf20Sopenharmony_ci      - nvidia,ram-code
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci    additionalProperties: false
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_cirequired:
1008c2ecf20Sopenharmony_ci  - compatible
1018c2ecf20Sopenharmony_ci  - reg
1028c2ecf20Sopenharmony_ci  - interrupts
1038c2ecf20Sopenharmony_ci  - clocks
1048c2ecf20Sopenharmony_ci  - clock-names
1058c2ecf20Sopenharmony_ci  - "#reset-cells"
1068c2ecf20Sopenharmony_ci  - "#iommu-cells"
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ciadditionalProperties: false
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ciexamples:
1118c2ecf20Sopenharmony_ci  - |
1128c2ecf20Sopenharmony_ci    memory-controller@70019000 {
1138c2ecf20Sopenharmony_ci        compatible = "nvidia,tegra124-mc";
1148c2ecf20Sopenharmony_ci        reg = <0x70019000 0x1000>;
1158c2ecf20Sopenharmony_ci        clocks = <&tegra_car 32>;
1168c2ecf20Sopenharmony_ci        clock-names = "mc";
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci        interrupts = <0 77 4>;
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci        #iommu-cells = <1>;
1218c2ecf20Sopenharmony_ci        #reset-cells = <1>;
1228c2ecf20Sopenharmony_ci
1238c2ecf20Sopenharmony_ci        emc-timings-3 {
1248c2ecf20Sopenharmony_ci            nvidia,ram-code = <3>;
1258c2ecf20Sopenharmony_ci
1268c2ecf20Sopenharmony_ci            timing-12750000 {
1278c2ecf20Sopenharmony_ci                clock-frequency = <12750000>;
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ci                nvidia,emem-configuration = <
1308c2ecf20Sopenharmony_ci                    0x40040001 /* MC_EMEM_ARB_CFG */
1318c2ecf20Sopenharmony_ci                    0x8000000a /* MC_EMEM_ARB_OUTSTANDING_REQ */
1328c2ecf20Sopenharmony_ci                    0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
1338c2ecf20Sopenharmony_ci                    0x00000001 /* MC_EMEM_ARB_TIMING_RP */
1348c2ecf20Sopenharmony_ci                    0x00000002 /* MC_EMEM_ARB_TIMING_RC */
1358c2ecf20Sopenharmony_ci                    0x00000000 /* MC_EMEM_ARB_TIMING_RAS */
1368c2ecf20Sopenharmony_ci                    0x00000002 /* MC_EMEM_ARB_TIMING_FAW */
1378c2ecf20Sopenharmony_ci                    0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
1388c2ecf20Sopenharmony_ci                    0x00000002 /* MC_EMEM_ARB_TIMING_RAP2PRE */
1398c2ecf20Sopenharmony_ci                    0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
1408c2ecf20Sopenharmony_ci                    0x00000003 /* MC_EMEM_ARB_TIMING_R2R */
1418c2ecf20Sopenharmony_ci                    0x00000002 /* MC_EMEM_ARB_TIMING_W2W */
1428c2ecf20Sopenharmony_ci                    0x00000003 /* MC_EMEM_ARB_TIMING_R2W */
1438c2ecf20Sopenharmony_ci                    0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
1448c2ecf20Sopenharmony_ci                    0x06030203 /* MC_EMEM_ARB_DA_TURNS */
1458c2ecf20Sopenharmony_ci                    0x000a0402 /* MC_EMEM_ARB_DA_COVERS */
1468c2ecf20Sopenharmony_ci                    0x77e30303 /* MC_EMEM_ARB_MISC0 */
1478c2ecf20Sopenharmony_ci                    0x70000f03 /* MC_EMEM_ARB_MISC1 */
1488c2ecf20Sopenharmony_ci                    0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
1498c2ecf20Sopenharmony_ci                >;
1508c2ecf20Sopenharmony_ci            };
1518c2ecf20Sopenharmony_ci        };
1528c2ecf20Sopenharmony_ci    };
153