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