xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-am33xx/ddr_defs.h (revision 8627733941ff9d35a3778da9c9b2e495a17bfe70)
162d7fe7cSChandan Nath /*
262d7fe7cSChandan Nath  * ddr_defs.h
362d7fe7cSChandan Nath  *
462d7fe7cSChandan Nath  * ddr specific header
562d7fe7cSChandan Nath  *
662d7fe7cSChandan Nath  * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
762d7fe7cSChandan Nath  *
81a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
962d7fe7cSChandan Nath  */
1062d7fe7cSChandan Nath 
1162d7fe7cSChandan Nath #ifndef _DDR_DEFS_H
1262d7fe7cSChandan Nath #define _DDR_DEFS_H
1362d7fe7cSChandan Nath 
1462d7fe7cSChandan Nath #include <asm/arch/hardware.h>
15ff7ec0f9STom Rini #include <asm/emif.h>
1662d7fe7cSChandan Nath 
1762d7fe7cSChandan Nath /* AM335X EMIF Register values */
1862d7fe7cSChandan Nath #define VTP_CTRL_READY		(0x1 << 5)
1962d7fe7cSChandan Nath #define VTP_CTRL_ENABLE		(0x1 << 6)
2062d7fe7cSChandan Nath #define VTP_CTRL_START_EN	(0x1)
21d3daba10SLokesh Vutla #ifdef CONFIG_AM43XX
22d3daba10SLokesh Vutla #define DDR_CKE_CTRL_NORMAL	0x3
23d3daba10SLokesh Vutla #else
24c48c8954STom Rini #define DDR_CKE_CTRL_NORMAL	0x1
25d3daba10SLokesh Vutla #endif
2659dcf970SVaibhav Hiremath #define PHY_EN_DYN_PWRDN	(0x1 << 20)
2762d7fe7cSChandan Nath 
28c00f69dbSPeter Korsgaard /* Micron MT47H128M16RT-25E */
29c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_READ_LATENCY	0x100005
30c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_TIM1		0x0666B3C9
31c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_TIM2		0x243631CA
32c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_TIM3		0x0000033F
33c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_SDCFG		0x41805332
34c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_SDREF		0x0000081a
35c7d35befSPeter Korsgaard #define MT47H128M16RT25E_RATIO			0x80
36c7d35befSPeter Korsgaard #define MT47H128M16RT25E_RD_DQS			0x12
37c7d35befSPeter Korsgaard #define MT47H128M16RT25E_PHY_WR_DATA		0x40
38c7d35befSPeter Korsgaard #define MT47H128M16RT25E_PHY_FIFO_WE		0x80
39c7d35befSPeter Korsgaard #define MT47H128M16RT25E_IOCTRL_VALUE		0x18B
4062d7fe7cSChandan Nath 
41d4898ea8STom Rini /* Micron MT41J128M16JT-125 */
42e9b13ce0SSatyanarayana, Sandhya #define MT41J128MJT125_EMIF_READ_LATENCY	0x100006
43c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_TIM1		0x0888A39B
44c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_TIM2		0x26337FDA
45c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_TIM3		0x501F830F
46c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_SDCFG		0x61C04AB2
47c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_SDREF		0x0000093B
48c7d35befSPeter Korsgaard #define MT41J128MJT125_ZQ_CFG			0x50074BE4
49c7d35befSPeter Korsgaard #define MT41J128MJT125_RATIO			0x40
50c7d35befSPeter Korsgaard #define MT41J128MJT125_INVERT_CLKOUT		0x1
51c7d35befSPeter Korsgaard #define MT41J128MJT125_RD_DQS			0x3B
52c7d35befSPeter Korsgaard #define MT41J128MJT125_WR_DQS			0x85
53c7d35befSPeter Korsgaard #define MT41J128MJT125_PHY_WR_DATA		0xC1
54c7d35befSPeter Korsgaard #define MT41J128MJT125_PHY_FIFO_WE		0x100
55c7d35befSPeter Korsgaard #define MT41J128MJT125_IOCTRL_VALUE		0x18B
56d4898ea8STom Rini 
57d8ff4fdbSLokesh Vutla /* Micron MT41J128M16JT-125 at 400MHz*/
58d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_READ_LATENCY_400MHz	0x100007
59d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_TIM1_400MHz		0x0AAAD4DB
60d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_TIM2_400MHz		0x26437FDA
61d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_TIM3_400MHz		0x501F83FF
62d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_SDCFG_400MHz	0x61C052B2
63d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_SDREF_400MHz	0x00000C30
64d8ff4fdbSLokesh Vutla #define MT41J128MJT125_ZQ_CFG_400MHz		0x50074BE4
65d8ff4fdbSLokesh Vutla #define MT41J128MJT125_RATIO_400MHz		0x80
66d8ff4fdbSLokesh Vutla #define MT41J128MJT125_INVERT_CLKOUT_400MHz	0x0
67d8ff4fdbSLokesh Vutla #define MT41J128MJT125_RD_DQS_400MHz		0x3A
68d8ff4fdbSLokesh Vutla #define MT41J128MJT125_WR_DQS_400MHz		0x3B
69d8ff4fdbSLokesh Vutla #define MT41J128MJT125_PHY_WR_DATA_400MHz	0x76
70d8ff4fdbSLokesh Vutla #define MT41J128MJT125_PHY_FIFO_WE_400MHz	0x96
71d8ff4fdbSLokesh Vutla 
72da4105dfSLothar Felten /* Micron MT41K128M16JT-187E */
73da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_READ_LATENCY	0x06
74da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_TIM1		0x0888B3DB
75da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_TIM2		0x36337FDA
76da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_TIM3		0x501F830F
77da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_SDCFG		0x61C04AB2
78da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_SDREF		0x0000093B
79da4105dfSLothar Felten #define MT41K128MJT187E_ZQ_CFG			0x50074BE4
80da4105dfSLothar Felten #define MT41K128MJT187E_RATIO			0x40
81da4105dfSLothar Felten #define MT41K128MJT187E_INVERT_CLKOUT		0x1
82da4105dfSLothar Felten #define MT41K128MJT187E_RD_DQS			0x3B
83da4105dfSLothar Felten #define MT41K128MJT187E_WR_DQS			0x85
84da4105dfSLothar Felten #define MT41K128MJT187E_PHY_WR_DATA		0xC1
85da4105dfSLothar Felten #define MT41K128MJT187E_PHY_FIFO_WE		0x100
86da4105dfSLothar Felten #define MT41K128MJT187E_IOCTRL_VALUE		0x18B
87da4105dfSLothar Felten 
8854e7445dSIlya Ledvich /* Micron MT41J64M16JT-125 */
8954e7445dSIlya Ledvich #define MT41J64MJT125_EMIF_SDCFG		0x61C04A32
9054e7445dSIlya Ledvich 
9154e7445dSIlya Ledvich /* Micron MT41J256M16JT-125 */
9254e7445dSIlya Ledvich #define MT41J256MJT125_EMIF_SDCFG		0x61C04B32
9354e7445dSIlya Ledvich 
941c1b7c37SLars Poeschel /* Micron MT41J256M8HX-15E */
95e9b13ce0SSatyanarayana, Sandhya #define MT41J256M8HX15E_EMIF_READ_LATENCY	0x100006
961c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_TIM1		0x0888A39B
971c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_TIM2		0x26337FDA
981c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_TIM3		0x501F830F
991c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_SDCFG		0x61C04B32
1001c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_SDREF		0x0000093B
1011c1b7c37SLars Poeschel #define MT41J256M8HX15E_ZQ_CFG			0x50074BE4
1021c1b7c37SLars Poeschel #define MT41J256M8HX15E_RATIO			0x40
1031c1b7c37SLars Poeschel #define MT41J256M8HX15E_INVERT_CLKOUT		0x1
1041c1b7c37SLars Poeschel #define MT41J256M8HX15E_RD_DQS			0x3B
1051c1b7c37SLars Poeschel #define MT41J256M8HX15E_WR_DQS			0x85
1061c1b7c37SLars Poeschel #define MT41J256M8HX15E_PHY_WR_DATA		0xC1
1071c1b7c37SLars Poeschel #define MT41J256M8HX15E_PHY_FIFO_WE		0x100
1081c1b7c37SLars Poeschel #define MT41J256M8HX15E_IOCTRL_VALUE		0x18B
1091c1b7c37SLars Poeschel 
110c7ba18adSTom Rini /* Micron MT41K256M16HA-125E */
111b996a3e9STom Rini #define MT41K256M16HA125E_EMIF_READ_LATENCY	0x100007
112b996a3e9STom Rini #define MT41K256M16HA125E_EMIF_TIM1		0x0AAAD4DB
11386fdb161STom Rini #define MT41K256M16HA125E_EMIF_TIM2		0x266B7FDA
11486fdb161STom Rini #define MT41K256M16HA125E_EMIF_TIM3		0x501F867F
11586fdb161STom Rini #define MT41K256M16HA125E_EMIF_SDCFG		0x61C05332
116b996a3e9STom Rini #define MT41K256M16HA125E_EMIF_SDREF		0xC30
117c7ba18adSTom Rini #define MT41K256M16HA125E_ZQ_CFG		0x50074BE4
118b996a3e9STom Rini #define MT41K256M16HA125E_RATIO			0x80
119c7ba18adSTom Rini #define MT41K256M16HA125E_INVERT_CLKOUT		0x0
12086fdb161STom Rini #define MT41K256M16HA125E_RD_DQS		0x38
12186fdb161STom Rini #define MT41K256M16HA125E_WR_DQS		0x44
12286fdb161STom Rini #define MT41K256M16HA125E_PHY_WR_DATA		0x7D
12386fdb161STom Rini #define MT41K256M16HA125E_PHY_FIFO_WE		0x94
124c7ba18adSTom Rini #define MT41K256M16HA125E_IOCTRL_VALUE		0x18B
125c7ba18adSTom Rini 
12613526f71SJeff Lance /* Micron MT41J512M8RH-125 on EVM v1.5 */
127e9b13ce0SSatyanarayana, Sandhya #define MT41J512M8RH125_EMIF_READ_LATENCY	0x100006
12813526f71SJeff Lance #define MT41J512M8RH125_EMIF_TIM1		0x0888A39B
12913526f71SJeff Lance #define MT41J512M8RH125_EMIF_TIM2		0x26517FDA
13013526f71SJeff Lance #define MT41J512M8RH125_EMIF_TIM3		0x501F84EF
13113526f71SJeff Lance #define MT41J512M8RH125_EMIF_SDCFG		0x61C04BB2
13213526f71SJeff Lance #define MT41J512M8RH125_EMIF_SDREF		0x0000093B
13313526f71SJeff Lance #define MT41J512M8RH125_ZQ_CFG			0x50074BE4
13413526f71SJeff Lance #define MT41J512M8RH125_RATIO			0x80
13513526f71SJeff Lance #define MT41J512M8RH125_INVERT_CLKOUT		0x0
13613526f71SJeff Lance #define MT41J512M8RH125_RD_DQS			0x3B
13713526f71SJeff Lance #define MT41J512M8RH125_WR_DQS			0x3C
13813526f71SJeff Lance #define MT41J512M8RH125_PHY_FIFO_WE		0xA5
13913526f71SJeff Lance #define MT41J512M8RH125_PHY_WR_DATA		0x74
14013526f71SJeff Lance #define MT41J512M8RH125_IOCTRL_VALUE		0x18B
1411c1b7c37SLars Poeschel 
142cc175e63SEnric Balletbo i Serra /* Samsung K4B2G1646E-BIH9 */
143e9b13ce0SSatyanarayana, Sandhya #define K4B2G1646EBIH9_EMIF_READ_LATENCY	0x100007
14494b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_TIM1		0x0AAAE51B
14594b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_TIM2		0x2A1D7FDA
14694b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_TIM3		0x501F83FF
14794b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_SDCFG		0x61C052B2
14894b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_SDREF		0x00000C30
149cc175e63SEnric Balletbo i Serra #define K4B2G1646EBIH9_ZQ_CFG			0x50074BE4
15094b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_RATIO			0x80
15194b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_INVERT_CLKOUT		0x0
15294b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_RD_DQS			0x35
15394b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_WR_DQS			0x3A
15494b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_PHY_FIFO_WE		0x97
15594b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_PHY_WR_DATA		0x76
156cc175e63SEnric Balletbo i Serra #define K4B2G1646EBIH9_IOCTRL_VALUE		0x18B
157cc175e63SEnric Balletbo i Serra 
158d3daba10SLokesh Vutla #define  LPDDR2_ADDRCTRL_IOCTRL_VALUE   0x294
159d3daba10SLokesh Vutla #define  LPDDR2_ADDRCTRL_WD0_IOCTRL_VALUE 0x00000000
160d3daba10SLokesh Vutla #define  LPDDR2_ADDRCTRL_WD1_IOCTRL_VALUE 0x00000000
161d3daba10SLokesh Vutla #define  LPDDR2_DATA0_IOCTRL_VALUE   0x20000294
162d3daba10SLokesh Vutla #define  LPDDR2_DATA1_IOCTRL_VALUE   0x20000294
163d3daba10SLokesh Vutla #define  LPDDR2_DATA2_IOCTRL_VALUE   0x20000294
164d3daba10SLokesh Vutla #define  LPDDR2_DATA3_IOCTRL_VALUE   0x20000294
165d3daba10SLokesh Vutla 
166b5e01eecSLokesh Vutla #define  DDR3_ADDRCTRL_WD0_IOCTRL_VALUE 0x00000000
167b5e01eecSLokesh Vutla #define  DDR3_ADDRCTRL_WD1_IOCTRL_VALUE 0x00000000
168b5e01eecSLokesh Vutla #define  DDR3_ADDRCTRL_IOCTRL_VALUE   0x84
169b5e01eecSLokesh Vutla #define  DDR3_DATA0_IOCTRL_VALUE   0x84
170b5e01eecSLokesh Vutla #define  DDR3_DATA1_IOCTRL_VALUE   0x84
171b5e01eecSLokesh Vutla #define  DDR3_DATA2_IOCTRL_VALUE   0x84
172b5e01eecSLokesh Vutla #define  DDR3_DATA3_IOCTRL_VALUE   0x84
173b5e01eecSLokesh Vutla 
17462d7fe7cSChandan Nath /**
1754fab8d7bSMatt Porter  * Configure DMM
1764fab8d7bSMatt Porter  */
1774fab8d7bSMatt Porter void config_dmm(const struct dmm_lisa_map_regs *regs);
1784fab8d7bSMatt Porter 
1794fab8d7bSMatt Porter /**
18062d7fe7cSChandan Nath  * Configure SDRAM
18162d7fe7cSChandan Nath  */
1823ba65f97SMatt Porter void config_sdram(const struct emif_regs *regs, int nr);
183d3daba10SLokesh Vutla void config_sdram_emif4d5(const struct emif_regs *regs, int nr);
18462d7fe7cSChandan Nath 
18562d7fe7cSChandan Nath /**
18662d7fe7cSChandan Nath  * Set SDRAM timings
18762d7fe7cSChandan Nath  */
1883ba65f97SMatt Porter void set_sdram_timings(const struct emif_regs *regs, int nr);
18962d7fe7cSChandan Nath 
19062d7fe7cSChandan Nath /**
19162d7fe7cSChandan Nath  * Configure DDR PHY
19262d7fe7cSChandan Nath  */
1933ba65f97SMatt Porter void config_ddr_phy(const struct emif_regs *regs, int nr);
1943ba65f97SMatt Porter 
1953ba65f97SMatt Porter struct ddr_cmd_regs {
1963ba65f97SMatt Porter 	unsigned int resv0[7];
1973ba65f97SMatt Porter 	unsigned int cm0csratio;	/* offset 0x01C */
19839245c86STom Rini 	unsigned int resv1[3];
1993ba65f97SMatt Porter 	unsigned int cm0iclkout;	/* offset 0x02C */
2003ba65f97SMatt Porter 	unsigned int resv2[8];
2013ba65f97SMatt Porter 	unsigned int cm1csratio;	/* offset 0x050 */
20239245c86STom Rini 	unsigned int resv3[3];
2033ba65f97SMatt Porter 	unsigned int cm1iclkout;	/* offset 0x060 */
2043ba65f97SMatt Porter 	unsigned int resv4[8];
2053ba65f97SMatt Porter 	unsigned int cm2csratio;	/* offset 0x084 */
20639245c86STom Rini 	unsigned int resv5[3];
2073ba65f97SMatt Porter 	unsigned int cm2iclkout;	/* offset 0x094 */
2083ba65f97SMatt Porter 	unsigned int resv6[3];
2093ba65f97SMatt Porter };
2103ba65f97SMatt Porter 
2113ba65f97SMatt Porter struct ddr_data_regs {
2123ba65f97SMatt Porter 	unsigned int dt0rdsratio0;	/* offset 0x0C8 */
2133ba65f97SMatt Porter 	unsigned int resv1[4];
2143ba65f97SMatt Porter 	unsigned int dt0wdsratio0;	/* offset 0x0DC */
2153ba65f97SMatt Porter 	unsigned int resv2[4];
2163ba65f97SMatt Porter 	unsigned int dt0wiratio0;	/* offset 0x0F0 */
2173ba65f97SMatt Porter 	unsigned int resv3;
2183ba65f97SMatt Porter 	unsigned int dt0wimode0;	/* offset 0x0F8 */
2193ba65f97SMatt Porter 	unsigned int dt0giratio0;	/* offset 0x0FC */
2203ba65f97SMatt Porter 	unsigned int resv4;
2213ba65f97SMatt Porter 	unsigned int dt0gimode0;	/* offset 0x104 */
2223ba65f97SMatt Porter 	unsigned int dt0fwsratio0;	/* offset 0x108 */
2233ba65f97SMatt Porter 	unsigned int resv5[4];
2243ba65f97SMatt Porter 	unsigned int dt0dqoffset;	/* offset 0x11C */
2253ba65f97SMatt Porter 	unsigned int dt0wrsratio0;	/* offset 0x120 */
2263ba65f97SMatt Porter 	unsigned int resv6[4];
2273ba65f97SMatt Porter 	unsigned int dt0rdelays0;	/* offset 0x134 */
2283ba65f97SMatt Porter 	unsigned int dt0dldiff0;	/* offset 0x138 */
2293ba65f97SMatt Porter 	unsigned int resv7[12];
2303ba65f97SMatt Porter };
23162d7fe7cSChandan Nath 
23262d7fe7cSChandan Nath /**
23362d7fe7cSChandan Nath  * This structure represents the DDR registers on AM33XX devices.
234a74f0c7cSTom Rini  * We make use of DDR_PHY_BASE_ADDR2 to address the DATA1 registers that
235a74f0c7cSTom Rini  * correspond to DATA1 registers defined here.
23662d7fe7cSChandan Nath  */
23762d7fe7cSChandan Nath struct ddr_regs {
238dcf846d5STENART Antoine 	unsigned int resv0[3];
239dcf846d5STENART Antoine 	unsigned int cm0config;		/* offset 0x00C */
240dcf846d5STENART Antoine 	unsigned int cm0configclk;	/* offset 0x010 */
241a74f0c7cSTom Rini 	unsigned int resv1[2];
242dcf846d5STENART Antoine 	unsigned int cm0csratio;	/* offset 0x01C */
24339245c86STom Rini 	unsigned int resv2[3];
24462d7fe7cSChandan Nath 	unsigned int cm0iclkout;	/* offset 0x02C */
245dcf846d5STENART Antoine 	unsigned int resv3[4];
246dcf846d5STENART Antoine 	unsigned int cm1config;		/* offset 0x040 */
247dcf846d5STENART Antoine 	unsigned int cm1configclk;	/* offset 0x044 */
248dcf846d5STENART Antoine 	unsigned int resv4[2];
24962d7fe7cSChandan Nath 	unsigned int cm1csratio;	/* offset 0x050 */
25039245c86STom Rini 	unsigned int resv5[3];
25162d7fe7cSChandan Nath 	unsigned int cm1iclkout;	/* offset 0x060 */
252dcf846d5STENART Antoine 	unsigned int resv6[4];
253dcf846d5STENART Antoine 	unsigned int cm2config;		/* offset 0x074 */
254dcf846d5STENART Antoine 	unsigned int cm2configclk;	/* offset 0x078 */
255dcf846d5STENART Antoine 	unsigned int resv7[2];
25662d7fe7cSChandan Nath 	unsigned int cm2csratio;	/* offset 0x084 */
25739245c86STom Rini 	unsigned int resv8[3];
25862d7fe7cSChandan Nath 	unsigned int cm2iclkout;	/* offset 0x094 */
259dcf846d5STENART Antoine 	unsigned int resv9[12];
26062d7fe7cSChandan Nath 	unsigned int dt0rdsratio0;	/* offset 0x0C8 */
261dcf846d5STENART Antoine 	unsigned int resv10[4];
26262d7fe7cSChandan Nath 	unsigned int dt0wdsratio0;	/* offset 0x0DC */
263dcf846d5STENART Antoine 	unsigned int resv11[4];
26462d7fe7cSChandan Nath 	unsigned int dt0wiratio0;	/* offset 0x0F0 */
265dcf846d5STENART Antoine 	unsigned int resv12;
266a74f0c7cSTom Rini 	unsigned int dt0wimode0;	/* offset 0x0F8 */
26762d7fe7cSChandan Nath 	unsigned int dt0giratio0;	/* offset 0x0FC */
268dcf846d5STENART Antoine 	unsigned int resv13;
269a74f0c7cSTom Rini 	unsigned int dt0gimode0;	/* offset 0x104 */
27062d7fe7cSChandan Nath 	unsigned int dt0fwsratio0;	/* offset 0x108 */
271dcf846d5STENART Antoine 	unsigned int resv14[4];
272a74f0c7cSTom Rini 	unsigned int dt0dqoffset;	/* offset 0x11C */
27362d7fe7cSChandan Nath 	unsigned int dt0wrsratio0;	/* offset 0x120 */
274dcf846d5STENART Antoine 	unsigned int resv15[4];
27562d7fe7cSChandan Nath 	unsigned int dt0rdelays0;	/* offset 0x134 */
27662d7fe7cSChandan Nath 	unsigned int dt0dldiff0;	/* offset 0x138 */
27762d7fe7cSChandan Nath };
27862d7fe7cSChandan Nath 
27962d7fe7cSChandan Nath /**
28062d7fe7cSChandan Nath  * Encapsulates DDR CMD control registers.
28162d7fe7cSChandan Nath  */
28262d7fe7cSChandan Nath struct cmd_control {
28362d7fe7cSChandan Nath 	unsigned long cmd0csratio;
28462d7fe7cSChandan Nath 	unsigned long cmd0csforce;
28562d7fe7cSChandan Nath 	unsigned long cmd0csdelay;
28662d7fe7cSChandan Nath 	unsigned long cmd0iclkout;
28762d7fe7cSChandan Nath 	unsigned long cmd1csratio;
28862d7fe7cSChandan Nath 	unsigned long cmd1csforce;
28962d7fe7cSChandan Nath 	unsigned long cmd1csdelay;
29062d7fe7cSChandan Nath 	unsigned long cmd1iclkout;
29162d7fe7cSChandan Nath 	unsigned long cmd2csratio;
29262d7fe7cSChandan Nath 	unsigned long cmd2csforce;
29362d7fe7cSChandan Nath 	unsigned long cmd2csdelay;
29462d7fe7cSChandan Nath 	unsigned long cmd2iclkout;
29562d7fe7cSChandan Nath };
29662d7fe7cSChandan Nath 
29762d7fe7cSChandan Nath /**
29862d7fe7cSChandan Nath  * Encapsulates DDR DATA registers.
29962d7fe7cSChandan Nath  */
30062d7fe7cSChandan Nath struct ddr_data {
30162d7fe7cSChandan Nath 	unsigned long datardsratio0;
30262d7fe7cSChandan Nath 	unsigned long datawdsratio0;
30362d7fe7cSChandan Nath 	unsigned long datawiratio0;
30462d7fe7cSChandan Nath 	unsigned long datagiratio0;
30562d7fe7cSChandan Nath 	unsigned long datafwsratio0;
30662d7fe7cSChandan Nath 	unsigned long datawrsratio0;
30762d7fe7cSChandan Nath };
30862d7fe7cSChandan Nath 
30962d7fe7cSChandan Nath /**
31062d7fe7cSChandan Nath  * Configure DDR CMD control registers
31162d7fe7cSChandan Nath  */
3123ba65f97SMatt Porter void config_cmd_ctrl(const struct cmd_control *cmd, int nr);
31362d7fe7cSChandan Nath 
31462d7fe7cSChandan Nath /**
31562d7fe7cSChandan Nath  * Configure DDR DATA registers
31662d7fe7cSChandan Nath  */
3173ba65f97SMatt Porter void config_ddr_data(const struct ddr_data *data, int nr);
31862d7fe7cSChandan Nath 
31962d7fe7cSChandan Nath /**
32062d7fe7cSChandan Nath  * This structure represents the DDR io control on AM33XX devices.
32162d7fe7cSChandan Nath  */
32262d7fe7cSChandan Nath struct ddr_cmdtctrl {
32362d7fe7cSChandan Nath 	unsigned int cm0ioctl;
32462d7fe7cSChandan Nath 	unsigned int cm1ioctl;
32562d7fe7cSChandan Nath 	unsigned int cm2ioctl;
32662d7fe7cSChandan Nath 	unsigned int resv2[12];
32762d7fe7cSChandan Nath 	unsigned int dt0ioctl;
32862d7fe7cSChandan Nath 	unsigned int dt1ioctl;
329d3daba10SLokesh Vutla 	unsigned int dt2ioctrl;
330d3daba10SLokesh Vutla 	unsigned int dt3ioctrl;
331d3daba10SLokesh Vutla 	unsigned int resv3[4];
332d3daba10SLokesh Vutla 	unsigned int emif_sdram_config_ext;
333d3daba10SLokesh Vutla };
334d3daba10SLokesh Vutla 
335d3daba10SLokesh Vutla struct ctrl_ioregs {
336d3daba10SLokesh Vutla 	unsigned int cm0ioctl;
337d3daba10SLokesh Vutla 	unsigned int cm1ioctl;
338d3daba10SLokesh Vutla 	unsigned int cm2ioctl;
339d3daba10SLokesh Vutla 	unsigned int dt0ioctl;
340d3daba10SLokesh Vutla 	unsigned int dt1ioctl;
341d3daba10SLokesh Vutla 	unsigned int dt2ioctrl;
342d3daba10SLokesh Vutla 	unsigned int dt3ioctrl;
343d3daba10SLokesh Vutla 	unsigned int emif_sdram_config_ext;
34462d7fe7cSChandan Nath };
34562d7fe7cSChandan Nath 
34662d7fe7cSChandan Nath /**
34762d7fe7cSChandan Nath  * Configure DDR io control registers
34862d7fe7cSChandan Nath  */
349d3daba10SLokesh Vutla void config_io_ctrl(const struct ctrl_ioregs *ioregs);
35062d7fe7cSChandan Nath 
35162d7fe7cSChandan Nath struct ddr_ctrl {
35262d7fe7cSChandan Nath 	unsigned int ddrioctrl;
35362d7fe7cSChandan Nath 	unsigned int resv1[325];
35462d7fe7cSChandan Nath 	unsigned int ddrckectrl;
35562d7fe7cSChandan Nath };
35662d7fe7cSChandan Nath 
357*86277339STom Rini #ifdef CONFIG_TI816X
358*86277339STom Rini void config_ddr(const struct ddr_data *data, const struct cmd_control *ctrl,
359*86277339STom Rini 		const struct emif_regs *regs,
360*86277339STom Rini 		const struct dmm_lisa_map_regs *lisa_regs, int nrs);
361*86277339STom Rini #else
362d3daba10SLokesh Vutla void config_ddr(unsigned int pll, const struct ctrl_ioregs *ioregs,
363c00f69dbSPeter Korsgaard 		const struct ddr_data *data, const struct cmd_control *ctrl,
3643ba65f97SMatt Porter 		const struct emif_regs *regs, int nr);
365*86277339STom Rini #endif
366d3daba10SLokesh Vutla void emif_get_ext_phy_ctrl_const_regs(const u32 **regs, u32 *size);
36762d7fe7cSChandan Nath 
36862d7fe7cSChandan Nath #endif  /* _DDR_DEFS_H */
369