Lines Matching +full:ps +full:- +full:speed
1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright 2008-2016 Freescale Semiconductor, Inc.
4 * Copyright 2017-2018 NXP Semiconductor
39 if (mclk_ps < outpdimm->tckmin_x_ps) { in compute_cas_latency()
40 printf("DDR clock (MCLK cycle %u ps) is faster than " in compute_cas_latency()
41 "the slowest DIMM(s) (tCKmin %u ps) can support.\n", in compute_cas_latency()
42 mclk_ps, outpdimm->tckmin_x_ps); in compute_cas_latency()
45 if (mclk_ps > outpdimm->tckmax_ps) { in compute_cas_latency()
46 printf("DDR clock (MCLK cycle %u ps) is slower than DIMM(s) (tCKmax %u ps) can support.\n", in compute_cas_latency()
47 mclk_ps, outpdimm->tckmax_ps); in compute_cas_latency()
51 caslat_actual = (outpdimm->taamin_ps + mclk_ps - 1) / mclk_ps; in compute_cas_latency()
55 retry--; in compute_cas_latency()
59 * exceed tAAmax, which is 20 ns for all DDR3 speed grades, in compute_cas_latency()
60 * 18ns for all DDR4 speed grades. in compute_cas_latency()
66 outpdimm->lowest_common_spd_caslat = caslat_actual; in compute_cas_latency()
85 if (mclk_ps > outpdimm->tckmax_ps) { in compute_cas_latency()
86 printf("Warning: DDR clock (%u ps) is slower than DIMM(s) (tCKmax %u ps)\n", in compute_cas_latency()
87 mclk_ps, outpdimm->tckmax_ps); in compute_cas_latency()
93 * Strategy for SPD-defined latencies: compute only in compute_cas_latency()
109 * If there was no entry for X-2 (X-1) in in compute_cas_latency()
114 * On 32-bit PowerPC, left shift counts with bit in compute_cas_latency()
141 debug("CL = %u ok on DIMM %u at tCK=%u ps with tCKmin_X_ps of %u\n", in compute_cas_latency()
154 debug("CL = %u ok on DIMM %u at tCK=%u ps with tckmin_x_minus_1_ps of %u\n", in compute_cas_latency()
167 debug("CL = %u ok on DIMM %u at tCK=%u ps with tckmin_x_minus_2_ps of %u\n", in compute_cas_latency()
183 debug("lowest common SPD-defined CAS latency = %u\n", in compute_cas_latency()
185 outpdimm->lowest_common_spd_caslat = lowest_good_caslat; in compute_cas_latency()
189 * Compute a common 'de-rated' CAS latency. in compute_cas_latency()
199 outpdimm->highest_common_derated_caslat = temp1; in compute_cas_latency()
209 * Determine the worst-case DIMM timing parameters from the set of DIMMs
270 printf("Found Quad-rank DIMM in wrong bank, ignored." in compute_lowest_common_dimm_parameters()
277 * check if quad-rank DIMM is plugged if in compute_lowest_common_dimm_parameters()
284 printf("Found Quad-rank DIMM, not able to support."); in compute_lowest_common_dimm_parameters()
290 * Find minimum tckmax_ps to find fastest slow speed, in compute_lowest_common_dimm_parameters()
349 outpdimm->ndimms_present = number_of_dimms - temp1; in compute_lowest_common_dimm_parameters()
356 outpdimm->tckmin_x_ps = tckmin_x_ps; in compute_lowest_common_dimm_parameters()
357 outpdimm->tckmax_ps = tckmax_ps; in compute_lowest_common_dimm_parameters()
359 outpdimm->taamin_ps = taamin_ps; in compute_lowest_common_dimm_parameters()
361 outpdimm->trcd_ps = trcd_ps; in compute_lowest_common_dimm_parameters()
362 outpdimm->trp_ps = trp_ps; in compute_lowest_common_dimm_parameters()
363 outpdimm->tras_ps = tras_ps; in compute_lowest_common_dimm_parameters()
365 outpdimm->trfc1_ps = trfc1_ps; in compute_lowest_common_dimm_parameters()
366 outpdimm->trfc2_ps = trfc2_ps; in compute_lowest_common_dimm_parameters()
367 outpdimm->trfc4_ps = trfc4_ps; in compute_lowest_common_dimm_parameters()
368 outpdimm->trrds_ps = trrds_ps; in compute_lowest_common_dimm_parameters()
369 outpdimm->trrdl_ps = trrdl_ps; in compute_lowest_common_dimm_parameters()
370 outpdimm->tccdl_ps = tccdl_ps; in compute_lowest_common_dimm_parameters()
371 outpdimm->trfc_slr_ps = trfc_slr_ps; in compute_lowest_common_dimm_parameters()
373 outpdimm->twtr_ps = twtr_ps; in compute_lowest_common_dimm_parameters()
374 outpdimm->trfc_ps = trfc_ps; in compute_lowest_common_dimm_parameters()
375 outpdimm->trrd_ps = trrd_ps; in compute_lowest_common_dimm_parameters()
376 outpdimm->trtp_ps = trtp_ps; in compute_lowest_common_dimm_parameters()
378 outpdimm->twr_ps = twr_ps; in compute_lowest_common_dimm_parameters()
379 outpdimm->trc_ps = trc_ps; in compute_lowest_common_dimm_parameters()
380 outpdimm->refresh_rate_ps = refresh_rate_ps; in compute_lowest_common_dimm_parameters()
381 outpdimm->extended_op_srt = extended_op_srt; in compute_lowest_common_dimm_parameters()
383 outpdimm->tis_ps = tis_ps; in compute_lowest_common_dimm_parameters()
384 outpdimm->tih_ps = tih_ps; in compute_lowest_common_dimm_parameters()
385 outpdimm->tds_ps = tds_ps; in compute_lowest_common_dimm_parameters()
386 outpdimm->tdh_ps = tdh_ps; in compute_lowest_common_dimm_parameters()
387 outpdimm->tdqsq_max_ps = tdqsq_max_ps; in compute_lowest_common_dimm_parameters()
388 outpdimm->tqhs_ps = tqhs_ps; in compute_lowest_common_dimm_parameters()
398 outpdimm->all_dimms_burst_lengths_bitmask = temp1; in compute_lowest_common_dimm_parameters()
420 outpdimm->all_dimms_registered = 0; in compute_lowest_common_dimm_parameters()
421 outpdimm->all_dimms_unbuffered = 0; in compute_lowest_common_dimm_parameters()
423 outpdimm->all_dimms_registered = 1; in compute_lowest_common_dimm_parameters()
425 outpdimm->all_dimms_unbuffered = 1; in compute_lowest_common_dimm_parameters()
432 if (outpdimm->all_dimms_registered) in compute_lowest_common_dimm_parameters()
434 outpdimm->rcw[j] = dimm_params[0].rcw[j]; in compute_lowest_common_dimm_parameters()
467 outpdimm->all_dimms_ecc_capable = temp1; in compute_lowest_common_dimm_parameters()
492 * WL = RL - 1 in compute_lowest_common_dimm_parameters()
493 * -> in compute_lowest_common_dimm_parameters()
494 * WL = AL + CL - 1 in compute_lowest_common_dimm_parameters()
495 * AL + CL - 1 >= 3 in compute_lowest_common_dimm_parameters()
503 * so the WL-derived AL should be the -- FIXME? in compute_lowest_common_dimm_parameters()
505 * II. Because you are using auto-precharge globally and want to in compute_lowest_common_dimm_parameters()
507 * 1. Are you going to use auto-precharge mode globally? in compute_lowest_common_dimm_parameters()
514 * degraded-performance experiment. in compute_lowest_common_dimm_parameters()
519 * read-to-precharge constraints. in compute_lowest_common_dimm_parameters()
525 if ((outpdimm->lowest_common_spd_caslat < 4) && in compute_lowest_common_dimm_parameters()
527 outpdimm->lowest_common_spd_caslat)) { in compute_lowest_common_dimm_parameters()
528 additive_latency = picos_to_mclk(ctrl_num, trcd_ps) - in compute_lowest_common_dimm_parameters()
529 outpdimm->lowest_common_spd_caslat; in compute_lowest_common_dimm_parameters()
550 * WL = RL - 1; WL >= 3 for ODT_WL_CFG to be enabled in compute_lowest_common_dimm_parameters()
561 outpdimm->additive_latency = additive_latency; in compute_lowest_common_dimm_parameters()
563 debug("tCKmin_ps = %u\n", outpdimm->tckmin_x_ps); in compute_lowest_common_dimm_parameters()
564 debug("trcd_ps = %u\n", outpdimm->trcd_ps); in compute_lowest_common_dimm_parameters()
565 debug("trp_ps = %u\n", outpdimm->trp_ps); in compute_lowest_common_dimm_parameters()
566 debug("tras_ps = %u\n", outpdimm->tras_ps); in compute_lowest_common_dimm_parameters()
576 debug("twtr_ps = %u\n", outpdimm->twtr_ps); in compute_lowest_common_dimm_parameters()
577 debug("trfc_ps = %u\n", outpdimm->trfc_ps); in compute_lowest_common_dimm_parameters()
578 debug("trrd_ps = %u\n", outpdimm->trrd_ps); in compute_lowest_common_dimm_parameters()
580 debug("twr_ps = %u\n", outpdimm->twr_ps); in compute_lowest_common_dimm_parameters()
581 debug("trc_ps = %u\n", outpdimm->trc_ps); in compute_lowest_common_dimm_parameters()