|
@@ -196,7 +196,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
|
|
|
spd_eeprom_t spd;
|
|
|
unsigned int n_ranks;
|
|
|
unsigned int rank_density;
|
|
|
- unsigned int odt_rd_cfg, odt_wr_cfg;
|
|
|
+ unsigned int odt_rd_cfg, odt_wr_cfg, ba_bits;
|
|
|
unsigned int odt_cfg, mode_odt_enable;
|
|
|
unsigned int refresh_clk;
|
|
|
#ifdef MPC86xx_DDR_SDRAM_CLK_CNTL
|
|
@@ -321,6 +321,10 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
|
|
|
odt_wr_cfg = 1; /* Assert ODT on writes to CS0 */
|
|
|
}
|
|
|
|
|
|
+ ba_bits = 0;
|
|
|
+ if (spd.nbanks == 0x8)
|
|
|
+ ba_bits = 1;
|
|
|
+
|
|
|
#ifdef CONFIG_DDR_INTERLEAVE
|
|
|
|
|
|
if (dimm_num != 1) {
|
|
@@ -357,6 +361,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
|
|
|
#endif
|
|
|
| (odt_rd_cfg << 20)
|
|
|
| (odt_wr_cfg << 16)
|
|
|
+ | (ba_bits << 14)
|
|
|
| (spd.nrow_addr - 12) << 8
|
|
|
| (spd.ncol_addr - 8) );
|
|
|
|
|
@@ -386,6 +391,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
|
|
|
ddr->cs0_config = ( 1 << 31
|
|
|
| (odt_rd_cfg << 20)
|
|
|
| (odt_wr_cfg << 16)
|
|
|
+ | (ba_bits << 14)
|
|
|
| (spd.nrow_addr - 12) << 8
|
|
|
| (spd.ncol_addr - 8) );
|
|
|
|
|
@@ -403,6 +409,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
|
|
|
ddr->cs1_config = ( 1<<31
|
|
|
| (odt_rd_cfg << 20)
|
|
|
| (odt_wr_cfg << 16)
|
|
|
+ | (ba_bits << 14)
|
|
|
| (spd.nrow_addr - 12) << 8
|
|
|
| (spd.ncol_addr - 8) );
|
|
|
debug("DDR: cs1_bnds = 0x%08x\n", ddr->cs1_bnds);
|
|
@@ -422,6 +429,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
|
|
|
ddr->cs2_config = ( 1 << 31
|
|
|
| (odt_rd_cfg << 20)
|
|
|
| (odt_wr_cfg << 16)
|
|
|
+ | (ba_bits << 14)
|
|
|
| (spd.nrow_addr - 12) << 8
|
|
|
| (spd.ncol_addr - 8) );
|
|
|
|
|
@@ -439,6 +447,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
|
|
|
ddr->cs3_config = ( 1<<31
|
|
|
| (odt_rd_cfg << 20)
|
|
|
| (odt_wr_cfg << 16)
|
|
|
+ | (ba_bits << 14)
|
|
|
| (spd.nrow_addr - 12) << 8
|
|
|
| (spd.ncol_addr - 8) );
|
|
|
debug("DDR: cs3_bnds = 0x%08x\n", ddr->cs3_bnds);
|