mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-22 01:48:52 +09:00
![Patrick Delaunay](/assets/img/avatar_default.png)
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";
|
|
};
|
|
};
|
|
};
|