Skip to content
Snippets Groups Projects
Commit b830b7f1 authored by Becky Bruce's avatar Becky Bruce Committed by Jon Loeliger
Browse files

86xx: Support 2GB DIMMs


Configure the number of bits used to address the banks inside the SDRAM
device.  The default register value of 0 means 2 bits to address 4 banks.
Higher capacity devices like a 2GB DIMM require 3 bits to address 8 banks.

Signed-off-by: default avatarBecky Bruce <bgill@freescale.com>
parent fe8dd0b2
No related branches found
No related tags found
No related merge requests found
...@@ -196,7 +196,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num, ...@@ -196,7 +196,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
spd_eeprom_t spd; spd_eeprom_t spd;
unsigned int n_ranks; unsigned int n_ranks;
unsigned int rank_density; 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 odt_cfg, mode_odt_enable;
unsigned int refresh_clk; unsigned int refresh_clk;
#ifdef MPC86xx_DDR_SDRAM_CLK_CNTL #ifdef MPC86xx_DDR_SDRAM_CLK_CNTL
...@@ -321,6 +321,10 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num, ...@@ -321,6 +321,10 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
odt_wr_cfg = 1; /* Assert ODT on writes to CS0 */ odt_wr_cfg = 1; /* Assert ODT on writes to CS0 */
} }
ba_bits = 0;
if (spd.nbanks == 0x8)
ba_bits = 1;
#ifdef CONFIG_DDR_INTERLEAVE #ifdef CONFIG_DDR_INTERLEAVE
if (dimm_num != 1) { if (dimm_num != 1) {
...@@ -357,6 +361,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num, ...@@ -357,6 +361,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
#endif #endif
| (odt_rd_cfg << 20) | (odt_rd_cfg << 20)
| (odt_wr_cfg << 16) | (odt_wr_cfg << 16)
| (ba_bits << 14)
| (spd.nrow_addr - 12) << 8 | (spd.nrow_addr - 12) << 8
| (spd.ncol_addr - 8) ); | (spd.ncol_addr - 8) );
...@@ -386,6 +391,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num, ...@@ -386,6 +391,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
ddr->cs0_config = ( 1 << 31 ddr->cs0_config = ( 1 << 31
| (odt_rd_cfg << 20) | (odt_rd_cfg << 20)
| (odt_wr_cfg << 16) | (odt_wr_cfg << 16)
| (ba_bits << 14)
| (spd.nrow_addr - 12) << 8 | (spd.nrow_addr - 12) << 8
| (spd.ncol_addr - 8) ); | (spd.ncol_addr - 8) );
...@@ -403,6 +409,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num, ...@@ -403,6 +409,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
ddr->cs1_config = ( 1<<31 ddr->cs1_config = ( 1<<31
| (odt_rd_cfg << 20) | (odt_rd_cfg << 20)
| (odt_wr_cfg << 16) | (odt_wr_cfg << 16)
| (ba_bits << 14)
| (spd.nrow_addr - 12) << 8 | (spd.nrow_addr - 12) << 8
| (spd.ncol_addr - 8) ); | (spd.ncol_addr - 8) );
debug("DDR: cs1_bnds = 0x%08x\n", ddr->cs1_bnds); debug("DDR: cs1_bnds = 0x%08x\n", ddr->cs1_bnds);
...@@ -422,6 +429,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num, ...@@ -422,6 +429,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
ddr->cs2_config = ( 1 << 31 ddr->cs2_config = ( 1 << 31
| (odt_rd_cfg << 20) | (odt_rd_cfg << 20)
| (odt_wr_cfg << 16) | (odt_wr_cfg << 16)
| (ba_bits << 14)
| (spd.nrow_addr - 12) << 8 | (spd.nrow_addr - 12) << 8
| (spd.ncol_addr - 8) ); | (spd.ncol_addr - 8) );
...@@ -439,6 +447,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num, ...@@ -439,6 +447,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
ddr->cs3_config = ( 1<<31 ddr->cs3_config = ( 1<<31
| (odt_rd_cfg << 20) | (odt_rd_cfg << 20)
| (odt_wr_cfg << 16) | (odt_wr_cfg << 16)
| (ba_bits << 14)
| (spd.nrow_addr - 12) << 8 | (spd.nrow_addr - 12) << 8
| (spd.ncol_addr - 8) ); | (spd.ncol_addr - 8) );
debug("DDR: cs3_bnds = 0x%08x\n", ddr->cs3_bnds); debug("DDR: cs3_bnds = 0x%08x\n", ddr->cs3_bnds);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment