~funderscore blog cgit wiki get in touch
aboutsummaryrefslogtreecommitdiff
blob: 2c0d30a80ec118ed8f2ba7b7a52294a206adc2c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * JZ4780 DDR initialization - parameters definitions
 *
 * Copyright (c) 2015 Imagination Technologies
 * Author: Matt Redfearn <matt.redfearn.com>
 */

#ifndef __JZ4780_DRAM_H__
#define __JZ4780_DRAM_H__

/*
 * DDR
 */
#include <linux/bitops.h>
#define DDRC_ST				0x0
#define DDRC_CFG			0x4
#define DDRC_CTRL			0x8
#define DDRC_LMR			0xc
#define DDRC_REFCNT			0x18
#define DDRC_DQS			0x1c
#define DDRC_DQS_ADJ			0x20
#define DDRC_MMAP0			0x24
#define DDRC_MMAP1			0x28
#define DDRC_MDELAY			0x2c
#define DDRC_CKEL			0x30
#define DDRC_PMEMCTRL0			0x54
#define DDRC_PMEMCTRL1			0x50
#define DDRC_PMEMCTRL2			0x58
#define DDRC_PMEMCTRL3			0x5c

#define DDRC_TIMING(n)			(0x60 + 4 * (n))
#define DDRC_REMMAP(n)			(0x9c + 4 * (n))

/*
 * DDR PHY
 */
#define DDR_MEM_PHY_BASE		0x20000000
#define DDR_PHY_OFFSET			0x1000

#define DDRP_PIR			0x4
#define DDRP_PGCR			0x8
#define DDRP_PGSR			0xc

#define DDRP_PTR0			0x18
#define DDRP_PTR1			0x1c
#define DDRP_PTR2			0x20

#define DDRP_ACIOCR			0x24
#define DDRP_DXCCR			0x28
#define DDRP_DSGCR			0x2c
#define DDRP_DCR			0x30

#define DDRP_DTPR0			0x34
#define DDRP_DTPR1			0x38
#define DDRP_DTPR2			0x3c
#define DDRP_MR0			0x40
#define DDRP_MR1			0x44
#define DDRP_MR2			0x48
#define DDRP_MR3			0x4c

#define DDRP_ODTCR			0x50
#define DDRP_DTAR			0x54
#define DDRP_DTDR0			0x58
#define DDRP_DTDR1			0x5c

#define DDRP_DCUAR			0xc0
#define DDRP_DCUDR			0xc4
#define DDRP_DCURR			0xc8
#define DDRP_DCULR			0xcc
#define DDRP_DCUGCR			0xd0
#define DDRP_DCUTPR			0xd4
#define DDRP_DCUSR0			0xd8
#define DDRP_DCUSR1			0xdc

#define DDRP_ZQXCR0(n)			(0x180 + ((n) * 0x10))
#define DDRP_ZQXCR1(n)			(0x184 + ((n) * 0x10))
#define DDRP_ZQXSR0(n)			(0x188 + ((n) * 0x10))
#define DDRP_ZQXSR1(n)			(0x18c + ((n) * 0x10))

#define DDRP_DXGCR(n)			(0x1c0 + ((n) * 0x40))
#define DDRP_DXGSR0(n)			(0x1c4 + ((n) * 0x40))
#define DDRP_DXGSR1(n)			(0x1c8 + ((n) * 0x40))
#define DDRP_DXDQSTR(n)			(0x1d4 + ((n) * 0x40))

/* DDRC Status Register */
#define DDRC_ST_ENDIAN			BIT(7)
#define DDRC_ST_DPDN			BIT(5)
#define DDRC_ST_PDN			BIT(4)
#define DDRC_ST_AREF			BIT(3)
#define DDRC_ST_SREF			BIT(2)
#define DDRC_ST_CKE1			BIT(1)
#define DDRC_ST_CKE0			BIT(0)

