]>
Commit | Line | Data |
---|---|---|
0404d53f JK |
1 | /* |
2 | * sun8i H3 platform dram controller register and constant defines | |
3 | * | |
4 | * (C) Copyright 2007-2015 Allwinner Technology Co. | |
5 | * Jerry Wang <wangflord@allwinnertech.com> | |
6 | * (C) Copyright 2015 Vishnu Patekar <vishnupatekar0510@gmail.com> | |
7 | * (C) Copyright 2014-2015 Hans de Goede <hdegoede@redhat.com> | |
8 | * (C) Copyright 2015 Jens Kuske <jenskuske@gmail.com> | |
9 | * | |
10 | * SPDX-License-Identifier: GPL-2.0+ | |
11 | */ | |
12 | ||
13 | #ifndef _SUNXI_DRAM_SUN8I_H3_H | |
14 | #define _SUNXI_DRAM_SUN8I_H3_H | |
15 | ||
16 | struct sunxi_mctl_com_reg { | |
17 | u32 cr; /* 0x00 control register */ | |
1bc464be JK |
18 | u8 res0[0x8]; /* 0x04 */ |
19 | u32 tmr; /* 0x0c (unused on H3) */ | |
0404d53f JK |
20 | u32 mcr[16][2]; /* 0x10 */ |
21 | u32 bwcr; /* 0x90 bandwidth control register */ | |
22 | u32 maer; /* 0x94 master enable register */ | |
23 | u32 mapr; /* 0x98 master priority register */ | |
24 | u32 mcgcr; /* 0x9c */ | |
25 | u32 cpu_bwcr; /* 0xa0 */ | |
26 | u32 gpu_bwcr; /* 0xa4 */ | |
27 | u32 ve_bwcr; /* 0xa8 */ | |
28 | u32 disp_bwcr; /* 0xac */ | |
29 | u32 other_bwcr; /* 0xb0 */ | |
30 | u32 total_bwcr; /* 0xb4 */ | |
31 | u8 res1[0x8]; /* 0xb8 */ | |
32 | u32 swonr; /* 0xc0 */ | |
33 | u32 swoffr; /* 0xc4 */ | |
34 | u8 res2[0x8]; /* 0xc8 */ | |
35 | u32 cccr; /* 0xd0 */ | |
1bc464be JK |
36 | u8 res3[0x54]; /* 0xd4 */ |
37 | u32 mdfs_bwlr[3]; /* 0x128 (unused on H3) */ | |
38 | u8 res4[0x6cc]; /* 0x134 */ | |
0404d53f JK |
39 | u32 protect; /* 0x800 */ |
40 | }; | |
41 | ||
42 | #define MCTL_CR_BL8 (0x4 << 20) | |
43 | ||
44 | #define MCTL_CR_1T (0x1 << 19) | |
45 | #define MCTL_CR_2T (0x0 << 19) | |
46 | ||
47 | #define MCTL_CR_LPDDR3 (0x7 << 16) | |
48 | #define MCTL_CR_LPDDR2 (0x6 << 16) | |
49 | #define MCTL_CR_DDR3 (0x3 << 16) | |
50 | #define MCTL_CR_DDR2 (0x2 << 16) | |
51 | ||
52 | #define MCTL_CR_SEQUENTIAL (0x1 << 15) | |
53 | #define MCTL_CR_INTERLEAVED (0x0 << 15) | |
54 | ||
55 | #define MCTL_CR_32BIT (0x1 << 12) | |
56 | #define MCTL_CR_16BIT (0x0 << 12) | |
57 | #define MCTL_CR_BUS_WIDTH(x) ((x) == 32 ? MCTL_CR_32BIT : MCTL_CR_16BIT) | |
58 | ||
59 | #define MCTL_CR_PAGE_SIZE(x) ((fls(x) - 4) << 8) | |
60 | #define MCTL_CR_ROW_BITS(x) (((x) - 1) << 4) | |
61 | #define MCTL_CR_EIGHT_BANKS (0x1 << 2) | |
62 | #define MCTL_CR_FOUR_BANKS (0x0 << 2) | |
63 | #define MCTL_CR_DUAL_RANK (0x1 << 0) | |
64 | #define MCTL_CR_SINGLE_RANK (0x0 << 0) | |
65 | ||
66 | #define PROTECT_MAGIC (0x94be6fa3) | |
67 | ||
68 | struct sunxi_mctl_ctl_reg { | |
69 | u32 pir; /* 0x00 PHY initialization register */ | |
70 | u32 pwrctl; /* 0x04 */ | |
71 | u32 mrctrl; /* 0x08 */ | |
72 | u32 clken; /* 0x0c */ | |
73 | u32 pgsr[2]; /* 0x10 PHY general status registers */ | |
74 | u32 statr; /* 0x18 */ | |
75 | u8 res1[0x14]; /* 0x1c */ | |
76 | u32 mr[4]; /* 0x30 mode registers */ | |
77 | u32 pllgcr; /* 0x40 */ | |
78 | u32 ptr[5]; /* 0x44 PHY timing registers */ | |
79 | u32 dramtmg[9]; /* 0x58 DRAM timing registers */ | |
80 | u32 odtcfg; /* 0x7c */ | |
81 | u32 pitmg[2]; /* 0x80 PHY interface timing registers */ | |
82 | u8 res2[0x4]; /* 0x88 */ | |
83 | u32 rfshctl0; /* 0x8c */ | |
84 | u32 rfshtmg; /* 0x90 refresh timing */ | |
85 | u32 rfshctl1; /* 0x94 */ | |
86 | u32 pwrtmg; /* 0x98 */ | |
1bc464be JK |
87 | u8 res3[0x1c]; /* 0x9c */ |
88 | u32 vtfcr; /* 0xb8 (unused on H3) */ | |
0404d53f JK |
89 | u32 dqsgmr; /* 0xbc */ |
90 | u32 dtcr; /* 0xc0 */ | |
91 | u32 dtar[4]; /* 0xc4 */ | |
92 | u32 dtdr[2]; /* 0xd4 */ | |
93 | u32 dtmr[2]; /* 0xdc */ | |
94 | u32 dtbmr; /* 0xe4 */ | |
95 | u32 catr[2]; /* 0xe8 */ | |
96 | u32 dtedr[2]; /* 0xf0 */ | |
97 | u8 res4[0x8]; /* 0xf8 */ | |
98 | u32 pgcr[4]; /* 0x100 PHY general configuration registers */ | |
99 | u32 iovcr[2]; /* 0x110 */ | |
100 | u32 dqsdr; /* 0x118 */ | |
101 | u32 dxccr; /* 0x11c */ | |
102 | u32 odtmap; /* 0x120 */ | |
103 | u32 zqctl[2]; /* 0x124 */ | |
104 | u8 res6[0x14]; /* 0x12c */ | |
105 | u32 zqcr; /* 0x140 ZQ control register */ | |
106 | u32 zqsr; /* 0x144 ZQ status register */ | |
107 | u32 zqdr[3]; /* 0x148 ZQ data registers */ | |
108 | u8 res7[0x6c]; /* 0x154 */ | |
109 | u32 sched; /* 0x1c0 */ | |
110 | u32 perfhpr[2]; /* 0x1c4 */ | |
111 | u32 perflpr[2]; /* 0x1cc */ | |
112 | u32 perfwr[2]; /* 0x1d4 */ | |
0eb6f9fd JK |
113 | u8 res8[0x24]; /* 0x1dc */ |
114 | u32 acmdlr; /* 0x200 AC master delay line register */ | |
115 | u32 aclcdlr; /* 0x204 AC local calibrated delay line register */ | |
116 | u32 aciocr; /* 0x208 AC I/O configuration register */ | |
117 | u8 res9[0x4]; /* 0x20c */ | |
118 | u32 acbdlr[31]; /* 0x210 AC bit delay line registers */ | |
119 | u8 res10[0x74]; /* 0x28c */ | |
0404d53f | 120 | struct { /* 0x300 DATX8 modules*/ |
0eb6f9fd JK |
121 | u32 mdlr; /* 0x00 master delay line register */ |
122 | u32 lcdlr[3]; /* 0x04 local calibrated delay line registers */ | |
123 | u32 bdlr[12]; /* 0x10 bit delay line registers */ | |
124 | u32 gtr; /* 0x40 general timing register */ | |
125 | u32 gcr; /* 0x44 general configuration register */ | |
126 | u32 gsr[3]; /* 0x48 general status registers */ | |
0404d53f | 127 | u8 res0[0x2c]; /* 0x54 */ |
0eb6f9fd JK |
128 | } dx[4]; |
129 | u8 res11[0x388]; /* 0x500 */ | |
0404d53f JK |
130 | u32 upd2; /* 0x888 */ |
131 | }; | |
132 | ||
133 | #define PTR3_TDINIT1(x) ((x) << 20) | |
134 | #define PTR3_TDINIT0(x) ((x) << 0) | |
135 | ||
136 | #define PTR4_TDINIT3(x) ((x) << 20) | |
137 | #define PTR4_TDINIT2(x) ((x) << 0) | |
138 | ||
139 | #define DRAMTMG0_TWTP(x) ((x) << 24) | |
140 | #define DRAMTMG0_TFAW(x) ((x) << 16) | |
141 | #define DRAMTMG0_TRAS_MAX(x) ((x) << 8) | |
142 | #define DRAMTMG0_TRAS(x) ((x) << 0) | |
143 | ||
144 | #define DRAMTMG1_TXP(x) ((x) << 16) | |
145 | #define DRAMTMG1_TRTP(x) ((x) << 8) | |
146 | #define DRAMTMG1_TRC(x) ((x) << 0) | |
147 | ||
148 | #define DRAMTMG2_TCWL(x) ((x) << 24) | |
149 | #define DRAMTMG2_TCL(x) ((x) << 16) | |
150 | #define DRAMTMG2_TRD2WR(x) ((x) << 8) | |
151 | #define DRAMTMG2_TWR2RD(x) ((x) << 0) | |
152 | ||
153 | #define DRAMTMG3_TMRW(x) ((x) << 16) | |
154 | #define DRAMTMG3_TMRD(x) ((x) << 12) | |
155 | #define DRAMTMG3_TMOD(x) ((x) << 0) | |
156 | ||
157 | #define DRAMTMG4_TRCD(x) ((x) << 24) | |
158 | #define DRAMTMG4_TCCD(x) ((x) << 16) | |
159 | #define DRAMTMG4_TRRD(x) ((x) << 8) | |
160 | #define DRAMTMG4_TRP(x) ((x) << 0) | |
161 | ||
162 | #define DRAMTMG5_TCKSRX(x) ((x) << 24) | |
163 | #define DRAMTMG5_TCKSRE(x) ((x) << 16) | |
164 | #define DRAMTMG5_TCKESR(x) ((x) << 8) | |
165 | #define DRAMTMG5_TCKE(x) ((x) << 0) | |
166 | ||
167 | #define RFSHTMG_TREFI(x) ((x) << 16) | |
168 | #define RFSHTMG_TRFC(x) ((x) << 0) | |
169 | ||
170 | #define PIR_CLRSR (0x1 << 27) /* clear status registers */ | |
171 | #define PIR_QSGATE (0x1 << 10) /* Read DQS gate training */ | |
172 | #define PIR_DRAMINIT (0x1 << 8) /* DRAM initialization */ | |
173 | #define PIR_DRAMRST (0x1 << 7) /* DRAM reset */ | |
174 | #define PIR_PHYRST (0x1 << 6) /* PHY reset */ | |
175 | #define PIR_DCAL (0x1 << 5) /* DDL calibration */ | |
176 | #define PIR_PLLINIT (0x1 << 4) /* PLL initialization */ | |
177 | #define PIR_ZCAL (0x1 << 1) /* ZQ calibration */ | |
178 | #define PIR_INIT (0x1 << 0) /* PHY initialization trigger */ | |
179 | ||
180 | #define PGSR_INIT_DONE (0x1 << 0) /* PHY init done */ | |
181 | ||
0eb6f9fd | 182 | #define ZQCR_PWRDOWN (1U << 31) /* ZQ power down */ |
0404d53f | 183 | |
0eb6f9fd | 184 | #define ACBDLR_WRITE_DELAY(x) ((x) << 8) |
0404d53f | 185 | |
0eb6f9fd JK |
186 | #define DXBDLR_DQ(x) (x) /* DQ0-7 BDLR index */ |
187 | #define DXBDLR_DM 8 /* DM BDLR index */ | |
188 | #define DXBDLR_DQS 9 /* DQS BDLR index */ | |
189 | #define DXBDLR_DQSN 10 /* DQSN BDLR index */ | |
190 | ||
191 | #define DXBDLR_WRITE_DELAY(x) ((x) << 8) | |
192 | #define DXBDLR_READ_DELAY(x) ((x) << 0) | |
0404d53f JK |
193 | |
194 | #endif /* _SUNXI_DRAM_SUN8I_H3_H */ |