Commit 03e664d8f4065010ccb6c75648192200a832fd8b

Authored by York Sun
1 parent b87e6f88e9

driver/ddr/fsl: Add support for multiple DDR clocks

Controller number is passed for function calls to support individual
DDR clock, depending on SoC implementation. It is backward compatible
with exising platforms. Multiple clocks have been verifyed on LS2085A
emulator.

Signed-off-by: York Sun <yorksun@freescale.com>

Showing 14 changed files with 190 additions and 159 deletions Side-by-side Diff

drivers/ddr/fsl/arm_ddr_gen3.c
... ... @@ -222,7 +222,7 @@
222 222 bus_width = 3 - ((ddr_in32(&ddr->sdram_cfg) & SDRAM_CFG_DBW_MASK)
223 223 >> SDRAM_CFG_DBW_SHIFT);
224 224 timeout = ((total_gb_size_per_controller << (6 - bus_width)) * 100 /
225   - (get_ddr_freq(0) >> 20)) << 1;
  225 + (get_ddr_freq(ctrl_num) >> 20)) << 1;
226 226 total_gb_size_per_controller >>= 4; /* shift down to gb size */
227 227 debug("total %d GB\n", total_gb_size_per_controller);
228 228 debug("Need to wait up to %d * 10ms\n", timeout);
drivers/ddr/fsl/ctrl_regs.c
... ... @@ -17,8 +17,6 @@
17 17 #include <fsl_immap.h>
18 18 #include <asm/io.h>
19 19  
20   -unsigned int picos_to_mclk(unsigned int picos);
21   -
22 20 /*
23 21 * Determine Rtt value.
24 22 *
25 23  
... ... @@ -78,10 +76,11 @@
78 76 * 16 for <= 2933MT/s
79 77 * 18 for higher
80 78 */
81   -static inline unsigned int compute_cas_write_latency(void)
  79 +static inline unsigned int compute_cas_write_latency(
  80 + const unsigned int ctrl_num)
82 81 {
83 82 unsigned int cwl;
84   - const unsigned int mclk_ps = get_memory_clk_period_ps();
  83 + const unsigned int mclk_ps = get_memory_clk_period_ps(ctrl_num);
85 84 if (mclk_ps >= 1250)
86 85 cwl = 9;
87 86 else if (mclk_ps >= 1070)
88 87  
... ... @@ -111,10 +110,11 @@
111 110 * 11 if 0.935ns > tCK >= 0.833ns
112 111 * 12 if 0.833ns > tCK >= 0.75ns
113 112 */
114   -static inline unsigned int compute_cas_write_latency(void)
  113 +static inline unsigned int compute_cas_write_latency(
  114 + const unsigned int ctrl_num)
115 115 {
116 116 unsigned int cwl;
117   - const unsigned int mclk_ps = get_memory_clk_period_ps();
  117 + const unsigned int mclk_ps = get_memory_clk_period_ps(ctrl_num);
118 118  
119 119 if (mclk_ps >= 2500)
120 120 cwl = 5;
... ... @@ -287,7 +287,8 @@
287 287 * Avoid writing for DDR I. The new PQ38 DDR controller
288 288 * dreams up non-zero default values to be backwards compatible.
289 289 */
290   -static void set_timing_cfg_0(fsl_ddr_cfg_regs_t *ddr,
  290 +static void set_timing_cfg_0(const unsigned int ctrl_num,
  291 + fsl_ddr_cfg_regs_t *ddr,
291 292 const memctl_options_t *popts,
292 293 const dimm_params_t *dimm_params)
293 294 {
... ... @@ -306,7 +307,7 @@
306 307 /* Mode register set cycle time (tMRD). */
307 308 unsigned char tmrd_mclk;
308 309 #if defined(CONFIG_SYS_FSL_DDR4) || defined(CONFIG_SYS_FSL_DDR3)
309   - const unsigned int mclk_ps = get_memory_clk_period_ps();
  310 + const unsigned int mclk_ps = get_memory_clk_period_ps(ctrl_num);
310 311 #endif
311 312  
312 313 #ifdef CONFIG_SYS_FSL_DDR4
313 314  
314 315  
... ... @@ -314,15 +315,15 @@
314 315 int txp = max((int)mclk_ps * 4, 6000); /* unit=ps */
315 316 trwt_mclk = 2;
316 317 twrt_mclk = 1;
317   - act_pd_exit_mclk = picos_to_mclk(txp);
  318 + act_pd_exit_mclk = picos_to_mclk(ctrl_num, txp);
318 319 pre_pd_exit_mclk = act_pd_exit_mclk;
319 320 /*
320 321 * MRS_CYC = max(tMRD, tMOD)
321 322 * tMRD = 8nCK, tMOD = max(24nCK, 15ns)
322 323 */
323   - tmrd_mclk = max(24U, picos_to_mclk(15000));
  324 + tmrd_mclk = max(24U, picos_to_mclk(ctrl_num, 15000));
324 325 #elif defined(CONFIG_SYS_FSL_DDR3)
325   - unsigned int data_rate = get_ddr_freq(0);
  326 + unsigned int data_rate = get_ddr_freq(ctrl_num);
326 327 int txp;
327 328 unsigned int ip_rev;
328 329 int odt_overlap;
... ... @@ -344,7 +345,8 @@
344 345 * tMRD = 4nCK (8nCK for RDIMM)
345 346 * tMOD = max(12nCK, 15ns)
346 347 */
347   - tmrd_mclk = max((unsigned int)12, picos_to_mclk(15000));
  348 + tmrd_mclk = max((unsigned int)12,
  349 + picos_to_mclk(ctrl_num, 15000));
348 350 } else {
349 351 /*
350 352 * MRS_CYC = tMRD
... ... @@ -388,7 +390,7 @@
388 390 taxpd_mclk = 1;
389 391 } else {
390 392 /* act_pd_exit_mclk = tXARD, see above */
391   - act_pd_exit_mclk = picos_to_mclk(txp);
  393 + act_pd_exit_mclk = picos_to_mclk(ctrl_num, txp);
392 394 /* Mode register MR0[A12] is '1' - fast exit */
393 395 pre_pd_exit_mclk = act_pd_exit_mclk;
394 396 taxpd_mclk = 1;
... ... @@ -424,11 +426,12 @@
424 426 #endif /* !defined(CONFIG_SYS_FSL_DDR1) */
425 427  
426 428 /* DDR SDRAM Timing Configuration 3 (TIMING_CFG_3) */
427   -static void set_timing_cfg_3(fsl_ddr_cfg_regs_t *ddr,
428   - const memctl_options_t *popts,
429   - const common_timing_params_t *common_dimm,
430   - unsigned int cas_latency,
431   - unsigned int additive_latency)
  429 +static void set_timing_cfg_3(const unsigned int ctrl_num,
  430 + fsl_ddr_cfg_regs_t *ddr,
  431 + const memctl_options_t *popts,
  432 + const common_timing_params_t *common_dimm,
  433 + unsigned int cas_latency,
  434 + unsigned int additive_latency)
432 435 {
433 436 /* Extended precharge to activate interval (tRP) */
434 437 unsigned int ext_pretoact = 0;
435 438  
436 439  
437 440  
... ... @@ -447,18 +450,18 @@
447 450 /* Control Adjust */
448 451 unsigned int cntl_adj = 0;
449 452  
450   - ext_pretoact = picos_to_mclk(common_dimm->trp_ps) >> 4;
451   - ext_acttopre = picos_to_mclk(common_dimm->tras_ps) >> 4;
452   - ext_acttorw = picos_to_mclk(common_dimm->trcd_ps) >> 4;
  453 + ext_pretoact = picos_to_mclk(ctrl_num, common_dimm->trp_ps) >> 4;
  454 + ext_acttopre = picos_to_mclk(ctrl_num, common_dimm->tras_ps) >> 4;
  455 + ext_acttorw = picos_to_mclk(ctrl_num, common_dimm->trcd_ps) >> 4;
453 456 ext_caslat = (2 * cas_latency - 1) >> 4;
454 457 ext_add_lat = additive_latency >> 4;
455 458 #ifdef CONFIG_SYS_FSL_DDR4
456   - ext_refrec = (picos_to_mclk(common_dimm->trfc1_ps) - 8) >> 4;
  459 + ext_refrec = (picos_to_mclk(ctrl_num, common_dimm->trfc1_ps) - 8) >> 4;
457 460 #else
458   - ext_refrec = (picos_to_mclk(common_dimm->trfc_ps) - 8) >> 4;
  461 + ext_refrec = (picos_to_mclk(ctrl_num, common_dimm->trfc_ps) - 8) >> 4;
459 462 /* ext_wrrec only deals with 16 clock and above, or 14 with OTF */
460 463 #endif
461   - ext_wrrec = (picos_to_mclk(common_dimm->twr_ps) +
  464 + ext_wrrec = (picos_to_mclk(ctrl_num, common_dimm->twr_ps) +
462 465 (popts->otf_burst_chop_en ? 2 : 0)) >> 4;
463 466  
464 467 ddr->timing_cfg_3 = (0
... ... @@ -475,10 +478,11 @@
475 478 }
476 479  
477 480 /* DDR SDRAM Timing Configuration 1 (TIMING_CFG_1) */
478   -static void set_timing_cfg_1(fsl_ddr_cfg_regs_t *ddr,
479   - const memctl_options_t *popts,
480   - const common_timing_params_t *common_dimm,
481   - unsigned int cas_latency)
  481 +static void set_timing_cfg_1(const unsigned int ctrl_num,
  482 + fsl_ddr_cfg_regs_t *ddr,
  483 + const memctl_options_t *popts,
  484 + const common_timing_params_t *common_dimm,
  485 + unsigned int cas_latency)
482 486 {
483 487 /* Precharge-to-activate interval (tRP) */
484 488 unsigned char pretoact_mclk;
... ... @@ -510,9 +514,9 @@
510 514 1, 2, 3, 4, 5, 6, 7, 8, 10, 10, 12, 12, 14, 14, 0, 0};
511 515 #endif
512 516  
513   - pretoact_mclk = picos_to_mclk(common_dimm->trp_ps);
514   - acttopre_mclk = picos_to_mclk(common_dimm->tras_ps);
515   - acttorw_mclk = picos_to_mclk(common_dimm->trcd_ps);
  517 + pretoact_mclk = picos_to_mclk(ctrl_num, common_dimm->trp_ps);
  518 + acttopre_mclk = picos_to_mclk(ctrl_num, common_dimm->tras_ps);
  519 + acttorw_mclk = picos_to_mclk(ctrl_num, common_dimm->trcd_ps);
516 520  
517 521 /*
518 522 * Translate CAS Latency to a DDR controller field value:
519 523  
... ... @@ -547,19 +551,19 @@
547 551 #endif
548 552  
549 553 #ifdef CONFIG_SYS_FSL_DDR4
550   - refrec_ctrl = picos_to_mclk(common_dimm->trfc1_ps) - 8;
551   - wrrec_mclk = picos_to_mclk(common_dimm->twr_ps);
552   - acttoact_mclk = max(picos_to_mclk(common_dimm->trrds_ps), 4U);
553   - wrtord_mclk = max(2U, picos_to_mclk(2500));
  554 + refrec_ctrl = picos_to_mclk(ctrl_num, common_dimm->trfc1_ps) - 8;
  555 + wrrec_mclk = picos_to_mclk(ctrl_num, common_dimm->twr_ps);
  556 + acttoact_mclk = max(picos_to_mclk(ctrl_num, common_dimm->trrds_ps), 4U);
  557 + wrtord_mclk = max(2U, picos_to_mclk(ctrl_num, 2500));
554 558 if ((wrrec_mclk < 1) || (wrrec_mclk > 24))
555 559 printf("Error: WRREC doesn't support %d clocks\n", wrrec_mclk);
556 560 else
557 561 wrrec_mclk = wrrec_table[wrrec_mclk - 1];
558 562 #else
559   - refrec_ctrl = picos_to_mclk(common_dimm->trfc_ps) - 8;
560   - wrrec_mclk = picos_to_mclk(common_dimm->twr_ps);
561   - acttoact_mclk = picos_to_mclk(common_dimm->trrd_ps);
562   - wrtord_mclk = picos_to_mclk(common_dimm->twtr_ps);
  563 + refrec_ctrl = picos_to_mclk(ctrl_num, common_dimm->trfc_ps) - 8;
  564 + wrrec_mclk = picos_to_mclk(ctrl_num, common_dimm->twr_ps);
  565 + acttoact_mclk = picos_to_mclk(ctrl_num, common_dimm->trrd_ps);
  566 + wrtord_mclk = picos_to_mclk(ctrl_num, common_dimm->twtr_ps);
563 567 if ((wrrec_mclk < 1) || (wrrec_mclk > 16))
564 568 printf("Error: WRREC doesn't support %d clocks\n", wrrec_mclk);
565 569 else
... ... @@ -602,11 +606,12 @@
602 606 }
603 607  
604 608 /* DDR SDRAM Timing Configuration 2 (TIMING_CFG_2) */
605   -static void set_timing_cfg_2(fsl_ddr_cfg_regs_t *ddr,
606   - const memctl_options_t *popts,
607   - const common_timing_params_t *common_dimm,
608   - unsigned int cas_latency,
609   - unsigned int additive_latency)
  609 +static void set_timing_cfg_2(const unsigned int ctrl_num,
  610 + fsl_ddr_cfg_regs_t *ddr,
  611 + const memctl_options_t *popts,
  612 + const common_timing_params_t *common_dimm,
  613 + unsigned int cas_latency,
  614 + unsigned int additive_latency)
610 615 {
611 616 /* Additive latency */
612 617 unsigned char add_lat_mclk;
... ... @@ -623,7 +628,7 @@
623 628 /* Window for four activates (tFAW) */
624 629 unsigned short four_act;
625 630 #ifdef CONFIG_SYS_FSL_DDR3
626   - const unsigned int mclk_ps = get_memory_clk_period_ps();
  631 + const unsigned int mclk_ps = get_memory_clk_period_ps(ctrl_num);
627 632 #endif
628 633  
629 634 /* FIXME add check that this must be less than acttorw_mclk */
630 635  
631 636  
... ... @@ -641,13 +646,13 @@
641 646 #elif defined(CONFIG_SYS_FSL_DDR2)
642 647 wr_lat = cas_latency - 1;
643 648 #else
644   - wr_lat = compute_cas_write_latency();
  649 + wr_lat = compute_cas_write_latency(ctrl_num);
645 650 #endif
646 651  
647 652 #ifdef CONFIG_SYS_FSL_DDR4
648   - rd_to_pre = picos_to_mclk(7500);
  653 + rd_to_pre = picos_to_mclk(ctrl_num, 7500);
649 654 #else
650   - rd_to_pre = picos_to_mclk(common_dimm->trtp_ps);
  655 + rd_to_pre = picos_to_mclk(ctrl_num, common_dimm->trtp_ps);
651 656 #endif
652 657 /*
653 658 * JEDEC has some min requirements for tRTP
654 659  
655 660  
... ... @@ -665,19 +670,20 @@
665 670 wr_data_delay = popts->write_data_delay;
666 671 #ifdef CONFIG_SYS_FSL_DDR4
667 672 cpo = 0;
668   - cke_pls = max(3U, picos_to_mclk(5000));
  673 + cke_pls = max(3U, picos_to_mclk(ctrl_num, 5000));
669 674 #elif defined(CONFIG_SYS_FSL_DDR3)
670 675 /*
671 676 * cke pulse = max(3nCK, 7.5ns) for DDR3-800
672 677 * max(3nCK, 5.625ns) for DDR3-1066, 1333
673 678 * max(3nCK, 5ns) for DDR3-1600, 1866, 2133
674 679 */
675   - cke_pls = max(3U, picos_to_mclk(mclk_ps > 1870 ? 7500 :
676   - (mclk_ps > 1245 ? 5625 : 5000)));
  680 + cke_pls = max(3U, picos_to_mclk(ctrl_num, mclk_ps > 1870 ? 7500 :
  681 + (mclk_ps > 1245 ? 5625 : 5000)));
677 682 #else
678 683 cke_pls = FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR;
679 684 #endif
680   - four_act = picos_to_mclk(popts->tfaw_window_four_activates_ps);
  685 + four_act = picos_to_mclk(ctrl_num,
  686 + popts->tfaw_window_four_activates_ps);
681 687  
682 688 ddr->timing_cfg_2 = (0
683 689 | ((add_lat_mclk & 0xf) << 28)
... ... @@ -818,7 +824,8 @@
818 824 }
819 825  
820 826 /* DDR SDRAM control configuration 2 (DDR_SDRAM_CFG_2) */
821   -static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,
  827 +static void set_ddr_sdram_cfg_2(const unsigned int ctrl_num,
  828 + fsl_ddr_cfg_regs_t *ddr,
822 829 const memctl_options_t *popts,
823 830 const unsigned int unq_mrs_en)
824 831 {
... ... @@ -865,7 +872,7 @@
865 872 #endif
866 873  
867 874 #if (CONFIG_SYS_FSL_DDR_VER >= FSL_DDR_VER_4_7)
868   - slow = get_ddr_freq(0) < 1249000000;
  875 + slow = get_ddr_freq(ctrl_num) < 1249000000;
869 876 #endif
870 877  
871 878 if (popts->registered_dimm_en) {
... ... @@ -915,7 +922,8 @@
915 922  
916 923 #ifdef CONFIG_SYS_FSL_DDR4
917 924 /* DDR SDRAM Mode configuration 2 (DDR_SDRAM_MODE_2) */
918   -static void set_ddr_sdram_mode_2(fsl_ddr_cfg_regs_t *ddr,
  925 +static void set_ddr_sdram_mode_2(const unsigned int ctrl_num,
  926 + fsl_ddr_cfg_regs_t *ddr,
919 927 const memctl_options_t *popts,
920 928 const common_timing_params_t *common_dimm,
921 929 const unsigned int unq_mrs_en)
922 930  
... ... @@ -926,10 +934,10 @@
926 934 unsigned int wr_crc = 0; /* Disable */
927 935 unsigned int rtt_wr = 0; /* Rtt_WR - dynamic ODT off */
928 936 unsigned int srt = 0; /* self-refresh temerature, normal range */
929   - unsigned int cwl = compute_cas_write_latency() - 9;
  937 + unsigned int cwl = compute_cas_write_latency(ctrl_num) - 9;
930 938 unsigned int mpr = 0; /* serial */
931 939 unsigned int wc_lat;
932   - const unsigned int mclk_ps = get_memory_clk_period_ps();
  940 + const unsigned int mclk_ps = get_memory_clk_period_ps(ctrl_num);
933 941  
934 942 if (popts->rtt_override)
935 943 rtt_wr = popts->rtt_wr_override_value;
... ... @@ -1002,7 +1010,8 @@
1002 1010 }
1003 1011 #elif defined(CONFIG_SYS_FSL_DDR3)
1004 1012 /* DDR SDRAM Mode configuration 2 (DDR_SDRAM_MODE_2) */
1005   -static void set_ddr_sdram_mode_2(fsl_ddr_cfg_regs_t *ddr,
  1013 +static void set_ddr_sdram_mode_2(const unsigned int ctrl_num,
  1014 + fsl_ddr_cfg_regs_t *ddr,
1006 1015 const memctl_options_t *popts,
1007 1016 const common_timing_params_t *common_dimm,
1008 1017 const unsigned int unq_mrs_en)
... ... @@ -1013,7 +1022,7 @@
1013 1022 unsigned int rtt_wr = 0; /* Rtt_WR - dynamic ODT off */
1014 1023 unsigned int srt = 0; /* self-refresh temerature, normal range */
1015 1024 unsigned int asr = 0; /* auto self-refresh disable */
1016   - unsigned int cwl = compute_cas_write_latency() - 5;
  1025 + unsigned int cwl = compute_cas_write_latency(ctrl_num) - 5;
1017 1026 unsigned int pasr = 0; /* partial array self refresh disable */
1018 1027  
1019 1028 if (popts->rtt_override)
... ... @@ -1077,7 +1086,8 @@
1077 1086  
1078 1087 #else /* for DDR2 and DDR1 */
1079 1088 /* DDR SDRAM Mode configuration 2 (DDR_SDRAM_MODE_2) */
1080   -static void set_ddr_sdram_mode_2(fsl_ddr_cfg_regs_t *ddr,
  1089 +static void set_ddr_sdram_mode_2(const unsigned int ctrl_num,
  1090 + fsl_ddr_cfg_regs_t *ddr,
1081 1091 const memctl_options_t *popts,
1082 1092 const common_timing_params_t *common_dimm,
1083 1093 const unsigned int unq_mrs_en)
... ... @@ -1144,7 +1154,8 @@
1144 1154 }
1145 1155  
1146 1156 /* DDR SDRAM Mode configuration 10 (DDR_SDRAM_MODE_10) */
1147   -static void set_ddr_sdram_mode_10(fsl_ddr_cfg_regs_t *ddr,
  1157 +static void set_ddr_sdram_mode_10(const unsigned int ctrl_num,
  1158 + fsl_ddr_cfg_regs_t *ddr,
1148 1159 const memctl_options_t *popts,
1149 1160 const common_timing_params_t *common_dimm,
1150 1161 const unsigned int unq_mrs_en)
... ... @@ -1152,7 +1163,7 @@
1152 1163 int i;
1153 1164 unsigned short esdmode6 = 0; /* Extended SDRAM mode 6 */
1154 1165 unsigned short esdmode7 = 0; /* Extended SDRAM mode 7 */
1155   - unsigned int tccdl_min = picos_to_mclk(common_dimm->tccdl_ps);
  1166 + unsigned int tccdl_min = picos_to_mclk(ctrl_num, common_dimm->tccdl_ps);
1156 1167  
1157 1168 esdmode6 = ((tccdl_min - 4) & 0x7) << 10;
1158 1169  
1159 1170  
... ... @@ -1196,14 +1207,15 @@
1196 1207 #endif
1197 1208  
1198 1209 /* DDR SDRAM Interval Configuration (DDR_SDRAM_INTERVAL) */
1199   -static void set_ddr_sdram_interval(fsl_ddr_cfg_regs_t *ddr,
1200   - const memctl_options_t *popts,
1201   - const common_timing_params_t *common_dimm)
  1210 +static void set_ddr_sdram_interval(const unsigned int ctrl_num,
  1211 + fsl_ddr_cfg_regs_t *ddr,
  1212 + const memctl_options_t *popts,
  1213 + const common_timing_params_t *common_dimm)
1202 1214 {
1203 1215 unsigned int refint; /* Refresh interval */
1204 1216 unsigned int bstopre; /* Precharge interval */
1205 1217  
1206   - refint = picos_to_mclk(common_dimm->refresh_rate_ps);
  1218 + refint = picos_to_mclk(ctrl_num, common_dimm->refresh_rate_ps);
1207 1219  
1208 1220 bstopre = popts->bstopre;
1209 1221  
... ... @@ -1217,7 +1229,8 @@
1217 1229  
1218 1230 #ifdef CONFIG_SYS_FSL_DDR4
1219 1231 /* DDR SDRAM Mode configuration set (DDR_SDRAM_MODE) */
1220   -static void set_ddr_sdram_mode(fsl_ddr_cfg_regs_t *ddr,
  1232 +static void set_ddr_sdram_mode(const unsigned int ctrl_num,
  1233 + fsl_ddr_cfg_regs_t *ddr,
1221 1234 const memctl_options_t *popts,
1222 1235 const common_timing_params_t *common_dimm,
1223 1236 unsigned int cas_latency,
... ... @@ -1292,7 +1305,7 @@
1292 1305 * 1=fast exit DLL on (tXP)
1293 1306 */
1294 1307  
1295   - wr_mclk = picos_to_mclk(common_dimm->twr_ps);
  1308 + wr_mclk = picos_to_mclk(ctrl_num, common_dimm->twr_ps);
1296 1309 if (wr_mclk <= 24) {
1297 1310 wr = wr_table[wr_mclk - 10];
1298 1311 } else {
... ... @@ -1387,7 +1400,8 @@
1387 1400  
1388 1401 #elif defined(CONFIG_SYS_FSL_DDR3)
1389 1402 /* DDR SDRAM Mode configuration set (DDR_SDRAM_MODE) */
1390   -static void set_ddr_sdram_mode(fsl_ddr_cfg_regs_t *ddr,
  1403 +static void set_ddr_sdram_mode(const unsigned int ctrl_num,
  1404 + fsl_ddr_cfg_regs_t *ddr,
1391 1405 const memctl_options_t *popts,
1392 1406 const common_timing_params_t *common_dimm,
1393 1407 unsigned int cas_latency,
... ... @@ -1466,7 +1480,7 @@
1466 1480 */
1467 1481 dll_on = 1;
1468 1482  
1469   - wr_mclk = picos_to_mclk(common_dimm->twr_ps);
  1483 + wr_mclk = picos_to_mclk(ctrl_num, common_dimm->twr_ps);
1470 1484 if (wr_mclk <= 16) {
1471 1485 wr = wr_table[wr_mclk - 5];
1472 1486 } else {
... ... @@ -1582,7 +1596,8 @@
1582 1596 #else /* !CONFIG_SYS_FSL_DDR3 */
1583 1597  
1584 1598 /* DDR SDRAM Mode configuration set (DDR_SDRAM_MODE) */
1585   -static void set_ddr_sdram_mode(fsl_ddr_cfg_regs_t *ddr,
  1599 +static void set_ddr_sdram_mode(const unsigned int ctrl_num,
  1600 + fsl_ddr_cfg_regs_t *ddr,
1586 1601 const memctl_options_t *popts,
1587 1602 const common_timing_params_t *common_dimm,
1588 1603 unsigned int cas_latency,
... ... @@ -1654,7 +1669,7 @@
1654 1669 #if defined(CONFIG_SYS_FSL_DDR1)
1655 1670 wr = 0; /* Historical */
1656 1671 #elif defined(CONFIG_SYS_FSL_DDR2)
1657   - wr = picos_to_mclk(common_dimm->twr_ps);
  1672 + wr = picos_to_mclk(ctrl_num, common_dimm->twr_ps);
1658 1673 #endif
1659 1674 dll_res = 0;
1660 1675 mode = 0;
1661 1676  
... ... @@ -1842,15 +1857,16 @@
1842 1857 debug("FSLDDR: timing_cfg_6 = 0x%08x\n", ddr->timing_cfg_6);
1843 1858 }
1844 1859  
1845   -static void set_timing_cfg_7(fsl_ddr_cfg_regs_t *ddr,
1846   - const common_timing_params_t *common_dimm)
  1860 +static void set_timing_cfg_7(const unsigned int ctrl_num,
  1861 + fsl_ddr_cfg_regs_t *ddr,
  1862 + const common_timing_params_t *common_dimm)
1847 1863 {
1848 1864 unsigned int txpr, tcksre, tcksrx;
1849 1865 unsigned int cke_rst, cksre, cksrx, par_lat, cs_to_cmd;
1850 1866  
1851   - txpr = max(5U, picos_to_mclk(common_dimm->trfc1_ps + 10000));
1852   - tcksre = max(5U, picos_to_mclk(10000));
1853   - tcksrx = max(5U, picos_to_mclk(10000));
  1867 + txpr = max(5U, picos_to_mclk(ctrl_num, common_dimm->trfc1_ps + 10000));
  1868 + tcksre = max(5U, picos_to_mclk(ctrl_num, 10000));
  1869 + tcksrx = max(5U, picos_to_mclk(ctrl_num, 10000));
1854 1870 par_lat = 0;
1855 1871 cs_to_cmd = 0;
1856 1872  
1857 1873  
... ... @@ -1883,14 +1899,15 @@
1883 1899 debug("FSLDDR: timing_cfg_7 = 0x%08x\n", ddr->timing_cfg_7);
1884 1900 }
1885 1901  
1886   -static void set_timing_cfg_8(fsl_ddr_cfg_regs_t *ddr,
  1902 +static void set_timing_cfg_8(const unsigned int ctrl_num,
  1903 + fsl_ddr_cfg_regs_t *ddr,
1887 1904 const memctl_options_t *popts,
1888 1905 const common_timing_params_t *common_dimm,
1889 1906 unsigned int cas_latency)
1890 1907 {
1891 1908 unsigned int rwt_bg, wrt_bg, rrt_bg, wwt_bg;
1892 1909 unsigned int acttoact_bg, wrtord_bg, pre_all_rec;
1893   - unsigned int tccdl = picos_to_mclk(common_dimm->tccdl_ps);
  1910 + unsigned int tccdl = picos_to_mclk(ctrl_num, common_dimm->tccdl_ps);
1894 1911 unsigned int wr_lat = ((ddr->timing_cfg_2 & 0x00780000) >> 19) +
1895 1912 ((ddr->timing_cfg_2 & 0x00040000) >> 14);
1896 1913  
... ... @@ -1914,8 +1931,8 @@
1914 1931 wwt_bg = tccdl - 4;
1915 1932 }
1916 1933  
1917   - acttoact_bg = picos_to_mclk(common_dimm->trrdl_ps);
1918   - wrtord_bg = max(4U, picos_to_mclk(7500));
  1934 + acttoact_bg = picos_to_mclk(ctrl_num, common_dimm->trrdl_ps);
  1935 + wrtord_bg = max(4U, picos_to_mclk(ctrl_num, 7500));
1919 1936 if (popts->otf_burst_chop_en)
1920 1937 wrtord_bg += 2;
1921 1938  
... ... @@ -2147,7 +2164,8 @@
2147 2164 }
2148 2165  
2149 2166 unsigned int
2150   -compute_fsl_memctl_config_regs(const memctl_options_t *popts,
  2167 +compute_fsl_memctl_config_regs(const unsigned int ctrl_num,
  2168 + const memctl_options_t *popts,
2151 2169 fsl_ddr_cfg_regs_t *ddr,
2152 2170 const common_timing_params_t *common_dimm,
2153 2171 const dimm_params_t *dimm_params,
2154 2172  
2155 2173  
... ... @@ -2319,14 +2337,14 @@
2319 2337 set_ddr_eor(ddr, popts);
2320 2338  
2321 2339 #if !defined(CONFIG_SYS_FSL_DDR1)
2322   - set_timing_cfg_0(ddr, popts, dimm_params);
  2340 + set_timing_cfg_0(ctrl_num, ddr, popts, dimm_params);
2323 2341 #endif
2324 2342  
2325   - set_timing_cfg_3(ddr, popts, common_dimm, cas_latency,
  2343 + set_timing_cfg_3(ctrl_num, ddr, popts, common_dimm, cas_latency,
2326 2344 additive_latency);
2327   - set_timing_cfg_1(ddr, popts, common_dimm, cas_latency);
2328   - set_timing_cfg_2(ddr, popts, common_dimm,
2329   - cas_latency, additive_latency);
  2345 + set_timing_cfg_1(ctrl_num, ddr, popts, common_dimm, cas_latency);
  2346 + set_timing_cfg_2(ctrl_num, ddr, popts, common_dimm,
  2347 + cas_latency, additive_latency);
2330 2348  
2331 2349 set_ddr_cdr1(ddr, popts);
2332 2350 set_ddr_cdr2(ddr, popts);
2333 2351  
2334 2352  
... ... @@ -2338,15 +2356,15 @@
2338 2356 if ((ip_rev > 0x40700) && (popts->cswl_override != 0))
2339 2357 ddr->debug[18] = popts->cswl_override;
2340 2358  
2341   - set_ddr_sdram_cfg_2(ddr, popts, unq_mrs_en);
2342   - set_ddr_sdram_mode(ddr, popts, common_dimm,
2343   - cas_latency, additive_latency, unq_mrs_en);
2344   - set_ddr_sdram_mode_2(ddr, popts, common_dimm, unq_mrs_en);
  2359 + set_ddr_sdram_cfg_2(ctrl_num, ddr, popts, unq_mrs_en);
  2360 + set_ddr_sdram_mode(ctrl_num, ddr, popts, common_dimm,
  2361 + cas_latency, additive_latency, unq_mrs_en);
  2362 + set_ddr_sdram_mode_2(ctrl_num, ddr, popts, common_dimm, unq_mrs_en);
2345 2363 #ifdef CONFIG_SYS_FSL_DDR4
2346 2364 set_ddr_sdram_mode_9(ddr, popts, common_dimm, unq_mrs_en);
2347   - set_ddr_sdram_mode_10(ddr, popts, common_dimm, unq_mrs_en);
  2365 + set_ddr_sdram_mode_10(ctrl_num, ddr, popts, common_dimm, unq_mrs_en);
2348 2366 #endif
2349   - set_ddr_sdram_interval(ddr, popts, common_dimm);
  2367 + set_ddr_sdram_interval(ctrl_num, ddr, popts, common_dimm);
2350 2368 set_ddr_data_init(ddr);
2351 2369 set_ddr_sdram_clk_cntl(ddr, popts);
2352 2370 set_ddr_init_addr(ddr);
... ... @@ -2356,8 +2374,8 @@
2356 2374 #ifdef CONFIG_SYS_FSL_DDR4
2357 2375 set_ddr_sdram_cfg_3(ddr, popts);
2358 2376 set_timing_cfg_6(ddr);
2359   - set_timing_cfg_7(ddr, common_dimm);
2360   - set_timing_cfg_8(ddr, popts, common_dimm, cas_latency);
  2377 + set_timing_cfg_7(ctrl_num, ddr, common_dimm);
  2378 + set_timing_cfg_8(ctrl_num, ddr, popts, common_dimm, cas_latency);
2361 2379 set_timing_cfg_9(ddr);
2362 2380 set_ddr_dq_mapping(ddr, dimm_params);
2363 2381 #endif
drivers/ddr/fsl/ddr1_dimm_params.c
... ... @@ -228,10 +228,10 @@
228 228 *
229 229 * FIXME: use #define for the retvals
230 230 */
231   -unsigned int
232   -ddr_compute_dimm_parameters(const ddr1_spd_eeprom_t *spd,
233   - dimm_params_t *pdimm,
234   - unsigned int dimm_number)
  231 +unsigned int ddr_compute_dimm_parameters(const unsigned int ctrl_num,
  232 + const ddr1_spd_eeprom_t *spd,
  233 + dimm_params_t *pdimm,
  234 + unsigned int dimm_number)
235 235 {
236 236 unsigned int retval;
237 237  
238 238  
... ... @@ -311,16 +311,16 @@
311 311 & ~(1 << pdimm->caslat_x_minus_1));
312 312  
313 313 /* Compute CAS latencies below that defined by SPD */
314   - pdimm->caslat_lowest_derated
315   - = compute_derated_DDR1_CAS_latency(get_memory_clk_period_ps());
  314 + pdimm->caslat_lowest_derated = compute_derated_DDR1_CAS_latency(
  315 + get_memory_clk_period_ps(ctrl_num));
316 316  
317 317 /* Compute timing parameters */
318 318 pdimm->trcd_ps = spd->trcd * 250;
319 319 pdimm->trp_ps = spd->trp * 250;
320 320 pdimm->tras_ps = spd->tras * 1000;
321 321  
322   - pdimm->twr_ps = mclk_to_picos(3);
323   - pdimm->twtr_ps = mclk_to_picos(1);
  322 + pdimm->twr_ps = mclk_to_picos(ctrl_num, 3);
  323 + pdimm->twtr_ps = mclk_to_picos(ctrl_num, 1);
324 324 pdimm->trfc_ps = compute_trfc_ps_from_spd(0, spd->trfc);
325 325  
326 326 pdimm->trrd_ps = spd->trrd * 250;
... ... @@ -335,7 +335,7 @@
335 335 pdimm->tdh_ps
336 336 = convert_bcd_hundredths_to_cycle_time_ps(spd->data_hold);
337 337  
338   - pdimm->trtp_ps = mclk_to_picos(2); /* By the book. */
  338 + pdimm->trtp_ps = mclk_to_picos(ctrl_num, 2); /* By the book. */
339 339 pdimm->tdqsq_max_ps = spd->tdqsq * 10;
340 340 pdimm->tqhs_ps = spd->tqhs * 10;
341 341  
drivers/ddr/fsl/ddr2_dimm_params.c
... ... @@ -211,10 +211,10 @@
211 211 *
212 212 * FIXME: use #define for the retvals
213 213 */
214   -unsigned int
215   -ddr_compute_dimm_parameters(const ddr2_spd_eeprom_t *spd,
216   - dimm_params_t *pdimm,
217   - unsigned int dimm_number)
  214 +unsigned int ddr_compute_dimm_parameters(const unsigned int ctrl_num,
  215 + const ddr2_spd_eeprom_t *spd,
  216 + dimm_params_t *pdimm,
  217 + unsigned int dimm_number)
218 218 {
219 219 unsigned int retval;
220 220  
... ... @@ -310,8 +310,8 @@
310 310 & ~(1 << pdimm->caslat_x_minus_1));
311 311  
312 312 /* Compute CAS latencies below that defined by SPD */
313   - pdimm->caslat_lowest_derated
314   - = compute_derated_DDR2_CAS_latency(get_memory_clk_period_ps());
  313 + pdimm->caslat_lowest_derated = compute_derated_DDR2_CAS_latency(
  314 + get_memory_clk_period_ps(ctrl_num));
315 315  
316 316 /* Compute timing parameters */
317 317 pdimm->trcd_ps = spd->trcd * 250;
drivers/ddr/fsl/ddr3_dimm_params.c
... ... @@ -83,10 +83,10 @@
83 83 * Writes the results to the dimm_params_t structure pointed by pdimm.
84 84 *
85 85 */
86   -unsigned int
87   -ddr_compute_dimm_parameters(const ddr3_spd_eeprom_t *spd,
88   - dimm_params_t *pdimm,
89   - unsigned int dimm_number)
  86 +unsigned int ddr_compute_dimm_parameters(const unsigned int ctrl_num,
  87 + const ddr3_spd_eeprom_t *spd,
  88 + dimm_params_t *pdimm,
  89 + unsigned int dimm_number)
90 90 {
91 91 unsigned int retval;
92 92 unsigned int mtb_ps;
drivers/ddr/fsl/ddr4_dimm_params.c
... ... @@ -119,10 +119,10 @@
119 119 * Writes the results to the dimm_params_t structure pointed by pdimm.
120 120 *
121 121 */
122   -unsigned int
123   -ddr_compute_dimm_parameters(const generic_spd_eeprom_t *spd,
124   - dimm_params_t *pdimm,
125   - unsigned int dimm_number)
  122 +unsigned int ddr_compute_dimm_parameters(const unsigned int ctrl_num,
  123 + const generic_spd_eeprom_t *spd,
  124 + dimm_params_t *pdimm,
  125 + unsigned int dimm_number)
126 126 {
127 127 unsigned int retval;
128 128 int i;
drivers/ddr/fsl/fsl_ddr_gen4.c
... ... @@ -287,7 +287,7 @@
287 287 bus_width = 3 - ((ddr_in32(&ddr->sdram_cfg) & SDRAM_CFG_DBW_MASK)
288 288 >> SDRAM_CFG_DBW_SHIFT);
289 289 timeout = ((total_gb_size_per_controller << (6 - bus_width)) * 100 /
290   - (get_ddr_freq(0) >> 20)) << 2;
  290 + (get_ddr_freq(ctrl_num) >> 20)) << 2;
291 291 total_gb_size_per_controller >>= 4; /* shift down to gb size */
292 292 debug("total %d GB\n", total_gb_size_per_controller);
293 293 debug("Need to wait up to %d * 10ms\n", timeout);
drivers/ddr/fsl/lc_common_dimm_params.c
... ... @@ -13,7 +13,8 @@
13 13  
14 14 #if defined(CONFIG_SYS_FSL_DDR3) || defined(CONFIG_SYS_FSL_DDR4)
15 15 static unsigned int
16   -compute_cas_latency(const dimm_params_t *dimm_params,
  16 +compute_cas_latency(const unsigned int ctrl_num,
  17 + const dimm_params_t *dimm_params,
17 18 common_timing_params_t *outpdimm,
18 19 unsigned int number_of_dimms)
19 20 {
... ... @@ -22,7 +23,7 @@
22 23 unsigned int caslat_actual;
23 24 unsigned int retry = 16;
24 25 unsigned int tmp;
25   - const unsigned int mclk_ps = get_memory_clk_period_ps();
  26 + const unsigned int mclk_ps = get_memory_clk_period_ps(ctrl_num);
26 27 #ifdef CONFIG_SYS_FSL_DDR3
27 28 const unsigned int taamax = 20000;
28 29 #else
29 30  
... ... @@ -72,12 +73,13 @@
72 73 }
73 74 #else /* for DDR1 and DDR2 */
74 75 static unsigned int
75   -compute_cas_latency(const dimm_params_t *dimm_params,
  76 +compute_cas_latency(const unsigned int ctrl_num,
  77 + const dimm_params_t *dimm_params,
76 78 common_timing_params_t *outpdimm,
77 79 unsigned int number_of_dimms)
78 80 {
79 81 int i;
80   - const unsigned int mclk_ps = get_memory_clk_period_ps();
  82 + const unsigned int mclk_ps = get_memory_clk_period_ps(ctrl_num);
81 83 unsigned int lowest_good_caslat;
82 84 unsigned int not_ok;
83 85 unsigned int temp1, temp2;
... ... @@ -212,7 +214,8 @@
212 214 * by dimm_params.
213 215 */
214 216 unsigned int
215   -compute_lowest_common_dimm_parameters(const dimm_params_t *dimm_params,
  217 +compute_lowest_common_dimm_parameters(const unsigned int ctrl_num,
  218 + const dimm_params_t *dimm_params,
216 219 common_timing_params_t *outpdimm,
217 220 const unsigned int number_of_dimms)
218 221 {
... ... @@ -442,7 +445,8 @@
442 445 printf("ERROR: Mix different RDIMM detected!\n");
443 446  
444 447 /* calculate cas latency for all DDR types */
445   - if (compute_cas_latency(dimm_params, outpdimm, number_of_dimms))
  448 + if (compute_cas_latency(ctrl_num, dimm_params,
  449 + outpdimm, number_of_dimms))
446 450 return 1;
447 451  
448 452 /* Determine if all DIMMs ECC capable. */
449 453  
... ... @@ -518,11 +522,12 @@
518 522  
519 523 #if defined(CONFIG_SYS_FSL_DDR2)
520 524 if ((outpdimm->lowest_common_spd_caslat < 4) &&
521   - (picos_to_mclk(trcd_ps) > outpdimm->lowest_common_spd_caslat)) {
522   - additive_latency = picos_to_mclk(trcd_ps) -
  525 + (picos_to_mclk(ctrl_num, trcd_ps) >
  526 + outpdimm->lowest_common_spd_caslat)) {
  527 + additive_latency = picos_to_mclk(ctrl_num, trcd_ps) -
523 528 outpdimm->lowest_common_spd_caslat;
524   - if (mclk_to_picos(additive_latency) > trcd_ps) {
525   - additive_latency = picos_to_mclk(trcd_ps);
  529 + if (mclk_to_picos(ctrl_num, additive_latency) > trcd_ps) {
  530 + additive_latency = picos_to_mclk(ctrl_num, trcd_ps);
526 531 debug("setting additive_latency to %u because it was "
527 532 " greater than tRCD_ps\n", additive_latency);
528 533 }
... ... @@ -534,7 +539,7 @@
534 539 *
535 540 * AL <= tRCD(min)
536 541 */
537   - if (mclk_to_picos(additive_latency) > trcd_ps) {
  542 + if (mclk_to_picos(ctrl_num, additive_latency) > trcd_ps) {
538 543 printf("Error: invalid additive latency exceeds tRCD(min).\n");
539 544 return 1;
540 545 }
drivers/ddr/fsl/main.c
... ... @@ -450,7 +450,8 @@
450 450 &(pinfo->spd_installed_dimms[i][j]);
451 451 dimm_params_t *pdimm =
452 452 &(pinfo->dimm_params[i][j]);
453   - retval = compute_dimm_parameters(spd, pdimm, i);
  453 + retval = compute_dimm_parameters(
  454 + i, spd, pdimm, j);
454 455 #ifdef CONFIG_SYS_DDR_RAW_TIMING
455 456 if (!i && !j && retval) {
456 457 printf("SPD error on controller %d! "
... ... @@ -507,10 +508,11 @@
507 508 for (i = first_ctrl; i <= last_ctrl; i++) {
508 509 debug("Computing lowest common DIMM"
509 510 " parameters for memctl=%u\n", i);
510   - compute_lowest_common_dimm_parameters(
511   - pinfo->dimm_params[i],
512   - &timing_params[i],
513   - CONFIG_DIMM_SLOTS_PER_CTLR);
  511 + compute_lowest_common_dimm_parameters
  512 + (i,
  513 + pinfo->dimm_params[i],
  514 + &timing_params[i],
  515 + CONFIG_DIMM_SLOTS_PER_CTLR);
514 516 }
515 517  
516 518 case STEP_GATHER_OPTS:
... ... @@ -562,12 +564,13 @@
562 564 continue;
563 565 }
564 566  
565   - compute_fsl_memctl_config_regs(
566   - &pinfo->memctl_opts[i],
567   - &ddr_reg[i], &timing_params[i],
568   - pinfo->dimm_params[i],
569   - dbw_capacity_adjust[i],
570   - size_only);
  567 + compute_fsl_memctl_config_regs
  568 + (i,
  569 + &pinfo->memctl_opts[i],
  570 + &ddr_reg[i], &timing_params[i],
  571 + pinfo->dimm_params[i],
  572 + dbw_capacity_adjust[i],
  573 + size_only);
571 574 }
572 575  
573 576 default:
drivers/ddr/fsl/mpc85xx_ddr_gen3.c
... ... @@ -426,7 +426,7 @@
426 426 bus_width = 3 - ((ddr->sdram_cfg & SDRAM_CFG_DBW_MASK)
427 427 >> SDRAM_CFG_DBW_SHIFT);
428 428 timeout = ((total_gb_size_per_controller << (6 - bus_width)) * 100 /
429   - (get_ddr_freq(0) >> 20)) << 1;
  429 + (get_ddr_freq(ctrl_num) >> 20)) << 1;
430 430 #ifdef CONFIG_SYS_FSL_ERRATUM_DDR111_DDR134
431 431 timeout_save = timeout;
432 432 #endif
433 433  
... ... @@ -538,12 +538,14 @@
538 538 case 1:
539 539 out_be32(&ddr->cs1_bnds, regs->cs[csn].bnds);
540 540 break;
  541 +#if CONFIG_CHIP_SELECTS_PER_CTRL > 2
541 542 case 2:
542 543 out_be32(&ddr->cs2_bnds, regs->cs[csn].bnds);
543 544 break;
544 545 case 3:
545 546 out_be32(&ddr->cs3_bnds, regs->cs[csn].bnds);
546 547 break;
  548 +#endif
547 549 }
548 550 clrbits_be32(&ddr->sdram_cfg, 0x2);
549 551 }
drivers/ddr/fsl/options.c
... ... @@ -732,7 +732,7 @@
732 732 #endif
733 733  
734 734 /* Global Timing Parameters. */
735   - debug("mclk_ps = %u ps\n", get_memory_clk_period_ps());
  735 + debug("mclk_ps = %u ps\n", get_memory_clk_period_ps(ctrl_num));
736 736  
737 737 /* Pick a caslat override. */
738 738 popts->cas_latency_override = 0;
... ... @@ -785,7 +785,7 @@
785 785 * FIXME: width, was considering looking at pdimm->primary_sdram_width
786 786 */
787 787 #if defined(CONFIG_SYS_FSL_DDR1)
788   - popts->tfaw_window_four_activates_ps = mclk_to_picos(1);
  788 + popts->tfaw_window_four_activates_ps = mclk_to_picos(ctrl_num, 1);
789 789  
790 790 #elif defined(CONFIG_SYS_FSL_DDR2)
791 791 /*
... ... @@ -1036,7 +1036,7 @@
1036 1036 if (pdimm[0].n_ranks == 4)
1037 1037 popts->quad_rank_present = 1;
1038 1038  
1039   - ddr_freq = get_ddr_freq(0) / 1000000;
  1039 + ddr_freq = get_ddr_freq(ctrl_num) / 1000000;
1040 1040 if (popts->registered_dimm_en) {
1041 1041 popts->rcw_override = 1;
1042 1042 popts->rcw_1 = 0x000a5a00;
drivers/ddr/fsl/util.c
... ... @@ -43,9 +43,9 @@
43 43 * propagation, compute a suitably rounded mclk_ps to compute
44 44 * a working memory controller configuration.
45 45 */
46   -unsigned int get_memory_clk_period_ps(void)
  46 +unsigned int get_memory_clk_period_ps(const unsigned int ctrl_num)
47 47 {
48   - unsigned int data_rate = get_ddr_freq(0);
  48 + unsigned int data_rate = get_ddr_freq(ctrl_num);
49 49 unsigned int result;
50 50  
51 51 /* Round to nearest 10ps, being careful about 64-bit multiply/divide */
52 52  
... ... @@ -59,10 +59,10 @@
59 59 }
60 60  
61 61 /* Convert picoseconds into DRAM clock cycles (rounding up if needed). */
62   -unsigned int picos_to_mclk(unsigned int picos)
  62 +unsigned int picos_to_mclk(const unsigned int ctrl_num, unsigned int picos)
63 63 {
64 64 unsigned long long clks, clks_rem;
65   - unsigned long data_rate = get_ddr_freq(0);
  65 + unsigned long data_rate = get_ddr_freq(ctrl_num);
66 66  
67 67 /* Short circuit for zero picos */
68 68 if (!picos)
69 69  
... ... @@ -88,9 +88,9 @@
88 88 return (unsigned int) clks;
89 89 }
90 90  
91   -unsigned int mclk_to_picos(unsigned int mclk)
  91 +unsigned int mclk_to_picos(const unsigned int ctrl_num, unsigned int mclk)
92 92 {
93   - return get_memory_clk_period_ps() * mclk;
  93 + return get_memory_clk_period_ps(ctrl_num) * mclk;
94 94 }
95 95  
96 96 #ifdef CONFIG_PPC
... ... @@ -44,11 +44,12 @@
44 44 * to this specific DDR technology.
45 45 */
46 46 static __inline__ int
47   -compute_dimm_parameters(const generic_spd_eeprom_t *spd,
  47 +compute_dimm_parameters(const unsigned int ctrl_num,
  48 + const generic_spd_eeprom_t *spd,
48 49 dimm_params_t *pdimm,
49 50 unsigned int dimm_number)
50 51 {
51   - return ddr_compute_dimm_parameters(spd, pdimm, dimm_number);
  52 + return ddr_compute_dimm_parameters(ctrl_num, spd, pdimm, dimm_number);
52 53 }
53 54 #endif
54 55  
55 56  
... ... @@ -92,13 +93,15 @@
92 93 unsigned int size_only);
93 94 const char *step_to_string(unsigned int step);
94 95  
95   -unsigned int compute_fsl_memctl_config_regs(const memctl_options_t *popts,
  96 +unsigned int compute_fsl_memctl_config_regs(const unsigned int ctrl_num,
  97 + const memctl_options_t *popts,
96 98 fsl_ddr_cfg_regs_t *ddr,
97 99 const common_timing_params_t *common_dimm,
98 100 const dimm_params_t *dimm_parameters,
99 101 unsigned int dbw_capacity_adjust,
100 102 unsigned int size_only);
101 103 unsigned int compute_lowest_common_dimm_parameters(
  104 + const unsigned int ctrl_num,
102 105 const dimm_params_t *dimm_params,
103 106 common_timing_params_t *outpdimm,
104 107 unsigned int number_of_dimms);
... ... @@ -108,9 +111,9 @@
108 111 unsigned int ctrl_num);
109 112 void check_interleaving_options(fsl_ddr_info_t *pinfo);
110 113  
111   -unsigned int mclk_to_picos(unsigned int mclk);
112   -unsigned int get_memory_clk_period_ps(void);
113   -unsigned int picos_to_mclk(unsigned int picos);
  114 +unsigned int mclk_to_picos(const unsigned int ctrl_num, unsigned int mclk);
  115 +unsigned int get_memory_clk_period_ps(const unsigned int ctrl_num);
  116 +unsigned int picos_to_mclk(const unsigned int ctrl_num, unsigned int picos);
114 117 void fsl_ddr_set_lawbar(
115 118 const common_timing_params_t *memctl_common_params,
116 119 unsigned int memctl_interleaved,
include/fsl_ddr_dimm_params.h
... ... @@ -112,7 +112,7 @@
112 112 #endif
113 113 } dimm_params_t;
114 114  
115   -extern unsigned int ddr_compute_dimm_parameters(
  115 +unsigned int ddr_compute_dimm_parameters(const unsigned int ctrl_num,
116 116 const generic_spd_eeprom_t *spd,
117 117 dimm_params_t *pdimm,
118 118 unsigned int dimm_number);