124 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| NVIDIA Tegra Memory Controller device tree bindings
 | |
| ===================================================
 | |
| 
 | |
| memory-controller node
 | |
| ----------------------
 | |
| 
 | |
| Required properties:
 | |
| - compatible: Should be "nvidia,tegra<chip>-mc"
 | |
| - reg: Physical base address and length of the controller's registers.
 | |
| - clocks: Must contain an entry for each entry in clock-names.
 | |
|   See ../clocks/clock-bindings.txt for details.
 | |
| - clock-names: Must include the following entries:
 | |
|   - mc: the module's clock input
 | |
| - interrupts: The interrupt outputs from the controller.
 | |
| - #reset-cells : Should be 1. This cell represents memory client module ID.
 | |
|   The assignments may be found in header file <dt-bindings/memory/tegra30-mc.h>
 | |
|   or in the TRM documentation.
 | |
| 
 | |
| Required properties for Tegra30, Tegra114, Tegra124, Tegra132 and Tegra210:
 | |
| - #iommu-cells: Should be 1. The single cell of the IOMMU specifier defines
 | |
|   the SWGROUP of the master.
 | |
| 
 | |
| This device implements an IOMMU that complies with the generic IOMMU binding.
 | |
| See ../iommu/iommu.txt for details.
 | |
| 
 | |
| emc-timings subnode
 | |
| -------------------
 | |
| 
 | |
| The node should contain a "emc-timings" subnode for each supported RAM type (see field RAM_CODE in
 | |
| register PMC_STRAPPING_OPT_A).
 | |
| 
 | |
| Required properties for "emc-timings" nodes :
 | |
| - nvidia,ram-code : Should contain the value of RAM_CODE this timing set is used for.
 | |
| 
 | |
| timing subnode
 | |
| --------------
 | |
| 
 | |
| Each "emc-timings" node should contain a subnode for every supported EMC clock rate.
 | |
| 
 | |
| Required properties for timing nodes :
 | |
| - clock-frequency : Should contain the memory clock rate in Hz.
 | |
| - nvidia,emem-configuration : Values to be written to the EMEM register block. For the Tegra124 SoC
 | |
| (see section "15.6.1 MC Registers" in the TRM), these are the registers whose values need to be
 | |
| specified, according to the board documentation:
 | |
| 
 | |
| 	MC_EMEM_ARB_CFG
 | |
| 	MC_EMEM_ARB_OUTSTANDING_REQ
 | |
| 	MC_EMEM_ARB_TIMING_RCD
 | |
| 	MC_EMEM_ARB_TIMING_RP
 | |
| 	MC_EMEM_ARB_TIMING_RC
 | |
| 	MC_EMEM_ARB_TIMING_RAS
 | |
| 	MC_EMEM_ARB_TIMING_FAW
 | |
| 	MC_EMEM_ARB_TIMING_RRD
 | |
| 	MC_EMEM_ARB_TIMING_RAP2PRE
 | |
| 	MC_EMEM_ARB_TIMING_WAP2PRE
 | |
| 	MC_EMEM_ARB_TIMING_R2R
 | |
| 	MC_EMEM_ARB_TIMING_W2W
 | |
| 	MC_EMEM_ARB_TIMING_R2W
 | |
| 	MC_EMEM_ARB_TIMING_W2R
 | |
| 	MC_EMEM_ARB_DA_TURNS
 | |
| 	MC_EMEM_ARB_DA_COVERS
 | |
| 	MC_EMEM_ARB_MISC0
 | |
| 	MC_EMEM_ARB_MISC1
 | |
| 	MC_EMEM_ARB_RING1_THROTTLE
 | |
| 
 | |
| Example SoC include file:
 | |
| 
 | |
| / {
 | |
| 	mc: memory-controller@70019000 {
 | |
| 		compatible = "nvidia,tegra124-mc";
 | |
| 		reg = <0x0 0x70019000 0x0 0x1000>;
 | |
| 		clocks = <&tegra_car TEGRA124_CLK_MC>;
 | |
| 		clock-names = "mc";
 | |
| 
 | |
| 		interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
 | |
| 
 | |
| 		#iommu-cells = <1>;
 | |
| 		#reset-cells = <1>;
 | |
| 	};
 | |
| 
 | |
| 	sdhci@700b0000 {
 | |
| 		compatible = "nvidia,tegra124-sdhci";
 | |
| 		...
 | |
| 		iommus = <&mc TEGRA_SWGROUP_SDMMC1A>;
 | |
| 		resets = <&mc TEGRA124_MC_RESET_SDMMC1>;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| Example board file:
 | |
| 
 | |
| / {
 | |
| 	memory-controller@70019000 {
 | |
| 		emc-timings-3 {
 | |
| 			nvidia,ram-code = <3>;
 | |
| 
 | |
| 			timing-12750000 {
 | |
| 				clock-frequency = <12750000>;
 | |
| 
 | |
| 				nvidia,emem-configuration = <
 | |
| 					0x40040001 /* MC_EMEM_ARB_CFG */
 | |
| 					0x8000000a /* MC_EMEM_ARB_OUTSTANDING_REQ */
 | |
| 					0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
 | |
| 					0x00000001 /* MC_EMEM_ARB_TIMING_RP */
 | |
| 					0x00000002 /* MC_EMEM_ARB_TIMING_RC */
 | |
| 					0x00000000 /* MC_EMEM_ARB_TIMING_RAS */
 | |
| 					0x00000002 /* MC_EMEM_ARB_TIMING_FAW */
 | |
| 					0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
 | |
| 					0x00000002 /* MC_EMEM_ARB_TIMING_RAP2PRE */
 | |
| 					0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
 | |
| 					0x00000003 /* MC_EMEM_ARB_TIMING_R2R */
 | |
| 					0x00000002 /* MC_EMEM_ARB_TIMING_W2W */
 | |
| 					0x00000003 /* MC_EMEM_ARB_TIMING_R2W */
 | |
| 					0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
 | |
| 					0x06030203 /* MC_EMEM_ARB_DA_TURNS */
 | |
| 					0x000a0402 /* MC_EMEM_ARB_DA_COVERS */
 | |
| 					0x77e30303 /* MC_EMEM_ARB_MISC0 */
 | |
| 					0x70000f03 /* MC_EMEM_ARB_MISC1 */
 | |
| 					0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
 | |
| 				>;
 | |
| 			};
 | |
| 		};
 | |
| 	};
 | |
| };
 |