common: Drop linux/bitops.h from common header
[oweals/u-boot.git] / arch / arm / include / asm / arch-sunxi / dram_sun6i.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Sun6i platform dram controller register and constant defines
4  *
5  * (C) Copyright 2007-2012
6  * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
7  * Berg Xing <bergxing@allwinnertech.com>
8  * Tom Cubie <tangliang@allwinnertech.com>
9  *
10  * (C) Copyright 2014 Hans de Goede <hdegoede@redhat.com>
11  */
12
13 #ifndef _SUNXI_DRAM_SUN6I_H
14 #define _SUNXI_DRAM_SUN6I_H
15
16 #ifndef __ASSEMBLY__
17 #include <linux/bitops.h>
18 #endif
19
20 struct sunxi_mctl_com_reg {
21         u32 cr;                 /* 0x00 */
22         u32 ccr;                /* 0x04 controller configuration register */
23         u32 dbgcr;              /* 0x08 */
24         u32 dbgcr1;             /* 0x0c */
25         u32 rmcr[8];            /* 0x10 */
26         u32 mmcr[16];           /* 0x30 */
27         u32 mbagcr[6];          /* 0x70 */
28         u32 maer;               /* 0x88 */
29         u8 res0[0x14];          /* 0x8c */
30         u32 mdfscr;             /* 0x100 */
31         u32 mdfsmer;            /* 0x104 */
32         u32 mdfsmrmr;           /* 0x108 */
33         u32 mdfstr0;            /* 0x10c */
34         u32 mdfstr1;            /* 0x110 */
35         u32 mdfstr2;            /* 0x114 */
36         u32 mdfstr3;            /* 0x118 */
37         u32 mdfsgcr;            /* 0x11c */
38         u8 res1[0x1c];          /* 0x120 */
39         u32 mdfsivr;            /* 0x13c */
40         u8 res2[0x0c];          /* 0x140 */
41         u32 mdfstcr;            /* 0x14c */
42 };
43
44 struct sunxi_mctl_ctl_reg {
45         u8 res0[0x04];          /* 0x00 */
46         u32 sctl;               /* 0x04 */
47         u32 sstat;              /* 0x08 */
48         u8 res1[0x34];          /* 0x0c */
49         u32 mcmd;               /* 0x40 */
50         u8 res2[0x08];          /* 0x44 */
51         u32 cmdstat;            /* 0x4c */
52         u32 cmdstaten;          /* 0x50 */
53         u8 res3[0x0c];          /* 0x54 */
54         u32 mrrcfg0;            /* 0x60 */
55         u32 mrrstat0;           /* 0x64 */
56         u32 mrrstat1;           /* 0x68 */
57         u8 res4[0x10];          /* 0x6c */
58         u32 mcfg1;              /* 0x7c */
59         u32 mcfg;               /* 0x80 */
60         u32 ppcfg;              /* 0x84 */
61         u32 mstat;              /* 0x88 */
62         u32 lp2zqcfg;           /* 0x8c */
63         u8 res5[0x04];          /* 0x90 */
64         u32 dtustat;            /* 0x94 */
65         u32 dtuna;              /* 0x98 */
66         u32 dtune;              /* 0x9c */
67         u32 dtuprd0;            /* 0xa0 */
68         u32 dtuprd1;            /* 0xa4 */
69         u32 dtuprd2;            /* 0xa8 */
70         u32 dtuprd3;            /* 0xac */
71         u32 dtuawdt;            /* 0xb0 */
72         u8 res6[0x0c];          /* 0xb4 */
73         u32 togcnt1u;           /* 0xc0 */
74         u8 res7[0x08];          /* 0xc4 */
75         u32 togcnt100n;         /* 0xcc */
76         u32 trefi;              /* 0xd0 */
77         u32 tmrd;               /* 0xd4 */
78         u32 trfc;               /* 0xd8 */
79         u32 trp;                /* 0xdc */
80         u32 trtw;               /* 0xe0 */
81         u32 tal;                /* 0xe4 */
82         u32 tcl;                /* 0xe8 */
83         u32 tcwl;               /* 0xec */
84         u32 tras;               /* 0xf0 */
85         u32 trc;                /* 0xf4 */
86         u32 trcd;               /* 0xf8 */
87         u32 trrd;               /* 0xfc */
88         u32 trtp;               /* 0x100 */
89         u32 twr;                /* 0x104 */
90         u32 twtr;               /* 0x108 */
91         u32 texsr;              /* 0x10c */
92         u32 txp;                /* 0x110 */
93         u32 txpdll;             /* 0x114 */
94         u32 tzqcs;              /* 0x118 */
95         u32 tzqcsi;             /* 0x11c */
96         u32 tdqs;               /* 0x120 */
97         u32 tcksre;             /* 0x124 */
98         u32 tcksrx;             /* 0x128 */
99         u32 tcke;               /* 0x12c */
100         u32 tmod;               /* 0x130 */
101         u32 trstl;              /* 0x134 */
102         u32 tzqcl;              /* 0x138 */
103         u32 tmrr;               /* 0x13c */
104         u32 tckesr;             /* 0x140 */
105         u32 tdpd;               /* 0x144 */
106         u8 res8[0xb8];          /* 0x148 */
107         u32 dtuwactl;           /* 0x200 */
108         u32 dturactl;           /* 0x204 */
109         u32 dtucfg;             /* 0x208 */
110         u32 dtuectl;            /* 0x20c */
111         u32 dtuwd0;             /* 0x210 */
112         u32 dtuwd1;             /* 0x214 */
113         u32 dtuwd2;             /* 0x218 */
114         u32 dtuwd3;             /* 0x21c */
115         u32 dtuwdm;             /* 0x220 */
116         u32 dturd0;             /* 0x224 */
117         u32 dturd1;             /* 0x228 */
118         u32 dturd2;             /* 0x22c */
119         u32 dturd3;             /* 0x230 */
120         u32 dtulfsrwd;          /* 0x234 */
121         u32 dtulfsrrd;          /* 0x238 */
122         u32 dtueaf;             /* 0x23c */
123         u32 dfitctldly;         /* 0x240 */
124         u32 dfiodtcfg;          /* 0x244 */
125         u32 dfiodtcfg1;         /* 0x248 */
126         u32 dfiodtrmap;         /* 0x24c */
127         u32 dfitphywrd;         /* 0x250 */
128         u32 dfitphywrl;         /* 0x254 */
129         u8 res9[0x08];          /* 0x258 */
130         u32 dfitrdden;          /* 0x260 */
131         u32 dfitphyrdl;         /* 0x264 */
132         u8 res10[0x08];         /* 0x268 */
133         u32 dfitphyupdtype0;    /* 0x270 */
134         u32 dfitphyupdtype1;    /* 0x274 */
135         u32 dfitphyupdtype2;    /* 0x278 */
136         u32 dfitphyupdtype3;    /* 0x27c */
137         u32 dfitctrlupdmin;     /* 0x280 */
138         u32 dfitctrlupdmax;     /* 0x284 */
139         u32 dfitctrlupddly;     /* 0x288 */
140         u8 res11[4];            /* 0x28c */
141         u32 dfiupdcfg;          /* 0x290 */
142         u32 dfitrefmski;        /* 0x294 */
143         u32 dfitcrlupdi;        /* 0x298 */
144         u8 res12[0x10];         /* 0x29c */
145         u32 dfitrcfg0;          /* 0x2ac */
146         u32 dfitrstat0;         /* 0x2b0 */
147         u32 dfitrwrlvlen;       /* 0x2b4 */
148         u32 dfitrrdlvlen;       /* 0x2b8 */
149         u32 dfitrrdlvlgateen;   /* 0x2bc */
150         u8 res13[0x04];         /* 0x2c0 */
151         u32 dfistcfg0;          /* 0x2c4 */
152         u32 dfistcfg1;          /* 0x2c8 */
153         u8 res14[0x04];         /* 0x2cc */
154         u32 dfitdramclken;      /* 0x2d0 */
155         u32 dfitdramclkdis;     /* 0x2d4 */
156         u8 res15[0x18];         /* 0x2d8 */
157         u32 dfilpcfg0;          /* 0x2f0 */
158 };
159
160 struct sunxi_mctl_phy_reg {
161         u8 res0[0x04];          /* 0x00 */
162         u32 pir;                /* 0x04 */
163         u32 pgcr;               /* 0x08 phy general configuration register */
164         u32 pgsr;               /* 0x0c */
165         u32 dllgcr;             /* 0x10 */
166         u32 acdllcr;            /* 0x14 */
167         u32 ptr0;               /* 0x18 */
168         u32 ptr1;               /* 0x1c */
169         u32 ptr2;               /* 0x20 */
170         u32 aciocr;             /* 0x24 */
171         u32 dxccr;              /* 0x28 DATX8 common configuration register */
172         u32 dsgcr;              /* 0x2c dram system general config register */
173         u32 dcr;                /* 0x30 */
174         u32 dtpr0;              /* 0x34 dram timing parameters register 0 */
175         u32 dtpr1;              /* 0x38 dram timing parameters register 1 */
176         u32 dtpr2;              /* 0x3c dram timing parameters register 2 */
177         u32 mr0;                /* 0x40 mode register 0 */
178         u32 mr1;                /* 0x44 mode register 1 */
179         u32 mr2;                /* 0x48 mode register 2 */
180         u32 mr3;                /* 0x4c mode register 3 */
181         u32 odtcr;              /* 0x50 */
182         u32 dtar;               /* 0x54 data training address register */
183         u32 dtd0;               /* 0x58 */
184         u32 dtd1;               /* 0x5c */
185         u8 res1[0x60];          /* 0x60 */
186         u32 dcuar;              /* 0xc0 */
187         u32 dcudr;              /* 0xc4 */
188         u32 dcurr;              /* 0xc8 */
189         u32 dculr;              /* 0xcc */
190         u32 dcugcr;             /* 0xd0 */
191         u32 dcutpr;             /* 0xd4 */
192         u32 dcusr0;             /* 0xd8 */
193         u32 dcusr1;             /* 0xdc */
194         u8 res2[0x20];          /* 0xe0 */
195         u32 bistrr;             /* 0x100 */
196         u32 bistmskr0;          /* 0x104 */
197         u32 bistmskr1;          /* 0x108 */
198         u32 bistwcr;            /* 0x10c */
199         u32 bistlsr;            /* 0x110 */
200         u32 bistar0;            /* 0x114 */
201         u32 bistar1;            /* 0x118 */
202         u32 bistar2;            /* 0x11c */
203         u32 bistupdr;           /* 0x120 */
204         u32 bistgsr;            /* 0x124 */
205         u32 bistwer;            /* 0x128 */
206         u32 bistber0;           /* 0x12c */
207         u32 bistber1;           /* 0x130 */
208         u32 bistber2;           /* 0x134 */
209         u32 bistwcsr;           /* 0x138 */
210         u32 bistfwr0;           /* 0x13c */
211         u32 bistfwr1;           /* 0x140 */
212         u8 res3[0x3c];          /* 0x144 */
213         u32 zq0cr0;             /* 0x180 zq 0 control register 0 */
214         u32 zq0cr1;             /* 0x184 zq 0 control register 1 */
215         u32 zq0sr0;             /* 0x188 zq 0 status register 0 */
216         u32 zq0sr1;             /* 0x18c zq 0 status register 1 */
217         u8 res4[0x30];          /* 0x190 */
218         u32 dx0gcr;             /* 0x1c0 */
219         u32 dx0gsr0;            /* 0x1c4 */
220         u32 dx0gsr1;            /* 0x1c8 */
221         u32 dx0dllcr;           /* 0x1cc */
222         u32 dx0dqtr;            /* 0x1d0 */
223         u32 dx0dqstr;           /* 0x1d4 */
224         u8 res5[0x28];          /* 0x1d8 */
225         u32 dx1gcr;             /* 0x200 */
226         u32 dx1gsr0;            /* 0x204 */
227         u32 dx1gsr1;            /* 0x208 */
228         u32 dx1dllcr;           /* 0x20c */
229         u32 dx1dqtr;            /* 0x210 */
230         u32 dx1dqstr;           /* 0x214 */
231         u8 res6[0x28];          /* 0x218 */
232         u32 dx2gcr;             /* 0x240 */
233         u32 dx2gsr0;            /* 0x244 */
234         u32 dx2gsr1;            /* 0x248 */
235         u32 dx2dllcr;           /* 0x24c */
236         u32 dx2dqtr;            /* 0x250 */
237         u32 dx2dqstr;           /* 0x254 */
238         u8 res7[0x28];          /* 0x258 */
239         u32 dx3gcr;             /* 0x280 */
240         u32 dx3gsr0;            /* 0x284 */
241         u32 dx3gsr1;            /* 0x288 */
242         u32 dx3dllcr;           /* 0x28c */
243         u32 dx3dqtr;            /* 0x290 */
244         u32 dx3dqstr;           /* 0x294 */
245 };
246
247 /*
248  * DRAM common (sunxi_mctl_com_reg) register constants.
249  */
250 #define MCTL_CR_RANK_MASK               (3 << 0)
251 #define MCTL_CR_RANK(x)                 (((x) - 1) << 0)
252 #define MCTL_CR_BANK_MASK               (3 << 2)
253 #define MCTL_CR_BANK(x)                 ((x) << 2)
254 #define MCTL_CR_ROW_MASK                (0xf << 4)
255 #define MCTL_CR_ROW(x)                  (((x) - 1) << 4)
256 #define MCTL_CR_PAGE_SIZE_MASK          (0xf << 8)
257 #define MCTL_CR_PAGE_SIZE(x)            ((fls(x) - 4) << 8)
258 #define MCTL_CR_BUSW_MASK               (3 << 12)
259 #define MCTL_CR_BUSW16                  (1 << 12)
260 #define MCTL_CR_BUSW32                  (3 << 12)
261 #define MCTL_CR_SEQUENCE                (1 << 15)
262 #define MCTL_CR_DDR3                    (3 << 16)
263 #define MCTL_CR_CHANNEL_MASK            (1 << 19)
264 #define MCTL_CR_CHANNEL(x)              (((x) - 1) << 19)
265 #define MCTL_CR_UNKNOWN                 ((1 << 22) | (1 << 20))
266 #define MCTL_CCR_CH0_CLK_EN             (1 << 0)
267 #define MCTL_CCR_CH1_CLK_EN             (1 << 1)
268 #define MCTL_CCR_MASTER_CLK_EN          (1 << 2)
269
270 /*
271  * DRAM control (sunxi_mctl_ctl_reg) register constants.
272  * Note that we use constant values for a lot of the timings, this is what
273  * the original boot0 bootloader does.
274  */
275 #define MCTL_SCTL_CONFIG                1
276 #define MCTL_SCTL_ACCESS                2
277 #define MCTL_MCMD_NOP                   0x88000000
278 #define MCTL_MCMD_BUSY                  0x80000000
279 #define MCTL_MCFG_DDR3                  0x70061
280 #define MCTL_TREFI                      78
281 #define MCTL_TMRD                       4
282 #define MCTL_TRFC                       115
283 #define MCTL_TRP                        9
284 #define MCTL_TPREA                      0
285 #define MCTL_TRTW                       2
286 #define MCTL_TAL                        0
287 #define MCTL_TCL                        9
288 #define MCTL_TCWL                       8
289 #define MCTL_TRAS                       18
290 #define MCTL_TRC                        23
291 #define MCTL_TRCD                       9
292 #define MCTL_TRRD                       4
293 #define MCTL_TRTP                       4
294 #define MCTL_TWR                        8
295 #define MCTL_TWTR                       4
296 #define MCTL_TEXSR                      512
297 #define MCTL_TXP                        4
298 #define MCTL_TXPDLL                     14
299 #define MCTL_TZQCS                      64
300 #define MCTL_TZQCSI                     0
301 #define MCTL_TDQS                       1
302 #define MCTL_TCKSRE                     5
303 #define MCTL_TCKSRX                     5
304 #define MCTL_TCKE                       4
305 #define MCTL_TMOD                       12
306 #define MCTL_TRSTL                      80
307 #define MCTL_TZQCL                      512
308 #define MCTL_TMRR                       2
309 #define MCTL_TCKESR                     5
310 #define MCTL_TDPD                       0
311 #define MCTL_DFITPHYRDL                 15
312 #define MCTL_DFIUPDCFG_UPD              (1 << 1)
313 #define MCTL_DFISTCFG0                  5
314
315 /*
316  * DRAM phy (sunxi_mctl_phy_reg) register values / constants.
317  */
318 #define MCTL_PIR_CLEAR_STATUS           (1 << 28)
319 #define MCTL_PIR_STEP1                  0xe9
320 #define MCTL_PIR_STEP2                  0x81
321 #define MCTL_PGCR_RANK                  (1 << 19)
322 #define MCTL_PGCR                       0x018c0202
323 #define MCTL_PGSR_TRAIN_ERR_MASK        (3 << 5)
324 /* constants for both acdllcr as well as dx#dllcr */
325 #define MCTL_DLLCR_NRESET               (1 << 30)
326 #define MCTL_DLLCR_DISABLE              (1 << 31)
327 /* ptr constants these are or-ed together to get the final ptr# values */
328 #define MCTL_TITMSRST                   10
329 #define MCTL_TDLLLOCK                   2250
330 #define MCTL_TDLLSRST                   23
331 #define MCTL_TDINIT0                    217000
332 #define MCTL_TDINIT1                    160
333 #define MCTL_TDINIT2                    87000
334 #define MCTL_TDINIT3                    433
335 /* end ptr constants */
336 #define MCTL_ACIOCR_DISABLE             ((3 << 18) | (1 << 8) | (1 << 3))
337 #define MCTL_DXCCR_DISABLE              ((1 << 3) | (1 << 2))
338 #define MCTL_DXCCR                      0x800
339 #define MCTL_DSGCR_ENABLE               (1 << 28)
340 #define MCTL_DSGCR                      0xf200001b
341 #define MCTL_DCR_DDR3                   0x0b
342 /* dtpr constants these are or-ed together to get the final dtpr# values */
343 #define MCTL_TCCD                       0
344 #define MCTL_TDQSCKMAX                  1
345 #define MCTL_TDQSCK                     1
346 #define MCTL_TRTODT                     0
347 #define MCTL_TFAW                       20
348 #define MCTL_TAOND                      0
349 #define MCTL_TDLLK                      512
350 /* end dtpr constants */
351 #define MCTL_MR0                        0x1a50
352 #define MCTL_MR1                        0x4
353 #define MCTL_MR2                        ((MCTL_TCWL - 5) << 3)
354 #define MCTL_MR3                        0x0
355 #define MCTL_DX_GCR_EN                  (1 << 0)
356 #define MCTL_DX_GCR                     0x880
357 #define MCTL_DX_GSR0_RANK0_TRAIN_DONE   (1 << 0)
358 #define MCTL_DX_GSR0_RANK1_TRAIN_DONE   (1 << 1)
359 #define MCTL_DX_GSR0_RANK0_TRAIN_ERR    (1 << 4)
360 #define MCTL_DX_GSR0_RANK1_TRAIN_ERR    (1 << 5)
361
362 #endif /* _SUNXI_DRAM_SUN6I_H */