/* DDRC Configure Register */
#define DDRC_CFG_ROW1_BIT		27
#define DDRC_CFG_ROW1_MASK		(0x7 << DDRC_CFG_ROW1_BIT)
#define DDRC_CFG_COL1_BIT		24
#define DDRC_CFG_COL1_MASK		(0x7 << DDRC_CFG_COL1_BIT)
#define DDRC_CFG_BA1			BIT(23)
#define DDRC_CFG_IMBA			BIT(22)
#define DDRC_CFG_BL_8			BIT(21)

#define DDRC_CFG_TYPE_BIT		17
#define DDRC_CFG_TYPE_MASK		(0x7 << DDRC_CFG_TYPE_BIT)
#define DDRC_CFG_TYPE_DDR1		(2 << DDRC_CFG_TYPE_BIT)
#define DDRC_CFG_TYPE_MDDR		(3 << DDRC_CFG_TYPE_BIT)
#define DDRC_CFG_TYPE_DDR2		(4 << DDRC_CFG_TYPE_BIT)
#define DDRC_CFG_TYPE_LPDDR2		(5 << DDRC_CFG_TYPE_BIT)
#define DDRC_CFG_TYPE_DDR3		(6 << DDRC_CFG_TYPE_BIT)

#define DDRC_CFG_ODT_EN			BIT(16)

#define DDRC_CFG_MPRT			BIT(15)

#define DDRC_CFG_ROW_BIT		11
#define DDRC_CFG_ROW_MASK		(0x7 << DDRC_CFG_ROW_BIT)
#define DDRC_CFG_ROW_12			(0 << DDRC_CFG_ROW_BIT)
#define DDRC_CFG_ROW_13			(1 << DDRC_CFG_ROW_BIT)
#define DDRC_CFG_ROW_14			(2 << DDRC_CFG_ROW_BIT)

#define DDRC_CFG_COL_BIT		8
#define DDRC_CFG_COL_MASK		(0x7 << DDRC_CFG_COL_BIT)
#define DDRC_CFG_COL_8			(0 << DDRC_CFG_COL_BIT)
#define DDRC_CFG_COL_9			(1 << DDRC_CFG_COL_BIT)
#define DDRC_CFG_COL_10			(2 << DDRC_CFG_COL_BIT)
#define DDRC_CFG_COL_11			(3 << DDRC_CFG_COL_BIT)

#define DDRC_CFG_CS1EN			BIT(7)
#define DDRC_CFG_CS0EN			BIT(6)
#define DDRC_CFG_CL_BIT			2
#define DDRC_CFG_CL_MASK		(0xf << DDRC_CFG_CL_BIT)
#define DDRC_CFG_CL_3			(0 << DDRC_CFG_CL_BIT)
#define DDRC_CFG_CL_4			(1 << DDRC_CFG_CL_BIT)
#define DDRC_CFG_CL_5			(2 << DDRC_CFG_CL_BIT)
#define DDRC_CFG_CL_6			(3 << DDRC_CFG_CL_BIT)

#define DDRC_CFG_BA			BIT(1)
#define DDRC_CFG_DW			BIT(0)

/* DDRC Control Register */
#define DDRC_CTRL_DFI_RST		BIT(23)
#define DDRC_CTRL_DLL_RST		BIT(22)
#define DDRC_CTRL_CTL_RST		BIT(21)
#define DDRC_CTRL_CFG_RST		BIT(20)
#define DDRC_CTRL_ACTPD			BIT(15)
#define DDRC_CTRL_PDT_BIT		12
#define DDRC_CTRL_PDT_MASK		(0x7 << DDRC_CTRL_PDT_BIT)
#define DDRC_CTRL_PDT_DIS		(0 << DDRC_CTRL_PDT_BIT)
#define DDRC_CTRL_PDT_8			(1 << DDRC_CTRL_PDT_BIT)
#define DDRC_CTRL_PDT_16		(2 << DDRC_CTRL_PDT_BIT)
#define DDRC_CTRL_PDT_32		(3 << DDRC_CTRL_PDT_BIT)
#define DDRC_CTRL_PDT_64		(4 << DDRC_CTRL_PDT_BIT)
#define DDRC_CTRL_PDT_128		(5 << DDRC_CTRL_PDT_BIT)

#define DDRC_CTRL_PRET_BIT		8
#define DDRC_CTRL_PRET_MASK		(0x7 << DDRC_CTRL_PRET_BIT)
#define DDRC_CTRL_PRET_DIS		(0 << DDRC_CTRL_PRET_BIT)
#define DDRC_CTRL_PRET_8		(1 << DDRC_CTRL_PRET_BIT)
#define DDRC_CTRL_PRET_16		(2 << DDRC_CTRL_PRET_BIT)
#define DDRC_CTRL_PRET_32		(3 << DDRC_CTRL_PRET_BIT)
#define DDRC_CTRL_PRET_64		(4 << DDRC_CTRL_PRET_BIT)
#define DDRC_CTRL_PRET_128		(5 << DDRC_CTRL_PRET_BIT)

#define DDRC_CTRL_DPD			BIT(6)
#define DDRC_CTRL_SR			BIT(5)
#define DDRC_CTRL_UNALIGN		BIT(4)
#define DDRC_CTRL_ALH			BIT(3)
#define DDRC_CTRL_RDC			BIT(2)
#define DDRC_CTRL_CKE			BIT(1)
#define DDRC_CTRL_RESET			BIT(0)

/* DDRC Load-Mode-Register */
#define DDRC_LMR_DDR_ADDR_BIT		16
#define DDRC_LMR_DDR_ADDR_MASK		(0x3fff << DDRC_LMR_DDR_ADDR_BIT)

#define DDRC_LMR_BA_BIT			8
#define DDRC_LMR_BA_MASK		(0x7 << DDRC_LMR_BA_BIT)
/* For DDR2 */
#define DDRC_LMR_BA_MRS			(0 << DDRC_LMR_BA_BIT)
#define DDRC_LMR_BA_EMRS1		(1 << DDRC_LMR_BA_BIT)
#define DDRC_LMR_BA_EMRS2		(2 << DDRC_LMR_BA_BIT)
#define DDRC_LMR_BA_EMRS3		(3 << DDRC_LMR_BA_BIT)
/* For mobile DDR */
#define DDRC_LMR_BA_M_MRS		(0 << DDRC_LMR_BA_BIT)
#define DDRC_LMR_BA_M_EMRS		(2 << DDRC_LMR_BA_BIT)
#define DDRC_LMR_BA_M_SR		(1 << DDRC_LMR_BA_BIT)
/* For Normal DDR1 */
#define DDRC_LMR_BA_N_MRS		(0 << DDRC_LMR_BA_BIT)
#define DDRC_LMR_BA_N_EMRS		(1 << DDRC_LMR_BA_BIT)

#define DDRC_LMR_CMD_BIT		4
#define DDRC_LMR_CMD_MASK		(0x3 << DDRC_LMR_CMD_BIT)
#define DDRC_LMR_CMD_PREC		(0 << DDRC_LMR_CMD_BIT)
#define DDRC_LMR_CMD_AUREF		(1 << DDRC_LMR_CMD_BIT)
#define DDRC_LMR_CMD_LMR		(2 << DDRC_LMR_CMD_BIT)

#define DDRC_LMR_START			BIT(0)

/* DDRC Timing Config Register 1 */
#define DDRC_TIMING1_TRTP_BIT		24
#define DDRC_TIMING1_TRTP_MASK		(0x3f << DDRC_TIMING1_TRTP_BIT)
#define DDRC_TIMING1_TWTR_BIT		16
#define DDRC_TIMING1_TWTR_MASK		(0x3f << DDRC_TIMING1_TWTR_BIT)
#define DDRC_TIMING1_TWTR_1		(0 << DDRC_TIMING1_TWTR_BIT)
#define DDRC_TIMING1_TWTR_2		(1 << DDRC_TIMING1_TWTR_BIT)
#define DDRC_TIMING1_TWTR_3		(2 << DDRC_TIMING1_TWTR_BIT)
#define DDRC_TIMING1_TWTR_4		(3 << DDRC_TIMING1_TWTR_BIT)
#define DDRC_TIMING1_TWR_BIT		8
#define DDRC_TIMING1_TWR_MASK		(0x3f << DDRC_TIMING1_TWR_BIT)
#define DDRC_TIMING1_TWR_1		(0 << DDRC_TIMING1_TWR_BIT)
#define DDRC_TIMING1_TWR_2		(1 << DDRC_TIMING1_TWR_BIT)
#define DDRC_TIMING1_TWR_3		(2 << DDRC_TIMING1_TWR_BIT)
#define DDRC_TIMING1_TWR_4		(3 << DDRC_TIMING1_TWR_BIT)
#define DDRC_TIMING1_TWR_5		(4 << DDRC_TIMING1_TWR_BIT)
#define DDRC_TIMING1_TWR_6		(5 << DDRC_TIMING1_TWR_BIT)
#define DDRC_TIMING1_TWL_BIT		0
#define DDRC_TIMING1_TWL_MASK		(0x3f << DDRC_TIMING1_TWL_BIT)

