mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-31 08:21:36 +01:00 
			
		
		
		
	Add driver and binding for stm32mp1 ddr controller and phy Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
		
			
				
	
	
		
			300 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			300 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ST,stm32mp1 DDR3/LPDDR2/LPDDR3 Controller (DDRCTRL and DDRPHYC)
 | |
| 
 | |
| --------------------
 | |
| Required properties:
 | |
| --------------------
 | |
| - compatible	: Should be "st,stm32mp1-ddr"
 | |
| - reg		: controleur (DDRCTRL) and phy (DDRPHYC) base address
 | |
| - clocks	: controller clocks handle
 | |
| - clock-names	: associated controller clock names
 | |
| 		  the "ddrphyc" clock is used to check the DDR frequency
 | |
| 		  at phy level according the expected value in "mem-speed" field
 | |
| 
 | |
| the next attributes are DDR parameters, they are generated by DDR tools
 | |
| included in STM32 Cube tool
 | |
| 
 | |
| info attributes:
 | |
| ----------------
 | |
| - st,mem-name	: name for DDR configuration, simple string for information
 | |
| - st,mem-speed	: DDR expected speed for the setting in MHz
 | |
| - st,mem-size	: DDR mem size in byte
 | |
| 
 | |
| 
 | |
| controlleur attributes:
 | |
| -----------------------
 | |
| - st,ctl-reg	: controleur values depending of the DDR type
 | |
| 		  (DDR3/LPDDR2/LPDDR3)
 | |
| 	for STM32MP15x: 25 values are requested in this order
 | |
| 		MSTR
 | |
| 		MRCTRL0
 | |
| 		MRCTRL1
 | |
| 		DERATEEN
 | |
| 		DERATEINT
 | |
| 		PWRCTL
 | |
| 		PWRTMG
 | |
| 		HWLPCTL
 | |
| 		RFSHCTL0
 | |
| 		RFSHCTL3
 | |
| 		CRCPARCTL0
 | |
| 		ZQCTL0
 | |
| 		DFITMG0
 | |
| 		DFITMG1
 | |
| 		DFILPCFG0
 | |
| 		DFIUPD0
 | |
| 		DFIUPD1
 | |
| 		DFIUPD2
 | |
| 		DFIPHYMSTR
 | |
| 		ODTMAP
 | |
| 		DBG0
 | |
| 		DBG1
 | |
| 		DBGCMD
 | |
| 		POISONCFG
 | |
| 		PCCFG
 | |
| 
 | |
| - st,ctl-timing	: controleur values depending of frequency and timing parameter
 | |
| 		  of DDR
 | |
| 	for STM32MP15x: 12 values are requested in this order
 | |
| 		RFSHTMG
 | |
| 		DRAMTMG0
 | |
| 		DRAMTMG1
 | |
| 		DRAMTMG2
 | |
| 		DRAMTMG3
 | |
| 		DRAMTMG4
 | |
| 		DRAMTMG5
 | |
| 		DRAMTMG6
 | |
| 		DRAMTMG7
 | |
| 		DRAMTMG8
 | |
| 		DRAMTMG14
 | |
| 		ODTCFG
 | |
| 
 | |
| - st,ctl-map	: controleur values depending of address mapping
 | |
| 	for STM32MP15x: 9 values are requested in this order
 | |
| 		ADDRMAP1
 | |
| 		ADDRMAP2
 | |
| 		ADDRMAP3
 | |
| 		ADDRMAP4
 | |
| 		ADDRMAP5
 | |
| 		ADDRMAP6
 | |
| 		ADDRMAP9
 | |
| 		ADDRMAP10
 | |
| 		ADDRMAP11
 | |
| 
 | |
| - st,ctl-perf	: controleur values depending of performance and scheduling
 | |
| 	for STM32MP15x: 17 values are requested in this order
 | |
| 		SCHED
 | |
| 		SCHED1
 | |
| 		PERFHPR1
 | |
| 		PERFLPR1
 | |
| 		PERFWR1
 | |
| 		PCFGR_0
 | |
| 		PCFGW_0
 | |
| 		PCFGQOS0_0
 | |
| 		PCFGQOS1_0
 | |
| 		PCFGWQOS0_0
 | |
| 		PCFGWQOS1_0
 | |
| 		PCFGR_1
 | |
| 		PCFGW_1
 | |
| 		PCFGQOS0_1
 | |
| 		PCFGQOS1_1
 | |
| 		PCFGWQOS0_1
 | |
| 		PCFGWQOS1_1
 | |
| 
 | |
| phyc attributes:
 | |
| ----------------
 | |
| - st,phy-reg	: phy values depending of the DDR type (DDR3/LPDDR2/LPDDR3)
 | |
| 	for STM32MP15x: 10 values are requested in this order
 | |
| 		PGCR
 | |
| 		ACIOCR
 | |
