Merge tag 'u-boot-atmel-fixes-2020.07-a' of https://gitlab.denx.de/u-boot/custodians...
[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 struct 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 };
148 check_member(rk3036_ddr_pctl, iptr, 0x03fc);
149
150 struct 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 };
233 check_member(rk3036_ddr_phy, ddrphy_reg62, 0x03e8);
234
235 struct 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
272 struct rk3036_phy_timing {
273         u32 mr[4];
274         u32 bl;
275         u32 cl_al;
276 };
277
278 typedef 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
291 struct 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
298 struct 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
307 struct 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 */
331 void sdram_init(void);
332
333 /* get ddr die config, implement in specific board */
334 void get_ddr_config(struct rk3036_ddr_config *config);
335
336 /* get ddr size on board */
337 size_t sdram_size(void);
338 #endif