/* DDRC Timing Config Register 2 */
#define DDRC_TIMING2_TCCD_BIT		24
#define DDRC_TIMING2_TCCD_MASK		(0x3f << DDRC_TIMING2_TCCD_BIT)
#define DDRC_TIMING2_TRAS_BIT		16
#define DDRC_TIMING2_TRAS_MASK		(0x3f << DDRC_TIMING2_TRAS_BIT)
#define DDRC_TIMING2_TRCD_BIT		8
#define DDRC_TIMING2_TRCD_MASK		(0x3f << DDRC_TIMING2_TRCD_BIT)
#define DDRC_TIMING2_TRL_BIT		0
#define DDRC_TIMING2_TRL_MASK		(0x3f << DDRC_TIMING2_TRL_BIT)

/* DDRC Timing Config Register 3 */
#define DDRC_TIMING3_ONUM		27
#define DDRC_TIMING3_TCKSRE_BIT		24
#define DDRC_TIMING3_TCKSRE_MASK	(0x3f << DDRC_TIMING3_TCKSRE_BIT)
#define DDRC_TIMING3_TRP_BIT		16
#define DDRC_TIMING3_TRP_MASK		(0x3f << DDRC_TIMING3_TRP_BIT)
#define DDRC_TIMING3_TRRD_BIT		8
#define DDRC_TIMING3_TRRD_MASK		(0x3f << DDRC_TIMING3_TRRD_BIT)
#define DDRC_TIMING3_TRRD_DISABLE	(0 << DDRC_TIMING3_TRRD_BIT)
#define DDRC_TIMING3_TRRD_2		(1 << DDRC_TIMING3_TRRD_BIT)
#define DDRC_TIMING3_TRRD_3		(2 << DDRC_TIMING3_TRRD_BIT)
#define DDRC_TIMING3_TRRD_4		(3 << DDRC_TIMING3_TRRD_BIT)
#define DDRC_TIMING3_TRC_BIT		0
#define DDRC_TIMING3_TRC_MASK		(0x3f << DDRC_TIMING3_TRC_BIT)

/* DDRC Timing Config Register 4 */
#define DDRC_TIMING4_TRFC_BIT		24
#define DDRC_TIMING4_TRFC_MASK		(0x3f << DDRC_TIMING4_TRFC_BIT)
#define DDRC_TIMING4_TEXTRW_BIT		21
#define DDRC_TIMING4_TEXTRW_MASK	(0x7 << DDRC_TIMING4_TEXTRW_BIT)
#define DDRC_TIMING4_TRWCOV_BIT		19
#define DDRC_TIMING4_TRWCOV_MASK	(0x3 << DDRC_TIMING4_TRWCOV_BIT)
#define DDRC_TIMING4_TCKE_BIT		16
#define DDRC_TIMING4_TCKE_MASK		(0x7 << DDRC_TIMING4_TCKE_BIT)
#define DDRC_TIMING4_TMINSR_BIT		8
#define DDRC_TIMING4_TMINSR_MASK	(0xf << DDRC_TIMING4_TMINSR_BIT)
#define DDRC_TIMING4_TXP_BIT		4
#define DDRC_TIMING4_TXP_MASK		(0x7 << DDRC_TIMING4_TXP_BIT)
#define DDRC_TIMING4_TMRD_BIT		0
#define DDRC_TIMING4_TMRD_MASK		(0x3 << DDRC_TIMING4_TMRD_BIT)