| 		DXCCR
 | |
| 		DSGCR
 | |
| 		DCR
 | |
| 		ODTCR
 | |
| 		ZQ0CR1
 | |
| 		DX0GCR
 | |
| 		DX1GCR
 | |
| 		DX2GCR
 | |
| 		DX3GCR
 | |
| 
 | |
| - st,phy-timing	: phy values depending of frequency and timing parameter of DDR
 | |
| 	for STM32MP15x: 10 values are requested in this order
 | |
| 		PTR0
 | |
| 		PTR1
 | |
| 		PTR2
 | |
| 		DTPR0
 | |
| 		DTPR1
 | |
| 		DTPR2
 | |
| 		MR0
 | |
| 		MR1
 | |
| 		MR2
 | |
| 		MR3
 | |
| 
 | |
| - st,phy-cal	: phy cal depending of calibration or tuning of DDR
 | |
| 	for STM32MP15x: 12 values are requested in this order
 | |
| 		DX0DLLCR
 | |
| 		DX0DQTR
 | |
| 		DX0DQSTR
 | |
| 		DX1DLLCR
 | |
| 		DX1DQTR
 | |
| 		DX1DQSTR
 | |
| 		DX2DLLCR
 | |
| 		DX2DQTR
 | |
| 		DX2DQSTR
 | |
| 		DX3DLLCR
 | |
| 		DX3DQTR
 | |
| 		DX3DQSTR
 | |
| 
 | |
| Example:
 | |
| 
 | |
