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