xref: /OK3568_Linux_fs/u-boot/arch/arm/include/asm/arch-rockchip/sdram_rk322x.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * SPDX-License-Identifier:     GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun #ifndef _ASM_ARCH_SDRAM_RK322X_H
7*4882a593Smuzhiyun #define _ASM_ARCH_SDRAM_RK322X_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <common.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun struct rk322x_sdram_channel {
12*4882a593Smuzhiyun 	/*
13*4882a593Smuzhiyun 	 * bit width in address, eg:
14*4882a593Smuzhiyun 	 * 8 banks using 3 bit to address,
15*4882a593Smuzhiyun 	 * 2 cs using 1 bit to address.
16*4882a593Smuzhiyun 	 */
17*4882a593Smuzhiyun 	u8 rank;
18*4882a593Smuzhiyun 	u8 col;
19*4882a593Smuzhiyun 	u8 bk;
20*4882a593Smuzhiyun 	u8 bw;
21*4882a593Smuzhiyun 	u8 dbw;
22*4882a593Smuzhiyun 	u8 row_3_4;
23*4882a593Smuzhiyun 	u8 cs0_row;
24*4882a593Smuzhiyun 	u8 cs1_row;
25*4882a593Smuzhiyun #if CONFIG_IS_ENABLED(OF_PLATDATA)
26*4882a593Smuzhiyun 	/*
27*4882a593Smuzhiyun 	 * For of-platdata, which would otherwise convert this into two
28*4882a593Smuzhiyun 	 * byte-swapped integers. With a size of 9 bytes, this struct will
29*4882a593Smuzhiyun 	 * appear in of-platdata as a byte array.
30*4882a593Smuzhiyun 	 *
31*4882a593Smuzhiyun 	 * If OF_PLATDATA enabled, need to add a dummy byte in dts.(i.e 0xff)
32*4882a593Smuzhiyun 	 */
33*4882a593Smuzhiyun 	u8 dummy;
34*4882a593Smuzhiyun #endif
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun struct rk322x_ddr_pctl {
38*4882a593Smuzhiyun 	u32 scfg;
39*4882a593Smuzhiyun 	u32 sctl;
40*4882a593Smuzhiyun 	u32 stat;
41*4882a593Smuzhiyun 	u32 intrstat;
42*4882a593Smuzhiyun 	u32 reserved0[(0x40 - 0x10) / 4];
43*4882a593Smuzhiyun 	u32 mcmd;
44*4882a593Smuzhiyun 	u32 powctl;
45*4882a593Smuzhiyun 	u32 powstat;
46*4882a593Smuzhiyun 	u32 cmdtstat;
47*4882a593Smuzhiyun 	u32 cmdtstaten;
48*4882a593Smuzhiyun 	u32 reserved1[(0x60 - 0x54) / 4];
49*4882a593Smuzhiyun 	u32 mrrcfg0;
50*4882a593Smuzhiyun 	u32 mrrstat0;
51*4882a593Smuzhiyun 	u32 mrrstat1;
52*4882a593Smuzhiyun 	u32 reserved2[(0x7c - 0x6c) / 4];
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun 	u32 mcfg1;
55*4882a593Smuzhiyun 	u32 mcfg;
56*4882a593Smuzhiyun 	u32 ppcfg;
57*4882a593Smuzhiyun 	u32 mstat;
58*4882a593Smuzhiyun 	u32 lpddr2zqcfg;
59*4882a593Smuzhiyun 	u32 reserved3;
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun 	u32 dtupdes;
62*4882a593Smuzhiyun 	u32 dtuna;
63*4882a593Smuzhiyun 	u32 dtune;
64*4882a593Smuzhiyun 	u32 dtuprd0;
65*4882a593Smuzhiyun 	u32 dtuprd1;
66*4882a593Smuzhiyun 	u32 dtuprd2;
67*4882a593Smuzhiyun 	u32 dtuprd3;
68*4882a593Smuzhiyun 	u32 dtuawdt;
69*4882a593Smuzhiyun 	u32 reserved4[(0xc0 - 0xb4) / 4];
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	u32 togcnt1u;
72*4882a593Smuzhiyun 	u32 tinit;
73*4882a593Smuzhiyun 	u32 trsth;
74*4882a593Smuzhiyun 	u32 togcnt100n;
75*4882a593Smuzhiyun 	u32 trefi;
76*4882a593Smuzhiyun 	u32 tmrd;
77*4882a593Smuzhiyun 	u32 trfc;
78*4882a593Smuzhiyun 	u32 trp;
79*4882a593Smuzhiyun 	u32 trtw;
80*4882a593Smuzhiyun 	u32 tal;
81*4882a593Smuzhiyun 	u32 tcl;
82*4882a593Smuzhiyun 	u32 tcwl;
83*4882a593Smuzhiyun 	u32 tras;
84*4882a593Smuzhiyun 	u32 trc;
85*4882a593Smuzhiyun 	u32 trcd;
86*4882a593Smuzhiyun 	u32 trrd;
87*4882a593Smuzhiyun 	u32 trtp;
88*4882a593Smuzhiyun 	u32 twr;
89*4882a593Smuzhiyun 	u32 twtr;
90*4882a593Smuzhiyun 	u32 texsr;
91*4882a593Smuzhiyun 	u32 txp;
92*4882a593Smuzhiyun 	u32 txpdll;
93*4882a593Smuzhiyun 	u32 tzqcs;
94*4882a593Smuzhiyun 	u32 tzqcsi;
95*4882a593Smuzhiyun 	u32 tdqs;
96*4882a593Smuzhiyun 	u32 tcksre;
97*4882a593Smuzhiyun 	u32 tcksrx;
98*4882a593Smuzhiyun 	u32 tcke;
99*4882a593Smuzhiyun 	u32 tmod;
100*4882a593Smuzhiyun 	u32 trstl;
101*4882a593Smuzhiyun 	u32 tzqcl;
102*4882a593Smuzhiyun 	u32 tmrr;
103*4882a593Smuzhiyun 	u32 tckesr;
104*4882a593Smuzhiyun 	u32 tdpd;
105*4882a593Smuzhiyun 	u32 tref_mem_ddr3;
106*4882a593Smuzhiyun 	u32 reserved5[(0x180 - 0x14c) / 4];
107*4882a593Smuzhiyun 	u32 ecccfg;
108*4882a593Smuzhiyun 	u32 ecctst;
109*4882a593Smuzhiyun 	u32 eccclr;
110*4882a593Smuzhiyun 	u32 ecclog;
111*4882a593Smuzhiyun 	u32 reserved6[(0x200 - 0x190) / 4];
112*4882a593Smuzhiyun 	u32 dtuwactl;
113*4882a593Smuzhiyun 	u32 dturactl;
114*4882a593Smuzhiyun 	u32 dtucfg;
115*4882a593Smuzhiyun 	u32 dtuectl;
116*4882a593Smuzhiyun 	u32 dtuwd0;
117*4882a593Smuzhiyun 	u32 dtuwd1;
118*4882a593Smuzhiyun 	u32 dtuwd2;
119*4882a593Smuzhiyun 	u32 dtuwd3;
120*4882a593Smuzhiyun 	u32 dtuwdm;
121*4882a593Smuzhiyun 	u32 dturd0;
122*4882a593Smuzhiyun 	u32 dturd1;
123*4882a593Smuzhiyun 	u32 dturd2;
124*4882a593Smuzhiyun 	u32 dturd3;
125*4882a593Smuzhiyun 	u32 dtulfsrwd;
126*4882a593Smuzhiyun 	u32 dtulfsrrd;
127*4882a593Smuzhiyun 	u32 dtueaf;
128*4882a593Smuzhiyun 	/* dfi control registers */
129*4882a593Smuzhiyun 	u32 dfitctrldelay;
130*4882a593Smuzhiyun 	u32 dfiodtcfg;
131*4882a593Smuzhiyun 	u32 dfiodtcfg1;
132*4882a593Smuzhiyun 	u32 dfiodtrankmap;
133*4882a593Smuzhiyun 	/* dfi write data registers */
134*4882a593Smuzhiyun 	u32 dfitphywrdata;
135*4882a593Smuzhiyun 	u32 dfitphywrlat;
136*4882a593Smuzhiyun 	u32 reserved7[(0x260 - 0x258) / 4];
137*4882a593Smuzhiyun 	u32 dfitrddataen;
138*4882a593Smuzhiyun 	u32 dfitphyrdlat;
139*4882a593Smuzhiyun 	u32 reserved8[(0x270 - 0x268) / 4];
140*4882a593Smuzhiyun 	u32 dfitphyupdtype0;
141*4882a593Smuzhiyun 	u32 dfitphyupdtype1;
142*4882a593Smuzhiyun 	u32 dfitphyupdtype2;
143*4882a593Smuzhiyun 	u32 dfitphyupdtype3;
144*4882a593Smuzhiyun 	u32 dfitctrlupdmin;
145*4882a593Smuzhiyun 	u32 dfitctrlupdmax;
146*4882a593Smuzhiyun 	u32 dfitctrlupddly;
147*4882a593Smuzhiyun 	u32 reserved9;
148*4882a593Smuzhiyun 	u32 dfiupdcfg;
149*4882a593Smuzhiyun 	u32 dfitrefmski;
150*4882a593Smuzhiyun 	u32 dfitctrlupdi;
151*4882a593Smuzhiyun 	u32 reserved10[(0x2ac - 0x29c) / 4];
152*4882a593Smuzhiyun 	u32 dfitrcfg0;
153*4882a593Smuzhiyun 	u32 dfitrstat0;
154*4882a593Smuzhiyun 	u32 dfitrwrlvlen;
155*4882a593Smuzhiyun 	u32 dfitrrdlvlen;
156*4882a593Smuzhiyun 	u32 dfitrrdlvlgateen;
157*4882a593Smuzhiyun 	u32 dfiststat0;
158*4882a593Smuzhiyun 	u32 dfistcfg0;
159*4882a593Smuzhiyun 	u32 dfistcfg1;
160*4882a593Smuzhiyun 	u32 reserved11;
161*4882a593Smuzhiyun 	u32 dfitdramclken;
162*4882a593Smuzhiyun 	u32 dfitdramclkdis;
163*4882a593Smuzhiyun 	u32 dfistcfg2;
164*4882a593Smuzhiyun 	u32 dfistparclr;
165*4882a593Smuzhiyun 	u32 dfistparlog;
166*4882a593Smuzhiyun 	u32 reserved12[(0x2f0 - 0x2e4) / 4];
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun 	u32 dfilpcfg0;
169*4882a593Smuzhiyun 	u32 reserved13[(0x300 - 0x2f4) / 4];
170*4882a593Smuzhiyun 	u32 dfitrwrlvlresp0;
171*4882a593Smuzhiyun 	u32 dfitrwrlvlresp1;
172*4882a593Smuzhiyun 	u32 dfitrwrlvlresp2;
173*4882a593Smuzhiyun 	u32 dfitrrdlvlresp0;
174*4882a593Smuzhiyun 	u32 dfitrrdlvlresp1;
175*4882a593Smuzhiyun 	u32 dfitrrdlvlresp2;
176*4882a593Smuzhiyun 	u32 dfitrwrlvldelay0;
177*4882a593Smuzhiyun 	u32 dfitrwrlvldelay1;
178*4882a593Smuzhiyun 	u32 dfitrwrlvldelay2;
179*4882a593Smuzhiyun 	u32 dfitrrdlvldelay0;
180*4882a593Smuzhiyun 	u32 dfitrrdlvldelay1;
181*4882a593Smuzhiyun 	u32 dfitrrdlvldelay2;
182*4882a593Smuzhiyun 	u32 dfitrrdlvlgatedelay0;
183*4882a593Smuzhiyun 	u32 dfitrrdlvlgatedelay1;
184*4882a593Smuzhiyun 	u32 dfitrrdlvlgatedelay2;
185*4882a593Smuzhiyun 	u32 dfitrcmd;
186*4882a593Smuzhiyun 	u32 reserved14[(0x3f8 - 0x340) / 4];
187*4882a593Smuzhiyun 	u32 ipvr;
188*4882a593Smuzhiyun 	u32 iptr;
189*4882a593Smuzhiyun };
190*4882a593Smuzhiyun check_member(rk322x_ddr_pctl, iptr, 0x03fc);
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun struct rk322x_ddr_phy {
193*4882a593Smuzhiyun 	u32 ddrphy_reg[0x100];
194*4882a593Smuzhiyun };
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun struct rk322x_pctl_timing {
197*4882a593Smuzhiyun 	u32 togcnt1u;
198*4882a593Smuzhiyun 	u32 tinit;
199*4882a593Smuzhiyun 	u32 trsth;
200*4882a593Smuzhiyun 	u32 togcnt100n;
201*4882a593Smuzhiyun 	u32 trefi;
202*4882a593Smuzhiyun 	u32 tmrd;
203*4882a593Smuzhiyun 	u32 trfc;
204*4882a593Smuzhiyun 	u32 trp;
205*4882a593Smuzhiyun 	u32 trtw;
206*4882a593Smuzhiyun 	u32 tal;
207*4882a593Smuzhiyun 	u32 tcl;
208*4882a593Smuzhiyun 	u32 tcwl;
209*4882a593Smuzhiyun 	u32 tras;
210*4882a593Smuzhiyun 	u32 trc;
211*4882a593Smuzhiyun 	u32 trcd;
212*4882a593Smuzhiyun 	u32 trrd;
213*4882a593Smuzhiyun 	u32 trtp;
214*4882a593Smuzhiyun 	u32 twr;
215*4882a593Smuzhiyun 	u32 twtr;
216*4882a593Smuzhiyun 	u32 texsr;
217*4882a593Smuzhiyun 	u32 txp;
218*4882a593Smuzhiyun 	u32 txpdll;
219*4882a593Smuzhiyun 	u32 tzqcs;
220*4882a593Smuzhiyun 	u32 tzqcsi;
221*4882a593Smuzhiyun 	u32 tdqs;
222*4882a593Smuzhiyun 	u32 tcksre;
223*4882a593Smuzhiyun 	u32 tcksrx;
224*4882a593Smuzhiyun 	u32 tcke;
225*4882a593Smuzhiyun 	u32 tmod;
226*4882a593Smuzhiyun 	u32 trstl;
227*4882a593Smuzhiyun 	u32 tzqcl;
228*4882a593Smuzhiyun 	u32 tmrr;
229*4882a593Smuzhiyun 	u32 tckesr;
230*4882a593Smuzhiyun 	u32 tdpd;
231*4882a593Smuzhiyun 	u32 trefi_mem_ddr3;
232*4882a593Smuzhiyun };
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun struct rk322x_phy_timing {
235*4882a593Smuzhiyun 	u32 mr[4];
236*4882a593Smuzhiyun 	u32 mr11;
237*4882a593Smuzhiyun 	u32 bl;
238*4882a593Smuzhiyun 	u32 cl_al;
239*4882a593Smuzhiyun };
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun struct rk322x_msch_timings {
242*4882a593Smuzhiyun 	u32 ddrtiming;
243*4882a593Smuzhiyun 	u32 ddrmode;
244*4882a593Smuzhiyun 	u32 readlatency;
245*4882a593Smuzhiyun 	u32 activate;
246*4882a593Smuzhiyun 	u32 devtodev;
247*4882a593Smuzhiyun };
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun struct rk322x_service_sys {
250*4882a593Smuzhiyun 	u32 id_coreid;
251*4882a593Smuzhiyun 	u32 id_revisionid;
252*4882a593Smuzhiyun 	u32 ddrconf;
253*4882a593Smuzhiyun 	u32 ddrtiming;
254*4882a593Smuzhiyun 	u32 ddrmode;
255*4882a593Smuzhiyun 	u32 readlatency;
256*4882a593Smuzhiyun 	u32 activate;
257*4882a593Smuzhiyun 	u32 devtodev;
258*4882a593Smuzhiyun };
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun struct rk322x_base_params {
261*4882a593Smuzhiyun 	struct rk322x_msch_timings noc_timing;
262*4882a593Smuzhiyun 	u32 ddrconfig;
263*4882a593Smuzhiyun 	u32 ddr_freq;
264*4882a593Smuzhiyun 	u32 dramtype;
265*4882a593Smuzhiyun 	/*
266*4882a593Smuzhiyun 	 * unused for rk322x
267*4882a593Smuzhiyun 	 */
268*4882a593Smuzhiyun 	u32 stride;
269*4882a593Smuzhiyun 	u32 odt;
270*4882a593Smuzhiyun };
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun /* PCT_DFISTCFG0 */
273*4882a593Smuzhiyun #define DFI_INIT_START			(1 << 0)
274*4882a593Smuzhiyun #define DFI_DATA_BYTE_DISABLE_EN	(1 << 2)
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun /* PCT_DFISTCFG1 */
277*4882a593Smuzhiyun #define DFI_DRAM_CLK_SR_EN		(1 << 0)
278*4882a593Smuzhiyun #define DFI_DRAM_CLK_DPD_EN		(1 << 1)
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun /* PCT_DFISTCFG2 */
281*4882a593Smuzhiyun #define DFI_PARITY_INTR_EN		(1 << 0)
282*4882a593Smuzhiyun #define DFI_PARITY_EN			(1 << 1)
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun /* PCT_DFILPCFG0 */
285*4882a593Smuzhiyun #define TLP_RESP_TIME_SHIFT		16
286*4882a593Smuzhiyun #define LP_SR_EN			(1 << 8)
287*4882a593Smuzhiyun #define LP_PD_EN			(1 << 0)
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun /* PCT_DFITCTRLDELAY */
290*4882a593Smuzhiyun #define TCTRL_DELAY_TIME_SHIFT		0
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun /* PCT_DFITPHYWRDATA */
293*4882a593Smuzhiyun #define TPHY_WRDATA_TIME_SHIFT		0
294*4882a593Smuzhiyun 
295*4882a593Smuzhiyun /* PCT_DFITPHYRDLAT */
296*4882a593Smuzhiyun #define TPHY_RDLAT_TIME_SHIFT		0
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun /* PCT_DFITDRAMCLKDIS */
299*4882a593Smuzhiyun #define TDRAM_CLK_DIS_TIME_SHIFT	0
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun /* PCT_DFITDRAMCLKEN */
302*4882a593Smuzhiyun #define TDRAM_CLK_EN_TIME_SHIFT		0
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun /* PCTL_DFIODTCFG */
305*4882a593Smuzhiyun #define RANK0_ODT_WRITE_SEL		(1 << 3)
306*4882a593Smuzhiyun #define RANK1_ODT_WRITE_SEL		(1 << 11)
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun /* PCTL_DFIODTCFG1 */
309*4882a593Smuzhiyun #define ODT_LEN_BL8_W_SHIFT		16
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun /* PUBL_ACDLLCR */
312*4882a593Smuzhiyun #define ACDLLCR_DLLDIS			(1 << 31)
313*4882a593Smuzhiyun #define ACDLLCR_DLLSRST			(1 << 30)
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun /* PUBL_DXDLLCR */
316*4882a593Smuzhiyun #define DXDLLCR_DLLDIS			(1 << 31)
317*4882a593Smuzhiyun #define DXDLLCR_DLLSRST			(1 << 30)
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun /* PUBL_DLLGCR */
320*4882a593Smuzhiyun #define DLLGCR_SBIAS			(1 << 30)
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun /* PUBL_DXGCR */
323*4882a593Smuzhiyun #define DQSRTT				(1 << 9)
324*4882a593Smuzhiyun #define DQRTT				(1 << 10)
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun /* PIR */
327*4882a593Smuzhiyun #define PIR_INIT			(1 << 0)
328*4882a593Smuzhiyun #define PIR_DLLSRST			(1 << 1)
329*4882a593Smuzhiyun #define PIR_DLLLOCK			(1 << 2)
330*4882a593Smuzhiyun #define PIR_ZCAL			(1 << 3)
331*4882a593Smuzhiyun #define PIR_ITMSRST			(1 << 4)
332*4882a593Smuzhiyun #define PIR_DRAMRST			(1 << 5)
333*4882a593Smuzhiyun #define PIR_DRAMINIT			(1 << 6)
334*4882a593Smuzhiyun #define PIR_QSTRN			(1 << 7)
335*4882a593Smuzhiyun #define PIR_RVTRN			(1 << 8)
336*4882a593Smuzhiyun #define PIR_ICPC			(1 << 16)
337*4882a593Smuzhiyun #define PIR_DLLBYP			(1 << 17)
338*4882a593Smuzhiyun #define PIR_CTLDINIT			(1 << 18)
339*4882a593Smuzhiyun #define PIR_CLRSR			(1 << 28)
340*4882a593Smuzhiyun #define PIR_LOCKBYP			(1 << 29)
341*4882a593Smuzhiyun #define PIR_ZCALBYP			(1 << 30)
342*4882a593Smuzhiyun #define PIR_INITBYP			(1u << 31)
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun /* PGCR */
345*4882a593Smuzhiyun #define PGCR_DFTLMT_SHIFT		3
346*4882a593Smuzhiyun #define PGCR_DFTCMP_SHIFT		2
347*4882a593Smuzhiyun #define PGCR_DQSCFG_SHIFT		1
348*4882a593Smuzhiyun #define PGCR_ITMDMD_SHIFT		0
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun /* PGSR */
351*4882a593Smuzhiyun #define PGSR_IDONE			(1 << 0)
352*4882a593Smuzhiyun #define PGSR_DLDONE			(1 << 1)
353*4882a593Smuzhiyun #define PGSR_ZCDONE			(1 << 2)
354*4882a593Smuzhiyun #define PGSR_DIDONE			(1 << 3)
355*4882a593Smuzhiyun #define PGSR_DTDONE			(1 << 4)
356*4882a593Smuzhiyun #define PGSR_DTERR			(1 << 5)
357*4882a593Smuzhiyun #define PGSR_DTIERR			(1 << 6)
358*4882a593Smuzhiyun #define PGSR_DFTERR			(1 << 7)
359*4882a593Smuzhiyun #define PGSR_RVERR			(1 << 8)
360*4882a593Smuzhiyun #define PGSR_RVEIRR			(1 << 9)
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun /* PTR0 */
363*4882a593Smuzhiyun #define PRT_ITMSRST_SHIFT		18
364*4882a593Smuzhiyun #define PRT_DLLLOCK_SHIFT		6
365*4882a593Smuzhiyun #define PRT_DLLSRST_SHIFT		0
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun /* PTR1 */
368*4882a593Smuzhiyun #define PRT_DINIT0_SHIFT		0
369*4882a593Smuzhiyun #define PRT_DINIT1_SHIFT		19
370*4882a593Smuzhiyun 
371*4882a593Smuzhiyun /* PTR2 */
372*4882a593Smuzhiyun #define PRT_DINIT2_SHIFT		0
373*4882a593Smuzhiyun #define PRT_DINIT3_SHIFT		17
374*4882a593Smuzhiyun 
375*4882a593Smuzhiyun /* DCR */
376*4882a593Smuzhiyun #define DDRMD_LPDDR			0
377*4882a593Smuzhiyun #define DDRMD_DDR			1
378*4882a593Smuzhiyun #define DDRMD_DDR2			2
379*4882a593Smuzhiyun #define DDRMD_DDR3			3
380*4882a593Smuzhiyun #define DDRMD_LPDDR2_LPDDR3		4
381*4882a593Smuzhiyun #define DDRMD_MASK			7
382*4882a593Smuzhiyun #define DDRMD_SHIFT			0
383*4882a593Smuzhiyun #define PDQ_MASK			7
384*4882a593Smuzhiyun #define PDQ_SHIFT			4
385*4882a593Smuzhiyun 
386*4882a593Smuzhiyun /* DXCCR */
387*4882a593Smuzhiyun #define DQSNRES_MASK			0xf
388*4882a593Smuzhiyun #define DQSNRES_SHIFT			8
389*4882a593Smuzhiyun #define DQSRES_MASK			0xf
390*4882a593Smuzhiyun #define DQSRES_SHIFT			4
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun /* DTPR */
393*4882a593Smuzhiyun #define TDQSCKMAX_SHIFT			27
394*4882a593Smuzhiyun #define TDQSCKMAX_MASK			7
395*4882a593Smuzhiyun #define TDQSCK_SHIFT			24
396*4882a593Smuzhiyun #define TDQSCK_MASK			7
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun /* DSGCR */
399*4882a593Smuzhiyun #define DQSGX_SHIFT			5
400*4882a593Smuzhiyun #define DQSGX_MASK			7
401*4882a593Smuzhiyun #define DQSGE_SHIFT			8
402*4882a593Smuzhiyun #define DQSGE_MASK			7
403*4882a593Smuzhiyun 
404*4882a593Smuzhiyun /* SCTL */
405*4882a593Smuzhiyun #define INIT_STATE			0
406*4882a593Smuzhiyun #define CFG_STATE			1
407*4882a593Smuzhiyun #define GO_STATE			2
408*4882a593Smuzhiyun #define SLEEP_STATE			3
409*4882a593Smuzhiyun #define WAKEUP_STATE			4
410*4882a593Smuzhiyun 
411*4882a593Smuzhiyun /* STAT */
412*4882a593Smuzhiyun #define LP_TRIG_SHIFT			4
413*4882a593Smuzhiyun #define LP_TRIG_MASK			7
414*4882a593Smuzhiyun #define PCTL_STAT_MASK			7
415*4882a593Smuzhiyun #define INIT_MEM			0
416*4882a593Smuzhiyun #define CONFIG				1
417*4882a593Smuzhiyun #define CONFIG_REQ			2
418*4882a593Smuzhiyun #define ACCESS				3
419*4882a593Smuzhiyun #define ACCESS_REQ			4
420*4882a593Smuzhiyun #define LOW_POWER			5
421*4882a593Smuzhiyun #define LOW_POWER_ENTRY_REQ		6
422*4882a593Smuzhiyun #define LOW_POWER_EXIT_REQ		7
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun /* ZQCR*/
425*4882a593Smuzhiyun #define PD_OUTPUT_SHIFT			0
426*4882a593Smuzhiyun #define PU_OUTPUT_SHIFT			5
427*4882a593Smuzhiyun #define PD_ONDIE_SHIFT			10
428*4882a593Smuzhiyun #define PU_ONDIE_SHIFT			15
429*4882a593Smuzhiyun #define ZDEN_SHIFT			28
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun /* DDLGCR */
432*4882a593Smuzhiyun #define SBIAS_BYPASS			(1 << 23)
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun /* MCFG */
435*4882a593Smuzhiyun #define MDDR_LPDDR2_CLK_STOP_IDLE_SHIFT	24
436*4882a593Smuzhiyun #define PD_IDLE_SHIFT			8
437*4882a593Smuzhiyun #define MDDR_EN				(2 << 22)
438*4882a593Smuzhiyun #define LPDDR2_EN			(3 << 22)
439*4882a593Smuzhiyun #define LPDDR3_EN			(1 << 22)
440*4882a593Smuzhiyun #define DDR2_EN				(0 << 5)
441*4882a593Smuzhiyun #define DDR3_EN				(1 << 5)
442*4882a593Smuzhiyun #define LPDDR2_S2			(0 << 6)
443*4882a593Smuzhiyun #define LPDDR2_S4			(1 << 6)
444*4882a593Smuzhiyun #define MDDR_LPDDR2_BL_2		(0 << 20)
445*4882a593Smuzhiyun #define MDDR_LPDDR2_BL_4		(1 << 20)
446*4882a593Smuzhiyun #define MDDR_LPDDR2_BL_8		(2 << 20)
447*4882a593Smuzhiyun #define MDDR_LPDDR2_BL_16		(3 << 20)
448*4882a593Smuzhiyun #define DDR2_DDR3_BL_4			0
449*4882a593Smuzhiyun #define DDR2_DDR3_BL_8			1
450*4882a593Smuzhiyun #define TFAW_SHIFT			18
451*4882a593Smuzhiyun #define PD_EXIT_SLOW			(0 << 17)
452*4882a593Smuzhiyun #define PD_EXIT_FAST			(1 << 17)
453*4882a593Smuzhiyun #define PD_TYPE_SHIFT			16
454*4882a593Smuzhiyun #define BURSTLENGTH_SHIFT		20
455*4882a593Smuzhiyun 
456*4882a593Smuzhiyun /* POWCTL */
457*4882a593Smuzhiyun #define POWER_UP_START			(1 << 0)
458*4882a593Smuzhiyun 
459*4882a593Smuzhiyun /* POWSTAT */
460*4882a593Smuzhiyun #define POWER_UP_DONE			(1 << 0)
461*4882a593Smuzhiyun 
462*4882a593Smuzhiyun /* MCMD */
463*4882a593Smuzhiyun enum {
464*4882a593Smuzhiyun 	DESELECT_CMD			= 0,
465*4882a593Smuzhiyun 	PREA_CMD,
466*4882a593Smuzhiyun 	REF_CMD,
467*4882a593Smuzhiyun 	MRS_CMD,
468*4882a593Smuzhiyun 	ZQCS_CMD,
469*4882a593Smuzhiyun 	ZQCL_CMD,
470*4882a593Smuzhiyun 	RSTL_CMD,
471*4882a593Smuzhiyun 	MRR_CMD				= 8,
472*4882a593Smuzhiyun 	DPDE_CMD,
473*4882a593Smuzhiyun };
474*4882a593Smuzhiyun 
475*4882a593Smuzhiyun #define BANK_ADDR_MASK			7
476*4882a593Smuzhiyun #define BANK_ADDR_SHIFT			17
477*4882a593Smuzhiyun #define CMD_ADDR_MASK			0x1fff
478*4882a593Smuzhiyun #define CMD_ADDR_SHIFT			4
479*4882a593Smuzhiyun 
480*4882a593Smuzhiyun #define LPDDR23_MA_SHIFT		4
481*4882a593Smuzhiyun #define LPDDR23_MA_MASK			0xff
482*4882a593Smuzhiyun #define LPDDR23_OP_SHIFT		12
483*4882a593Smuzhiyun #define LPDDR23_OP_MASK			0xff
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun #define START_CMD			(1u << 31)
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun /* DDRPHY REG */
488*4882a593Smuzhiyun enum {
489*4882a593Smuzhiyun 	/* DDRPHY_REG0 */
490*4882a593Smuzhiyun 	SOFT_RESET_MASK				= 3,
491*4882a593Smuzhiyun 	SOFT_DERESET_ANALOG			= 1 << 2,
492*4882a593Smuzhiyun 	SOFT_DERESET_DIGITAL			= 1 << 3,
493*4882a593Smuzhiyun 	SOFT_RESET_SHIFT			= 2,
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun 	/* DDRPHY REG1 */
496*4882a593Smuzhiyun 	PHY_DDR3				= 0,
497*4882a593Smuzhiyun 	PHY_DDR2				= 1,
498*4882a593Smuzhiyun 	PHY_LPDDR3				= 2,
499*4882a593Smuzhiyun 	PHY_LPDDR2				= 3,
500*4882a593Smuzhiyun 
501*4882a593Smuzhiyun 	PHT_BL_8				= 1 << 2,
502*4882a593Smuzhiyun 	PHY_BL_4				= 0 << 2,
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun 	/* DDRPHY_REG2 */
505*4882a593Smuzhiyun 	MEMORY_SELECT_DDR3			= 0 << 0,
506*4882a593Smuzhiyun 	MEMORY_SELECT_LPDDR3			= 2 << 0,
507*4882a593Smuzhiyun 	MEMORY_SELECT_LPDDR2			= 3 << 0,
508*4882a593Smuzhiyun 	DQS_SQU_CAL_SEL_CS0_CS1			= 0 << 4,
509*4882a593Smuzhiyun 	DQS_SQU_CAL_SEL_CS1			= 1 << 4,
510*4882a593Smuzhiyun 	DQS_SQU_CAL_SEL_CS0			= 2 << 4,
511*4882a593Smuzhiyun 	DQS_SQU_CAL_NORMAL_MODE			= 0 << 1,
512*4882a593Smuzhiyun 	DQS_SQU_CAL_BYPASS_MODE			= 1 << 1,
513*4882a593Smuzhiyun 	DQS_SQU_CAL_START			= 1 << 0,
514*4882a593Smuzhiyun 	DQS_SQU_NO_CAL				= 0 << 0,
515*4882a593Smuzhiyun };
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun /* CK pull up/down driver strength control */
518*4882a593Smuzhiyun enum {
519*4882a593Smuzhiyun 	PHY_RON_RTT_DISABLE = 0,
520*4882a593Smuzhiyun 	PHY_RON_RTT_451OHM = 1,
521*4882a593Smuzhiyun 	PHY_RON_RTT_225OHM,
522*4882a593Smuzhiyun 	PHY_RON_RTT_150OHM,
523*4882a593Smuzhiyun 	PHY_RON_RTT_112OHM,
524*4882a593Smuzhiyun 	PHY_RON_RTT_90OHM,
525*4882a593Smuzhiyun 	PHY_RON_RTT_75OHM,
526*4882a593Smuzhiyun 	PHY_RON_RTT_64OHM = 7,
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun 	PHY_RON_RTT_56OHM = 16,
529*4882a593Smuzhiyun 	PHY_RON_RTT_50OHM,
530*4882a593Smuzhiyun 	PHY_RON_RTT_45OHM,
531*4882a593Smuzhiyun 	PHY_RON_RTT_41OHM,
532*4882a593Smuzhiyun 	PHY_RON_RTT_37OHM,
533*4882a593Smuzhiyun 	PHY_RON_RTT_34OHM,
534*4882a593Smuzhiyun 	PHY_RON_RTT_33OHM,
535*4882a593Smuzhiyun 	PHY_RON_RTT_30OHM = 23,
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun 	PHY_RON_RTT_28OHM = 24,
538*4882a593Smuzhiyun 	PHY_RON_RTT_26OHM,
539*4882a593Smuzhiyun 	PHY_RON_RTT_25OHM,
540*4882a593Smuzhiyun 	PHY_RON_RTT_23OHM,
541*4882a593Smuzhiyun 	PHY_RON_RTT_22OHM,
542*4882a593Smuzhiyun 	PHY_RON_RTT_21OHM,
543*4882a593Smuzhiyun 	PHY_RON_RTT_20OHM,
544*4882a593Smuzhiyun 	PHY_RON_RTT_19OHM = 31,
545*4882a593Smuzhiyun };
546*4882a593Smuzhiyun 
547*4882a593Smuzhiyun /* DQS squelch DLL delay */
548*4882a593Smuzhiyun enum {
549*4882a593Smuzhiyun 	DQS_DLL_NO_DELAY	= 0,
550*4882a593Smuzhiyun 	DQS_DLL_22P5_DELAY,
551*4882a593Smuzhiyun 	DQS_DLL_45_DELAY,
552*4882a593Smuzhiyun 	DQS_DLL_67P5_DELAY,
553*4882a593Smuzhiyun 	DQS_DLL_90_DELAY,
554*4882a593Smuzhiyun 	DQS_DLL_112P5_DELAY,
555*4882a593Smuzhiyun 	DQS_DLL_135_DELAY,
556*4882a593Smuzhiyun 	DQS_DLL_157P5_DELAY,
557*4882a593Smuzhiyun };
558*4882a593Smuzhiyun 
559*4882a593Smuzhiyun /* GRF_SOC_CON0 */
560*4882a593Smuzhiyun #define GRF_DDR_16BIT_EN		(((0x1 << 0) << 16) | (0x1 << 0))
561*4882a593Smuzhiyun #define GRF_DDR_32BIT_EN		(((0x1 << 0) << 16) | (0x0 << 0))
562*4882a593Smuzhiyun #define GRF_MSCH_NOC_16BIT_EN		(((0x1 << 7) << 16) | (0x1 << 7))
563*4882a593Smuzhiyun #define GRF_MSCH_NOC_32BIT_EN		(((0x1 << 7) << 16) | (0x0 << 7))
564*4882a593Smuzhiyun 
565*4882a593Smuzhiyun #define GRF_DDRPHY_BUFFEREN_CORE_EN	(((0x1 << 8) << 16) | (0x0 << 8))
566*4882a593Smuzhiyun #define GRF_DDRPHY_BUFFEREN_CORE_DIS	(((0x1 << 8) << 16) | (0x1 << 8))
567*4882a593Smuzhiyun 
568*4882a593Smuzhiyun #define GRF_DDR3_EN			(((0x1 << 6) << 16) | (0x1 << 6))
569*4882a593Smuzhiyun #define GRF_LPDDR2_3_EN			(((0x1 << 6) << 16) | (0x0 << 6))
570*4882a593Smuzhiyun 
571*4882a593Smuzhiyun #define PHY_DRV_ODT_SET(n)		(((n) << 4) | (n))
572*4882a593Smuzhiyun #define DDR3_DLL_RESET			(1 << 8)
573*4882a593Smuzhiyun 
574*4882a593Smuzhiyun #endif /* _ASM_ARCH_SDRAM_RK322X_H */
575