| / {
 | |
| 	soc {
 | |
| 		u-boot,dm-spl;
 | |
| 
 | |
| 		ddr: ddr@0x5A003000{
 | |
| 			u-boot,dm-spl;
 | |
| 			u-boot,dm-pre-reloc;
 | |
| 
 | |
| 			compatible = "st,stm32mp1-ddr";
 | |
| 
 | |
| 			reg = <0x5A003000 0x550
 | |
| 			       0x5A004000 0x234>;
 | |
| 
 | |
| 			clocks = <&rcc_clk AXIDCG>,
 | |
| 				 <&rcc_clk DDRC1>,
 | |
| 				 <&rcc_clk DDRC2>,
 | |
| 				 <&rcc_clk DDRPHYC>,
 | |
| 				 <&rcc_clk DDRCAPB>,
 | |
| 				 <&rcc_clk DDRPHYCAPB>;
 | |
| 
 | |
| 			clock-names = "axidcg",
 | |
| 				      "ddrc1",
 | |
| 				      "ddrc2",
 | |
| 				      "ddrphyc",
 | |
| 				      "ddrcapb",
 | |
| 				      "ddrphycapb";
 | |
| 
 | |
| 			st,mem-name = "DDR3 2x4Gb 533MHz";
 | |
| 			st,mem-speed = <533>;
 | |
| 			st,mem-size = <0x40000000>;
 | |
| 
 | |
| 			st,ctl-reg = <
 | |
| 				0x00040401 /*MSTR*/
 | |
| 				0x00000010 /*MRCTRL0*/
 | |
| 				0x00000000 /*MRCTRL1*/
 | |
| 				0x00000000 /*DERATEEN*/
 | |
| 				0x00800000 /*DERATEINT*/
 | |
| 				0x00000000 /*PWRCTL*/
 | |
| 				0x00400010 /*PWRTMG*/
 | |
| 				0x00000000 /*HWLPCTL*/
 | |
| 				0x00210000 /*RFSHCTL0*/
 | |
| 				0x00000000 /*RFSHCTL3*/
 | |
| 				0x00000000 /*CRCPARCTL0*/
 | |
| 				0xC2000040 /*ZQCTL0*/
 | |
| 				0x02050105 /*DFITMG0*/
 | |
| 				0x00000202 /*DFITMG1*/
 | |
| 				0x07000000 /*DFILPCFG0*/
 | |
| 				0xC0400003 /*DFIUPD0*/
 | |
| 				0x00000000 /*DFIUPD1*/
 | |
| 				0x00000000 /*DFIUPD2*/
 | |
| 				0x00000000 /*DFIPHYMSTR*/
 | |
| 				0x00000001 /*ODTMAP*/
 | |
| 				0x00000000 /*DBG0*/
 | |
| 				0x00000000 /*DBG1*/
 | |
| 				0x00000000 /*DBGCMD*/
 | |
| 				0x00000000 /*POISONCFG*/
 | |
| 				0x00000010 /*PCCFG*/
 | |
| 			>;
 | |
| 
 | |
| 			st,ctl-timing = <
 | |
| 				0x0080008A /*RFSHTMG*/
 | |
| 				0x121B2414 /*DRAMTMG0*/
 | |
| 				0x000D041B /*DRAMTMG1*/
 | |
| 				0x0607080E /*DRAMTMG2*/
 | |
| 				0x0050400C /*DRAMTMG3*/
 | |
| 				0x07040407 /*DRAMTMG4*/
 | |
| 				0x06060303 /*DRAMTMG5*/
 | |
| 				0x02020002 /*DRAMTMG6*/
 | |
| 				0x00000202 /*DRAMTMG7*/
 | |
| 				0x00001005 /*DRAMTMG8*/
 | |
| 				0x000D041B /*DRAMTMG1*/4
 | |
| 				0x06000600 /*ODTCFG*/
 | |
| 			>;
 | |
| 
 | |
| 			st,ctl-map = <
 | |
| 				0x00080808 /*ADDRMAP1*/
 | |
| 				0x00000000 /*ADDRMAP2*/
 | |
| 				0x00000000 /*ADDRMAP3*/
 | |
| 				0x00001F1F /*ADDRMAP4*/
 | |
| 				0x07070707 /*ADDRMAP5*/
 | |
| 				0x0F070707 /*ADDRMAP6*/
 | |
| 				0x00000000 /*ADDRMAP9*/
 | |
| 				0x00000000 /*ADDRMAP10*/
 | |
| 				0x00000000 /*ADDRMAP11*/
 | |
| 			>;
 | |
| 
 | |
| 			st,ctl-perf = <
 | |
| 				0x00001201 /*SCHED*/
 | |
| 				0x00001201 /*SCHED*/1
 | |
| 				0x01000001 /*PERFHPR1*/
 | |
| 				0x08000200 /*PERFLPR1*/
 | |
| 				0x08000400 /*PERFWR1*/
 | |
| 				0x00010000 /*PCFGR_0*/
 | |
| 				0x00000000 /*PCFGW_0*/
 | |
| 				0x02100B03 /*PCFGQOS0_0*/
 | |
| 				0x00800100 /*PCFGQOS1_0*/
 | |
| 				0x01100B03 /*PCFGWQOS0_0*/
 | |
| 				0x01000200 /*PCFGWQOS1_0*/
 | |
| 				0x00010000 /*PCFGR_1*/
 | |
| 				0x00000000 /*PCFGW_1*/
 | |
| 				0x02100B03 /*PCFGQOS0_1*/
 | |
| 				0x00800000 /*PCFGQOS1_1*/
 | |
| 				0x01100B03 /*PCFGWQOS0_1*/
 | |
| 				0x01000200 /*PCFGWQOS1_1*/
 | |
| 			>;
 | |
| 
 | |
| 			st,phy-reg = <
 | |
| 				0x01442E02 /*PGCR*/
 | |
| 				0x10400812 /*ACIOCR*/
 | |
| 				0x00000C40 /*DXCCR*/
 | |
| 				0xF200001F /*DSGCR*/
 | |
| 				0x0000000B /*DCR*/
 | |
| 				0x00010000 /*ODTCR*/
 | |
| 				0x0000007B /*ZQ0CR1*/
 | |
| 				0x0000CE81 /*DX0GCR*/
 | |
| 				0x0000CE81 /*DX1GCR*/
 | |
| 				0x0000CE81 /*DX2GCR*/
 | |
| 				0x0000CE81 /*DX3GCR*/
 | |
| 			>;
 | |
| 
 | |
| 			st,phy-timing = <
 | |
| 				0x0022A41B /*PTR0*/
 | |
| 				0x047C0740 /*PTR1*/
 | |
| 				0x042D9C80 /*PTR2*/
 | |
| 				0x369477D0 /*DTPR0*/
 | |
| 				0x098A00D8 /*DTPR1*/
 | |
| 				0x10023600 /*DTPR2*/
 | |
| 				0x00000830 /*MR0*/
 | |
| 				0x00000000 /*MR1*/
 | |
| 				0x00000208 /*MR2*/
 | |
| 				0x00000000 /*MR3*/
 | |
| 			>;
 | |
| 
 | |
| 			st,phy-cal = <
 | |
| 				0x40000000 /*DX0DLLCR*/
 | |
| 				0xFFFFFFFF /*DX0DQTR*/
 | |
| 				0x3DB02000 /*DX0DQSTR*/
 | |
| 				0x40000000 /*DX1DLLCR*/
 | |
| 				0xFFFFFFFF /*DX1DQTR*/
 | |
| 				0x3DB02000 /*DX1DQSTR*/
 | |
| 				0x40000000 /*DX2DLLCR*/
 | |
| 				0xFFFFFFFF /*DX2DQTR*/
 | |
| 				0x3DB02000 /*DX2DQSTR*/
 | |
| 				0x40000000 /*DX3DLLCR*/
 | |
| 				0xFFFFFFFF /*DX3DQTR*/
 | |
| 				0x3DB02000 /*DX3DQSTR*/
 | |
| 			>;
 | |
| 
 | |
| 			status = "okay";
 | |
| 		};
 | |
| 	};
 | |
| };
 |