mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-30 18:05:48 +01:00 
			
		
		
		
	This parameter "st,phy-cal" becomes optional and when it is
absent the built-in PHY calibration is done.
It is the case in the helper dtsi file "stm32mp15-ddr.dtsi"
except if DDR_PHY_CAL_SKIP is defined.
This patch also impact the ddr interactive mode
- the registers of the param 'phy.cal' are initialized to 0 when
  "st,phy-cal" is not present in device tree (default behavior when
  DDR_PHY_CAL_SKIP is not activated)
- the info 'cal' field can be use to change the calibration behavior
  - cal=1 => use param phy.cal to initialize the PHY, built-in training
             is skipped
  - cal=0 => param phy.cal is absent, built-in training is used (default)
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Acked-by: Patrice Chotard <patrice.chotard@st.com>
		
	
		
			
				
	
	
		
			302 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			6.1 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 kHz
 | |
| - 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: 11 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
 | |
| 	This parameter is optional; when it is absent the built-in PHY
 | |
| 	calibration is done.
 | |
| 	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 = <533000>;
 | |
| 			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";
 | |
| 		};
 | |
| 	};
 | |
| };
 |