nvidia,tegra30-mc.yaml 5.3 KB

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