summaryrefslogtreecommitdiffstats
path: root/scripts/tegra/t20/nvboot_sdram_param_t20.h
blob: 2c385d5e5e56cf70cd2889b6cbf4dd8cf4745894 (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
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
/*
 * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 */

/**
 * Defines the SDRAM parameter structure.
 *
 * Note that PLLM is used by EMC.
 */

#ifndef INCLUDED_NVBOOT_SDRAM_PARAM_T20_H
#define INCLUDED_NVBOOT_SDRAM_PARAM_T20_H

#define NVBOOT_BCT_SDRAM_ARB_CONFIG_WORDS 27

typedef enum {
	/* Specifies the memory type to be undefined */
	nvboot_memory_type_none = 0,

	/* Specifies the memory type to be DDR SDRAM */
	nvboot_memory_type_ddr,

	/* Specifies the memory type to be LPDDR SDRAM */
	nvboot_memory_type_lpddr,

	/* Specifies the memory type to be DDR2 SDRAM */
	nvboot_memory_type_ddr2,

	/* Specifies the memory type to be LPDDR2 SDRAM */
	nvboot_memory_type_lpddr2,

	nvboot_memory_type_num,
	nvboot_memory_type_force32 = 0x7FFFFFF
} nvboot_memory_type;


/**
 * Defines the SDRAM parameter structure
 */
typedef struct nvboot_sdram_params_rec {
	/* Specifies the type of memory device */
	nvboot_memory_type memory_type;

	/* Specifies the CPCON value for PllM */
	u_int32_t pllm_charge_pump_setup_ctrl;
	/* Specifies the LPCON value for PllM */
	u_int32_t pllm_loop_filter_setup_ctrl;
	/* Specifies the M value for PllM */
	u_int32_t pllm_input_divider;
	/* Specifies the N value for PllM */
	u_int32_t pllm_feedback_divider;
	/* Specifies the P value for PllM */
	u_int32_t pllm_post_divider;
	/* Specifies the time to wait for PLLM to lock (in microseconds) */
	u_int32_t pllm_stable_time;

	/* Specifies the divider for the EMC Clock Source */
	u_int32_t emc_clock_divider;


	/* Auto-calibration of EMC pads */

	/* Specifies the value for EMC_AUTO_CAL_INTERVAL */
	u_int32_t emc_auto_cal_interval;
	/**
	 * Specifies the value for EMC_AUTO_CAL_CONFIG
	 * Note: Trigger bits are set by the SDRAM code.
	 */
	u_int32_t emc_auto_cal_config;
	/**
	 * Specifies the time for the calibration to
	 * stabilize (in microseconds)
	 */
	u_int32_t emc_auto_cal_wait;

	/**
	 * Specifies the time to wait after pin programming (in microseconds)
	 * Dram vendors require at least 200us.
	 */
	u_int32_t emc_pin_program_wait;


	/* Timing parameters required for the SDRAM */

	/* Specifies the value for EMC_RC */
	u_int32_t emc_rc;
	/* Specifies the value for EMC_RFC */
	u_int32_t emc_rfc;
	/* Specifies the value for EMC_RAS */
	u_int32_t emc_ras;
	/* Specifies the value for EMC_RP */
	u_int32_t emc_rp;
	/* Specifies the value for EMC_R2W */
	u_int32_t emc_r2w;
	/* Specifies the value for EMC_R2W */
	u_int32_t emc_w2r;
	/* Specifies the value for EMC_R2P */
	u_int32_t emc_r2p;
	/* Specifies the value for EMC_W2P */
	u_int32_t emc_w2p;
	/* Specifies the value for EMC_RD_RCD */
	u_int32_t emc_rd_rcd;
	/* Specifies the value for EMC_WR_RCD */
	u_int32_t emc_wr_rcd;
	/* Specifies the value for EMC_RRD */
	u_int32_t emc_rrd;
	/* Specifies the value for EMC_REXT */
	u_int32_t emc_rext;
	/* Specifies the value for EMC_WDV */
	u_int32_t emc_wdv;
	/* Specifies the value for EMC_QUSE */
	u_int32_t emc_quse;
	/* Specifies the value for EMC_QRST */
	u_int32_t emc_qrst;
	/* Specifies the value for EMC_QSAFE */
	u_int32_t emc_qsafe;
	/* Specifies the value for EMC_RDV */
	u_int32_t emc_rdv;
	/* Specifies the value for EMC_REFRESH */
	u_int32_t emc_refresh;
	/* Specifies the value for EMC_BURST_REFRESH_NUM */
	u_int32_t emc_burst_refresh_num;
	/* Specifies the value for EMC_PDEX2WR */
	u_int32_t emc_pdex2wr;
	/* Specifies the value for EMC_PDEX2RD */
	u_int32_t emc_pdex2rd;
	/* Specifies the value for EMC_PCHG2PDEN */
	u_int32_t emc_pchg2pden;
	/* Specifies the value for EMC_ACT2PDEN */
	u_int32_t emc_act2pden;
	/* Specifies the value for EMC_AR2PDEN */
	u_int32_t emc_ar2pden;
	/* Specifies the value for EMC_RW2PDEN */
	u_int32_t emc_rw2pden;
	/* Specifies the value for EMC_TXSR */
	u_int32_t emc_txsr;
	/* Specifies the value for EMC_TCKE */
	u_int32_t emc_tcke;
	/* Specifies the value for EMC_TFAW */
	u_int32_t emc_tfaw;
	/* Specifies the value for EMC_TRPAB */
	u_int32_t emc_trpab;
	/* Specifies the value for EMC_TCLKSTABLE */
	u_int32_t emc_tclkstable;
	/* Specifies the value for EMC_TCLKSTOP */
	u_int32_t emc_tclkstop;
	/* Specifies the value for EMC_TREFBW */
	u_int32_t emc_trefbw;
	/* Specifies the value for EMC_QUSE_EXTRA */
	u_int32_t emc_quse_extra;


	/* FBIO configuration values */

	/* Specifies the value for EMC_FBIO_CFG1 */
	u_int32_t emc_fbio_cfg1;
	/* Specifies the value for EMC_FBIO_DQSIB_DLY */
	u_int32_t emc_fbio_dqsib_dly;
	/* Specifies the value for EMC_FBIO_DQSIB_DLY_MSB */
	u_int32_t emc_fbio_dqsib_dly_msb;
	/* Specifies the value for EMC_FBIO_QUSE_DLY */
	u_int32_t emc_fbio_quse_dly;
	/* Specifies the value for EMC_FBIO_QUSE_DLY_MSB */
	u_int32_t emc_fbio_quse_dly_msb;
	/* Specifies the value for EMC_FBIO_CFG5 */
	u_int32_t emc_fbio_cfg5;
	/* Specifies the value for EMC_FBIO_CFG6 */
	u_int32_t emc_fbio_cfg6;
	/* Specifies the value for EMC_FBIO_SPARE */
	u_int32_t emc_fbio_spare;


	/* MRS command values */

	/* Specifies the value for EMC_MRS */
	u_int32_t emc_mrs;
	/* Specifies the value for EMC_EMRS */
	u_int32_t emc_emrs;
	/* Specifies the first  of a sequence of three values for EMC_MRW */
	u_int32_t emc_mrw1;
	/* Specifies the second of a sequence of three values for EMC_MRW */
	u_int32_t emc_mrw2;
	/* Specifies the third  of a sequence of three values for EMC_MRW */
	u_int32_t emc_mrw3;

	/* Specifies the EMC_MRW reset command value */
	u_int32_t emc_mrw_reset_command;
	/* Specifies the EMC Reset wait time (in microseconds) */
	u_int32_t emc_mrw_reset_ninit_wait;

	/**
	 * Specifies the value for EMC_ADR_CFG
	 * The same value is also used for MC_EMC_ADR_CFG
	 */
	u_int32_t emc_adr_cfg;
	/* Specifies the value for EMC_ADR_CFG_1 */
	u_int32_t emc_adr_cfg1;

	/**
	 * Specifies the value for MC_EMEM_CFG which holds the external memory
	 * size (in KBytes)
	 * EMEM_SIZE_KB must be <= (Device size in KB * Number of Devices)
	 */
	u_int32_t mc_emem_cfg;

	/**
	 * Specifies the value for MC_LOWLATENCY_CONFIG
	 * Mainly for LL_DRAM_INTERLEAVE: Some DRAMs do not support interleave
	 * mode. If so, turn off this bit to get the correct low-latency path
	 * behavior. Reset is ENABLED.
	 */
	u_int32_t mc_lowlatency_config;
	/* Specifies the value for EMC_CFG */
	u_int32_t emc_cfg;
	/* Specifies the value for EMC_CFG_2 */
	u_int32_t emc_cfg2;
	/* Specifies the value for EMC_DBG */
	u_int32_t emc_dbg;

	/*
	 * Specifies the value for AHB_ARBITRATION_XBAR_CTRL.
	 * This is used to set the Memory Inid done
	 */
	u_int32_t ahb_arbitration_xbar_ctrl;

	/*
	 * Specifies the value for EMC_CFG_DIG_DLL
	 * Note: Trigger bits are set by the SDRAM code.
	 */
	u_int32_t emc_cfg_dig_dll;
	/* Specifies the value for EMC_DLL_XFORM_DQS */
	u_int32_t emc_dll_xform_dqs;
	/* Specifies the value for EMC_DLL_XFORM_QUSE */
	u_int32_t emc_dll_xform_quse;

	/*
	 * Specifies the delay after prgramming the PIN/NOP register during a
	 * WarmBoot0 sequence (in microseconds)
	 */
	u_int32_t warm_boot_wait;

	/* Specifies the value for EMC_CTT_TERM_CTRL */
	u_int32_t emc_ctt_term_ctrl;

	/* Specifies the value for EMC_ODT_WRITE */
	u_int32_t emc_odt_write;
	/* Specifies the value for EMC_ODT_WRITE */
	u_int32_t emc_odt_read;

	/*
	 * Specifies the value for EMC_ZCAL_REF_CNT
	 * Only meaningful for LPDDR2. Set to 0 for all other memory types.
	 */
	u_int32_t emc_zcal_ref_cnt;
	/*
	 * Specifies the value for EMC_ZCAL_WAIT_CNT
	 * Only meaningful for LPDDR2. Set to 0 for all other memory types.
	 */
	u_int32_t emc_zcal_wait_cnt;
	/*
	 * Specifies the value for EMC_ZCAL_MRW_CMD
	 * Only meaningful for LPDDR2. Set to 0 for all other memory types.
	 */
	u_int32_t emc_zcal_mrw_cmd;

	/*
	 * Specifies the MRS command value for initilizing
	 * the mode register.
	 */
	u_int32_t emc_mrs_reset_dll;
	/* Specifies the MRW command for ZQ initialization of device 0 */
	u_int32_t emc_mrw_zq_init_dev0;
	/* Specifies the MRW command for ZQ initialization of device 1 */
	u_int32_t emc_mrw_zq_init_dev1;
	/*
	 * Specifies the wait time after programming a ZQ initialization
	 * command (in microseconds)
	 */
	u_int32_t emc_mrw_zq_init_wait;
	/*
	 * Specifies the wait time after sending an MRS DLL reset command
	 * (in microseconds)
	 */
	u_int32_t emc_mrs_reset_dll_wait;
	/*
	 * Specifies the first of two EMRS commands to initialize mode
	 * registers
	 */
	u_int32_t emc_emrs_emr2;
	/*
	 * Specifies the second of two EMRS commands to initialize mode
	 * registers
	 */
	u_int32_t emc_emrs_emr3;
	/* Specifies the EMRS command to enable the DDR2 DLL */
	u_int32_t emc_emrs_ddr2_dll_enable;
	/* Specifies the MRS command to reset the DDR2 DLL */
	u_int32_t emc_mrs_ddr2_dll_reset;
	/* Specifies the EMRS command to set OCD calibration */
	u_int32_t emc_emrs_ddr2_ocd_calib;
	/*
	 * Specifies the wait between initializing DDR and setting OCD
	 * calibration (in microseconds)
	 */
	u_int32_t emc_ddr2_wait;


	/* Clock trimmers */

	/* Specifies the value for EMC_CFG_CLKTRIM_0 */
	u_int32_t emc_cfg_clktrim0;
	/* Specifies the value for EMC_CFG_CLKTRIM_1 */
	u_int32_t emc_cfg_clktrim1;
	/* Specifies the value for EMC_CFG_CLKTRIM_2 */
	u_int32_t emc_cfg_clktrim2;


	/* Pad controls */

	/* Specifies the value for PMC_DDR_PWR */
	u_int32_t pmc_ddr_pwr;
	/* Specifies the value for APB_MISC_GP_XM2CFGAPADCTRL */
	u_int32_t apb_misc_gp_xm2cfga_pad_ctrl;
	/* Specifies the value for APB_MISC_GP_XM2CFGCPADCTRL */
	u_int32_t apb_misc_gp_xm2cfgc_pad_ctrl;
	/* Specifies the value for APB_MISC_GP_XM2CFGCPADCTRL2 */
	u_int32_t apb_misc_gp_xm2cfgc_pad_ctrl2;
	/* Specifies the value for APB_MISC_GP_XM2CFGDPADCTRL */
	u_int32_t apb_misc_gp_xm2cfgd_pad_ctrl;
	/* Specifies the value for APB_MISC_GP_XM2CFGDPADCTRL2 */
	u_int32_t apb_misc_gp_xm2cfgd_pad_ctrl2;
	/* Specifies the value for APB_MISC_GP_XM2CLKCFGPADCTRL */
	u_int32_t apb_misc_gp_xm2clkcfg_Pad_ctrl;
	/* Specifies the value for APB_MISC_GP_XM2COMPPADCTRL */
	u_int32_t apb_misc_gp_xm2comp_pad_ctrl;
	/* Specifies the value for APB_MISC_GP_XM2VTTGENPADCTRL */
	u_int32_t apb_misc_gp_xm2vttgen_pad_ctrl;

	/*
	 * Specifies storage for arbitration configuration registers
	 * Data passed through to the Bootloader but not used by
	 * the Boot ROM
	 */
	u_int32_t arbitration_config[NVBOOT_BCT_SDRAM_ARB_CONFIG_WORDS];
} nvboot_sdram_params;

#endif /* #ifndef INCLUDED_NVBOOT_SDRAM_PARAM_T20_H */