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