| # SPDX-License-Identifier: (GPL-2.0) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/memory-controllers/nvidia,tegra30-mc.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: NVIDIA Tegra30 SoC Memory Controller |
| |
| maintainers: |
| - Dmitry Osipenko <digetx@gmail.com> |
| - Jon Hunter <jonathanh@nvidia.com> |
| - Thierry Reding <thierry.reding@gmail.com> |
| |
| description: | |
| Tegra30 Memory Controller architecturally consists of the following parts: |
| |
| Arbitration Domains, which can handle a single request or response per |
| clock from a group of clients. Typically, a system has a single Arbitration |
| Domain, but an implementation may divide the client space into multiple |
| Arbitration Domains to increase the effective system bandwidth. |
| |
| Protocol Arbiter, which manage a related pool of memory devices. A system |
| may have a single Protocol Arbiter or multiple Protocol Arbiters. |
| |
| Memory Crossbar, which routes request and responses between Arbitration |
| Domains and Protocol Arbiters. In the simplest version of the system, the |
| Memory Crossbar is just a pass through between a single Arbitration Domain |
| and a single Protocol Arbiter. |
| |
| Global Resources, which include things like configuration registers which |
| are shared across the Memory Subsystem. |
| |
| The Tegra30 Memory Controller handles memory requests from internal clients |
| and arbitrates among them to allocate memory bandwidth for DDR3L and LPDDR2 |
| SDRAMs. |
| |
| properties: |
| compatible: |
| const: nvidia,tegra30-mc |
| |
| reg: |
| maxItems: 1 |
| |
| clocks: |
| maxItems: 1 |
| |
| clock-names: |
| items: |
| - const: mc |
| |
| interrupts: |
| maxItems: 1 |
| |
| "#reset-cells": |
| const: 1 |
| |
| "#iommu-cells": |
| const: 1 |
| |
| "#interconnect-cells": |
| const: 1 |
| |
| patternProperties: |
| "^emc-timings-[0-9]+$": |
| type: object |
| properties: |
| nvidia,ram-code: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: |
| Value of RAM_CODE this timing set is used for. |
| |
| patternProperties: |
| "^timing-[0-9]+$": |
| type: object |
| properties: |
| clock-frequency: |
| description: |
| Memory clock rate in Hz. |
| minimum: 1000000 |
| maximum: 900000000 |
| |
| nvidia,emem-configuration: |
| $ref: /schemas/types.yaml#/definitions/uint32-array |
| description: | |
| Values to be written to the EMEM register block. See section |
| "18.13.1 MC Registers" in the TRM. |
| items: |
| - description: MC_EMEM_ARB_CFG |
| - description: MC_EMEM_ARB_OUTSTANDING_REQ |
| - description: MC_EMEM_ARB_TIMING_RCD |
| - description: MC_EMEM_ARB_TIMING_RP |
| - description: MC_EMEM_ARB_TIMING_RC |
| - description: MC_EMEM_ARB_TIMING_RAS |
| - description: MC_EMEM_ARB_TIMING_FAW |
| - description: MC_EMEM_ARB_TIMING_RRD |
| - description: MC_EMEM_ARB_TIMING_RAP2PRE |
| - description: MC_EMEM_ARB_TIMING_WAP2PRE |
| - description: MC_EMEM_ARB_TIMING_R2R |
| - description: MC_EMEM_ARB_TIMING_W2W |
| - description: MC_EMEM_ARB_TIMING_R2W |
| - description: MC_EMEM_ARB_TIMING_W2R |
| - description: MC_EMEM_ARB_DA_TURNS |
| - description: MC_EMEM_ARB_DA_COVERS |
| - description: MC_EMEM_ARB_MISC0 |
| - description: MC_EMEM_ARB_RING1_THROTTLE |
| |
| required: |
| - clock-frequency |
| - nvidia,emem-configuration |
| |
| additionalProperties: false |
| |
| required: |
| - nvidia,ram-code |
| |
| additionalProperties: false |
| |
| required: |
| - compatible |
| - reg |
| - interrupts |
| - clocks |
| - clock-names |
| - "#reset-cells" |
| - "#iommu-cells" |
| - "#interconnect-cells" |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| memory-controller@7000f000 { |
| compatible = "nvidia,tegra30-mc"; |
| reg = <0x7000f000 0x400>; |
| clocks = <&tegra_car 32>; |
| clock-names = "mc"; |
| |
| interrupts = <0 77 4>; |
| |
| #iommu-cells = <1>; |
| #reset-cells = <1>; |
| #interconnect-cells = <1>; |
| |
| emc-timings-1 { |
| nvidia,ram-code = <1>; |
| |
| timing-667000000 { |
| clock-frequency = <667000000>; |
| |
| nvidia,emem-configuration = < |
| 0x0000000a /* MC_EMEM_ARB_CFG */ |
| 0xc0000079 /* MC_EMEM_ARB_OUTSTANDING_REQ */ |
| 0x00000003 /* MC_EMEM_ARB_TIMING_RCD */ |
| 0x00000004 /* MC_EMEM_ARB_TIMING_RP */ |
| 0x00000010 /* MC_EMEM_ARB_TIMING_RC */ |
| 0x0000000b /* MC_EMEM_ARB_TIMING_RAS */ |
| 0x0000000a /* MC_EMEM_ARB_TIMING_FAW */ |
| 0x00000001 /* MC_EMEM_ARB_TIMING_RRD */ |
| 0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */ |
| 0x0000000b /* MC_EMEM_ARB_TIMING_WAP2PRE */ |
| 0x00000002 /* MC_EMEM_ARB_TIMING_R2R */ |
| 0x00000002 /* MC_EMEM_ARB_TIMING_W2W */ |
| 0x00000004 /* MC_EMEM_ARB_TIMING_R2W */ |
| 0x00000008 /* MC_EMEM_ARB_TIMING_W2R */ |
| 0x08040202 /* MC_EMEM_ARB_DA_TURNS */ |
| 0x00130b10 /* MC_EMEM_ARB_DA_COVERS */ |
| 0x70ea1f11 /* MC_EMEM_ARB_MISC0 */ |
| 0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */ |
| >; |
| }; |
| }; |
| }; |