/* DDRC Timing Config Register 5 */
#define DDRC_TIMING5_TCTLUPD_BIT	24
#define DDRC_TIMING4_TCTLUPD_MASK	(0x3f << DDRC_TIMING5_TCTLUDP_BIT)
#define DDRC_TIMING5_TRTW_BIT		16
#define DDRC_TIMING5_TRTW_MASK		(0x3f << DDRC_TIMING5_TRTW_BIT)
#define DDRC_TIMING5_TRDLAT_BIT		8
#define DDRC_TIMING5_TRDLAT_MASK	(0x3f << DDRC_TIMING5_TRDLAT_BIT)
#define DDRC_TIMING5_TWDLAT_BIT		0
#define DDRC_TIMING5_TWDLAT_MASK	(0x3f << DDRC_TIMING5_TWDLAT_BIT)

/* DDRC Timing Config Register 6 */
#define DDRC_TIMING6_TXSRD_BIT		24
#define DDRC_TIMING6_TXSRD_MASK		(0x3f << DDRC_TIMING6_TXSRD_BIT)
#define DDRC_TIMING6_TFAW_BIT		16
#define DDRC_TIMING6_TFAW_MASK		(0x3f << DDRC_TIMING6_TFAW_BIT)
#define DDRC_TIMING6_TCFGW_BIT		8
#define DDRC_TIMING6_TCFGW_MASK		(0x3f << DDRC_TIMING6_TCFGW_BIT)
#define DDRC_TIMING6_TCFGR_BIT		0
#define DDRC_TIMING6_TCFGR_MASK		(0x3f << DDRC_TIMING6_TCFGR_BIT)

/* DDRC  Auto-Refresh Counter */
#define DDRC_REFCNT_CON_BIT		16
#define DDRC_REFCNT_CON_MASK		(0xff << DDRC_REFCNT_CON_BIT)
#define DDRC_REFCNT_CNT_BIT		8
#define DDRC_REFCNT_CNT_MASK		(0xff << DDRC_REFCNT_CNT_BIT)
#define DDRC_REFCNT_CLKDIV_BIT		1
#define DDRC_REFCNT_CLKDIV_MASK		(0x7 << DDRC_REFCNT_CLKDIV_BIT)
#define DDRC_REFCNT_REF_EN		BIT(0)

/* DDRC DQS Delay Control Register */
#define DDRC_DQS_ERROR			BIT(29)
#define DDRC_DQS_READY			BIT(28)
#define DDRC_DQS_AUTO			BIT(23)
#define DDRC_DQS_DET			BIT(24)
#define DDRC_DQS_SRDET			BIT(25)
#define DDRC_DQS_CLKD_BIT		16
#define DDRC_DQS_CLKD_MASK		(0x3f << DDRC_DQS_CLKD_BIT)
#define DDRC_DQS_WDQS_BIT		8
#define DDRC_DQS_WDQS_MASK		(0x3f << DDRC_DQS_WDQS_BIT)
#define DDRC_DQS_RDQS_BIT		0
#define DDRC_DQS_RDQS_MASK		(0x3f << DDRC_DQS_RDQS_BIT)

/* DDRC DQS Delay Adjust Register */
#define DDRC_DQS_ADJWDQS_BIT		8
#define DDRC_DQS_ADJWDQS_MASK		(0x1f << DDRC_DQS_ADJWDQS_BIT)
#define DDRC_DQS_ADJRDQS_BIT		0
#define DDRC_DQS_ADJRDQS_MASK		(0x1f << DDRC_DQS_ADJRDQS_BIT)

/* DDRC Memory Map Config Register */
#define DDRC_MMAP_BASE_BIT		8
#define DDRC_MMAP_BASE_MASK		(0xff << DDRC_MMAP_BASE_BIT)
#define DDRC_MMAP_MASK_BIT		0
#define DDRC_MMAP_MASK_MASK		(0xff << DDRC_MMAP_MASK_BIT)

