xref: /OK3568_Linux_fs/u-boot/arch/arm/mach-exynos/exynos5_setup.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Machine Specific Values for SMDK5250 board based on EXYNOS5
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2012 Samsung Electronics
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifndef _SMDK5250_SETUP_H
10*4882a593Smuzhiyun #define _SMDK5250_SETUP_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <config.h>
13*4882a593Smuzhiyun #include <asm/arch/dmc.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define NOT_AVAILABLE		0
16*4882a593Smuzhiyun #define DATA_MASK		0xFFFFF
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #define ENABLE_BIT		0x1
19*4882a593Smuzhiyun #define DISABLE_BIT		0x0
20*4882a593Smuzhiyun #define CA_SWAP_EN		(1 << 0)
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /* Set PLL */
23*4882a593Smuzhiyun #define set_pll(mdiv, pdiv, sdiv)	(1<<31 | mdiv<<16 | pdiv<<8 | sdiv)
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /* MEMCONTROL register bit fields */
26*4882a593Smuzhiyun #define DMC_MEMCONTROL_CLK_STOP_DISABLE	(0 << 0)
27*4882a593Smuzhiyun #define DMC_MEMCONTROL_DPWRDN_DISABLE	(0 << 1)
28*4882a593Smuzhiyun #define DMC_MEMCONTROL_DPWRDN_ACTIVE_PRECHARGE	(0 << 2)
29*4882a593Smuzhiyun #define DMC_MEMCONTROL_TP_DISABLE	(0 << 4)
30*4882a593Smuzhiyun #define DMC_MEMCONTROL_DSREF_DISABLE	(0 << 5)
31*4882a593Smuzhiyun #define DMC_MEMCONTROL_DSREF_ENABLE	(1 << 5)
32*4882a593Smuzhiyun #define DMC_MEMCONTROL_ADD_LAT_PALL_CYCLE(x)    (x << 6)
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #define DMC_MEMCONTROL_MEM_TYPE_LPDDR3  (7 << 8)
35*4882a593Smuzhiyun #define DMC_MEMCONTROL_MEM_TYPE_DDR3    (6 << 8)
36*4882a593Smuzhiyun #define DMC_MEMCONTROL_MEM_TYPE_LPDDR2  (5 << 8)
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun #define DMC_MEMCONTROL_MEM_WIDTH_32BIT  (2 << 12)
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define DMC_MEMCONTROL_NUM_CHIP_1       (0 << 16)
41*4882a593Smuzhiyun #define DMC_MEMCONTROL_NUM_CHIP_2       (1 << 16)
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #define DMC_MEMCONTROL_BL_8             (3 << 20)
44*4882a593Smuzhiyun #define DMC_MEMCONTROL_BL_4             (2 << 20)
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define DMC_MEMCONTROL_PZQ_DISABLE      (0 << 24)
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define DMC_MEMCONTROL_MRR_BYTE_7_0     (0 << 25)
49*4882a593Smuzhiyun #define DMC_MEMCONTROL_MRR_BYTE_15_8    (1 << 25)
50*4882a593Smuzhiyun #define DMC_MEMCONTROL_MRR_BYTE_23_16   (2 << 25)
51*4882a593Smuzhiyun #define DMC_MEMCONTROL_MRR_BYTE_31_24   (3 << 25)
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun /* MEMCONFIG0 register bit fields */
54*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_MAP_INTERLEAVED     (1 << 12)
55*4882a593Smuzhiyun #define DMC_MEMCONFIG_CHIP_MAP_SPLIT		(2 << 12)
56*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_COL_10              (3 << 8)
57*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_ROW_14              (2 << 4)
58*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_ROW_15              (3 << 4)
59*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_BANK_8              (3 << 0)
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun #define DMC_MEMBASECONFIGX_CHIP_BASE(x)         (x << 16)
62*4882a593Smuzhiyun #define DMC_MEMBASECONFIGX_CHIP_MASK(x)         (x << 0)
63*4882a593Smuzhiyun #define DMC_MEMBASECONFIG_VAL(x)        (       \
64*4882a593Smuzhiyun 	DMC_MEMBASECONFIGX_CHIP_BASE(x) |       \
65*4882a593Smuzhiyun 	DMC_MEMBASECONFIGX_CHIP_MASK(0x780)     \
66*4882a593Smuzhiyun )
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun /*
69*4882a593Smuzhiyun  * As we use channel interleaving, therefore value of the base address
70*4882a593Smuzhiyun  * register must be set as half of the bus base address
71*4882a593Smuzhiyun  * RAM start addess is 0x2000_0000 which means chip_base is 0x20, so
72*4882a593Smuzhiyun  * we need to set half 0x10 to the membaseconfigx registers
73*4882a593Smuzhiyun  * see exynos5420 UM section 17.17.3.21 for more.
74*4882a593Smuzhiyun  */
75*4882a593Smuzhiyun #define DMC_CHIP_BASE_0 0x10
76*4882a593Smuzhiyun #define DMC_CHIP_BASE_1 0x50
77*4882a593Smuzhiyun #define DMC_CHIP_MASK	0x7C0
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun #define DMC_MEMBASECONFIG0_VAL  DMC_MEMBASECONFIG_VAL(0x40)
80*4882a593Smuzhiyun #define DMC_MEMBASECONFIG1_VAL  DMC_MEMBASECONFIG_VAL(0x80)
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun #define DMC_PRECHCONFIG_VAL             0xFF000000
83*4882a593Smuzhiyun #define DMC_PWRDNCONFIG_VAL             0xFFFF00FF
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #define DMC_CONCONTROL_RESET_VAL	0x0FFF0000
86*4882a593Smuzhiyun #define DFI_INIT_START		(1 << 28)
87*4882a593Smuzhiyun #define EMPTY			(1 << 8)
88*4882a593Smuzhiyun #define AREF_EN			(1 << 5)
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #define DFI_INIT_COMPLETE_CHO	(1 << 2)
91*4882a593Smuzhiyun #define DFI_INIT_COMPLETE_CH1	(1 << 3)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun #define RDLVL_COMPLETE_CHO	(1 << 14)
94*4882a593Smuzhiyun #define RDLVL_COMPLETE_CH1	(1 << 15)
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun #define CLK_STOP_EN	(1 << 0)
97*4882a593Smuzhiyun #define DPWRDN_EN	(1 << 1)
98*4882a593Smuzhiyun #define DSREF_EN	(1 << 5)
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /* COJCONTROL register bit fields */
101*4882a593Smuzhiyun #define DMC_CONCONTROL_IO_PD_CON_DISABLE	(0 << 3)
102*4882a593Smuzhiyun #define DMC_CONCONTROL_IO_PD_CON_ENABLE		(1 << 3)
103*4882a593Smuzhiyun #define DMC_CONCONTROL_AREF_EN_DISABLE		(0 << 5)
104*4882a593Smuzhiyun #define DMC_CONCONTROL_AREF_EN_ENABLE		(1 << 5)
105*4882a593Smuzhiyun #define DMC_CONCONTROL_EMPTY_DISABLE		(0 << 8)
106*4882a593Smuzhiyun #define DMC_CONCONTROL_EMPTY_ENABLE		(1 << 8)
107*4882a593Smuzhiyun #define DMC_CONCONTROL_RD_FETCH_DISABLE		(0x0 << 12)
108*4882a593Smuzhiyun #define DMC_CONCONTROL_TIMEOUT_LEVEL0		(0xFFF << 16)
109*4882a593Smuzhiyun #define DMC_CONCONTROL_DFI_INIT_START_DISABLE	(0 << 28)
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun #define DMC_CONCONTROL_VAL	0x1FFF2101
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun #define DREX_CONCONTROL_VAL	DMC_CONCONTROL_VAL			\
114*4882a593Smuzhiyun 				| DMC_CONCONTROL_AREF_EN_ENABLE		\
115*4882a593Smuzhiyun 				| DMC_CONCONTROL_IO_PD_CON_ENABLE
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun #define DMC_CONCONTROL_IO_PD_CON(x)		(x << 6)
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /* CLK_DIV_CPU1 */
120*4882a593Smuzhiyun #define HPM_RATIO               0x2
121*4882a593Smuzhiyun #define COPY_RATIO              0x0
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun /* CLK_DIV_CPU1 = 0x00000003 */
124*4882a593Smuzhiyun #define CLK_DIV_CPU1_VAL        ((HPM_RATIO << 4)		\
125*4882a593Smuzhiyun 				| (COPY_RATIO))
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun /* CLK_SRC_CORE0 */
128*4882a593Smuzhiyun #define CLK_SRC_CORE0_VAL       0x00000000
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /* CLK_SRC_CORE1 */
131*4882a593Smuzhiyun #define CLK_SRC_CORE1_VAL       0x100
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun /* CLK_DIV_CORE0 */
134*4882a593Smuzhiyun #define CLK_DIV_CORE0_VAL       0x00120000
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /* CLK_DIV_CORE1 */
137*4882a593Smuzhiyun #define CLK_DIV_CORE1_VAL       0x07070700
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun /* CLK_DIV_SYSRGT */
140*4882a593Smuzhiyun #define CLK_DIV_SYSRGT_VAL      0x00000111
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun /* CLK_DIV_ACP */
143*4882a593Smuzhiyun #define CLK_DIV_ACP_VAL         0x12
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun /* CLK_DIV_SYSLFT */
146*4882a593Smuzhiyun #define CLK_DIV_SYSLFT_VAL      0x00000311
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun #define MUX_APLL_SEL_MASK	(1 << 0)
149*4882a593Smuzhiyun #define MUX_MPLL_SEL_MASK	(1 << 8)
150*4882a593Smuzhiyun #define MPLL_SEL_MOUT_MPLLFOUT	(2 << 8)
151*4882a593Smuzhiyun #define MUX_CPLL_SEL_MASK	(1 << 8)
152*4882a593Smuzhiyun #define MUX_EPLL_SEL_MASK	(1 << 12)
153*4882a593Smuzhiyun #define MUX_VPLL_SEL_MASK	(1 << 16)
154*4882a593Smuzhiyun #define MUX_GPLL_SEL_MASK	(1 << 28)
155*4882a593Smuzhiyun #define MUX_BPLL_SEL_MASK	(1 << 0)
156*4882a593Smuzhiyun #define MUX_HPM_SEL_MASK	(1 << 20)
157*4882a593Smuzhiyun #define HPM_SEL_SCLK_MPLL	(1 << 21)
158*4882a593Smuzhiyun #define PLL_LOCKED		(1 << 29)
159*4882a593Smuzhiyun #define APLL_CON0_LOCKED	(1 << 29)
160*4882a593Smuzhiyun #define MPLL_CON0_LOCKED	(1 << 29)
161*4882a593Smuzhiyun #define BPLL_CON0_LOCKED	(1 << 29)
162*4882a593Smuzhiyun #define CPLL_CON0_LOCKED	(1 << 29)
163*4882a593Smuzhiyun #define EPLL_CON0_LOCKED	(1 << 29)
164*4882a593Smuzhiyun #define GPLL_CON0_LOCKED	(1 << 29)
165*4882a593Smuzhiyun #define VPLL_CON0_LOCKED	(1 << 29)
166*4882a593Smuzhiyun #define CLK_REG_DISABLE		0x0
167*4882a593Smuzhiyun #define TOP2_VAL		0x0110000
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun /* SCLK_SRC_ISP - set SPI0/1 to 6 = SCLK_MPLL_USER */
170*4882a593Smuzhiyun #define SPI0_ISP_SEL		6
171*4882a593Smuzhiyun #define SPI1_ISP_SEL		6
172*4882a593Smuzhiyun #define SCLK_SRC_ISP_VAL	(SPI1_ISP_SEL << 4) \
173*4882a593Smuzhiyun 				| (SPI0_ISP_SEL << 0)
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun /* SCLK_DIV_ISP - set SPI0/1 to 0xf = divide by 16 */
176*4882a593Smuzhiyun #define SPI0_ISP_RATIO		0xf
177*4882a593Smuzhiyun #define SPI1_ISP_RATIO		0xf
178*4882a593Smuzhiyun #define SCLK_DIV_ISP_VAL	(SPI1_ISP_RATIO << 12) \
179*4882a593Smuzhiyun 				| (SPI0_ISP_RATIO << 0)
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun /* CLK_DIV_FSYS2 */
182*4882a593Smuzhiyun #define MMC2_RATIO_MASK		0xf
183*4882a593Smuzhiyun #define MMC2_RATIO_VAL		0x3
184*4882a593Smuzhiyun #define MMC2_RATIO_OFFSET	0
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun #define MMC2_PRE_RATIO_MASK	0xff
187*4882a593Smuzhiyun #define MMC2_PRE_RATIO_VAL	0x9
188*4882a593Smuzhiyun #define MMC2_PRE_RATIO_OFFSET	8
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun #define MMC3_RATIO_MASK		0xf
191*4882a593Smuzhiyun #define MMC3_RATIO_VAL		0x1
192*4882a593Smuzhiyun #define MMC3_RATIO_OFFSET	16
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun #define MMC3_PRE_RATIO_MASK	0xff
195*4882a593Smuzhiyun #define MMC3_PRE_RATIO_VAL	0x0
196*4882a593Smuzhiyun #define MMC3_PRE_RATIO_OFFSET	24
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun /* CLK_SRC_LEX */
199*4882a593Smuzhiyun #define CLK_SRC_LEX_VAL         0x0
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun /* CLK_DIV_LEX */
202*4882a593Smuzhiyun #define CLK_DIV_LEX_VAL         0x10
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun /* CLK_DIV_R0X */
205*4882a593Smuzhiyun #define CLK_DIV_R0X_VAL         0x10
206*4882a593Smuzhiyun 
207*4882a593Smuzhiyun /* CLK_DIV_L0X */
208*4882a593Smuzhiyun #define CLK_DIV_R1X_VAL         0x10
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun /* CLK_DIV_ISP2 */
211*4882a593Smuzhiyun #define CLK_DIV_ISP2_VAL        0x1
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun /* CLK_SRC_KFC */
214*4882a593Smuzhiyun #define SRC_KFC_HPM_SEL		(1 << 15)
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun /* CLK_SRC_KFC */
217*4882a593Smuzhiyun #define CLK_SRC_KFC_VAL		0x00008001
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun /* CLK_DIV_KFC */
220*4882a593Smuzhiyun #define CLK_DIV_KFC_VAL		0x03300110
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun /* CLK_DIV2_RATIO */
223*4882a593Smuzhiyun #define CLK_DIV2_RATIO		0x10111150
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun /* CLK_DIV4_RATIO */
226*4882a593Smuzhiyun #define CLK_DIV4_RATIO		0x00000003
227*4882a593Smuzhiyun 
228*4882a593Smuzhiyun /* CLK_DIV_G2D */
229*4882a593Smuzhiyun #define CLK_DIV_G2D		0x00000010
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun /*
232*4882a593Smuzhiyun  * DIV_DISP1_0
233*4882a593Smuzhiyun  * For DP, divisor should be 2
234*4882a593Smuzhiyun  */
235*4882a593Smuzhiyun #define CLK_DIV_DISP1_0_FIMD1	(2 << 0)
236*4882a593Smuzhiyun 
237*4882a593Smuzhiyun /* CLK_GATE_IP_DISP1 */
238*4882a593Smuzhiyun #define CLK_GATE_DP1_ALLOW	(1 << 4)
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun /* AUDIO CLK SEL */
241*4882a593Smuzhiyun #define AUDIO0_SEL_EPLL		(0x6 << 28)
242*4882a593Smuzhiyun #define AUDIO0_RATIO		0x5
243*4882a593Smuzhiyun #define PCM0_RATIO		0x3
244*4882a593Smuzhiyun #define DIV_MAU_VAL		(PCM0_RATIO << 24 | AUDIO0_RATIO << 20)
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun /* CLK_SRC_CDREX */
247*4882a593Smuzhiyun #define MUX_MCLK_CDR_MSPLL	(1 << 4)
248*4882a593Smuzhiyun #define MUX_BPLL_SEL_FOUTBPLL   (1 << 0)
249*4882a593Smuzhiyun #define BPLL_SEL_MASK   0x7
250*4882a593Smuzhiyun #define FOUTBPLL        2
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun #define DDR3PHY_CTRL_PHY_RESET	(1 << 0)
253*4882a593Smuzhiyun #define DDR3PHY_CTRL_PHY_RESET_OFF	(0 << 0)
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun #define PHY_CON0_RESET_VAL	0x17020a40
256*4882a593Smuzhiyun #define P0_CMD_EN		(1 << 14)
257*4882a593Smuzhiyun #define BYTE_RDLVL_EN		(1 << 13)
258*4882a593Smuzhiyun #define CTRL_SHGATE		(1 << 8)
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun #define PHY_CON1_RESET_VAL	0x09210100
261*4882a593Smuzhiyun #define RDLVL_PASS_ADJ_VAL	0x6
262*4882a593Smuzhiyun #define RDLVL_PASS_ADJ_OFFSET	16
263*4882a593Smuzhiyun #define CTRL_GATEDURADJ_MASK	(0xf << 20)
264*4882a593Smuzhiyun #define READ_LEVELLING_DDR3	0x0100
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun #define PHY_CON2_RESET_VAL	0x00010004
267*4882a593Smuzhiyun #define INIT_DESKEW_EN		(1 << 6)
268*4882a593Smuzhiyun #define DLL_DESKEW_EN		(1 << 12)
269*4882a593Smuzhiyun #define RDLVL_GATE_EN		(1 << 24)
270*4882a593Smuzhiyun #define RDLVL_EN		(1 << 25)
271*4882a593Smuzhiyun #define RDLVL_INCR_ADJ		(0x1 << 16)
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun /* DREX_PAUSE */
274*4882a593Smuzhiyun #define DREX_PAUSE_EN	(1 << 0)
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun #define BYPASS_EN	(1 << 22)
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun /* MEMMORY VAL */
279*4882a593Smuzhiyun #define PHY_CON0_VAL	0x17021A00
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun #define PHY_CON12_RESET_VAL	0x10100070
282*4882a593Smuzhiyun #define PHY_CON12_VAL		0x10107F50
283*4882a593Smuzhiyun #define CTRL_START		(1 << 6)
284*4882a593Smuzhiyun #define CTRL_DLL_ON		(1 << 5)
285*4882a593Smuzhiyun #define CTRL_LOCK_COARSE_OFFSET	10
286*4882a593Smuzhiyun #define CTRL_LOCK_COARSE_MASK	(0x7F << CTRL_LOCK_COARSE_OFFSET)
287*4882a593Smuzhiyun #define CTRL_LOCK_COARSE(x)	(((x) & CTRL_LOCK_COARSE_MASK) >> \
288*4882a593Smuzhiyun 				 CTRL_LOCK_COARSE_OFFSET)
289*4882a593Smuzhiyun #define CTRL_FORCE_MASK		(0x7F << 8)
290*4882a593Smuzhiyun #define CTRL_FINE_LOCKED	0x7
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun #define CTRL_OFFSETD_RESET_VAL	0x8
293*4882a593Smuzhiyun #define CTRL_OFFSETD_VAL	0x7F
294*4882a593Smuzhiyun 
295*4882a593Smuzhiyun #define CTRL_OFFSETR0		0x7F
296*4882a593Smuzhiyun #define CTRL_OFFSETR1		0x7F
297*4882a593Smuzhiyun #define CTRL_OFFSETR2		0x7F
298*4882a593Smuzhiyun #define CTRL_OFFSETR3		0x7F
299*4882a593Smuzhiyun #define PHY_CON4_VAL	(CTRL_OFFSETR0 << 0 | \
300*4882a593Smuzhiyun 				CTRL_OFFSETR1 << 8 | \
301*4882a593Smuzhiyun 				CTRL_OFFSETR2 << 16 | \
302*4882a593Smuzhiyun 				CTRL_OFFSETR3 << 24)
303*4882a593Smuzhiyun #define PHY_CON4_RESET_VAL	0x08080808
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun #define CTRL_OFFSETW0		0x7F
306*4882a593Smuzhiyun #define CTRL_OFFSETW1		0x7F
307*4882a593Smuzhiyun #define CTRL_OFFSETW2		0x7F
308*4882a593Smuzhiyun #define CTRL_OFFSETW3		0x7F
309*4882a593Smuzhiyun #define PHY_CON6_VAL	(CTRL_OFFSETW0 << 0 | \
310*4882a593Smuzhiyun 				CTRL_OFFSETW1 << 8 | \
311*4882a593Smuzhiyun 				CTRL_OFFSETW2 << 16 | \
312*4882a593Smuzhiyun 				CTRL_OFFSETW3 << 24)
313*4882a593Smuzhiyun #define PHY_CON6_RESET_VAL	0x08080808
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun #define PHY_CON14_RESET_VAL	0x001F0000
316*4882a593Smuzhiyun #define CTRL_PULLD_DQS		0xF
317*4882a593Smuzhiyun #define CTRL_PULLD_DQS_OFFSET	0
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun /* ZQ Configurations */
320*4882a593Smuzhiyun #define PHY_CON16_RESET_VAL	0x08000304
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun #define ZQ_CLK_EN		(1 << 27)
323*4882a593Smuzhiyun #define ZQ_CLK_DIV_EN		(1 << 18)
324*4882a593Smuzhiyun #define ZQ_MANUAL_STR		(1 << 1)
325*4882a593Smuzhiyun #define ZQ_DONE			(1 << 0)
326*4882a593Smuzhiyun #define ZQ_MODE_DDS_OFFSET	24
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun #define CTRL_RDLVL_GATE_ENABLE	1
329*4882a593Smuzhiyun #define CTRL_RDLVL_GATE_DISABLE	0
330*4882a593Smuzhiyun #define CTRL_RDLVL_DATA_ENABLE	2
331*4882a593Smuzhiyun 
332*4882a593Smuzhiyun /* Direct Command */
333*4882a593Smuzhiyun #define DIRECT_CMD_NOP			0x07000000
334*4882a593Smuzhiyun #define DIRECT_CMD_PALL			0x01000000
335*4882a593Smuzhiyun #define DIRECT_CMD_ZQINIT		0x0a000000
336*4882a593Smuzhiyun #define DIRECT_CMD_CHANNEL_SHIFT	28
337*4882a593Smuzhiyun #define DIRECT_CMD_CHIP_SHIFT		20
338*4882a593Smuzhiyun #define DIRECT_CMD_BANK_SHIFT		16
339*4882a593Smuzhiyun #define DIRECT_CMD_REFA		(5 << 24)
340*4882a593Smuzhiyun #define DIRECT_CMD_MRS1		0x71C00
341*4882a593Smuzhiyun #define DIRECT_CMD_MRS2		0x10BFC
342*4882a593Smuzhiyun #define DIRECT_CMD_MRS3		0x0050C
343*4882a593Smuzhiyun #define DIRECT_CMD_MRS4		0x00868
344*4882a593Smuzhiyun #define DIRECT_CMD_MRS5		0x00C04
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun /* Drive Strength */
347*4882a593Smuzhiyun #define IMPEDANCE_48_OHM	4
348*4882a593Smuzhiyun #define IMPEDANCE_40_OHM	5
349*4882a593Smuzhiyun #define IMPEDANCE_34_OHM	6
350*4882a593Smuzhiyun #define IMPEDANCE_30_OHM	7
351*4882a593Smuzhiyun #define PHY_CON39_VAL_48_OHM	0x09240924
352*4882a593Smuzhiyun #define PHY_CON39_VAL_40_OHM	0x0B6D0B6D
353*4882a593Smuzhiyun #define PHY_CON39_VAL_34_OHM	0x0DB60DB6
354*4882a593Smuzhiyun #define PHY_CON39_VAL_30_OHM	0x0FFF0FFF
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun #define CTRL_BSTLEN_OFFSET	8
357*4882a593Smuzhiyun #define CTRL_RDLAT_OFFSET	0
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun #define CMD_DEFAULT_LPDDR3	0xF
360*4882a593Smuzhiyun #define CMD_DEFUALT_OFFSET	0
361*4882a593Smuzhiyun #define T_WRDATA_EN		0x7
362*4882a593Smuzhiyun #define T_WRDATA_EN_DDR3	0x8
363*4882a593Smuzhiyun #define T_WRDATA_EN_OFFSET	16
364*4882a593Smuzhiyun #define T_WRDATA_EN_MASK	0x1f
365*4882a593Smuzhiyun 
366*4882a593Smuzhiyun #define PHY_CON31_VAL	0x0C183060
367*4882a593Smuzhiyun #define PHY_CON32_VAL	0x60C18306
368*4882a593Smuzhiyun #define PHY_CON33_VAL	0x00000030
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun #define PHY_CON31_RESET_VAL	0x0
371*4882a593Smuzhiyun #define PHY_CON32_RESET_VAL	0x0
372*4882a593Smuzhiyun #define PHY_CON33_RESET_VAL	0x0
373*4882a593Smuzhiyun 
374*4882a593Smuzhiyun #define SL_DLL_DYN_CON_EN	(1 << 1)
375*4882a593Smuzhiyun #define FP_RESYNC	(1 << 3)
376*4882a593Smuzhiyun #define CTRL_START	(1 << 6)
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun #define DMC_AREF_EN		(1 << 5)
379*4882a593Smuzhiyun #define DMC_CONCONTROL_EMPTY	(1 << 8)
380*4882a593Smuzhiyun #define DFI_INIT_START		(1 << 28)
381*4882a593Smuzhiyun 
382*4882a593Smuzhiyun #define DMC_MEMCONTROL_VAL	0x00312700
383*4882a593Smuzhiyun #define CLK_STOP_EN		(1 << 0)
384*4882a593Smuzhiyun #define DPWRDN_EN		(1 << 1)
385*4882a593Smuzhiyun #define DSREF_EN		(1 << 5)
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun #define MEMBASECONFIG_CHIP_MASK_VAL	0x7E0
388*4882a593Smuzhiyun #define MEMBASECONFIG_CHIP_MASK_OFFSET	0
389*4882a593Smuzhiyun #define MEMBASECONFIG0_CHIP_BASE_VAL	0x20
390*4882a593Smuzhiyun #define MEMBASECONFIG1_CHIP_BASE_VAL	0x40
391*4882a593Smuzhiyun #define CHIP_BASE_OFFSET		16
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun #define MEMCONFIG_VAL	0x1323
394*4882a593Smuzhiyun #define PRECHCONFIG_DEFAULT_VAL	0xFF000000
395*4882a593Smuzhiyun #define PWRDNCONFIG_DEFAULT_VAL	0xFFFF00FF
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun #define TIMINGAREF_VAL	0x5d
398*4882a593Smuzhiyun #define TIMINGROW_VAL	0x345A8692
399*4882a593Smuzhiyun #define TIMINGDATA_VAL	0x3630065C
400*4882a593Smuzhiyun #define TIMINGPOWER_VAL	0x50380336
401*4882a593Smuzhiyun #define DFI_INIT_COMPLETE	(1 << 3)
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun #define BRBRSVCONTROL_VAL	0x00000033
404*4882a593Smuzhiyun #define BRBRSVCONFIG_VAL	0x88778877
405*4882a593Smuzhiyun 
406*4882a593Smuzhiyun /* Clock Gating Control (CGCONTROL) register */
407*4882a593Smuzhiyun #define MEMIF_CG_EN	(1 << 3) /* Memory interface clock gating */
408*4882a593Smuzhiyun #define SCG_CG_EN	(1 << 2) /* Scheduler clock gating */
409*4882a593Smuzhiyun #define BUSIF_WR_CG_EN	(1 << 1) /* Bus interface write channel clock gating */
410*4882a593Smuzhiyun #define BUSIF_RD_CG_EN	(1 << 0) /* Bus interface read channel clock gating */
411*4882a593Smuzhiyun #define DMC_INTERNAL_CG	(MEMIF_CG_EN | SCG_CG_EN | \
412*4882a593Smuzhiyun 				 BUSIF_WR_CG_EN | BUSIF_RD_CG_EN)
413*4882a593Smuzhiyun 
414*4882a593Smuzhiyun /* DMC PHY Control0 register */
415*4882a593Smuzhiyun #define PHY_CONTROL0_RESET_VAL	0x0
416*4882a593Smuzhiyun #define MEM_TERM_EN	(1 << 31)	/* Termination enable for memory */
417*4882a593Smuzhiyun #define PHY_TERM_EN	(1 << 30)	/* Termination enable for PHY */
418*4882a593Smuzhiyun #define DMC_CTRL_SHGATE	(1 << 29)	/* Duration of DQS gating signal */
419*4882a593Smuzhiyun #define FP_RSYNC	(1 << 3)	/* Force DLL resyncronization */
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun /* Driver strength for CK, CKE, CS & CA */
422*4882a593Smuzhiyun #define IMP_OUTPUT_DRV_40_OHM	0x5
423*4882a593Smuzhiyun #define IMP_OUTPUT_DRV_30_OHM	0x7
424*4882a593Smuzhiyun #define DA_3_DS_OFFSET		25
425*4882a593Smuzhiyun #define DA_2_DS_OFFSET		22
426*4882a593Smuzhiyun #define DA_1_DS_OFFSET		19
427*4882a593Smuzhiyun #define DA_0_DS_OFFSET		16
428*4882a593Smuzhiyun #define CA_CK_DRVR_DS_OFFSET	9
429*4882a593Smuzhiyun #define CA_CKE_DRVR_DS_OFFSET	6
430*4882a593Smuzhiyun #define CA_CS_DRVR_DS_OFFSET	3
431*4882a593Smuzhiyun #define CA_ADR_DRVR_DS_OFFSET	0
432*4882a593Smuzhiyun 
433*4882a593Smuzhiyun #define PHY_CON42_CTRL_BSTLEN_SHIFT	8
434*4882a593Smuzhiyun #define PHY_CON42_CTRL_RDLAT_SHIFT	0
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun /*
437*4882a593Smuzhiyun  * Definitions that differ with SoC's.
438*4882a593Smuzhiyun  * Below is the part defining macros for Exynos5250.
439*4882a593Smuzhiyun  * Else part introduces macros for Exynos5420.
440*4882a593Smuzhiyun  */
441*4882a593Smuzhiyun #ifndef CONFIG_EXYNOS5420
442*4882a593Smuzhiyun 
443*4882a593Smuzhiyun /* APLL_CON1 */
444*4882a593Smuzhiyun #define APLL_CON1_VAL	(0x00203800)
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun /* MPLL_CON1 */
447*4882a593Smuzhiyun #define MPLL_CON1_VAL   (0x00203800)
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun /* CPLL_CON1 */
450*4882a593Smuzhiyun #define CPLL_CON1_VAL	(0x00203800)
451*4882a593Smuzhiyun 
452*4882a593Smuzhiyun /* DPLL_CON1 */
453*4882a593Smuzhiyun #define DPLL_CON1_VAL	(NOT_AVAILABLE)
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun /* GPLL_CON1 */
456*4882a593Smuzhiyun #define GPLL_CON1_VAL	(0x00203800)
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun /* EPLL_CON1, CON2 */
459*4882a593Smuzhiyun #define EPLL_CON1_VAL	0x00000000
460*4882a593Smuzhiyun #define EPLL_CON2_VAL	0x00000080
461*4882a593Smuzhiyun 
462*4882a593Smuzhiyun /* VPLL_CON1, CON2 */
463*4882a593Smuzhiyun #define VPLL_CON1_VAL	0x00000000
464*4882a593Smuzhiyun #define VPLL_CON2_VAL	0x00000080
465*4882a593Smuzhiyun 
466*4882a593Smuzhiyun /* RPLL_CON1, CON2 */
467*4882a593Smuzhiyun #define RPLL_CON1_VAL	NOT_AVAILABLE
468*4882a593Smuzhiyun #define RPLL_CON2_VAL	NOT_AVAILABLE
469*4882a593Smuzhiyun 
470*4882a593Smuzhiyun /* BPLL_CON1 */
471*4882a593Smuzhiyun #define BPLL_CON1_VAL	0x00203800
472*4882a593Smuzhiyun 
473*4882a593Smuzhiyun /* SPLL_CON1 */
474*4882a593Smuzhiyun #define SPLL_CON1_VAL	NOT_AVAILABLE
475*4882a593Smuzhiyun 
476*4882a593Smuzhiyun /* IPLL_CON1 */
477*4882a593Smuzhiyun #define IPLL_CON1_VAL	NOT_AVAILABLE
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun /* KPLL_CON1 */
480*4882a593Smuzhiyun #define KPLL_CON1_VAL	NOT_AVAILABLE
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun /* CLK_SRC_ISP */
483*4882a593Smuzhiyun #define CLK_SRC_ISP_VAL		NOT_AVAILABLE
484*4882a593Smuzhiyun #define CLK_DIV_ISP0_VAL	0x31
485*4882a593Smuzhiyun #define CLK_DIV_ISP1_VAL	0x0
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun /* CLK_FSYS */
488*4882a593Smuzhiyun #define CLK_SRC_FSYS0_VAL              0x66666
489*4882a593Smuzhiyun #define CLK_DIV_FSYS0_VAL	       0x0BB00000
490*4882a593Smuzhiyun #define CLK_DIV_FSYS1_VAL	       NOT_AVAILABLE
491*4882a593Smuzhiyun #define CLK_DIV_FSYS2_VAL	       NOT_AVAILABLE
492*4882a593Smuzhiyun 
493*4882a593Smuzhiyun /* CLK_SRC_CPU */
494*4882a593Smuzhiyun /* 0 = MOUTAPLL,  1 = SCLKMPLL */
495*4882a593Smuzhiyun #define MUX_HPM_SEL             0
496*4882a593Smuzhiyun #define MUX_CPU_SEL             0
497*4882a593Smuzhiyun #define MUX_APLL_SEL            1
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun #define CLK_SRC_CPU_VAL		((MUX_HPM_SEL << 20)    \
500*4882a593Smuzhiyun 				| (MUX_CPU_SEL << 16)  \
501*4882a593Smuzhiyun 				| (MUX_APLL_SEL))
502*4882a593Smuzhiyun 
503*4882a593Smuzhiyun /* CLK_SRC_CDREX */
504*4882a593Smuzhiyun #define CLK_SRC_CDREX_VAL       0x1
505*4882a593Smuzhiyun 
506*4882a593Smuzhiyun /* CLK_DIV_CDREX */
507*4882a593Smuzhiyun #define CLK_DIV_CDREX0_VAL	NOT_AVAILABLE
508*4882a593Smuzhiyun #define CLK_DIV_CDREX1_VAL	NOT_AVAILABLE
509*4882a593Smuzhiyun 
510*4882a593Smuzhiyun /* CLK_DIV_CPU0_VAL */
511*4882a593Smuzhiyun #define CLK_DIV_CPU0_VAL	NOT_AVAILABLE
512*4882a593Smuzhiyun 
513*4882a593Smuzhiyun #define MCLK_CDREX2_RATIO       0x0
514*4882a593Smuzhiyun #define ACLK_EFCON_RATIO        0x1
515*4882a593Smuzhiyun #define MCLK_DPHY_RATIO		0x1
516*4882a593Smuzhiyun #define MCLK_CDREX_RATIO	0x1
517*4882a593Smuzhiyun #define ACLK_C2C_200_RATIO	0x1
518*4882a593Smuzhiyun #define C2C_CLK_400_RATIO	0x1
519*4882a593Smuzhiyun #define PCLK_CDREX_RATIO	0x1
520*4882a593Smuzhiyun #define ACLK_CDREX_RATIO	0x1
521*4882a593Smuzhiyun 
522*4882a593Smuzhiyun #define CLK_DIV_CDREX_VAL	((MCLK_DPHY_RATIO << 24)        \
523*4882a593Smuzhiyun 				| (C2C_CLK_400_RATIO << 6)	\
524*4882a593Smuzhiyun 				| (PCLK_CDREX_RATIO << 4)	\
525*4882a593Smuzhiyun 				| (ACLK_CDREX_RATIO))
526*4882a593Smuzhiyun 
527*4882a593Smuzhiyun /* CLK_SRC_TOP0	*/
528*4882a593Smuzhiyun #define MUX_ACLK_300_GSCL_SEL           0x0
529*4882a593Smuzhiyun #define MUX_ACLK_300_GSCL_MID_SEL       0x0
530*4882a593Smuzhiyun #define MUX_ACLK_400_G3D_MID_SEL        0x0
531*4882a593Smuzhiyun #define MUX_ACLK_333_SEL	        0x0
532*4882a593Smuzhiyun #define MUX_ACLK_300_DISP1_SEL	        0x0
533*4882a593Smuzhiyun #define MUX_ACLK_300_DISP1_MID_SEL      0x0
534*4882a593Smuzhiyun #define MUX_ACLK_200_SEL	        0x0
535*4882a593Smuzhiyun #define MUX_ACLK_166_SEL	        0x0
536*4882a593Smuzhiyun #define CLK_SRC_TOP0_VAL	((MUX_ACLK_300_GSCL_SEL  << 25)		\
537*4882a593Smuzhiyun 				| (MUX_ACLK_300_GSCL_MID_SEL << 24)	\
538*4882a593Smuzhiyun 				| (MUX_ACLK_400_G3D_MID_SEL << 20)	\
539*4882a593Smuzhiyun 				| (MUX_ACLK_333_SEL << 16)		\
540*4882a593Smuzhiyun 				| (MUX_ACLK_300_DISP1_SEL << 15)	\
541*4882a593Smuzhiyun 				| (MUX_ACLK_300_DISP1_MID_SEL << 14)	\
542*4882a593Smuzhiyun 				| (MUX_ACLK_200_SEL << 12)		\
543*4882a593Smuzhiyun 				| (MUX_ACLK_166_SEL << 8))
544*4882a593Smuzhiyun 
545*4882a593Smuzhiyun /* CLK_SRC_TOP1	*/
546*4882a593Smuzhiyun #define MUX_ACLK_400_G3D_SEL            0x1
547*4882a593Smuzhiyun #define MUX_ACLK_400_ISP_SEL            0x0
548*4882a593Smuzhiyun #define MUX_ACLK_400_IOP_SEL            0x0
549*4882a593Smuzhiyun #define MUX_ACLK_MIPI_HSI_TXBASE_SEL    0x0
550*4882a593Smuzhiyun #define MUX_ACLK_300_GSCL_MID1_SEL      0x0
551*4882a593Smuzhiyun #define MUX_ACLK_300_DISP1_MID1_SEL     0x0
552*4882a593Smuzhiyun #define CLK_SRC_TOP1_VAL	((MUX_ACLK_400_G3D_SEL << 28)           \
553*4882a593Smuzhiyun 				|(MUX_ACLK_400_ISP_SEL << 24)           \
554*4882a593Smuzhiyun 				|(MUX_ACLK_400_IOP_SEL << 20)           \
555*4882a593Smuzhiyun 				|(MUX_ACLK_MIPI_HSI_TXBASE_SEL << 16)   \
556*4882a593Smuzhiyun 				|(MUX_ACLK_300_GSCL_MID1_SEL << 12)     \
557*4882a593Smuzhiyun 				|(MUX_ACLK_300_DISP1_MID1_SEL << 8))
558*4882a593Smuzhiyun 
559*4882a593Smuzhiyun /* CLK_SRC_TOP2 */
560*4882a593Smuzhiyun #define MUX_GPLL_SEL                    0x1
561*4882a593Smuzhiyun #define MUX_BPLL_USER_SEL               0x0
562*4882a593Smuzhiyun #define MUX_MPLL_USER_SEL               0x0
563*4882a593Smuzhiyun #define MUX_VPLL_SEL                    0x1
564*4882a593Smuzhiyun #define MUX_EPLL_SEL                    0x1
565*4882a593Smuzhiyun #define MUX_CPLL_SEL                    0x1
566*4882a593Smuzhiyun #define VPLLSRC_SEL                     0x0
567*4882a593Smuzhiyun #define CLK_SRC_TOP2_VAL	((MUX_GPLL_SEL << 28)		\
568*4882a593Smuzhiyun 				| (MUX_BPLL_USER_SEL << 24)	\
569*4882a593Smuzhiyun 				| (MUX_MPLL_USER_SEL << 20)	\
570*4882a593Smuzhiyun 				| (MUX_VPLL_SEL << 16)	        \
571*4882a593Smuzhiyun 				| (MUX_EPLL_SEL << 12)	        \
572*4882a593Smuzhiyun 				| (MUX_CPLL_SEL << 8)           \
573*4882a593Smuzhiyun 				| (VPLLSRC_SEL))
574*4882a593Smuzhiyun /* CLK_SRC_TOP3 */
575*4882a593Smuzhiyun #define MUX_ACLK_333_SUB_SEL            0x1
576*4882a593Smuzhiyun #define MUX_ACLK_400_SUB_SEL            0x1
577*4882a593Smuzhiyun #define MUX_ACLK_266_ISP_SUB_SEL        0x1
578*4882a593Smuzhiyun #define MUX_ACLK_266_GPS_SUB_SEL        0x0
579*4882a593Smuzhiyun #define MUX_ACLK_300_GSCL_SUB_SEL       0x1
580*4882a593Smuzhiyun #define MUX_ACLK_266_GSCL_SUB_SEL       0x1
581*4882a593Smuzhiyun #define MUX_ACLK_300_DISP1_SUB_SEL      0x1
582*4882a593Smuzhiyun #define MUX_ACLK_200_DISP1_SUB_SEL      0x1
583*4882a593Smuzhiyun #define CLK_SRC_TOP3_VAL	((MUX_ACLK_333_SUB_SEL << 24)	        \
584*4882a593Smuzhiyun 				| (MUX_ACLK_400_SUB_SEL << 20)	        \
585*4882a593Smuzhiyun 				| (MUX_ACLK_266_ISP_SUB_SEL << 16)	\
586*4882a593Smuzhiyun 				| (MUX_ACLK_266_GPS_SUB_SEL << 12)      \
587*4882a593Smuzhiyun 				| (MUX_ACLK_300_GSCL_SUB_SEL << 10)     \
588*4882a593Smuzhiyun 				| (MUX_ACLK_266_GSCL_SUB_SEL << 8)      \
589*4882a593Smuzhiyun 				| (MUX_ACLK_300_DISP1_SUB_SEL << 6)     \
590*4882a593Smuzhiyun 				| (MUX_ACLK_200_DISP1_SUB_SEL << 4))
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun #define CLK_SRC_TOP4_VAL	NOT_AVAILABLE
593*4882a593Smuzhiyun #define CLK_SRC_TOP5_VAL	NOT_AVAILABLE
594*4882a593Smuzhiyun #define CLK_SRC_TOP6_VAL	NOT_AVAILABLE
595*4882a593Smuzhiyun #define CLK_SRC_TOP7_VAL	NOT_AVAILABLE
596*4882a593Smuzhiyun 
597*4882a593Smuzhiyun /* CLK_DIV_TOP0	*/
598*4882a593Smuzhiyun #define ACLK_300_DISP1_RATIO	0x2
599*4882a593Smuzhiyun #define ACLK_400_G3D_RATIO	0x0
600*4882a593Smuzhiyun #define ACLK_333_RATIO		0x0
601*4882a593Smuzhiyun #define ACLK_266_RATIO		0x2
602*4882a593Smuzhiyun #define ACLK_200_RATIO		0x3
603*4882a593Smuzhiyun #define ACLK_166_RATIO		0x1
604*4882a593Smuzhiyun #define ACLK_133_RATIO		0x1
605*4882a593Smuzhiyun #define ACLK_66_RATIO		0x5
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun #define CLK_DIV_TOP0_VAL	((ACLK_300_DISP1_RATIO << 28)	\
608*4882a593Smuzhiyun 				| (ACLK_400_G3D_RATIO << 24)	\
609*4882a593Smuzhiyun 				| (ACLK_333_RATIO  << 20)	\
610*4882a593Smuzhiyun 				| (ACLK_266_RATIO << 16)	\
611*4882a593Smuzhiyun 				| (ACLK_200_RATIO << 12)	\
612*4882a593Smuzhiyun 				| (ACLK_166_RATIO << 8)		\
613*4882a593Smuzhiyun 				| (ACLK_133_RATIO << 4)		\
614*4882a593Smuzhiyun 				| (ACLK_66_RATIO))
615*4882a593Smuzhiyun 
616*4882a593Smuzhiyun /* CLK_DIV_TOP1	*/
617*4882a593Smuzhiyun #define ACLK_MIPI_HSI_TX_BASE_RATIO     0x3
618*4882a593Smuzhiyun #define ACLK_66_PRE_RATIO               0x1
619*4882a593Smuzhiyun #define ACLK_400_ISP_RATIO              0x1
620*4882a593Smuzhiyun #define ACLK_400_IOP_RATIO              0x1
621*4882a593Smuzhiyun #define ACLK_300_GSCL_RATIO             0x2
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun #define CLK_DIV_TOP1_VAL	((ACLK_MIPI_HSI_TX_BASE_RATIO << 28)	\
624*4882a593Smuzhiyun 				| (ACLK_66_PRE_RATIO << 24)		\
625*4882a593Smuzhiyun 				| (ACLK_400_ISP_RATIO  << 20)		\
626*4882a593Smuzhiyun 				| (ACLK_400_IOP_RATIO << 16)		\
627*4882a593Smuzhiyun 				| (ACLK_300_GSCL_RATIO << 12))
628*4882a593Smuzhiyun 
629*4882a593Smuzhiyun #define CLK_DIV_TOP2_VAL	NOT_AVAILABLE
630*4882a593Smuzhiyun 
631*4882a593Smuzhiyun /* PLL Lock Value Factor */
632*4882a593Smuzhiyun #define PLL_LOCK_FACTOR		250
633*4882a593Smuzhiyun #define PLL_X_LOCK_FACTOR	3000
634*4882a593Smuzhiyun 
635*4882a593Smuzhiyun /* CLK_SRC_PERIC0 */
636*4882a593Smuzhiyun #define PWM_SEL		6
637*4882a593Smuzhiyun #define UART3_SEL	6
638*4882a593Smuzhiyun #define UART2_SEL	6
639*4882a593Smuzhiyun #define UART1_SEL	6
640*4882a593Smuzhiyun #define UART0_SEL	6
641*4882a593Smuzhiyun /* SRC_CLOCK = SCLK_MPLL */
642*4882a593Smuzhiyun #define CLK_SRC_PERIC0_VAL	((PWM_SEL << 24)        \
643*4882a593Smuzhiyun 				| (UART3_SEL << 12)     \
644*4882a593Smuzhiyun 				| (UART2_SEL << 8)       \
645*4882a593Smuzhiyun 				| (UART1_SEL << 4)      \
646*4882a593Smuzhiyun 				| (UART0_SEL))
647*4882a593Smuzhiyun 
648*4882a593Smuzhiyun /* CLK_SRC_PERIC1 */
649*4882a593Smuzhiyun /* SRC_CLOCK = SCLK_MPLL */
650*4882a593Smuzhiyun #define SPI0_SEL		6
651*4882a593Smuzhiyun #define SPI1_SEL		6
652*4882a593Smuzhiyun #define SPI2_SEL		6
653*4882a593Smuzhiyun #define CLK_SRC_PERIC1_VAL	((SPI2_SEL << 24) \
654*4882a593Smuzhiyun 				| (SPI1_SEL << 20) \
655*4882a593Smuzhiyun 				| (SPI0_SEL << 16))
656*4882a593Smuzhiyun 
657*4882a593Smuzhiyun /* CLK_DIV_PERIL0	*/
658*4882a593Smuzhiyun #define UART5_RATIO	7
659*4882a593Smuzhiyun #define UART4_RATIO	7
660*4882a593Smuzhiyun #define UART3_RATIO	7
661*4882a593Smuzhiyun #define UART2_RATIO	7
662*4882a593Smuzhiyun #define UART1_RATIO	7
663*4882a593Smuzhiyun #define UART0_RATIO	7
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun #define CLK_DIV_PERIC0_VAL	((UART3_RATIO << 12)    \
666*4882a593Smuzhiyun 				| (UART2_RATIO << 8)    \
667*4882a593Smuzhiyun 				| (UART1_RATIO << 4)    \
668*4882a593Smuzhiyun 				| (UART0_RATIO))
669*4882a593Smuzhiyun /* CLK_DIV_PERIC1 */
670*4882a593Smuzhiyun #define SPI1_RATIO		0x7
671*4882a593Smuzhiyun #define SPI0_RATIO		0xf
672*4882a593Smuzhiyun #define SPI1_SUB_RATIO		0x0
673*4882a593Smuzhiyun #define SPI0_SUB_RATIO		0x0
674*4882a593Smuzhiyun #define CLK_DIV_PERIC1_VAL	((SPI1_SUB_RATIO << 24) \
675*4882a593Smuzhiyun 				| ((SPI1_RATIO << 16) \
676*4882a593Smuzhiyun 				| (SPI0_SUB_RATIO << 8) \
677*4882a593Smuzhiyun 				| (SPI0_RATIO << 0)))
678*4882a593Smuzhiyun 
679*4882a593Smuzhiyun /* CLK_DIV_PERIC2 */
680*4882a593Smuzhiyun #define SPI2_RATIO		0xf
681*4882a593Smuzhiyun #define SPI2_SUB_RATIO		0x0
682*4882a593Smuzhiyun #define CLK_DIV_PERIC2_VAL	((SPI2_SUB_RATIO << 8) \
683*4882a593Smuzhiyun 				| (SPI2_RATIO << 0))
684*4882a593Smuzhiyun 
685*4882a593Smuzhiyun /* CLK_DIV_PERIC3 */
686*4882a593Smuzhiyun #define PWM_RATIO		8
687*4882a593Smuzhiyun #define CLK_DIV_PERIC3_VAL	(PWM_RATIO << 0)
688*4882a593Smuzhiyun 
689*4882a593Smuzhiyun 
690*4882a593Smuzhiyun /* CLK_DIV_PERIC4 */
691*4882a593Smuzhiyun #define CLK_DIV_PERIC4_VAL	NOT_AVAILABLE
692*4882a593Smuzhiyun 
693*4882a593Smuzhiyun /* CLK_SRC_DISP1_0 */
694*4882a593Smuzhiyun #define CLK_SRC_DISP1_0_VAL	0x6
695*4882a593Smuzhiyun #define CLK_DIV_DISP1_0_VAL	NOT_AVAILABLE
696*4882a593Smuzhiyun 
697*4882a593Smuzhiyun #define APLL_FOUT		(1 << 0)
698*4882a593Smuzhiyun #define KPLL_FOUT		NOT_AVAILABLE
699*4882a593Smuzhiyun 
700*4882a593Smuzhiyun #define CLK_DIV_CPERI1_VAL	NOT_AVAILABLE
701*4882a593Smuzhiyun 
702*4882a593Smuzhiyun #else
703*4882a593Smuzhiyun 
704*4882a593Smuzhiyun #define CPU_CONFIG_STATUS_OFFSET	0x80
705*4882a593Smuzhiyun #define CPU_RST_FLAG_VAL		0xFCBA0D10
706*4882a593Smuzhiyun #define PAD_RETENTION_DRAM_COREBLK_VAL	0x10000000
707*4882a593Smuzhiyun 
708*4882a593Smuzhiyun /* APLL_CON1 */
709*4882a593Smuzhiyun #define APLL_CON1_VAL	(0x0020F300)
710*4882a593Smuzhiyun 
711*4882a593Smuzhiyun /* MPLL_CON1 */
712*4882a593Smuzhiyun #define MPLL_CON1_VAL   (0x0020F300)
713*4882a593Smuzhiyun 
714*4882a593Smuzhiyun 
715*4882a593Smuzhiyun /* CPLL_CON1 */
716*4882a593Smuzhiyun #define CPLL_CON1_VAL	0x0020f300
717*4882a593Smuzhiyun 
718*4882a593Smuzhiyun /* DPLL_CON1 */
719*4882a593Smuzhiyun #define DPLL_CON1_VAL	(0x0020F300)
720*4882a593Smuzhiyun 
721*4882a593Smuzhiyun /* GPLL_CON1 */
722*4882a593Smuzhiyun #define GPLL_CON1_VAL	(NOT_AVAILABLE)
723*4882a593Smuzhiyun 
724*4882a593Smuzhiyun 
725*4882a593Smuzhiyun /* EPLL_CON1, CON2 */
726*4882a593Smuzhiyun #define EPLL_CON1_VAL	0x00000000
727*4882a593Smuzhiyun #define EPLL_CON2_VAL	0x00000080
728*4882a593Smuzhiyun 
729*4882a593Smuzhiyun /* VPLL_CON1, CON2 */
730*4882a593Smuzhiyun #define VPLL_CON1_VAL	0x0020f300
731*4882a593Smuzhiyun #define VPLL_CON2_VAL	NOT_AVAILABLE
732*4882a593Smuzhiyun 
733*4882a593Smuzhiyun /* RPLL_CON1, CON2 */
734*4882a593Smuzhiyun #define RPLL_CON1_VAL	0x00000000
735*4882a593Smuzhiyun #define RPLL_CON2_VAL	0x00000080
736*4882a593Smuzhiyun 
737*4882a593Smuzhiyun /* BPLL_CON1 */
738*4882a593Smuzhiyun #define BPLL_CON1_VAL	0x0020f300
739*4882a593Smuzhiyun 
740*4882a593Smuzhiyun /* SPLL_CON1 */
741*4882a593Smuzhiyun #define SPLL_CON1_VAL	0x0020f300
742*4882a593Smuzhiyun 
743*4882a593Smuzhiyun /* IPLL_CON1 */
744*4882a593Smuzhiyun #define IPLL_CON1_VAL	0x00000080
745*4882a593Smuzhiyun 
746*4882a593Smuzhiyun /* KPLL_CON1 */
747*4882a593Smuzhiyun #define KPLL_CON1_VAL	0x200000
748*4882a593Smuzhiyun 
749*4882a593Smuzhiyun /* CLK_SRC_ISP */
750*4882a593Smuzhiyun #define CLK_SRC_ISP_VAL		0x33366000
751*4882a593Smuzhiyun #define CLK_DIV_ISP0_VAL	0x13131300
752*4882a593Smuzhiyun #define CLK_DIV_ISP1_VAL	0xbb110202
753*4882a593Smuzhiyun 
754*4882a593Smuzhiyun 
755*4882a593Smuzhiyun /* CLK_FSYS */
756*4882a593Smuzhiyun #define CLK_SRC_FSYS0_VAL              0x33033300
757*4882a593Smuzhiyun #define CLK_DIV_FSYS0_VAL	       0x0
758*4882a593Smuzhiyun #define CLK_DIV_FSYS1_VAL	       0x04f13c4f
759*4882a593Smuzhiyun #define CLK_DIV_FSYS2_VAL	       0x041d0000
760*4882a593Smuzhiyun 
761*4882a593Smuzhiyun /* CLK_SRC_CPU */
762*4882a593Smuzhiyun /* 0 = MOUTAPLL,  1 = SCLKMPLL */
763*4882a593Smuzhiyun #define MUX_HPM_SEL             1
764*4882a593Smuzhiyun #define MUX_CPU_SEL             0
765*4882a593Smuzhiyun #define MUX_APLL_SEL            1
766*4882a593Smuzhiyun 
767*4882a593Smuzhiyun #define CLK_SRC_CPU_VAL		((MUX_HPM_SEL << 20)    \
768*4882a593Smuzhiyun 				| (MUX_CPU_SEL << 16)  \
769*4882a593Smuzhiyun 				| (MUX_APLL_SEL))
770*4882a593Smuzhiyun 
771*4882a593Smuzhiyun /* CLK_SRC_CDREX */
772*4882a593Smuzhiyun #define CLK_SRC_CDREX_VAL       0x00000011
773*4882a593Smuzhiyun 
774*4882a593Smuzhiyun /* CLK_DIV_CDREX */
775*4882a593Smuzhiyun #define CLK_DIV_CDREX0_VAL	0x30010100
776*4882a593Smuzhiyun #define CLK_DIV_CDREX1_VAL	0x300
777*4882a593Smuzhiyun 
778*4882a593Smuzhiyun #define CLK_DIV_CDREX_VAL       0x17010100
779*4882a593Smuzhiyun 
780*4882a593Smuzhiyun /* CLK_DIV_CPU0_VAL */
781*4882a593Smuzhiyun #define CLK_DIV_CPU0_VAL	0x01440020
782*4882a593Smuzhiyun 
783*4882a593Smuzhiyun /* CLK_SRC_TOP */
784*4882a593Smuzhiyun #define CLK_SRC_TOP0_VAL	0x12221222
785*4882a593Smuzhiyun #define CLK_SRC_TOP1_VAL	0x00100200
786*4882a593Smuzhiyun #define CLK_SRC_TOP2_VAL	0x11101000
787*4882a593Smuzhiyun #define CLK_SRC_TOP3_VAL	0x11111111
788*4882a593Smuzhiyun #define CLK_SRC_TOP4_VAL	0x11110111
789*4882a593Smuzhiyun #define CLK_SRC_TOP5_VAL	0x11111101
790*4882a593Smuzhiyun #define CLK_SRC_TOP6_VAL	0x11110111
791*4882a593Smuzhiyun #define CLK_SRC_TOP7_VAL	0x00022200
792*4882a593Smuzhiyun 
793*4882a593Smuzhiyun /* CLK_DIV_TOP */
794*4882a593Smuzhiyun #define CLK_DIV_TOP0_VAL	0x23712311
795*4882a593Smuzhiyun #define CLK_DIV_TOP1_VAL	0x13100B00
796*4882a593Smuzhiyun #define CLK_DIV_TOP2_VAL	0x11101100
797*4882a593Smuzhiyun 
798*4882a593Smuzhiyun /* PLL Lock Value Factor */
799*4882a593Smuzhiyun #define PLL_LOCK_FACTOR		200
800*4882a593Smuzhiyun #define PLL_X_LOCK_FACTOR	3000
801*4882a593Smuzhiyun 
802*4882a593Smuzhiyun /* CLK_SRC_PERIC0 */
803*4882a593Smuzhiyun #define SPDIF_SEL	1
804*4882a593Smuzhiyun #define PWM_SEL		3
805*4882a593Smuzhiyun #define UART4_SEL	3
806*4882a593Smuzhiyun #define UART3_SEL	3
807*4882a593Smuzhiyun #define UART2_SEL	3
808*4882a593Smuzhiyun #define UART1_SEL	3
809*4882a593Smuzhiyun #define UART0_SEL	3
810*4882a593Smuzhiyun /* SRC_CLOCK = SCLK_RPLL */
811*4882a593Smuzhiyun #define CLK_SRC_PERIC0_VAL	((SPDIF_SEL << 28)	\
812*4882a593Smuzhiyun 				| (PWM_SEL << 24)	\
813*4882a593Smuzhiyun 				| (UART4_SEL << 20)	\
814*4882a593Smuzhiyun 				| (UART3_SEL << 16)	\
815*4882a593Smuzhiyun 				| (UART2_SEL << 12)	\
816*4882a593Smuzhiyun 				| (UART1_SEL << 8)	\
817*4882a593Smuzhiyun 				| (UART0_SEL << 4))
818*4882a593Smuzhiyun 
819*4882a593Smuzhiyun /* CLK_SRC_PERIC1 */
820*4882a593Smuzhiyun /* SRC_CLOCK = SCLK_EPLL */
821*4882a593Smuzhiyun #define SPI0_SEL		6
822*4882a593Smuzhiyun #define SPI1_SEL		6
823*4882a593Smuzhiyun #define SPI2_SEL		6
824*4882a593Smuzhiyun #define AUDIO0_SEL		6
825*4882a593Smuzhiyun #define AUDIO1_SEL		6
826*4882a593Smuzhiyun #define AUDIO2_SEL		6
827*4882a593Smuzhiyun #define CLK_SRC_PERIC1_VAL	((SPI2_SEL << 28)	\
828*4882a593Smuzhiyun 				| (SPI1_SEL << 24)	\
829*4882a593Smuzhiyun 				| (SPI0_SEL << 20)	\
830*4882a593Smuzhiyun 				| (AUDIO2_SEL << 16)	\
831*4882a593Smuzhiyun 				| (AUDIO2_SEL << 12)	\
832*4882a593Smuzhiyun 				| (AUDIO2_SEL << 8))
833*4882a593Smuzhiyun 
834*4882a593Smuzhiyun /* CLK_DIV_PERIC0 */
835*4882a593Smuzhiyun #define PWM_RATIO	8
836*4882a593Smuzhiyun #define UART4_RATIO	9
837*4882a593Smuzhiyun #define UART3_RATIO	9
838*4882a593Smuzhiyun #define UART2_RATIO	9
839*4882a593Smuzhiyun #define UART1_RATIO	9
840*4882a593Smuzhiyun #define UART0_RATIO	9
841*4882a593Smuzhiyun 
842*4882a593Smuzhiyun #define CLK_DIV_PERIC0_VAL	((PWM_RATIO << 28)	\
843*4882a593Smuzhiyun 				| (UART4_RATIO << 24)	\
844*4882a593Smuzhiyun 				| (UART3_RATIO << 20)    \
845*4882a593Smuzhiyun 				| (UART2_RATIO << 16)    \
846*4882a593Smuzhiyun 				| (UART1_RATIO << 12)    \
847*4882a593Smuzhiyun 				| (UART0_RATIO << 8))
848*4882a593Smuzhiyun /* CLK_DIV_PERIC1 */
849*4882a593Smuzhiyun #define SPI2_RATIO		0x1
850*4882a593Smuzhiyun #define SPI1_RATIO		0x1
851*4882a593Smuzhiyun #define SPI0_RATIO		0x1
852*4882a593Smuzhiyun #define CLK_DIV_PERIC1_VAL	((SPI2_RATIO << 28)	\
853*4882a593Smuzhiyun 				| (SPI1_RATIO << 24)	\
854*4882a593Smuzhiyun 				| (SPI0_RATIO << 20))
855*4882a593Smuzhiyun 
856*4882a593Smuzhiyun /* CLK_DIV_PERIC2 */
857*4882a593Smuzhiyun #define PCM2_RATIO		0x3
858*4882a593Smuzhiyun #define PCM1_RATIO		0x3
859*4882a593Smuzhiyun #define CLK_DIV_PERIC2_VAL	((PCM2_RATIO << 24) \
860*4882a593Smuzhiyun 				| (PCM1_RATIO << 16))
861*4882a593Smuzhiyun 
862*4882a593Smuzhiyun /* CLK_DIV_PERIC3 */
863*4882a593Smuzhiyun #define AUDIO2_RATIO		0x5
864*4882a593Smuzhiyun #define AUDIO1_RATIO		0x5
865*4882a593Smuzhiyun #define AUDIO0_RATIO		0x5
866*4882a593Smuzhiyun #define CLK_DIV_PERIC3_VAL	((AUDIO2_RATIO << 28)	\
867*4882a593Smuzhiyun 				| (AUDIO1_RATIO << 24)	\
868*4882a593Smuzhiyun 				| (AUDIO0_RATIO << 20))
869*4882a593Smuzhiyun 
870*4882a593Smuzhiyun /* CLK_DIV_PERIC4 */
871*4882a593Smuzhiyun #define SPI2_PRE_RATIO		0x2
872*4882a593Smuzhiyun #define SPI1_PRE_RATIO		0x2
873*4882a593Smuzhiyun #define SPI0_PRE_RATIO		0x2
874*4882a593Smuzhiyun #define CLK_DIV_PERIC4_VAL	((SPI2_PRE_RATIO << 24)	\
875*4882a593Smuzhiyun 				| (SPI1_PRE_RATIO << 16) \
876*4882a593Smuzhiyun 				| (SPI0_PRE_RATIO << 8))
877*4882a593Smuzhiyun 
878*4882a593Smuzhiyun /* CLK_SRC_DISP1_0 */
879*4882a593Smuzhiyun #define CLK_SRC_DISP1_0_VAL	0x10666600
880*4882a593Smuzhiyun #define CLK_DIV_DISP1_0_VAL	0x01050211
881*4882a593Smuzhiyun 
882*4882a593Smuzhiyun #define APLL_FOUT		(1 << 0)
883*4882a593Smuzhiyun #define KPLL_FOUT		(1 << 0)
884*4882a593Smuzhiyun 
885*4882a593Smuzhiyun #define CLK_DIV_CPERI1_VAL	0x3f3f0000
886*4882a593Smuzhiyun #endif
887*4882a593Smuzhiyun 
888*4882a593Smuzhiyun struct mem_timings;
889*4882a593Smuzhiyun 
890*4882a593Smuzhiyun /* Errors that we can encourter in low-level setup */
891*4882a593Smuzhiyun enum {
892*4882a593Smuzhiyun 	SETUP_ERR_OK,
893*4882a593Smuzhiyun 	SETUP_ERR_RDLV_COMPLETE_TIMEOUT = -1,
894*4882a593Smuzhiyun 	SETUP_ERR_ZQ_CALIBRATION_FAILURE = -2,
895*4882a593Smuzhiyun };
896*4882a593Smuzhiyun 
897*4882a593Smuzhiyun /*
898*4882a593Smuzhiyun  * Memory variant specific initialization code for DDR3
899*4882a593Smuzhiyun  *
900*4882a593Smuzhiyun  * @param mem          Memory timings for this memory type.
901*4882a593Smuzhiyun  * @param reset         Reset DDR PHY during initialization.
902*4882a593Smuzhiyun  * @return 0 if ok, SETUP_ERR_... if there is a problem
903*4882a593Smuzhiyun  */
904*4882a593Smuzhiyun int ddr3_mem_ctrl_init(struct mem_timings *mem, int reset);
905*4882a593Smuzhiyun 
906*4882a593Smuzhiyun /* Memory variant specific initialization code for LPDDR3 */
907*4882a593Smuzhiyun void lpddr3_mem_ctrl_init(void);
908*4882a593Smuzhiyun 
909*4882a593Smuzhiyun /*
910*4882a593Smuzhiyun  * Configure ZQ I/O interface
911*4882a593Smuzhiyun  *
912*4882a593Smuzhiyun  * @param mem		Memory timings for this memory type.
913*4882a593Smuzhiyun  * @param phy0_con16	Register address for dmc_phy0->phy_con16
914*4882a593Smuzhiyun  * @param phy1_con16	Register address for dmc_phy1->phy_con16
915*4882a593Smuzhiyun  * @param phy0_con17	Register address for dmc_phy0->phy_con17
916*4882a593Smuzhiyun  * @param phy1_con17	Register address for dmc_phy1->phy_con17
917*4882a593Smuzhiyun  * @return 0 if ok, -1 on error
918*4882a593Smuzhiyun  */
919*4882a593Smuzhiyun int dmc_config_zq(struct mem_timings *mem, uint32_t *phy0_con16,
920*4882a593Smuzhiyun 			uint32_t *phy1_con16, uint32_t *phy0_con17,
921*4882a593Smuzhiyun 			uint32_t *phy1_con17);
922*4882a593Smuzhiyun /*
923*4882a593Smuzhiyun  * Send NOP and MRS/EMRS Direct commands
924*4882a593Smuzhiyun  *
925*4882a593Smuzhiyun  * @param mem		Memory timings for this memory type.
926*4882a593Smuzhiyun  * @param directcmd	Register address for dmc_phy->directcmd
927*4882a593Smuzhiyun  */
928*4882a593Smuzhiyun void dmc_config_mrs(struct mem_timings *mem, uint32_t *directcmd);
929*4882a593Smuzhiyun 
930*4882a593Smuzhiyun /*
931*4882a593Smuzhiyun  * Send PALL Direct commands
932*4882a593Smuzhiyun  *
933*4882a593Smuzhiyun  * @param mem		Memory timings for this memory type.
934*4882a593Smuzhiyun  * @param directcmd	Register address for dmc_phy->directcmd
935*4882a593Smuzhiyun  */
936*4882a593Smuzhiyun void dmc_config_prech(struct mem_timings *mem, uint32_t *directcmd);
937*4882a593Smuzhiyun 
938*4882a593Smuzhiyun /*
939*4882a593Smuzhiyun  * Reset the DLL. This function is common between DDR3 and LPDDR2.
940*4882a593Smuzhiyun  * However, the reset value is different. So we are passing a flag
941*4882a593Smuzhiyun  * ddr_mode to distinguish between LPDDR2 and DDR3.
942*4882a593Smuzhiyun  *
943*4882a593Smuzhiyun  * @param phycontrol0	Register address for dmc_phy->phycontrol0
944*4882a593Smuzhiyun  * @param ddr_mode	Type of DDR memory
945*4882a593Smuzhiyun  */
946*4882a593Smuzhiyun void update_reset_dll(uint32_t *phycontrol0, enum ddr_mode);
947*4882a593Smuzhiyun #endif
948