blob: ba6b59b89f0c2fb2132414fef5746ed2805690a9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
|
/*
* ddr_defs.h
*
* ddr specific header
*
* Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR /PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _DDR_DEFS_H
#define _DDR_DEFS_H
#include <asm/arch/hardware.h>
/* AM335X EMIF Register values */
#define EMIF_SDMGT 0x80000000
#define EMIF_SDRAM 0x00004650
#define EMIF_PHYCFG 0x2
#define DDR_PHY_RESET (0x1 << 10)
#define DDR_FUNCTIONAL_MODE_EN 0x1
#define DDR_PHY_READY (0x1 << 2)
#define VTP_CTRL_READY (0x1 << 5)
#define VTP_CTRL_ENABLE (0x1 << 6)
#define VTP_CTRL_LOCK_EN (0x1 << 4)
#define VTP_CTRL_START_EN (0x1)
#define DDR2_RATIO 0x80
#define CMD_FORCE 0x00
#define CMD_DELAY 0x00
#define EMIF_READ_LATENCY 0x04
#define EMIF_TIM1 0x0666B3D6
#define EMIF_TIM2 0x143731DA
#define EMIF_TIM3 0x00000347
#define EMIF_SDCFG 0x43805332
#define EMIF_SDREF 0x0000081a
#define DDR2_DLL_LOCK_DIFF 0x0
#define DDR2_RD_DQS 0x12
#define DDR2_PHY_FIFO_WE 0x80
#define DDR2_INVERT_CLKOUT 0x00
#define DDR2_WR_DQS 0x00
#define DDR2_PHY_WRLVL 0x00
#define DDR2_PHY_GATELVL 0x00
#define DDR2_PHY_WR_DATA 0x40
#define PHY_RANK0_DELAY 0x01
#define PHY_DLL_LOCK_DIFF 0x0
#define DDR_IOCTRL_VALUE 0x18B
/**
* This structure represents the EMIF registers on AM33XX devices.
*/
struct emif_regs {
unsigned int sdrrev; /* offset 0x00 */
unsigned int sdrstat; /* offset 0x04 */
unsigned int sdrcr; /* offset 0x08 */
unsigned int sdrcr2; /* offset 0x0C */
unsigned int sdrrcr; /* offset 0x10 */
unsigned int sdrrcsr; /* offset 0x14 */
unsigned int sdrtim1; /* offset 0x18 */
unsigned int sdrtim1sr; /* offset 0x1C */
unsigned int sdrtim2; /* offset 0x20 */
unsigned int sdrtim2sr; /* offset 0x24 */
unsigned int sdrtim3; /* offset 0x28 */
unsigned int sdrtim3sr; /* offset 0x2C */
unsigned int res1[2];
unsigned int sdrmcr; /* offset 0x38 */
unsigned int sdrmcsr; /* offset 0x3C */
unsigned int res2[8];
unsigned int sdritr; /* offset 0x60 */
unsigned int res3[32];
unsigned int ddrphycr; /* offset 0xE4 */
unsigned int ddrphycsr; /* offset 0xE8 */
unsigned int ddrphycr2; /* offset 0xEC */
};
/**
* Encapsulates DDR PHY control and corresponding shadow registers.
*/
struct ddr_phy_control {
unsigned long reg;
unsigned long reg_sh;
unsigned long reg2;
};
/**
* Encapsulates SDRAM timing and corresponding shadow registers.
*/
struct sdram_timing {
unsigned long time1;
unsigned long time1_sh;
unsigned long time2;
unsigned long time2_sh;
unsigned long time3;
unsigned long time3_sh;
};
/**
* Encapsulates SDRAM configuration.
* (Includes refresh control registers) */
struct sdram_config {
unsigned long sdrcr;
unsigned long sdrcr2;
unsigned long refresh;
unsigned long refresh_sh;
};
/**
* Configure SDRAM
*/
int config_sdram(struct sdram_config *cfg);
/**
* Set SDRAM timings
*/
int set_sdram_timings(struct sdram_timing *val);
/**
* Configure DDR PHY
*/
int config_ddr_phy(struct ddr_phy_control *cfg);
/**
* This structure represents the DDR registers on AM33XX devices.
*/
struct ddr_regs {
unsigned int resv0[7];
unsigned int cm0csratio; /* offset 0x01C */
unsigned int cm0csforce; /* offset 0x020 */
unsigned int cm0csdelay; /* offset 0x024 */
unsigned int cm0dldiff; /* offset 0x028 */
unsigned int cm0iclkout; /* offset 0x02C */
unsigned int resv1[8];
unsigned int cm1csratio; /* offset 0x050 */
unsigned int cm1csforce; /* offset 0x054 */
unsigned int cm1csdelay; /* offset 0x058 */
unsigned int cm1dldiff; /* offset 0x05C */
unsigned int cm1iclkout; /* offset 0x060 */
unsigned int resv2[8];
unsigned int cm2csratio; /* offset 0x084 */
unsigned int cm2csforce; /* offset 0x088 */
unsigned int cm2csdelay; /* offset 0x08C */
unsigned int cm2dldiff; /* offset 0x090 */
unsigned int cm2iclkout; /* offset 0x094 */
unsigned int resv3[12];
unsigned int dt0rdsratio0; /* offset 0x0C8 */
unsigned int dt0rdsratio1; /* offset 0x0CC */
unsigned int resv4[3];
unsigned int dt0wdsratio0; /* offset 0x0DC */
unsigned int dt0wdsratio1; /* offset 0x0E0 */
unsigned int resv5[3];
unsigned int dt0wiratio0; /* offset 0x0F0 */
unsigned int dt0wiratio1; /* offset 0x0F4 */
unsigned int dt0giratio0; /* offset 0x0FC */
unsigned int dt0giratio1; /* offset 0x100 */
unsigned int resv6[1];
unsigned int dt0fwsratio0; /* offset 0x108 */
unsigned int dt0fwsratio1; /* offset 0x10C */
unsigned int resv7[4];
unsigned int dt0wrsratio0; /* offset 0x120 */
unsigned int dt0wrsratio1; /* offset 0x124 */
unsigned int resv8[3];
unsigned int dt0rdelays0; /* offset 0x134 */
unsigned int dt0dldiff0; /* offset 0x138 */
unsigned int resv9[39];
unsigned int dt1rdelays0; /* offset 0x1D8 */
};
/**
* Encapsulates DDR CMD control registers.
*/
struct cmd_control {
unsigned long cmd0csratio;
unsigned long cmd0csforce;
unsigned long cmd0csdelay;
unsigned long cmd0dldiff;
unsigned long cmd0iclkout;
unsigned long cmd1csratio;
unsigned long cmd1csforce;
unsigned long cmd1csdelay;
unsigned long cmd1dldiff;
unsigned long cmd1iclkout;
unsigned long cmd2csratio;
unsigned long cmd2csforce;
unsigned long cmd2csdelay;
unsigned long cmd2dldiff;
unsigned long cmd2iclkout;
};
/**
* Encapsulates DDR DATA registers.
*/
struct ddr_data {
unsigned long datardsratio0;
unsigned long datardsratio1;
unsigned long datawdsratio0;
unsigned long datawdsratio1;
unsigned long datawiratio0;
unsigned long datawiratio1;
unsigned long datagiratio0;
unsigned long datagiratio1;
unsigned long datafwsratio0;
unsigned long datafwsratio1;
unsigned long datawrsratio0;
unsigned long datawrsratio1;
unsigned long datadldiff0;
};
/**
* Configure DDR CMD control registers
*/
int config_cmd_ctrl(struct cmd_control *cmd);
/**
* Configure DDR DATA registers
*/
int config_ddr_data(int data_macrono, struct ddr_data *data);
/**
* This structure represents the DDR io control on AM33XX devices.
*/
struct ddr_cmdtctrl {
unsigned int resv1[1];
unsigned int cm0ioctl;
unsigned int cm1ioctl;
unsigned int cm2ioctl;
unsigned int resv2[12];
unsigned int dt0ioctl;
unsigned int dt1ioctl;
};
/**
* Encapsulates DDR CMD & DATA io control registers.
*/
struct ddr_ioctrl {
unsigned long cmd1ctl;
unsigned long cmd2ctl;
unsigned long cmd3ctl;
unsigned long data1ctl;
unsigned long data2ctl;
};
/**
* Configure DDR io control registers
*/
int config_io_ctrl(struct ddr_ioctrl *ioctrl);
struct ddr_ctrl {
unsigned int ddrioctrl;
unsigned int resv1[325];
unsigned int ddrckectrl;
};
void config_ddr(void);
#endif /* _DDR_DEFS_H */
|