coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
sdram.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/mmio.h>
4 #include <console/console.h>
5 #include <delay.h>
6 #include <soc/addressmap.h>
7 #include <soc/clock.h>
8 #include <soc/emc.h>
9 #include <soc/mc.h>
10 #include <soc/pmc.h>
11 #include <soc/sdram.h>
12 #include <symbols.h>
13 
15 {
16  if (addr)
18 }
19 
21 {
23 }
24 
25 /* PMC must be configured before clock-enable and de-reset of MC/EMC. */
26 static void sdram_configure_pmc(const struct sdram_params *param,
27  struct tegra_pmc_regs *regs)
28 {
29  /* VDDP Select */
30  write32(&regs->vddp_sel, param->PmcVddpSel);
31  udelay(param->PmcVddpSelWait);
32 
33  /* Set DDR pad voltage */
34  writebits(param->PmcDdrPwr, &regs->ddr_pwr, PMC_DDR_PWR_VAL_MASK);
35 
36  /* Set package and DPD pad control */
37  writebits(param->PmcDdrCfg, &regs->ddr_cfg,
41 
42  /* Turn on MEM IO Power */
43  writebits(param->PmcNoIoPower, &regs->no_iopower,
45 
46  write32(&regs->reg_short, param->PmcRegShort);
47 }
48 
49 static void sdram_start_clocks(const struct sdram_params *param)
50 {
51  u32 is_same_freq = (param->McEmemArbMisc0 &
53 
55  param->PllMSelectDiv2, param->PllMSetupControl,
56  param->PllMPDLshiftPh45, param->PllMPDLshiftPh90,
57  param->PllMPDLshiftPh135, param->PllMKVCO,
58  param->PllMKCP, param->PllMStableTime,
59  param->EmcClockSource, is_same_freq);
60 }
61 
62 static void sdram_deassert_clock_enable_signal(const struct sdram_params *param,
63  struct tegra_pmc_regs *regs)
64 {
65  clrbits32(&regs->por_dpd_ctrl,
67  udelay(param->PmcPorDpdCtrlWait);
68 }
69 
70 static void sdram_deassert_sel_dpd(const struct sdram_params *param,
71  struct tegra_pmc_regs *regs)
72 {
73  clrbits32(&regs->por_dpd_ctrl,
76  /*
77  * Note NVIDIA recommended to always do 10us delay here and ignore
78  * BCT.PmcPorDpdCtrlWait.
79  * */
80  udelay(10);
81 }
82 
83 static void sdram_set_swizzle(const struct sdram_params *param,
84  struct tegra_emc_regs *regs)
85 {
86  write32(&regs->swizzle_rank0_byte_cfg, param->EmcSwizzleRank0ByteCfg);
87  write32(&regs->swizzle_rank0_byte0, param->EmcSwizzleRank0Byte0);
88  write32(&regs->swizzle_rank0_byte1, param->EmcSwizzleRank0Byte1);
89  write32(&regs->swizzle_rank0_byte2, param->EmcSwizzleRank0Byte2);
90  write32(&regs->swizzle_rank0_byte3, param->EmcSwizzleRank0Byte3);
91  write32(&regs->swizzle_rank1_byte_cfg, param->EmcSwizzleRank1ByteCfg);
92  write32(&regs->swizzle_rank1_byte0, param->EmcSwizzleRank1Byte0);
93  write32(&regs->swizzle_rank1_byte1, param->EmcSwizzleRank1Byte1);
94  write32(&regs->swizzle_rank1_byte2, param->EmcSwizzleRank1Byte2);
95  write32(&regs->swizzle_rank1_byte3, param->EmcSwizzleRank1Byte3);
96 }
97 
98 static void sdram_set_pad_controls(const struct sdram_params *param,
99  struct tegra_emc_regs *regs)
100 {
101  /* Program the pad controls */
102  write32(&regs->xm2cmdpadctrl, param->EmcXm2CmdPadCtrl);
103  write32(&regs->xm2cmdpadctrl2, param->EmcXm2CmdPadCtrl2);
104  write32(&regs->xm2cmdpadctrl3, param->EmcXm2CmdPadCtrl3);
105  write32(&regs->xm2cmdpadctrl4, param->EmcXm2CmdPadCtrl4);
106  write32(&regs->xm2cmdpadctrl5, param->EmcXm2CmdPadCtrl5);
107 
108  write32(&regs->xm2dqspadctrl, param->EmcXm2DqsPadCtrl);
109  write32(&regs->xm2dqspadctrl2, param->EmcXm2DqsPadCtrl2);
110  write32(&regs->xm2dqspadctrl3, param->EmcXm2DqsPadCtrl3);
111  write32(&regs->xm2dqspadctrl4, param->EmcXm2DqsPadCtrl4);
112  write32(&regs->xm2dqspadctrl5, param->EmcXm2DqsPadCtrl5);
113  write32(&regs->xm2dqspadctrl6, param->EmcXm2DqsPadCtrl6);
114 
115  write32(&regs->xm2dqpadctrl, param->EmcXm2DqPadCtrl);
116  write32(&regs->xm2dqpadctrl2, param->EmcXm2DqPadCtrl2);
117  write32(&regs->xm2dqpadctrl3, param->EmcXm2DqPadCtrl3);
118 
119  write32(&regs->xm2clkpadctrl, param->EmcXm2ClkPadCtrl);
120  write32(&regs->xm2clkpadctrl2, param->EmcXm2ClkPadCtrl2);
121 
122  write32(&regs->xm2comppadctrl, param->EmcXm2CompPadCtrl);
123 
124  write32(&regs->xm2vttgenpadctrl, param->EmcXm2VttGenPadCtrl);
125  write32(&regs->xm2vttgenpadctrl2, param->EmcXm2VttGenPadCtrl2);
126  write32(&regs->xm2vttgenpadctrl3, param->EmcXm2VttGenPadCtrl3);
127 
128  write32(&regs->ctt_term_ctrl, param->EmcCttTermCtrl);
129 }
130 
132 {
133  write32(&regs->timing_control, EMC_TIMING_CONTROL_TIMING_UPDATE);
134 }
135 
136 static void sdram_init_mc(const struct sdram_params *param,
137  struct tegra_mc_regs *regs)
138 {
139  /* Initialize MC VPR settings */
140  write32(&regs->display_snap_ring, param->McDisplaySnapRing);
141  write32(&regs->video_protect_bom, param->McVideoProtectBom);
142  write32(&regs->video_protect_bom_adr_hi,
143  param->McVideoProtectBomAdrHi);
144  write32(&regs->video_protect_size_mb, param->McVideoProtectSizeMb);
145  write32(&regs->video_protect_vpr_override,
147  write32(&regs->video_protect_vpr_override1,
149  write32(&regs->video_protect_gpu_override_0,
151  write32(&regs->video_protect_gpu_override_1,
153 
154  /* Program SDRAM geometry paarameters */
155  write32(&regs->emem_adr_cfg, param->McEmemAdrCfg);
156  write32(&regs->emem_adr_cfg_dev0, param->McEmemAdrCfgDev0);
157  write32(&regs->emem_adr_cfg_dev1, param->McEmemAdrCfgDev1);
158 
159  /* Program bank swizzling */
160  write32(&regs->emem_bank_swizzle_cfg0, param->McEmemAdrCfgBankMask0);
161  write32(&regs->emem_bank_swizzle_cfg1, param->McEmemAdrCfgBankMask1);
162  write32(&regs->emem_bank_swizzle_cfg2, param->McEmemAdrCfgBankMask2);
163  write32(&regs->emem_bank_swizzle_cfg3,
164  param->McEmemAdrCfgBankSwizzle3);
165 
166  /* Program external memory aperature (base and size) */
167  write32(&regs->emem_cfg, param->McEmemCfg);
168 
169  /* Program SEC carveout (base and size) */
170  write32(&regs->sec_carveout_bom, param->McSecCarveoutBom);
171  write32(&regs->sec_carveout_adr_hi, param->McSecCarveoutAdrHi);
172  write32(&regs->sec_carveout_size_mb, param->McSecCarveoutSizeMb);
173 
174  /* Program MTS carveout (base and size) */
175  write32(&regs->mts_carveout_bom, param->McMtsCarveoutBom);
176  write32(&regs->mts_carveout_adr_hi, param->McMtsCarveoutAdrHi);
177  write32(&regs->mts_carveout_size_mb, param->McMtsCarveoutSizeMb);
178 
179  /* Program the memory arbiter */
180  write32(&regs->emem_arb_cfg, param->McEmemArbCfg);
181  write32(&regs->emem_arb_outstanding_req,
182  param->McEmemArbOutstandingReq);
183  write32(&regs->emem_arb_timing_rcd, param->McEmemArbTimingRcd);
184  write32(&regs->emem_arb_timing_rp, param->McEmemArbTimingRp);
185  write32(&regs->emem_arb_timing_rc, param->McEmemArbTimingRc);
186  write32(&regs->emem_arb_timing_ras, param->McEmemArbTimingRas);
187  write32(&regs->emem_arb_timing_faw, param->McEmemArbTimingFaw);
188  write32(&regs->emem_arb_timing_rrd, param->McEmemArbTimingRrd);
189  write32(&regs->emem_arb_timing_rap2pre, param->McEmemArbTimingRap2Pre);
190  write32(&regs->emem_arb_timing_wap2pre, param->McEmemArbTimingWap2Pre);
191  write32(&regs->emem_arb_timing_r2r, param->McEmemArbTimingR2R);
192  write32(&regs->emem_arb_timing_w2w, param->McEmemArbTimingW2W);
193  write32(&regs->emem_arb_timing_r2w, param->McEmemArbTimingR2W);
194  write32(&regs->emem_arb_timing_w2r, param->McEmemArbTimingW2R);
195  write32(&regs->emem_arb_da_turns, param->McEmemArbDaTurns);
196  write32(&regs->emem_arb_da_covers, param->McEmemArbDaCovers);
197  write32(&regs->emem_arb_misc0, param->McEmemArbMisc0);
198  write32(&regs->emem_arb_misc1, param->McEmemArbMisc1);
199  write32(&regs->emem_arb_ring1_throttle, param->McEmemArbRing1Throttle);
200  write32(&regs->emem_arb_override, param->McEmemArbOverride);
201  write32(&regs->emem_arb_override_1, param->McEmemArbOverride1);
202  write32(&regs->emem_arb_rsv, param->McEmemArbRsv);
203 
204  /* Program extra snap levels for display client */
205  write32(&regs->dis_extra_snap_levels, param->McDisExtraSnapLevels);
206 
207  /* Trigger MC timing update */
208  write32(&regs->timing_control, MC_TIMING_CONTROL_TIMING_UPDATE);
209 
210  /* Program second-level clock enable overrides */
211  write32(&regs->clken_override, param->McClkenOverride);
212 
213  /* Program statistics gathering */
214  write32(&regs->stat_control, param->McStatControl);
215 }
216 
217 static void sdram_init_emc(const struct sdram_params *param,
218  struct tegra_emc_regs *regs)
219 {
220  /* Program SDRAM geometry parameters */
221  write32(&regs->adr_cfg, param->EmcAdrCfg);
222 
223  /* Program second-level clock enable overrides */
224  write32(&regs->clken_override, param->EmcClkenOverride);
225 
226  /* Program EMC pad auto calibration */
227  write32(&regs->auto_cal_interval, param->EmcAutoCalInterval);
228  write32(&regs->auto_cal_config2, param->EmcAutoCalConfig2);
229  write32(&regs->auto_cal_config3, param->EmcAutoCalConfig3);
230  write32(&regs->auto_cal_config, param->EmcAutoCalConfig);
231  udelay(param->EmcAutoCalWait);
232 }
233 
234 static void sdram_set_emc_timing(const struct sdram_params *param,
235  struct tegra_emc_regs *regs)
236 {
237  /* Program EMC timing configuration */
238  write32(&regs->cfg_2, param->EmcCfg2);
239  write32(&regs->cfg_pipe, param->EmcCfgPipe);
240  write32(&regs->dbg, param->EmcDbg);
241  write32(&regs->cmdq, param->EmcCmdQ);
242  write32(&regs->mc2emcq, param->EmcMc2EmcQ);
243  write32(&regs->mrs_wait_cnt, param->EmcMrsWaitCnt);
244  write32(&regs->mrs_wait_cnt2, param->EmcMrsWaitCnt2);
245  write32(&regs->fbio_cfg5, param->EmcFbioCfg5);
246  write32(&regs->rc, param->EmcRc);
247  write32(&regs->rfc, param->EmcRfc);
248  write32(&regs->rfc_slr, param->EmcRfcSlr);
249  write32(&regs->ras, param->EmcRas);
250  write32(&regs->rp, param->EmcRp);
251  write32(&regs->r2r, param->EmcR2r);
252  write32(&regs->w2w, param->EmcW2w);
253  write32(&regs->r2w, param->EmcR2w);
254  write32(&regs->w2r, param->EmcW2r);
255  write32(&regs->r2p, param->EmcR2p);
256  write32(&regs->w2p, param->EmcW2p);
257  write32(&regs->rd_rcd, param->EmcRdRcd);
258  write32(&regs->wr_rcd, param->EmcWrRcd);
259  write32(&regs->rrd, param->EmcRrd);
260  write32(&regs->rext, param->EmcRext);
261  write32(&regs->wext, param->EmcWext);
262  write32(&regs->wdv, param->EmcWdv);
263  write32(&regs->wdv_mask, param->EmcWdvMask);
264  write32(&regs->quse, param->EmcQUse);
265  write32(&regs->quse_width, param->EmcQuseWidth);
266  write32(&regs->ibdly, param->EmcIbdly);
267  write32(&regs->einput, param->EmcEInput);
268  write32(&regs->einput_duration, param->EmcEInputDuration);
269  write32(&regs->puterm_extra, param->EmcPutermExtra);
270  write32(&regs->puterm_width, param->EmcPutermWidth);
271  write32(&regs->puterm_adj, param->EmcPutermAdj);
272  write32(&regs->cdb_cntl_1, param->EmcCdbCntl1);
273  write32(&regs->cdb_cntl_2, param->EmcCdbCntl2);
274  write32(&regs->cdb_cntl_3, param->EmcCdbCntl3);
275  write32(&regs->qrst, param->EmcQRst);
276  write32(&regs->qsafe, param->EmcQSafe);
277  write32(&regs->rdv, param->EmcRdv);
278  write32(&regs->rdv_mask, param->EmcRdvMask);
279  write32(&regs->qpop, param->EmcQpop);
280  write32(&regs->ctt, param->EmcCtt);
281  write32(&regs->ctt_duration, param->EmcCttDuration);
282  write32(&regs->refresh, param->EmcRefresh);
283  write32(&regs->burst_refresh_num, param->EmcBurstRefreshNum);
284  write32(&regs->pre_refresh_req_cnt, param->EmcPreRefreshReqCnt);
285  write32(&regs->pdex2wr, param->EmcPdEx2Wr);
286  write32(&regs->pdex2rd, param->EmcPdEx2Rd);
287  write32(&regs->pchg2pden, param->EmcPChg2Pden);
288  write32(&regs->act2pden, param->EmcAct2Pden);
289  write32(&regs->ar2pden, param->EmcAr2Pden);
290  write32(&regs->rw2pden, param->EmcRw2Pden);
291  write32(&regs->txsr, param->EmcTxsr);
292  write32(&regs->txsrdll, param->EmcTxsrDll);
293  write32(&regs->tcke, param->EmcTcke);
294  write32(&regs->tckesr, param->EmcTckesr);
295  write32(&regs->tpd, param->EmcTpd);
296  write32(&regs->tfaw, param->EmcTfaw);
297  write32(&regs->trpab, param->EmcTrpab);
298  write32(&regs->tclkstable, param->EmcTClkStable);
299  write32(&regs->tclkstop, param->EmcTClkStop);
300  write32(&regs->trefbw, param->EmcTRefBw);
301  write32(&regs->odt_write, param->EmcOdtWrite);
302  write32(&regs->odt_read, param->EmcOdtRead);
303  write32(&regs->fbio_cfg6, param->EmcFbioCfg6);
304  write32(&regs->cfg_dig_dll, param->EmcCfgDigDll);
305  write32(&regs->cfg_dig_dll_period, param->EmcCfgDigDllPeriod);
306 
307  /* Don't write bit 1: addr swizzle lock bit. Written at end of sequence. */
308  write32(&regs->fbio_spare, param->EmcFbioSpare & 0xfffffffd);
309 
310  write32(&regs->cfg_rsv, param->EmcCfgRsv);
311  write32(&regs->dll_xform_dqs0, param->EmcDllXformDqs0);
312  write32(&regs->dll_xform_dqs1, param->EmcDllXformDqs1);
313  write32(&regs->dll_xform_dqs2, param->EmcDllXformDqs2);
314  write32(&regs->dll_xform_dqs3, param->EmcDllXformDqs3);
315  write32(&regs->dll_xform_dqs4, param->EmcDllXformDqs4);
316  write32(&regs->dll_xform_dqs5, param->EmcDllXformDqs5);
317  write32(&regs->dll_xform_dqs6, param->EmcDllXformDqs6);
318  write32(&regs->dll_xform_dqs7, param->EmcDllXformDqs7);
319  write32(&regs->dll_xform_dqs8, param->EmcDllXformDqs8);
320  write32(&regs->dll_xform_dqs9, param->EmcDllXformDqs9);
321  write32(&regs->dll_xform_dqs10, param->EmcDllXformDqs10);
322  write32(&regs->dll_xform_dqs11, param->EmcDllXformDqs11);
323  write32(&regs->dll_xform_dqs12, param->EmcDllXformDqs12);
324  write32(&regs->dll_xform_dqs13, param->EmcDllXformDqs13);
325  write32(&regs->dll_xform_dqs14, param->EmcDllXformDqs14);
326  write32(&regs->dll_xform_dqs15, param->EmcDllXformDqs15);
327  write32(&regs->dll_xform_quse0, param->EmcDllXformQUse0);
328  write32(&regs->dll_xform_quse1, param->EmcDllXformQUse1);
329  write32(&regs->dll_xform_quse2, param->EmcDllXformQUse2);
330  write32(&regs->dll_xform_quse3, param->EmcDllXformQUse3);
331  write32(&regs->dll_xform_quse4, param->EmcDllXformQUse4);
332  write32(&regs->dll_xform_quse5, param->EmcDllXformQUse5);
333  write32(&regs->dll_xform_quse6, param->EmcDllXformQUse6);
334  write32(&regs->dll_xform_quse7, param->EmcDllXformQUse7);
335  write32(&regs->dll_xform_quse8, param->EmcDllXformQUse8);
336  write32(&regs->dll_xform_quse9, param->EmcDllXformQUse9);
337  write32(&regs->dll_xform_quse10, param->EmcDllXformQUse10);
338  write32(&regs->dll_xform_quse11, param->EmcDllXformQUse11);
339  write32(&regs->dll_xform_quse12, param->EmcDllXformQUse12);
340  write32(&regs->dll_xform_quse13, param->EmcDllXformQUse13);
341  write32(&regs->dll_xform_quse14, param->EmcDllXformQUse14);
342  write32(&regs->dll_xform_quse15, param->EmcDllXformQUse15);
343  write32(&regs->dll_xform_dq0, param->EmcDllXformDq0);
344  write32(&regs->dll_xform_dq1, param->EmcDllXformDq1);
345  write32(&regs->dll_xform_dq2, param->EmcDllXformDq2);
346  write32(&regs->dll_xform_dq3, param->EmcDllXformDq3);
347  write32(&regs->dll_xform_dq4, param->EmcDllXformDq4);
348  write32(&regs->dll_xform_dq5, param->EmcDllXformDq5);
349  write32(&regs->dll_xform_dq6, param->EmcDllXformDq6);
350  write32(&regs->dll_xform_dq7, param->EmcDllXformDq7);
351  write32(&regs->dll_xform_addr0, param->EmcDllXformAddr0);
352  write32(&regs->dll_xform_addr1, param->EmcDllXformAddr1);
353  write32(&regs->dll_xform_addr2, param->EmcDllXformAddr2);
354  write32(&regs->dll_xform_addr3, param->EmcDllXformAddr3);
355  write32(&regs->dll_xform_addr4, param->EmcDllXformAddr4);
356  write32(&regs->dll_xform_addr5, param->EmcDllXformAddr5);
357  write32(&regs->acpd_control, param->EmcAcpdControl);
358  write32(&regs->dsr_vttgen_drv, param->EmcDsrVttgenDrv);
359  write32(&regs->txdsrvttgen, param->EmcTxdsrvttgen);
360  write32(&regs->bgbias_ctl0, param->EmcBgbiasCtl0);
361 
362  /*
363  * Set pipe bypass enable bits before sending any DRAM commands.
364  * Note other bits in EMC_CFG must be set AFTER REFCTRL is configured.
365  */
366  writebits(param->EmcCfg, &regs->cfg,
370 }
371 
372 static void sdram_patch_bootrom(const struct sdram_params *param,
373  struct tegra_mc_regs *regs)
374 {
376  uintptr_t addr = ((param->BootRomPatchControl &
381  write32(&regs->timing_control, 1);
382  }
383 }
384 
385 static void sdram_set_dpd3(const struct sdram_params *param,
386  struct tegra_pmc_regs *regs)
387 {
388  /* Program DPD request */
389  write32(&regs->io_dpd3_req, param->PmcIoDpd3Req);
390  udelay(param->PmcIoDpd3ReqWait);
391 }
392 
393 static void sdram_set_dli_trims(const struct sdram_params *param,
394  struct tegra_emc_regs *regs)
395 {
396  /* Program DLI trims */
397  write32(&regs->dli_trim_txdqs0, param->EmcDliTrimTxDqs0);
398  write32(&regs->dli_trim_txdqs1, param->EmcDliTrimTxDqs1);
399  write32(&regs->dli_trim_txdqs2, param->EmcDliTrimTxDqs2);
400  write32(&regs->dli_trim_txdqs3, param->EmcDliTrimTxDqs3);
401  write32(&regs->dli_trim_txdqs4, param->EmcDliTrimTxDqs4);
402  write32(&regs->dli_trim_txdqs5, param->EmcDliTrimTxDqs5);
403  write32(&regs->dli_trim_txdqs6, param->EmcDliTrimTxDqs6);
404  write32(&regs->dli_trim_txdqs7, param->EmcDliTrimTxDqs7);
405  write32(&regs->dli_trim_txdqs8, param->EmcDliTrimTxDqs8);
406  write32(&regs->dli_trim_txdqs9, param->EmcDliTrimTxDqs9);
407  write32(&regs->dli_trim_txdqs10, param->EmcDliTrimTxDqs10);
408  write32(&regs->dli_trim_txdqs11, param->EmcDliTrimTxDqs11);
409  write32(&regs->dli_trim_txdqs12, param->EmcDliTrimTxDqs12);
410  write32(&regs->dli_trim_txdqs13, param->EmcDliTrimTxDqs13);
411  write32(&regs->dli_trim_txdqs14, param->EmcDliTrimTxDqs14);
412  write32(&regs->dli_trim_txdqs15, param->EmcDliTrimTxDqs15);
413 
414  write32(&regs->ca_training_timing_cntl1,
415  param->EmcCaTrainingTimingCntl1);
416  write32(&regs->ca_training_timing_cntl2,
417  param->EmcCaTrainingTimingCntl2);
418 
421 }
422 
423 static void sdram_set_clock_enable_signal(const struct sdram_params *param,
424  struct tegra_emc_regs *regs)
425 {
426  volatile uint32_t dummy = 0;
429  /*
430  * Assert dummy read of PIN register to ensure above write to PIN
431  * register went through. 200 is the recommended value by NVIDIA.
432  */
433  dummy |= read32(&regs->pin);
434  udelay(200 + param->EmcPinExtraWait);
435 
436  /* Deassert reset */
438  /*
439  * Assert dummy read of PIN register to ensure above write to PIN
440  * register went through. 200 is the recommended value by NVIDIA.
441  */
442  dummy |= read32(&regs->pin);
443  udelay(500 + param->EmcPinExtraWait);
444 
445  /* Enable clock enable signal */
447  /*
448  * Assert dummy read of PIN register to ensure above write to PIN
449  * register went through. 200 is the recommended value by NVIDIA.
450  */
451  dummy |= read32(&regs->pin);
452  udelay(param->EmcPinProgramWait);
453 
454  if (!dummy) {
455  die("Failed to program EMC pin.");
456  }
457 
458  /* Send NOP (trigger) */
461  &regs->nop,
463 
464  /* Write mode registers */
465  write32(&regs->emrs2, param->EmcEmrs2);
466  write32(&regs->emrs3, param->EmcEmrs3);
467  write32(&regs->emrs, param->EmcEmrs);
468  write32(&regs->mrs, param->EmcMrs);
469 
470  if (param->EmcExtraModeRegWriteEnable) {
471  write32(&regs->mrs, param->EmcMrwExtra);
472  }
473 }
474 
475 static void sdram_init_zq_calibration(const struct sdram_params *param,
476  struct tegra_emc_regs *regs)
477 {
478  if ((param->EmcZcalWarmColdBootEnables &
480  /* Need to initialize ZCAL on coldboot. */
481  write32(&regs->zq_cal, param->EmcZcalInitDev0);
482  udelay(param->EmcZcalInitWait);
483 
484  if ((param->EmcDevSelect & 2) == 0) {
485  write32(&regs->zq_cal, param->EmcZcalInitDev1);
486  udelay(param->EmcZcalInitWait);
487  }
488  } else {
489  udelay(param->EmcZcalInitWait);
490  }
491 }
492 
493 static void sdram_set_zq_calibration(const struct sdram_params *param,
494  struct tegra_emc_regs *regs)
495 {
496  /* Start periodic ZQ calibration */
497  write32(&regs->zcal_interval, param->EmcZcalInterval);
498  write32(&regs->zcal_wait_cnt, param->EmcZcalWaitCnt);
499  write32(&regs->zcal_mrw_cmd, param->EmcZcalMrwCmd);
500 }
501 
502 static void sdram_set_refresh(const struct sdram_params *param,
503  struct tegra_emc_regs *regs)
504 {
505  /* Insert burst refresh */
506  if (param->EmcExtraRefreshNum > 0) {
507  uint32_t refresh_num = (1 << param->EmcExtraRefreshNum) - 1;
509  (refresh_num << EMC_REF_NUM_SHIFT) |
514  }
515 
516  /* Enable refresh */
517  write32(&regs->refctrl,
519 
520  write32(&regs->dyn_self_ref_control, param->EmcDynSelfRefControl);
521  write32(&regs->cfg, param->EmcCfg);
522  write32(&regs->sel_dpd_ctrl, param->EmcSelDpdCtrl);
523 
524  /* Write addr swizzle lock bit */
525  write32(&regs->fbio_spare, param->EmcFbioSpare);
526 
527  /* Re-trigger timing to latch power saving functions */
529 }
530 
531 static void sdram_enable_arbiter(const struct sdram_params *param)
532 {
533  /* TODO(hungte) Move values here to standalone header file. */
534  uint32_t *AHB_ARBITRATION_XBAR_CTRL = (uint32_t*)(0x6000c000 + 0xe0);
535  setbits32(AHB_ARBITRATION_XBAR_CTRL,
536  param->AhbArbitrationXbarCtrlMemInitDone << 16);
537 }
538 
539 static void sdram_lock_carveouts(const struct sdram_params *param,
540  struct tegra_mc_regs *regs)
541 {
542  /* Lock carveouts, and emem_cfg registers */
543  write32(&regs->video_protect_reg_ctrl,
545  write32(&regs->emem_cfg_access_ctrl,
547  write32(&regs->sec_carveout_reg_ctrl,
549  write32(&regs->mts_carveout_reg_ctrl, param->McMtsCarveoutRegCtrl);
550 }
551 
552 void sdram_init(const struct sdram_params *param)
553 {
554  struct tegra_pmc_regs *pmc = (struct tegra_pmc_regs*)TEGRA_PMC_BASE;
555  struct tegra_mc_regs *mc = (struct tegra_mc_regs*)TEGRA_MC_BASE;
556  struct tegra_emc_regs *emc = (struct tegra_emc_regs*)TEGRA_EMC_BASE;
557 
558  printk(BIOS_DEBUG, "Initializing SDRAM of type %d with %dKHz\n",
560  param->PllMFeedbackDivider / param->PllMInputDivider /
561  (1 + param->PllMSelectDiv2));
562  if (param->MemoryType != NvBootMemoryType_Ddr3)
563  die("Unsupported memory type!\n");
564 
565  sdram_configure_pmc(param, pmc);
566  sdram_patch(param->EmcBctSpare0, param->EmcBctSpare1);
567 
568  sdram_start_clocks(param);
569  sdram_patch(param->EmcBctSpare2, param->EmcBctSpare3);
570 
571  sdram_deassert_sel_dpd(param, pmc);
572  sdram_set_swizzle(param, emc);
573  sdram_set_pad_controls(param, emc);
574  sdram_patch(param->EmcBctSpare4, param->EmcBctSpare5);
575 
577  sdram_init_mc(param, mc);
578  sdram_init_emc(param, emc);
579  sdram_patch(param->EmcBctSpare6, param->EmcBctSpare7);
580 
581  sdram_set_emc_timing(param, emc);
582  sdram_patch_bootrom(param, mc);
583  sdram_set_dpd3(param, pmc);
584  sdram_set_dli_trims(param, emc);
586  sdram_set_clock_enable_signal(param, emc);
587  sdram_init_zq_calibration(param, emc);
588  sdram_patch(param->EmcBctSpare8, param->EmcBctSpare9);
589 
590  sdram_set_zq_calibration(param, emc);
591  sdram_patch(param->EmcBctSpare10, param->EmcBctSpare11);
592 
594  sdram_set_refresh(param, emc);
595  sdram_enable_arbiter(param);
596  sdram_lock_carveouts(param, mc);
597 
598  sdram_lp0_save_params(param);
599 }
600 
602 {
603  struct tegra_pmc_regs *pmc = (struct tegra_pmc_regs*)TEGRA_PMC_BASE;
604  return ((read32(&pmc->strapping_opt_a) &
607 }
608 
609 /* returns total amount of DRAM (in MB) from memory controller registers */
610 int sdram_size_mb(void)
611 {
612  struct tegra_mc_regs *mc = (struct tegra_mc_regs *)TEGRA_MC_BASE;
613  static int total_size = 0;
614 
615  if (total_size)
616  return total_size;
617 
618  /*
619  * This obtains memory size from the External Memory Aperture
620  * Configuration register. Nvidia confirmed that it is safe to assume
621  * this value represents the total physical DRAM size.
622  */
623  total_size = (read32(&mc->emem_cfg) >>
625 
626  printk(BIOS_DEBUG, "%s: Total SDRAM (MB): %u\n", __func__, total_size);
627  return total_size;
628 }
629 
631 {
632  return MIN(((uintptr_t)_dram/MiB) + sdram_size_mb(), 4096);
633 }
pte_t value
Definition: mmu.c:91
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
static uint32_t read32(const void *addr)
Definition: mmio.h:22
#define MIN(a, b)
Definition: helpers.h:37
#define MiB
Definition: helpers.h:76
size_t sdram_size_mb(void)
Definition: sdram.c:24
static u32 addr
Definition: cirrus.c:14
#define printk(level,...)
Definition: stdlib.h:16
void __noreturn die(const char *fmt,...)
Definition: die.c:17
#define setbits32(addr, set)
Definition: mmio.h:21
#define clrsetbits32(addr, clear, set)
Definition: mmio.h:16
#define clrbits32(addr, clear)
Definition: mmio.h:26
u8 _dram[]
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
@ PMC_DDR_PWR_VAL_MASK
Definition: pmc.h:338
@ PMC_NO_IOPOWER_MEM_COMP_MASK
Definition: pmc.h:350
@ PMC_NO_IOPOWER_MEM_MASK
Definition: pmc.h:349
@ PMC_POR_DPD_CTRL_MEM0_HOLD_CKE_LOW_OVR_MASK
Definition: pmc.h:356
@ PMC_POR_DPD_CTRL_MEM0_ADDR1_CLK_SEL_DPD_MASK
Definition: pmc.h:355
@ PMC_POR_DPD_CTRL_MEM0_ADDR0_CLK_SEL_DPD_MASK
Definition: pmc.h:354
@ PMC_STRAPPING_OPT_A_RAM_CODE_SHIFT
Definition: pmc.h:370
@ PMC_STRAPPING_OPT_A_RAM_CODE_MASK
Definition: pmc.h:371
@ PMC_DDR_CFG_IF_MASK
Definition: pmc.h:343
@ PMC_DDR_CFG_PKG_MASK
Definition: pmc.h:342
@ PMC_DDR_CFG_XM0_RESET_DPDIO_MASK
Definition: pmc.h:345
@ PMC_DDR_CFG_XM0_RESET_TRI_MASK
Definition: pmc.h:344
void sdram_lp0_save_params(const struct sdram_params *sdram)
Definition: sdram_lp0.c:24
static void sdram_set_swizzle(const struct sdram_params *param, struct tegra_emc_regs *regs)
Definition: sdram.c:83
static void sdram_set_refresh(const struct sdram_params *param, struct tegra_emc_regs *regs)
Definition: sdram.c:502
static void sdram_set_clock_enable_signal(const struct sdram_params *param, struct tegra_emc_regs *regs)
Definition: sdram.c:423
uint32_t sdram_get_ram_code(void)
Definition: sdram.c:601
static void sdram_trigger_emc_timing_update(struct tegra_emc_regs *regs)
Definition: sdram.c:131
static void sdram_init_mc(const struct sdram_params *param, struct tegra_mc_regs *regs)
Definition: sdram.c:136
static void sdram_configure_pmc(const struct sdram_params *param, struct tegra_pmc_regs *regs)
Definition: sdram.c:26
static void sdram_set_emc_timing(const struct sdram_params *param, struct tegra_emc_regs *regs)
Definition: sdram.c:234
static void sdram_patch(uintptr_t addr, uint32_t value)
Definition: sdram.c:14
static void sdram_init_emc(const struct sdram_params *param, struct tegra_emc_regs *regs)
Definition: sdram.c:217
uintptr_t sdram_max_addressable_mb(void)
Definition: sdram.c:630
static void sdram_lock_carveouts(const struct sdram_params *param, struct tegra_mc_regs *regs)
Definition: sdram.c:539
static void sdram_deassert_sel_dpd(const struct sdram_params *param, struct tegra_pmc_regs *regs)
Definition: sdram.c:70
static void sdram_set_dpd3(const struct sdram_params *param, struct tegra_pmc_regs *regs)
Definition: sdram.c:385
static void sdram_deassert_clock_enable_signal(const struct sdram_params *param, struct tegra_pmc_regs *regs)
Definition: sdram.c:62
void sdram_init(const struct sdram_params *param)
Definition: sdram.c:552
static void sdram_set_pad_controls(const struct sdram_params *param, struct tegra_emc_regs *regs)
Definition: sdram.c:98
static void writebits(uint32_t value, uint32_t *addr, uint32_t mask)
Definition: sdram.c:20
static void sdram_enable_arbiter(const struct sdram_params *param)
Definition: sdram.c:531
static void sdram_patch_bootrom(const struct sdram_params *param, struct tegra_mc_regs *regs)
Definition: sdram.c:372
static void sdram_set_dli_trims(const struct sdram_params *param, struct tegra_emc_regs *regs)
Definition: sdram.c:393
static void sdram_set_zq_calibration(const struct sdram_params *param, struct tegra_emc_regs *regs)
Definition: sdram.c:493
static void sdram_init_zq_calibration(const struct sdram_params *param, struct tegra_emc_regs *regs)
Definition: sdram.c:475
static void sdram_start_clocks(const struct sdram_params *param)
Definition: sdram.c:49
static const int mask[4]
Definition: gpio.c:308
int clock_get_pll_input_khz(void)
Definition: clock.c:160
void clock_sdram(u32 m, u32 n, u32 p, u32 setup, u32 ph45, u32 ph90, u32 ph135, u32 kvco, u32 kcp, u32 stable_time, u32 emc_source, u32 same_freq)
Definition: clock.c:416
static struct tegra_pmc_regs * pmc
Definition: clock.c:19
@ TEGRA_EMC_BASE
Definition: addressmap.h:54
@ TEGRA_MC_BASE
Definition: addressmap.h:53
@ TEGRA_PMC_BASE
Definition: addressmap.h:51
unsigned int uint32_t
Definition: stdint.h:14
uint32_t u32
Definition: stdint.h:51
unsigned long uintptr_t
Definition: stdint.h:21
Defines the SDRAM parameter structure.
Definition: emi.h:15
uint32_t EmcRw2Pden
Definition: sdram_param.h:239
uint32_t EmcMrsWaitCnt2
Definition: sdram_param.h:319
uint32_t EmcFbioSpare
Definition: sdram_param.h:268
uint32_t McVideoProtectWriteAccess
Definition: sdram_param.h:770
uint32_t EmcDliTrimTxDqs13
Definition: sdram_param.h:456
uint32_t McDisExtraSnapLevels
Definition: sdram_param.h:567
uint32_t EmcQSafe
Definition: sdram_param.h:211
uint32_t McSecCarveoutBom
Definition: sdram_param.h:764
uint32_t EmcDllXformDqs12
Definition: sdram_param.h:378
uint32_t EmcDllXformDq3
Definition: sdram_param.h:468
uint32_t EmcBctSpare2
Definition: sdram_param.h:85
uint32_t EmcCfg
Definition: sdram_param.h:324
uint32_t EmcSwizzleRank1Byte3
Definition: sdram_param.h:662
uint32_t McVideoProtectBomAdrHi
Definition: sdram_param.h:752
uint32_t McEmemArbMisc1
Definition: sdram_param.h:732
uint32_t EmcXm2CompPadCtrl
Definition: sdram_param.h:633
uint32_t EmcCaTrainingTimingCntl1
Definition: sdram_param.h:777
uint32_t McSecCarveoutSizeMb
Definition: sdram_param.h:768
uint32_t McEmemCfg
Definition: sdram_param.h:693
uint32_t EmcDllXformDqs5
Definition: sdram_param.h:364
uint32_t EmcClkenOverride
Definition: sdram_param.h:565
uint32_t McEmemAdrCfgBankSwizzle3
Definition: sdram_param.h:687
uint32_t EmcDliTrimTxDqs11
Definition: sdram_param.h:452
uint32_t EmcDllXformQUse7
Definition: sdram_param.h:400
uint32_t PmcIoDpd3ReqWait
Definition: sdram_param.h:593
uint32_t EmcXm2DqsPadCtrl3
Definition: sdram_param.h:615
uint32_t EmcWrRcd
Definition: sdram_param.h:175
uint32_t EmcAdrCfg
Definition: sdram_param.h:133
uint32_t AhbArbitrationXbarCtrlMemInitDone
Definition: sdram_param.h:339
uint32_t EmcXm2VttGenPadCtrl3
Definition: sdram_param.h:639
uint32_t EmcXm2DqsPadCtrl5
Definition: sdram_param.h:619
uint32_t EmcXm2DqsPadCtrl4
Definition: sdram_param.h:617
uint32_t McEmemAdrCfg
Definition: sdram_param.h:675
uint32_t McEmemArbCfg
Definition: sdram_param.h:698
uint32_t EmcRfcSlr
Definition: sdram_param.h:155
uint32_t EmcDllXformDqs10
Definition: sdram_param.h:374
uint32_t EmcDliTrimTxDqs14
Definition: sdram_param.h:458
uint32_t EmcDliTrimTxDqs0
Definition: sdram_param.h:430
uint32_t PllMInputDivider
Definition: sdram_param.h:61
uint32_t PllMPDLshiftPh45
Definition: sdram_param.h:71
uint32_t McEmemArbRing1Throttle
Definition: sdram_param.h:734
uint32_t EmcQpop
Definition: sdram_param.h:217
uint32_t EmcQUse
Definition: sdram_param.h:187
uint32_t EmcCmdQ
Definition: sdram_param.h:332
uint32_t EmcDllXformQUse5
Definition: sdram_param.h:396
uint32_t EmcTimingControlWait
Definition: sdram_param.h:146
uint32_t EmcTxdsrvttgen
Definition: sdram_param.h:668
uint32_t EmcDllXformAddr4
Definition: sdram_param.h:410
uint32_t EmcBctSpare5
Definition: sdram_param.h:91
uint32_t EmcZcalWaitCnt
Definition: sdram_param.h:500
uint32_t EmcMrwExtra
Definition: sdram_param.h:295
uint32_t EmcXm2ClkPadCtrl
Definition: sdram_param.h:629
uint32_t EmcAutoCalConfig2
Definition: sdram_param.h:118
uint32_t EmcXm2CmdPadCtrl2
Definition: sdram_param.h:603
uint32_t EmcSwizzleRank0Byte2
Definition: sdram_param.h:650
uint32_t EmcCaTrainingTimingCntl2
Definition: sdram_param.h:779
uint32_t EmcDllXformDqs0
Definition: sdram_param.h:354
uint32_t EmcDliTrimTxDqs6
Definition: sdram_param.h:442
uint32_t EmcPinProgramWait
Definition: sdram_param.h:139
uint32_t EmcBctSpare1
Definition: sdram_param.h:83
uint32_t McEmemArbTimingRrd
Definition: sdram_param.h:712
uint32_t EmcBctSpare6
Definition: sdram_param.h:93
uint32_t McEmemAdrCfgBankMask2
Definition: sdram_param.h:685
uint32_t EmcRrd
Definition: sdram_param.h:177
uint32_t EmcDliTrimTxDqs8
Definition: sdram_param.h:446
uint32_t EmcTrpab
Definition: sdram_param.h:253
uint32_t McEmemArbTimingRp
Definition: sdram_param.h:704
uint32_t McEmemArbTimingR2W
Definition: sdram_param.h:722
uint32_t BootRomPatchData
Definition: sdram_param.h:785
uint32_t McEmemArbTimingRas
Definition: sdram_param.h:708
uint32_t EmcPreRefreshReqCnt
Definition: sdram_param.h:227
uint32_t EmcTClkStable
Definition: sdram_param.h:255
uint32_t EmcSwizzleRank1Byte1
Definition: sdram_param.h:658
uint32_t EmcEmrs2
Definition: sdram_param.h:280
uint32_t EmcTxsr
Definition: sdram_param.h:241
uint32_t EmcZcalInitDev1
Definition: sdram_param.h:511
uint32_t EmcDllXformQUse11
Definition: sdram_param.h:420
uint32_t EmcRc
Definition: sdram_param.h:151
uint32_t EmcDllXformAddr5
Definition: sdram_param.h:412
uint32_t EmcRdv
Definition: sdram_param.h:213
uint32_t EmcSwizzleRank0Byte0
Definition: sdram_param.h:646
uint32_t EmcSwizzleRank1Byte0
Definition: sdram_param.h:656
uint32_t EmcDllXformQUse10
Definition: sdram_param.h:418
uint32_t EmcMrsWaitCnt
Definition: sdram_param.h:317
uint32_t EmcBctSpare9
Definition: sdram_param.h:99
uint32_t McEmemArbDaCovers
Definition: sdram_param.h:728
uint32_t EmcW2w
Definition: sdram_param.h:163
uint32_t EmcRfc
Definition: sdram_param.h:153
uint32_t McVideoProtectGpuOverride0
Definition: sdram_param.h:760
uint32_t EmcCttDuration
Definition: sdram_param.h:221
uint32_t PllMSetupControl
Definition: sdram_param.h:67
uint32_t EmcDevSelect
Definition: sdram_param.h:346
uint32_t EmcPinExtraWait
Definition: sdram_param.h:141
uint32_t EmcZcalInitDev0
Definition: sdram_param.h:509
uint32_t EmcPdEx2Wr
Definition: sdram_param.h:229
uint32_t EmcPutermWidth
Definition: sdram_param.h:199
uint32_t EmcDllXformQUse0
Definition: sdram_param.h:386
uint32_t EmcDllXformQUse2
Definition: sdram_param.h:390
uint32_t EmcCfgRsv
Definition: sdram_param.h:271
uint32_t EmcXm2VttGenPadCtrl
Definition: sdram_param.h:635
uint32_t EmcXm2DqPadCtrl2
Definition: sdram_param.h:625
uint32_t EmcR2p
Definition: sdram_param.h:169
uint32_t PmcIoDpd3Req
Definition: sdram_param.h:591
uint32_t EmcBctSpare7
Definition: sdram_param.h:95
uint32_t EmcDliTrimTxDqs5
Definition: sdram_param.h:440
uint32_t EmcDllXformQUse8
Definition: sdram_param.h:414
uint32_t EmcPutermAdj
Definition: sdram_param.h:201
uint32_t McEmemArbMisc0
Definition: sdram_param.h:730
uint32_t EmcEmrs3
Definition: sdram_param.h:282
uint32_t PmcDdrCfg
Definition: sdram_param.h:589
uint32_t McVideoProtectVprOverride
Definition: sdram_param.h:756
uint32_t EmcEInputDuration
Definition: sdram_param.h:195
uint32_t EmcAutoCalConfig
Definition: sdram_param.h:115
uint32_t EmcBctSpare11
Definition: sdram_param.h:103
uint32_t EmcAutoCalInterval
Definition: sdram_param.h:110
uint32_t EmcCfg2
Definition: sdram_param.h:326
uint32_t EmcRefresh
Definition: sdram_param.h:223
uint32_t EmcTfaw
Definition: sdram_param.h:251
uint32_t EmcDllXformAddr1
Definition: sdram_param.h:404
uint32_t EmcDllXformDq5
Definition: sdram_param.h:472
uint32_t EmcWdvMask
Definition: sdram_param.h:185
uint32_t EmcXm2DqsPadCtrl
Definition: sdram_param.h:611
uint32_t EmcXm2DqsPadCtrl6
Definition: sdram_param.h:621
uint32_t EmcExtraRefreshNum
Definition: sdram_param.h:572
uint32_t EmcTpd
Definition: sdram_param.h:249
uint32_t EmcDllXformDqs7
Definition: sdram_param.h:368
uint32_t EmcEmrs
Definition: sdram_param.h:278
uint32_t McMtsCarveoutSizeMb
Definition: sdram_param.h:791
uint32_t EmcOdtRead
Definition: sdram_param.h:490
uint32_t EmcClockSource
Definition: sdram_param.h:105
uint32_t EmcXm2DqPadCtrl
Definition: sdram_param.h:623
uint32_t EmcWext
Definition: sdram_param.h:181
uint32_t EmcMrs
Definition: sdram_param.h:276
uint32_t EmcDllXformQUse3
Definition: sdram_param.h:392
uint32_t EmcAcpdControl
Definition: sdram_param.h:641
uint32_t McEmemArbRsv
Definition: sdram_param.h:740
uint32_t EmcDllXformDqs6
Definition: sdram_param.h:366
uint32_t EmcDllXformQUse9
Definition: sdram_param.h:416
uint32_t EmcDllXformQUse15
Definition: sdram_param.h:428
uint32_t EmcFbioCfg6
Definition: sdram_param.h:266
uint32_t EmcCttTermCtrl
Definition: sdram_param.h:485
uint32_t EmcBurstRefreshNum
Definition: sdram_param.h:225
uint32_t McEmemArbTimingW2W
Definition: sdram_param.h:720
uint32_t McMtsCarveoutRegCtrl
Definition: sdram_param.h:793
uint32_t EmcPdEx2Rd
Definition: sdram_param.h:231
uint32_t EmcXm2CmdPadCtrl4
Definition: sdram_param.h:607
uint32_t EmcCfgDigDllPeriod
Definition: sdram_param.h:344
uint32_t EmcZcalMrwCmd
Definition: sdram_param.h:502
uint32_t EmcDllXformAddr2
Definition: sdram_param.h:406
uint32_t McSecCarveoutAdrHi
Definition: sdram_param.h:766
uint32_t EmcBctSpare3
Definition: sdram_param.h:87
uint32_t EmcDllXformDqs15
Definition: sdram_param.h:384
uint32_t McEmemAdrCfgDev0
Definition: sdram_param.h:677
uint32_t EmcCfgDigDll
Definition: sdram_param.h:342
uint32_t EmcDllXformDqs11
Definition: sdram_param.h:376
uint32_t McClkenOverride
Definition: sdram_param.h:743
uint32_t EmcDllXformAddr3
Definition: sdram_param.h:408
uint32_t EmcDllXformDqs3
Definition: sdram_param.h:360
uint32_t EmcCdbCntl3
Definition: sdram_param.h:207
uint32_t EmcXm2DqsPadCtrl2
Definition: sdram_param.h:613
uint32_t EmcDllXformAddr0
Definition: sdram_param.h:402
uint32_t EmcFbioCfg5
Definition: sdram_param.h:264
uint32_t EmcTxsrDll
Definition: sdram_param.h:243
uint32_t McVideoProtectVprOverride1
Definition: sdram_param.h:758
uint32_t EmcWdv
Definition: sdram_param.h:183
uint32_t EmcCdbCntl1
Definition: sdram_param.h:203
uint32_t EmcAr2Pden
Definition: sdram_param.h:237
uint32_t EmcQuseWidth
Definition: sdram_param.h:189
uint32_t McEmemAdrCfgBankMask0
Definition: sdram_param.h:681
uint32_t EmcZcalInitWait
Definition: sdram_param.h:516
uint32_t PmcVddpSelWait
Definition: sdram_param.h:585
uint32_t EmcDllXformDqs13
Definition: sdram_param.h:380
uint32_t PmcRegShort
Definition: sdram_param.h:595
uint32_t EmcSwizzleRank1ByteCfg
Definition: sdram_param.h:654
uint32_t EmcDllXformQUse6
Definition: sdram_param.h:398
uint32_t EmcDliTrimTxDqs4
Definition: sdram_param.h:438
uint32_t McEmemArbTimingRc
Definition: sdram_param.h:706
uint32_t PmcVddpSel
Definition: sdram_param.h:583
uint32_t McEmemAdrCfgDev1
Definition: sdram_param.h:679
uint32_t EmcDllXformDq7
Definition: sdram_param.h:476
uint32_t EmcDliTrimTxDqs2
Definition: sdram_param.h:434
uint32_t McEmemArbTimingRcd
Definition: sdram_param.h:702
uint32_t EmcDliTrimTxDqs10
Definition: sdram_param.h:450
uint32_t EmcDliTrimTxDqs15
Definition: sdram_param.h:460
uint32_t EmcXm2CmdPadCtrl
Definition: sdram_param.h:601
uint32_t EmcExtraModeRegWriteEnable
Definition: sdram_param.h:310
uint32_t EmcDllXformDq4
Definition: sdram_param.h:470
uint32_t EmcCtt
Definition: sdram_param.h:219
uint32_t EmcBctSpare8
Definition: sdram_param.h:97
uint32_t EmcAct2Pden
Definition: sdram_param.h:235
uint32_t EmcEInput
Definition: sdram_param.h:193
uint32_t BootRomPatchControl
Definition: sdram_param.h:783
uint32_t EmcPutermExtra
Definition: sdram_param.h:197
uint32_t EmcBctSpare0
Definition: sdram_param.h:81
uint32_t EmcDllXformQUse14
Definition: sdram_param.h:426
uint32_t EmcDliTrimTxDqs12
Definition: sdram_param.h:454
uint32_t EmcDllXformDq0
Definition: sdram_param.h:462
uint32_t EmcDllXformDqs4
Definition: sdram_param.h:362
uint32_t EmcDliTrimTxDqs7
Definition: sdram_param.h:444
uint32_t EmcR2w
Definition: sdram_param.h:165
uint32_t McEmemArbTimingR2R
Definition: sdram_param.h:718
uint32_t PllMFeedbackDivider
Definition: sdram_param.h:63
uint32_t PllMKCP
Definition: sdram_param.h:77
uint32_t EmcDllXformDqs1
Definition: sdram_param.h:356
uint32_t PllMKVCO
Definition: sdram_param.h:79
uint32_t EmcSwizzleRank0ByteCfg
Definition: sdram_param.h:644
uint32_t EmcRdRcd
Definition: sdram_param.h:173
uint32_t EmcTRefBw
Definition: sdram_param.h:259
uint32_t EmcDllXformQUse12
Definition: sdram_param.h:422
uint32_t EmcBgbiasCtl0
Definition: sdram_param.h:670
uint32_t PmcPorDpdCtrlWait
Definition: sdram_param.h:599
uint32_t McVideoProtectBom
Definition: sdram_param.h:750
uint32_t McEmemArbOutstandingReq
Definition: sdram_param.h:700
uint32_t EmcDllXformDqs8
Definition: sdram_param.h:370
uint32_t EmcDliTrimTxDqs1
Definition: sdram_param.h:432
uint32_t EmcDliTrimTxDqs3
Definition: sdram_param.h:436
uint32_t McEmemAdrCfgBankMask1
Definition: sdram_param.h:683
uint32_t EmcDsrVttgenDrv
Definition: sdram_param.h:665
uint32_t McVideoProtectGpuOverride1
Definition: sdram_param.h:762
uint32_t EmcTClkStop
Definition: sdram_param.h:257
uint32_t McEmemArbTimingRap2Pre
Definition: sdram_param.h:714
uint32_t EmcIbdly
Definition: sdram_param.h:191
uint32_t EmcXm2VttGenPadCtrl2
Definition: sdram_param.h:637
uint32_t EmcPChg2Pden
Definition: sdram_param.h:233
uint32_t EmcSelDpdCtrl
Definition: sdram_param.h:349
uint32_t McEmemArbDaTurns
Definition: sdram_param.h:726
uint32_t McDisplaySnapRing
Definition: sdram_param.h:748
uint32_t McMtsCarveoutAdrHi
Definition: sdram_param.h:789
uint32_t PllMStableTime
Definition: sdram_param.h:65
uint32_t EmcDllXformDqs2
Definition: sdram_param.h:358
uint32_t PmcNoIoPower
Definition: sdram_param.h:597
uint32_t McVideoProtectSizeMb
Definition: sdram_param.h:754
uint32_t EmcZcalInterval
Definition: sdram_param.h:498
uint32_t EmcSwizzleRank0Byte3
Definition: sdram_param.h:652
uint32_t EmcAutoCalWait
Definition: sdram_param.h:127
uint32_t EmcXm2ClkPadCtrl2
Definition: sdram_param.h:631
uint32_t EmcRext
Definition: sdram_param.h:179
uint32_t EmcBctSpare4
Definition: sdram_param.h:89
uint32_t EmcTcke
Definition: sdram_param.h:245
uint32_t EmcDllXformQUse13
Definition: sdram_param.h:424
uint32_t EmcDllXformDq6
Definition: sdram_param.h:474
uint32_t EmcDllXformDqs14
Definition: sdram_param.h:382
uint32_t EmcDllXformDqs9
Definition: sdram_param.h:372
uint32_t PllMPDLshiftPh135
Definition: sdram_param.h:75
uint32_t EmcRdvMask
Definition: sdram_param.h:215
uint32_t EmcW2p
Definition: sdram_param.h:171
uint32_t EmcZcalWarmColdBootEnables
Definition: sdram_param.h:521
uint32_t EmcAutoCalConfig3
Definition: sdram_param.h:121
uint32_t PmcDdrPwr
Definition: sdram_param.h:587
uint32_t McStatControl
Definition: sdram_param.h:746
uint32_t EmcDllXformDq1
Definition: sdram_param.h:464
uint32_t EmcBctSpare10
Definition: sdram_param.h:101
uint32_t EmcDllXformQUse1
Definition: sdram_param.h:388
uint32_t EmcDllXformDq2
Definition: sdram_param.h:466
uint32_t McEmemArbTimingFaw
Definition: sdram_param.h:710
uint32_t EmcDliTrimTxDqs9
Definition: sdram_param.h:448
uint32_t EmcXm2DqPadCtrl3
Definition: sdram_param.h:627
uint32_t PllMPDLshiftPh90
Definition: sdram_param.h:73
uint32_t EmcCdbCntl2
Definition: sdram_param.h:205
uint32_t McEmemArbOverride1
Definition: sdram_param.h:738
uint32_t EmcQRst
Definition: sdram_param.h:209
uint32_t McEmemArbTimingWap2Pre
Definition: sdram_param.h:716
uint32_t EmcDbg
Definition: sdram_param.h:330
uint32_t McEmemArbTimingW2R
Definition: sdram_param.h:724
uint32_t EmcR2r
Definition: sdram_param.h:161
uint32_t EmcRas
Definition: sdram_param.h:157
uint32_t EmcOdtWrite
Definition: sdram_param.h:488
uint32_t EmcDynSelfRefControl
Definition: sdram_param.h:336
uint32_t EmcSwizzleRank0Byte1
Definition: sdram_param.h:648
uint32_t EmcCfgPipe
Definition: sdram_param.h:328
uint32_t EmcDllXformQUse4
Definition: sdram_param.h:394
uint32_t McMtsCarveoutBom
Definition: sdram_param.h:787
uint32_t EmcSwizzleRank1Byte2
Definition: sdram_param.h:660
uint32_t McSecCarveoutProtectWriteAccess
Definition: sdram_param.h:772
uint32_t EmcRp
Definition: sdram_param.h:159
uint32_t EmcW2r
Definition: sdram_param.h:167
uint32_t McEmemArbOverride
Definition: sdram_param.h:736
uint32_t EmcXm2CmdPadCtrl3
Definition: sdram_param.h:605
uint32_t EmcXm2CmdPadCtrl5
Definition: sdram_param.h:609
uint32_t EmcTckesr
Definition: sdram_param.h:247
uint32_t EmcMc2EmcQ
Definition: sdram_param.h:334
uint32_t PllMSelectDiv2
Definition: sdram_param.h:69
uint32_t MemoryType
Definition: sdram_param.h:56
uint32_t emem_cfg
Definition: mc.h:22
u32 strapping_opt_a
Definition: pmc.h:234
@ EMC_REF_CMD_MASK
Definition: emc.h:20
@ EMC_REF_DEV_SELECTN_SHIFT
Definition: emc.h:27
@ EMC_REF_NORMAL_MASK
Definition: emc.h:22
@ EMC_CFG_EMC2PMACRO_CFG_BYPASS_DATAPIPE1_MASK
Definition: emc.h:35
@ EMC_PIN_DQM_MASK
Definition: emc.h:13
@ EMC_NOP_NOP_DEV_SELECTN_MASK
Definition: emc.h:41
@ EMC_REF_NUM_SHIFT
Definition: emc.h:25
@ EMC_REFCTRL_REF_VALID_ENABLED
Definition: emc.h:32
@ EMC_PIN_CKE_MASK
Definition: emc.h:16
@ EMC_PIN_CKE_NORMAL
Definition: emc.h:18
@ EMC_REF_NORMAL_ENABLED
Definition: emc.h:24
@ EMC_CFG_EMC2PMACRO_CFG_BYPASS_ADDRPIPE_MASK
Definition: emc.h:34
@ EMC_CFG_EMC2PMACRO_CFG_BYPASS_DATAPIPE2_MASK
Definition: emc.h:36
@ EMC_NOP_NOP_CMD_MASK
Definition: emc.h:39
@ EMC_PIN_RESET_INACTIVE
Definition: emc.h:12
@ EMC_REF_CMD_REFRESH
Definition: emc.h:21
@ EMC_PIN_RESET_MASK
Definition: emc.h:10
@ EMC_TIMING_CONTROL_TIMING_UPDATE
Definition: emc.h:43
@ EMC_REF_NUM_MASK
Definition: emc.h:26
@ EMC_NOP_NOP_CMD_SHIFT
Definition: emc.h:38
@ EMC_REF_DEV_SELECTN_MASK
Definition: emc.h:28
@ EMC_NOP_NOP_DEV_SELECTN_SHIFT
Definition: emc.h:40
@ MC_EMEM_CFG_ACCESS_CTRL_WRITE_ACCESS_DISABLED
Definition: mc.h:109
@ MC_EMEM_CFG_SIZE_MB_SHIFT
Definition: mc.h:103
@ MC_EMEM_ARB_MISC0_MC_EMC_SAME_FREQ_MASK
Definition: mc.h:107
@ MC_TIMING_CONTROL_TIMING_UPDATE
Definition: mc.h:111
@ MC_EMEM_CFG_SIZE_MB_MASK
Definition: mc.h:104
@ NvBootMemoryType_Ddr3
Definition: sdram_param.h:33
@ BOOT_ROM_PATCH_CONTROL_ENABLE_MASK
Definition: sdram_param.h:42
@ BOOT_ROM_PATCH_CONTROL_OFFSET_SHIFT
Definition: sdram_param.h:43
@ BOOT_ROM_PATCH_CONTROL_OFFSET_MASK
Definition: sdram_param.h:44
@ BOOT_ROM_PATCH_CONTROL_BASE_ADDRESS
Definition: sdram_param.h:45
@ EMC_ZCAL_WARM_COLD_BOOT_ENABLES_COLDBOOT_MASK
Definition: sdram_param.h:47
void udelay(uint32_t us)
Definition: udelay.c:15