#define DDRC_MMAP0_BASE			(0x20 << DDRC_MMAP_BASE_BIT)
#define DDRC_MMAP1_BASE_64M		(0x24 << DDRC_MMAP_BASE_BIT)
#define DDRC_MMAP1_BASE_128M		(0x28 << DDRC_MMAP_BASE_BIT)
#define DDRC_MMAP1_BASE_256M		(0x30 << DDRC_MMAP_BASE_BIT)

#define DDRC_MMAP_MASK_64_64		(0xfc << DDRC_MMAP_MASK_BIT)
#define DDRC_MMAP_MASK_128_128		(0xf8 << DDRC_MMAP_MASK_BIT)
#define DDRC_MMAP_MASK_256_256		(0xf0 << DDRC_MMAP_MASK_BIT)

/* DDRP PHY Initialization Register */
#define DDRP_PIR_INIT			BIT(0)
#define DDRP_PIR_DLLSRST		BIT(1)
#define DDRP_PIR_DLLLOCK		BIT(2)
#define DDRP_PIR_ZCAL			BIT(3)
#define DDRP_PIR_ITMSRST		BIT(4)
#define DDRP_PIR_DRAMRST		BIT(5)
#define DDRP_PIR_DRAMINT		BIT(6)
#define DDRP_PIR_QSTRN			BIT(7)
#define DDRP_PIR_EYETRN			BIT(8)
#define DDRP_PIR_DLLBYP			BIT(17)
/* DDRP PHY General Configurate Register */
#define DDRP_PGCR_ITMDMD		BIT(0)
#define DDRP_PGCR_DQSCFG		BIT(1)
#define DDRP_PGCR_DFTCMP		BIT(2)
#define DDRP_PGCR_DFTLMT_BIT		3
#define DDRP_PGCR_DTOSEL_BIT		5
#define DDRP_PGCR_CKEN_BIT		9
#define DDRP_PGCR_CKDV_BIT		12
#define DDRP_PGCR_CKINV			BIT(14)
#define DDRP_PGCR_RANKEN_BIT		18
#define DDRP_PGCR_ZCKSEL_32		(2 << 22)
#define DDRP_PGCR_PDDISDX		BIT(24)
/* DDRP PHY General Status Register */
#define DDRP_PGSR_IDONE			BIT(0)
#define DDRP_PGSR_DLDONE		BIT(1)
#define DDRP_PGSR_ZCDONE		BIT(2)
#define DDRP_PGSR_DIDONE		BIT(3)
#define DDRP_PGSR_DTDONE		BIT(4)
#define DDRP_PGSR_DTERR			BIT(5)
#define DDRP_PGSR_DTIERR		BIT(6)
#define DDRP_PGSR_DFTEERR		BIT(7)
/* DDRP DRAM Configuration Register */
#define DDRP_DCR_TYPE_BIT		0
#define DDRP_DCR_TYPE_MASK		(0x7 << DDRP_DCR_TYPE_BIT)
#define DDRP_DCR_TYPE_MDDR		(0 << DDRP_DCR_TYPE_BIT)
#define DDRP_DCR_TYPE_DDR		(1 << DDRP_DCR_TYPE_BIT)
#define DDRP_DCR_TYPE_DDR2		(2 << DDRP_DCR_TYPE_BIT)
#define DDRP_DCR_TYPE_DDR3		(3 << DDRP_DCR_TYPE_BIT)
#define DDRP_DCR_TYPE_LPDDR2		(4 << DDRP_DCR_TYPE_BIT)
#define DDRP_DCR_DDR8BNK_BIT		3
#define DDRP_DCR_DDR8BNK_MASK		(1 << DDRP_DCR_DDR8BNK_BIT)
#define DDRP_DCR_DDR8BNK		(1 << DDRP_DCR_DDR8BNK_BIT)
#define DDRP_DCR_DDR8BNK_DIS		(0 << DDRP_DCR_DDR8BNK_BIT)

#define DRP_DTRP1_RTODT			BIT(11)

#define DDRP_DXGCR_DXEN			BIT(0)

