]> git.sur5r.net Git - u-boot/blobdiff - arch/powerpc/cpu/mpc8xxx/ddr/lc_common_dimm_params.c
Merge branch 'master' of git://git.denx.de/u-boot-marvell
[u-boot] / arch / powerpc / cpu / mpc8xxx / ddr / lc_common_dimm_params.c
index e888e3ea562d2feb78afcdcb402941f3fb9331e9..029e566b6b0e725e9d638c4817a627bdeaada377 100644 (file)
@@ -76,7 +76,7 @@ compute_lowest_common_dimm_parameters(const dimm_params_t *dimm_params,
                                      common_timing_params_t *outpdimm,
                                      unsigned int number_of_dimms)
 {
-       unsigned int i;
+       unsigned int i, j;
 
        unsigned int tCKmin_X_ps = 0;
        unsigned int tCKmax_ps = 0xFFFFFFFF;
@@ -98,7 +98,7 @@ compute_lowest_common_dimm_parameters(const dimm_params_t *dimm_params,
        unsigned int tDQSQ_max_ps = 0;
        unsigned int tQHS_ps = 0;
 
-       unsigned int temp1, temp2;
+       unsigned int temp1, temp2, temp3;
        unsigned int additive_latency = 0;
 #if !defined(CONFIG_FSL_DDR3)
        const unsigned int mclk_ps = get_memory_clk_period_ps();
@@ -118,6 +118,18 @@ compute_lowest_common_dimm_parameters(const dimm_params_t *dimm_params,
                        temp1++;
                        continue;
                }
+               if (dimm_params[i].n_ranks == 4 && i != 0) {
+                       printf("Found Quad-rank DIMM in wrong bank, ignored."
+                               " Software may not run as expected.\n");
+                       temp1++;
+                       continue;
+               }
+               if (dimm_params[i].n_ranks == 4 && \
+                 CONFIG_CHIP_SELECTS_PER_CTRL/CONFIG_DIMM_SLOTS_PER_CTLR < 4) {
+                       printf("Found Quad-rank DIMM, not able to support.");
+                       temp1++;
+                       continue;
+               }
 
                /*
                 * Find minimum tCKmax_ps to find fastest slow speed,
@@ -219,6 +231,20 @@ compute_lowest_common_dimm_parameters(const dimm_params_t *dimm_params,
                                "DIMMs detected!\n");
        }
 
+       temp1 = 0;
+       if (outpdimm->all_DIMMs_registered)
+               for (j = 0; j < 16; j++) {
+                       outpdimm->rcw[j] = dimm_params[0].rcw[j];
+                       for (i = 1; i < number_of_dimms; i++)
+                               if (dimm_params[i].rcw[j] != dimm_params[0].rcw[j]) {
+                                       temp3 = 1;
+                                       break;
+                               }
+               }
+
+       if (temp1 != 0)
+               printf("ERROR: Mix different RDIMM detected!\n");
+
 #if defined(CONFIG_FSL_DDR3)
        if (compute_cas_latency_ddr3(dimm_params, outpdimm, number_of_dimms))
                return 1;