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