Lines Matching refs:spd

160 static int ddrtimingcalculation(ddr3_spd_eeprom_t *buf, struct ddr3_sodimm *spd,  in ddrtimingcalculation()  argument
169 spd->sdram_type = 0x03; in ddrtimingcalculation()
170 spd->ibank = 0x03; in ddrtimingcalculation()
174 spd->t_ck = buf->tck_min * mtb; in ddrtimingcalculation()
176 spd_cb->ddrspdclock = 2000000 / spd->t_ck; in ddrtimingcalculation()
179 spd->rank = ((buf->organization & 0x38) >> 3) + 1; in ddrtimingcalculation()
180 if (spd->rank > 2) in ddrtimingcalculation()
183 spd->pagesize = (buf->addressing & 0x07) + 1; in ddrtimingcalculation()
184 if (spd->pagesize > 3) in ddrtimingcalculation()
187 spd->buswidth = 8 << (buf->bus_width & 0x7); in ddrtimingcalculation()
188 if ((spd->buswidth < 16) || (spd->buswidth > 64)) in ddrtimingcalculation()
191 spd->mirrored = buf->mod_section.unbuffered.addr_mapping & 1; in ddrtimingcalculation()
196 spd->t_xp = ((3 * spd->t_ck) > 6000) ? in ddrtimingcalculation()
197 3 : ((5999 / spd->t_ck) + 1); in ddrtimingcalculation()
198 spd->t_cke = ((3 * spd->t_ck) > 5625) ? in ddrtimingcalculation()
199 3 : ((5624 / spd->t_ck) + 1); in ddrtimingcalculation()
201 spd->t_xp = ((3 * spd->t_ck) > 6000) ? in ddrtimingcalculation()
202 3 : ((5999 / spd->t_ck) + 1); in ddrtimingcalculation()
203 spd->t_cke = ((3 * spd->t_ck) > 5000) ? in ddrtimingcalculation()
204 3 : ((4999 / spd->t_ck) + 1); in ddrtimingcalculation()
210 spd->t_xpdll = (spd->t_ck > 2400) ? 10 : 24000 / spd->t_ck; in ddrtimingcalculation()
211 spd->t_ckesr = spd->t_cke + 1; in ddrtimingcalculation()
214 spd->cas = cas_latancy((buf->caslat_msb << 8) | in ddrtimingcalculation()
217 spd->t_wr = (buf->twr_min * mtb) / spd->t_ck; in ddrtimingcalculation()
218 spd->t_wr_bin = (spd->t_wr / 2) & 0x07; in ddrtimingcalculation()
220 spd->t_rcd = ((buf->trcd_min * mtb) - 1) / spd->t_ck + 1; in ddrtimingcalculation()
221 spd->t_rrd = ((buf->trrd_min * mtb) - 1) / spd->t_ck + 1; in ddrtimingcalculation()
222 spd->t_rp = (((buf->trp_min * mtb) - 1) / spd->t_ck) + 1; in ddrtimingcalculation()
224 spd->t_ras = (((buf->tras_trc_ext & 0x0f) << 8 | buf->tras_min_lsb) * in ddrtimingcalculation()
225 mtb) / spd->t_ck; in ddrtimingcalculation()
227 spd->t_rc = (((((buf->tras_trc_ext & 0xf0) << 4) | buf->trc_min_lsb) * in ddrtimingcalculation()
228 mtb) - 1) / spd->t_ck + 1; in ddrtimingcalculation()
230 spd->t_rfc = (buf->trfc_min_lsb | (buf->trfc_min_msb << 8)) * mtb / in ddrtimingcalculation()
232 spd->t_wtr = (buf->twtr_min * mtb) / spd->t_ck; in ddrtimingcalculation()
233 spd->t_rtp = (buf->trtp_min * mtb) / spd->t_ck; in ddrtimingcalculation()
235 spd->t_xs = (((spd->t_rfc + 10) * 1000) / spd->t_ck); in ddrtimingcalculation()
236 spd->t_rfc = ((spd->t_rfc * 1000) - 1) / spd->t_ck + 1; in ddrtimingcalculation()
238 spd->t_faw = (((buf->tfaw_msb << 8) | buf->tfaw_min) * mtb) / spd->t_ck; in ddrtimingcalculation()
239 spd->t_rrd2 = ((((buf->tfaw_msb << 8) | in ddrtimingcalculation()
240 buf->tfaw_min) * mtb) / (4 * spd->t_ck)) - 1; in ddrtimingcalculation()
243 spd->t_mrd = 0x00; in ddrtimingcalculation()
244 spd->t_mod = 0x00; in ddrtimingcalculation()
245 spd->t_wlo = 0x0C; in ddrtimingcalculation()
246 spd->t_wlmrd = 0x28; in ddrtimingcalculation()
247 spd->t_xsdll = 0x200; in ddrtimingcalculation()
248 spd->t_ras_max = 0x0F; in ddrtimingcalculation()
249 spd->t_csta = 0x05; in ddrtimingcalculation()
250 spd->t_dllk = 0x200; in ddrtimingcalculation()
253 if (spd->t_ck >= 2500) in ddrtimingcalculation()
254 spd->cwl = 0; in ddrtimingcalculation()
255 else if (spd->t_ck >= 1875) in ddrtimingcalculation()
256 spd->cwl = 1; in ddrtimingcalculation()
257 else if (spd->t_ck >= 1500) in ddrtimingcalculation()
258 spd->cwl = 2; in ddrtimingcalculation()
259 else if (spd->t_ck >= 1250) in ddrtimingcalculation()
260 spd->cwl = 3; in ddrtimingcalculation()
261 else if (spd->t_ck >= 1071) in ddrtimingcalculation()
262 spd->cwl = 4; in ddrtimingcalculation()
264 spd->cwl = 5; in ddrtimingcalculation()
267 spd->asr = (buf->therm_ref_opt & 0x04) >> 2; in ddrtimingcalculation()
268 spd->pasr = (buf->therm_ref_opt & 0x80) >> 7; in ddrtimingcalculation()
269 spd->t_zqcs = 64; in ddrtimingcalculation()
271 spd->t_refprd = (TEMP == NORMAL_TEMP) ? 7812500 : 3906250; in ddrtimingcalculation()
272 spd->t_refprd = spd->t_refprd / spd->t_ck; in ddrtimingcalculation()
274 spd->refresh_rate = spd->t_refprd; in ddrtimingcalculation()
275 spd->t_refprd = spd->t_refprd * 5; in ddrtimingcalculation()
279 spd->freqsel = 0x03; in ddrtimingcalculation()
281 spd->freqsel = 0x01; in ddrtimingcalculation()
283 spd->freqsel = 0x00; in ddrtimingcalculation()
285 spd->t_dinit0 = 500000000 / spd->t_ck; /* CKE low time 500 us */ in ddrtimingcalculation()
286 spd->t_dinit1 = spd->t_xs; in ddrtimingcalculation()
287 spd->t_dinit2 = 200000000 / spd->t_ck; /* Reset low time 200 us */ in ddrtimingcalculation()
289 spd->t_dinit3 = 1000000 / spd->t_ck; in ddrtimingcalculation()
291 spd->t_pllgs = PLLGS_VAL + 1; in ddrtimingcalculation()
292 spd->t_pllpd = PLLPD_VAL + 1; in ddrtimingcalculation()
293 spd->t_plllock = PLLLOCK_VAL + 1; in ddrtimingcalculation()
294 spd->t_pllrst = PLLRST_VAL; in ddrtimingcalculation()
295 spd->t_phyrst = PHYRST_VAL; in ddrtimingcalculation()
303 struct ddr3_sodimm *spd) in init_ddr3param() argument
305 spd_cb->phy_cfg.pllcr = (spd->freqsel & 3) << 18 | 0xE << 13; in init_ddr3param()
308 spd_cb->phy_cfg.ptr0 = ((spd->t_pllpd & 0x7ff) << 21) | in init_ddr3param()
309 ((spd->t_pllgs & 0x7fff) << 6) | (spd->t_phyrst & 0x3f); in init_ddr3param()
310 spd_cb->phy_cfg.ptr1 = ((spd->t_plllock & 0xffff) << 16) | in init_ddr3param()
311 (spd->t_pllrst & 0x1fff); in init_ddr3param()
313 spd_cb->phy_cfg.ptr3 = ((spd->t_dinit1 & 0x1ff) << 20) | in init_ddr3param()
314 (spd->t_dinit0 & 0xfffff); in init_ddr3param()
315 spd_cb->phy_cfg.ptr4 = ((spd->t_dinit3 & 0x3ff) << 18) | in init_ddr3param()
316 (spd->t_dinit2 & 0x3ffff); in init_ddr3param()
321 if (spd->mirrored) { in init_ddr3param()
326 spd_cb->phy_cfg.dtpr0 = (spd->t_rc & 0x3f) << 26 | in init_ddr3param()
327 (spd->t_rrd & 0xf) << 22 | in init_ddr3param()
328 (spd->t_ras & 0x3f) << 16 | (spd->t_rcd & 0xf) << 12 | in init_ddr3param()
329 (spd->t_rp & 0xf) << 8 | (spd->t_wtr & 0xf) << 4 | in init_ddr3param()
330 (spd->t_rtp & 0xf); in init_ddr3param()
331 spd_cb->phy_cfg.dtpr1 = (spd->t_wlo & 0xf) << 26 | in init_ddr3param()
332 (spd->t_wlmrd & 0x3f) << 20 | (spd->t_rfc & 0x1ff) << 11 | in init_ddr3param()
333 (spd->t_faw & 0x3f) << 5 | (spd->t_mod & 0x7) << 2 | in init_ddr3param()
334 (spd->t_mrd & 0x3); in init_ddr3param()
337 (spd->t_dllk & 0x3ff) << 19 | (spd->t_ckesr & 0xf) << 15; in init_ddr3param()
339 spd_cb->phy_cfg.dtpr2 |= (((spd->t_xp > spd->t_xpdll) ? in init_ddr3param()
340 spd->t_xp : spd->t_xpdll) & in init_ddr3param()
343 spd_cb->phy_cfg.dtpr2 |= (((spd->t_xs > spd->t_xsdll) ? in init_ddr3param()
344 spd->t_xs : spd->t_xsdll) & in init_ddr3param()
347 spd_cb->phy_cfg.mr0 = 1 << 12 | (spd->t_wr_bin & 0x7) << 9 | 0 << 8 | in init_ddr3param()
348 0 << 7 | ((spd->cas & 0x0E) >> 1) << 4 | 0 << 3 | in init_ddr3param()
349 (spd->cas & 0x01) << 2; in init_ddr3param()
356 spd_cb->phy_cfg.mr2 = DYN_ODT << 9 | TEMP << 7 | (spd->asr & 1) << 6 | in init_ddr3param()
357 (spd->cwl & 7) << 3 | (spd->pasr & 7); in init_ddr3param()
359 spd_cb->phy_cfg.dtcr = (spd->rank == 2) ? 0x730035C7 : 0x710035C7; in init_ddr3param()
360 spd_cb->phy_cfg.pgcr2 = (0xF << 20) | ((int)spd->t_refprd & 0x3ffff); in init_ddr3param()
370 spd_cb->emif_cfg.sdcfg = spd->sdram_type << 29 | (DDR_TERM & 7) << 25 | in init_ddr3param()
371 (DYN_ODT & 3) << 22 | (spd->cwl & 0x7) << 14 | in init_ddr3param()
372 (spd->cas & 0xf) << 8 | (spd->ibank & 3) << 5 | in init_ddr3param()
373 (spd->buswidth & 3) << 12 | (spd->pagesize & 3); in init_ddr3param()
375 if (spd->rank == 2) in init_ddr3param()
378 spd_cb->emif_cfg.sdtim1 = ((spd->t_wr - 1) & 0x1f) << 25 | in init_ddr3param()
379 ((spd->t_ras - 1) & 0x7f) << 18 | in init_ddr3param()
380 ((spd->t_rc - 1) & 0xff) << 10 | in init_ddr3param()
381 (spd->t_rrd2 & 0x3f) << 4 | in init_ddr3param()
382 ((spd->t_wtr - 1) & 0xf); in init_ddr3param()
384 spd_cb->emif_cfg.sdtim2 = 0x07 << 10 | ((spd->t_rp - 1) & 0x1f) << 5 | in init_ddr3param()
385 ((spd->t_rcd - 1) & 0x1f); in init_ddr3param()
387 spd_cb->emif_cfg.sdtim3 = ((spd->t_xp - 2) & 0xf) << 28 | in init_ddr3param()
388 ((spd->t_xs - 1) & 0x3ff) << 18 | in init_ddr3param()
389 ((spd->t_xsdll - 1) & 0x3ff) << 8 | in init_ddr3param()
390 ((spd->t_rtp - 1) & 0xf) << 4 | ((spd->t_cke) & 0xf); in init_ddr3param()
392 spd_cb->emif_cfg.sdtim4 = (spd->t_csta & 0xf) << 28 | in init_ddr3param()
393 ((spd->t_ckesr - 1) & 0xf) << 24 | in init_ddr3param()
394 ((spd->t_zqcs - 1) & 0xff) << 16 | in init_ddr3param()
395 ((spd->t_rfc - 1) & 0x3ff) << 4 | in init_ddr3param()
396 (spd->t_ras_max & 0xf); in init_ddr3param()
398 spd_cb->emif_cfg.sdrfc = (spd->refresh_rate - 1) & 0xffff; in init_ddr3param()
401 spd_cb->emif_cfg.zqcfg = (spd->rank == 2) ? 0xF0073200 : 0x70073200; in init_ddr3param()
441 struct ddr3_sodimm spd; in ddr3_get_dimm_params_from_spd() local
444 memset(&spd, 0, sizeof(spd)); in ddr3_get_dimm_params_from_spd()
449 if (ddrtimingcalculation(&spd_params, &spd, spd_cb)) { in ddr3_get_dimm_params_from_spd()
457 init_ddr3param(spd_cb, &spd); in ddr3_get_dimm_params_from_spd()