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