#define DDRP_ZQXCR_ZDEN_BIT		28
#define DDRP_ZQXCR_ZDEN			(1 << DDRP_ZQXCR_ZDEN_BIT)
#define DDRP_ZQXCR_PULLUP_IMPE_BIT	5
#define DDRP_ZQXCR_PULLDOWN_IMPE_BIT	0

/* DDR3 Mode Register Set */
#define DDR3_MR0_BL_BIT			0
#define DDR3_MR0_BL_MASK		(3 << DDR3_MR0_BL_BIT)
#define DDR3_MR0_BL_8			(0 << DDR3_MR0_BL_BIT)
#define DDR3_MR0_BL_fly			(1 << DDR3_MR0_BL_BIT)
#define DDR3_MR0_BL_4			(2 << DDR3_MR0_BL_BIT)
#define DDR3_MR0_BT_BIT			3
#define DDR3_MR0_BT_MASK		(1 << DDR3_MR0_BT_BIT)
#define DDR3_MR0_BT_SEQ			(0 << DDR3_MR0_BT_BIT)
#define DDR3_MR0_BT_INTER		(1 << DDR3_MR0_BT_BIT)
#define DDR3_MR0_WR_BIT			9

#define DDR3_MR1_DLL_DISABLE		1
#define DDR3_MR1_DIC_6			(0 << 5 | 0 << 1)
#define DDR3_MR1_DIC_7			(0 << 5 | BIT(1))
#define DDR3_MR1_RTT_DIS		(0 << 9 | 0 << 6 | 0 << 2)
#define DDR3_MR1_RTT_4			(0 << 9 | 0 << 6 | BIT(2))
#define DDR3_MR1_RTT_2			(0 << 9 | BIT(6) | 0 << 2)
#define DDR3_MR1_RTT_6			(0 << 9 | BIT(6) | BIT(2))
#define DDR3_MR1_RTT_12			(BIT(9) | 0 << 6 | 0 << 2)
#define DDR3_MR1_RTT_8			(BIT(9) | 0 << 6 | BIT(2))

#define DDR3_MR2_CWL_BIT		3

/* Parameters common to all RAM devices used */

/* Chip Select */
/* CSEN : whether a ddr chip exists 0 - un-used, 1 - used */
#define DDR_CS0EN	1
/* CSEN : whether a ddr chip exists 0 - un-used, 1 - used */
#define DDR_CS1EN	0

/* ROW : 12 to 18 row address, 1G only 512MB */
#define DDR_ROW		15
/* COL :  8 to 14 column address */
#define DDR_COL		10
/* Banks each chip: 0-4bank, 1-8bank */
#define DDR_BANK8	1
/* 0 - 16-bit data width, 1 - 32-bit data width */
#define DDR_DW32	1

/* Refresh period: 64ms / 32768 = 1.95 us , 2 ^ 15 = 32768 */
#define DDR_tREFI	7800
/* Clock Divider */
#define DDR_CLK_DIV	1

/* DDR3 Burst length: 0 - 8 burst, 2 - 4 burst , 1 - 4 or 8 (on the fly) */
#define DDR_BL		8

/* CAS latency: 5 to 14, tCK */
#define DDR_CL		6
/* DDR3 only: CAS Write Latency, 5 to 8 */
#define DDR_tCWL	(DDR_CL - 1)

/* Structure representing per-RAM type configuration */

struct jz4780_ddr_config {
	u32	timing[6];	/* Timing1..6 register value */

	/* DDR PHY control */
	u16	mr0;	/* Mode Register 0 */
	u16	mr1;	/* Mode Register 1 */

	u32	ptr0;	/* PHY Timing Register 0 */
	u32	ptr1;	/* PHY Timing Register 1 */
	u32	ptr2;	/* PHY Timing Register 1 */

	u32	dtpr0;	/* DRAM Timing Parameters Register 0 */
	u32	dtpr1;	/* DRAM Timing Parameters Register 1 */
	u32	dtpr2;	/* DRAM Timing Parameters Register 2 */

	u8	pullup;	/* PHY pullup impedance */
	u8	pulldn;	/* PHY pulldown impedance */
};

void pll_init(void);
void sdram_init(void);

#endif	/* __JZ4780_DRAM_H__ */