|
@@ -418,8 +418,19 @@ unsigned int populate_memctl_options(int all_DIMMs_registered,
|
|
|
/* Choose dynamic power management mode. */
|
|
|
popts->dynamic_power = 0;
|
|
|
|
|
|
- /* 0 = 64-bit, 1 = 32-bit, 2 = 16-bit */
|
|
|
- popts->data_bus_width = 0;
|
|
|
+ /*
|
|
|
+ * check first dimm for primary sdram width
|
|
|
+ * presuming all dimms are similar
|
|
|
+ * 0 = 64-bit, 1 = 32-bit, 2 = 16-bit
|
|
|
+ */
|
|
|
+ if (pdimm[0].primary_sdram_width == 64)
|
|
|
+ popts->data_bus_width = 0;
|
|
|
+ else if (pdimm[0].primary_sdram_width == 32)
|
|
|
+ popts->data_bus_width = 1;
|
|
|
+ else if (pdimm[0].primary_sdram_width == 16)
|
|
|
+ popts->data_bus_width = 2;
|
|
|
+ else
|
|
|
+ panic("Error: invalid primary sdram width!\n");
|
|
|
|
|
|
/* Choose burst length. */
|
|
|
#if defined(CONFIG_FSL_DDR3)
|
|
@@ -427,8 +438,13 @@ unsigned int populate_memctl_options(int all_DIMMs_registered,
|
|
|
popts->OTF_burst_chop_en = 0; /* on-the-fly burst chop disable */
|
|
|
popts->burst_length = DDR_BL8; /* Fixed 8-beat burst len */
|
|
|
#else
|
|
|
- popts->OTF_burst_chop_en = 1; /* on-the-fly burst chop */
|
|
|
- popts->burst_length = DDR_OTF; /* on-the-fly BC4 and BL8 */
|
|
|
+ if (popts->data_bus_width == 1) { /* 32-bit bus */
|
|
|
+ popts->OTF_burst_chop_en = 0;
|
|
|
+ popts->burst_length = DDR_BL8;
|
|
|
+ } else {
|
|
|
+ popts->OTF_burst_chop_en = 1; /* on-the-fly burst chop */
|
|
|
+ popts->burst_length = DDR_OTF; /* on-the-fly BC4 and BL8 */
|
|
|
+ }
|
|
|
#endif
|
|
|
#else
|
|
|
popts->burst_length = DDR_BL4; /* has to be 4 for DDR2 */
|