blob: 46298165fbcc2736c1e8bc8c27e3f5bc2753beef [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
huang linda98a5b2015-11-17 14:20:26 +08002/*
3 * (C) Copyright 2015 Rockchip Electronics Co., Ltd
huang linda98a5b2015-11-17 14:20:26 +08004 */
5#ifndef _ASM_ARCH_SDRAM_RK3036_H
6#define _ASM_ARCH_SDRAM_RK3036_H
7
huang linda98a5b2015-11-17 14:20:26 +08008struct rk3036_ddr_pctl {
9 u32 scfg;
10 u32 sctl;
11 u32 stat;
12 u32 intrstat;
13 u32 reserved0[12];
14 u32 mcmd;
15 u32 powctl;
16 u32 powstat;
17 u32 cmdtstat;
18 u32 cmdtstaten;
19 u32 reserved1[3];
20 u32 mrrcfg0;
21 u32 mrrstat0;
22 u32 mrrstat1;
23 u32 reserved2[4];
24 u32 mcfg1;
25 u32 mcfg;
26 u32 ppcfg;
27 u32 mstat;
28 u32 lpddr2zqcfg;
29 u32 reserved3;
30 u32 dtupdes;
31 u32 dtuna;
32 u32 dtune;
33 u32 dtuprd0;
34 u32 dtuprd1;
35 u32 dtuprd2;
36 u32 dtuprd3;
37 u32 dtuawdt;
38 u32 reserved4[3];
39 u32 togcnt1u;
40 u32 tinit;
41 u32 trsth;
42 u32 togcnt100n;
43 u32 trefi;
44 u32 tmrd;
45 u32 trfc;
46 u32 trp;
47 u32 trtw;
48 u32 tal;
49 u32 tcl;
50 u32 tcwl;
51 u32 tras;
52 u32 trc;
53 u32 trcd;
54 u32 trrd;
55 u32 trtp;
56 u32 twr;
57 u32 twtr;
58 u32 texsr;
59 u32 txp;
60 u32 txpdll;
61 u32 tzqcs;
62 u32 tzqcsi;
63 u32 tdqs;
64 u32 tcksre;
65 u32 tcksrx;
66 u32 tcke;
67 u32 tmod;
68 u32 trstl;
69 u32 tzqcl;
70 u32 tmrr;
71 u32 tckesr;
72 u32 reserved5[47];
73 u32 dtuwactl;
74 u32 dturactl;
75 u32 dtucfg;
76 u32 dtuectl;
77 u32 dtuwd0;
78 u32 dtuwd1;
79 u32 dtuwd2;
80 u32 dtuwd3;
81 u32 dtuwdm;
82 u32 dturd0;
83 u32 dturd1;
84 u32 dturd2;
85 u32 dturd3;
86 u32 dtulfsrwd;
87 u32 dtulfsrrd;
88 u32 dtueaf;
89 u32 dfitctrldelay;
90 u32 dfiodtcfg;
91 u32 dfiodtcfg1;
92 u32 dfiodtrankmap;
93 u32 dfitphywrdata;
94 u32 dfitphywrlat;
95 u32 reserved7[2];
96 u32 dfitrddataen;
97 u32 dfitphyrdlat;
98 u32 reserved8[2];
99 u32 dfitphyupdtype0;
100 u32 dfitphyupdtype1;
101 u32 dfitphyupdtype2;
102 u32 dfitphyupdtype3;
103 u32 dfitctrlupdmin;
104 u32 dfitctrlupdmax;
105 u32 dfitctrlupddly;
106 u32 reserved9;
107 u32 dfiupdcfg;
108 u32 dfitrefmski;
109 u32 dfitctrlupdi;
110 u32 reserved10[4];
111 u32 dfitrcfg0;
112 u32 dfitrstat0;
113 u32 dfitrwrlvlen;
114 u32 dfitrrdlvlen;
115 u32 dfitrrdlvlgateen;
116 u32 dfiststat0;
117 u32 dfistcfg0;
118 u32 dfistcfg1;
119 u32 reserved11;
120 u32 dfitdramclken;
121 u32 dfitdramclkdis;
122 u32 dfistcfg2;
123 u32 dfistparclr;
124 u32 dfistparlog;
125 u32 reserved12[3];
126 u32 dfilpcfg0;
127 u32 reserved13[3];
128 u32 dfitrwrlvlresp0;
129 u32 dfitrwrlvlresp1;
130 u32 dfitrwrlvlresp2;
131 u32 dfitrrdlvlresp0;
132 u32 dfitrrdlvlresp1;
133 u32 dfitrrdlvlresp2;
134 u32 dfitrwrlvldelay0;
135 u32 dfitrwrlvldelay1;
136 u32 dfitrwrlvldelay2;
137 u32 dfitrrdlvldelay0;
138 u32 dfitrrdlvldelay1;
139 u32 dfitrrdlvldelay2;
140 u32 dfitrrdlvlgatedelay0;
141 u32 dfitrrdlvlgatedelay1;
142 u32 dfitrrdlvlgatedelay2;
143 u32 dfitrcmd;
144 u32 reserved14[46];
145 u32 ipvr;
146 u32 iptr;
147};
148check_member(rk3036_ddr_pctl, iptr, 0x03fc);
149
150struct rk3036_ddr_phy {
151 u32 ddrphy_reg1;
152 u32 ddrphy_reg3;
153 u32 ddrphy_reg2;
154 u32 reserve[11];
155 u32 ddrphy_reg4a;
156 u32 ddrphy_reg4b;
157 u32 reserve1[5];
158 u32 ddrphy_reg16;
159 u32 reserve2;
160 u32 ddrphy_reg18;
161 u32 ddrphy_reg19;
162 u32 reserve3;
163 u32 ddrphy_reg21;
164 u32 reserve4;
165 u32 ddrphy_reg22;
166 u32 reserve5[3];
167 u32 ddrphy_reg25;
168 u32 ddrphy_reg26;
169 u32 ddrphy_reg27;
170 u32 ddrphy_reg28;
171 u32 reserve6[17];
172 u32 ddrphy_reg6;
173 u32 ddrphy_reg7;
174 u32 reserve7;
175 u32 ddrphy_reg8;
176 u32 ddrphy_reg0e4;
177 u32 reserve8[11];
178 u32 ddrphy_reg9;
179 u32 ddrphy_reg10;
180 u32 reserve9;
181 u32 ddrphy_reg11;
182 u32 ddrphy_reg124;
183 u32 reserve10[38];
184 u32 ddrphy_reg29;
185 u32 reserve11[40];
186 u32 ddrphy_reg264;
187 u32 reserve12[18];
188 u32 ddrphy_reg2a;
189 u32 reserve13[4];
190 u32 ddrphy_reg30;
191 u32 ddrphy_reg31;
192 u32 ddrphy_reg32;
193 u32 ddrphy_reg33;
194 u32 ddrphy_reg34;
195 u32 ddrphy_reg35;
196 u32 ddrphy_reg36;
197 u32 ddrphy_reg37;
198 u32 ddrphy_reg38;
199 u32 ddrphy_reg39;
200 u32 ddrphy_reg40;
201 u32 ddrphy_reg41;
202 u32 ddrphy_reg42;
203 u32 ddrphy_reg43;
204 u32 ddrphy_reg44;
205 u32 ddrphy_reg45;
206 u32 ddrphy_reg46;
207 u32 ddrphy_reg47;
208 u32 ddrphy_reg48;
209 u32 ddrphy_reg49;
210 u32 ddrphy_reg50;
211 u32 ddrphy_reg51;
212 u32 ddrphy_reg52;
213 u32 ddrphy_reg53;
214 u32 reserve14;
215 u32 ddrphy_reg54;
216 u32 ddrphy_reg55;
217 u32 ddrphy_reg56;
218 u32 ddrphy_reg57;
219 u32 ddrphy_reg58;
220 u32 ddrphy_reg59;
221 u32 ddrphy_reg5a;
222 u32 ddrphy_reg5b;
223 u32 ddrphy_reg5c;
224 u32 ddrphy_reg5d;
225 u32 ddrphy_reg5e;
226 u32 reserve15[28];
227 u32 ddrphy_reg5f;
228 u32 reserve16[6];
229 u32 ddrphy_reg60;
230 u32 ddrphy_reg61;
231 u32 ddrphy_reg62;
232};
233check_member(rk3036_ddr_phy, ddrphy_reg62, 0x03e8);
234
235struct rk3036_pctl_timing {
236 u32 togcnt1u;
237 u32 tinit;
238 u32 trsth;
239 u32 togcnt100n;
240 u32 trefi;
241 u32 tmrd;
242 u32 trfc;
243 u32 trp;
244 u32 trtw;
245 u32 tal;
246 u32 tcl;
247 u32 tcwl;
248 u32 tras;
249 u32 trc;
250 u32 trcd;
251 u32 trrd;
252 u32 trtp;
253 u32 twr;
254 u32 twtr;
255 u32 texsr;
256 u32 txp;
257 u32 txpdll;
258 u32 tzqcs;
259 u32 tzqcsi;
260 u32 tdqs;
261 u32 tcksre;
262 u32 tcksrx;
263 u32 tcke;
264 u32 tmod;
265 u32 trstl;
266 u32 tzqcl;
267 u32 tmrr;
268 u32 tckesr;
269 u32 tdpd;
270};
271
272struct rk3036_phy_timing {
273 u32 mr[4];
274 u32 bl;
275 u32 cl_al;
276};
277
278typedef union {
279 u32 noc_timing;
280 struct {
281 u32 acttoact:6;
282 u32 rdtomiss:6;
283 u32 wrtomiss:6;
284 u32 burstlen:3;
285 u32 rdtowr:5;
286 u32 wrtord:5;
287 u32 bwratio:1;
288 };
289} rk3036_noc_timing;
290
291struct rk3036_ddr_timing {
292 u32 freq;
293 struct rk3036_pctl_timing pctl_timing;
294 struct rk3036_phy_timing phy_timing;
295 rk3036_noc_timing noc_timing;
296};
297
298struct rk3036_service_sys {
299 u32 id_coreid;
300 u32 id_revisionid;
301 u32 ddrconf;
302 u32 ddrtiming;
303 u32 ddrmode;
304 u32 readlatency;
305};
306
307struct rk3036_ddr_config {
308 /*
309 * 000: lpddr
310 * 001: ddr
311 * 010: ddr2
312 * 011: ddr3
313 * 100: lpddr2-s2
314 * 101: lpddr2-s4
315 * 110: lpddr3
316 */
317 u32 ddr_type;
318 u32 rank;
319 u32 cs0_row;
320 u32 cs1_row;
321
322 /* 2: 4bank, 3: 8bank */
323 u32 bank;
324 u32 col;
325
326 /* bw(0: 8bit, 1: 16bit, 2: 32bit) */
327 u32 bw;
328};
329
330/* rk3036 sdram initial */
331void sdram_init(void);
332
333/* get ddr die config, implement in specific board */
334void get_ddr_config(struct rk3036_ddr_config *config);
335
336/* get ddr size on board */
337size_t sdram_size(void);
338#endif