Elyes HAOUAS has uploaded this change for review. ( https://review.coreboot.org/27590
Change subject: nb/intel/i945: For test ......................................................................
nb/intel/i945: For test
With this changes 945G-M4 board boots fine when DIMM0 is not populated. Still not boot: When channel0 is not populated. When 533MHz RAM is used.
Change-Id: Iff1705788fdffeacd94fe5e50507733ff7c0f96b Signed-off-by: Elyes HAOUAS ehaouas@noos.fr --- M src/northbridge/intel/i945/raminit.c 1 file changed, 59 insertions(+), 52 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/90/27590/1
diff --git a/src/northbridge/intel/i945/raminit.c b/src/northbridge/intel/i945/raminit.c index c259530..074214a 100644 --- a/src/northbridge/intel/i945/raminit.c +++ b/src/northbridge/intel/i945/raminit.c @@ -695,45 +695,45 @@ };
static const u32 dq2330[] = { - 0x08070706, 0x0a090908, 0x0d0c0b0a, 0x12100f0e, - 0x1a181614, 0x22201e1c, 0x2a282624, 0x3934302d, - 0x0a090908, 0x0c0b0b0a, 0x0e0d0d0c, 0x1211100f, - 0x19171513, 0x211f1d1b, 0x2d292623, 0x3f393531 + 0x01000000, 0x02010101, 0x08060403, 0x0c0b0a09, + 0x1512100e, 0x1c1a1816, 0x1f1f1f1e, 0x1f1f1f1f, + 0x02020101, 0x04040303, 0x07060505, 0x110e0b09, + 0x18161412, 0x1f1e1c1a, 0x1f1f1f1f, 0x1f1f1f1f };
static const u32 cmd2710[] = { 0x07060605, 0x0f0d0b09, 0x19171411, 0x1f1f1d1b, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, - 0x1110100f, 0x0f0d0b09, 0x19171411, 0x1f1f1d1b, + 0x1110100f, 0x14121111, 0x1c1a1816, 0x1f1f1f1e, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f };
static const u32 cmd3210[] = { - 0x0f0d0b0a, 0x17151311, 0x1f1d1b19, 0x1f1f1f1f, - 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, - 0x18171615, 0x1f1f1c1a, 0x1f1f1f1f, 0x1f1f1f1f, - 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f + 0x04030302, 0x07060504, 0x0f0d0b09, 0x18151311, + 0x1f1f1d1b, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, + 0x09090808, 0x0b0b0a0a, 0x110f0d0c, 0x1b191714, + 0x1f1f1f1d, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f };
static const u32 clk2030[] = { - 0x0e0d0d0c, 0x100f0f0e, 0x100f0e0d, 0x15131211, + 0x0c0b0b0b, 0x0d0d0c0c, 0x100f0e0d, 0x15131211, 0x1d1b1917, 0x2523211f, 0x2a282927, 0x32302e2c, - 0x17161514, 0x1b1a1918, 0x1f1e1d1c, 0x23222120, - 0x27262524, 0x2d2b2928, 0x3533312f, 0x3d3b3937 + 0x09090808, 0x0c0b0b0a, 0x100f0e0d, 0x14131211, + 0x18171615, 0x1e1c1a19, 0x26242220, 0x2e2c2a28 };
static const u32 ctl3215[] = { - 0x01010000, 0x03020101, 0x07060504, 0x0b0a0908, - 0x100f0e0d, 0x14131211, 0x18171615, 0x1c1b1a19, - 0x05040403, 0x07060605, 0x0a090807, 0x0f0d0c0b, - 0x14131211, 0x18171615, 0x1c1b1a19, 0x201f1e1d + 0x07070606, 0x0e0c0a08, 0x17141210, 0x201e1c1a, + 0x28262422, 0x302e2c2a, 0x38363432, 0x3f3e3c3a, + 0x13131212, 0x16151414, 0x211d1a18, 0x28262422, + 0x302e2c2a, 0x38363432, 0x3f3e3c3a, 0x3f3f3f3f };
static const u32 ctl3220[] = { - 0x05040403, 0x07060505, 0x0e0c0a08, 0x1a171411, - 0x2825221f, 0x35322f2b, 0x3e3e3b38, 0x3e3e3e3e, - 0x09080807, 0x0b0a0a09, 0x0f0d0c0b, 0x1b171311, - 0x2825221f, 0x35322f2b, 0x3e3e3b38, 0x3e3e3e3e + 0x05050404, 0x0b090706, 0x13110f0d, 0x1d1b1915, + 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, + 0x0e0e0d0d, 0x100f0f0f, 0x1b191310, 0x1f1f1f1d, + 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f };
static const u32 nc[] = { @@ -762,27 +762,28 @@ DQ2030, CMD3210, NC, CTL3215, NC, CLK2030, NC, NC,
DQ2030, CMD3210, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD3210, - DQ2030, CMD3210, CTL3215, NC, CLK2030, NC, DQ2030, CMD3210, + DQ2030, DQ2330, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, DQ2330, DQ2030, CMD3210, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD3210, - DQ2030, CMD3210, CTL3215, NC, CLK2030, NC, DQ2030, CMD2710, - DQ2030, CMD3210, CTL3215, NC, CLK2030, NC, NC, NC, + DQ2030, DQ2330, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, DQ2330, + DQ2030, CMD2710, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD2710,
DQ2030, CMD3210, NC, CTL3215, NC, CLK2030, DQ2030, CMD3210, DQ2030, CMD3210, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD3210, - DQ2030, CMD3210, NC, CTL3215, NC, CLK2030, DQ2030, CMD3210, - DQ2030, CMD3210, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD2710, - DQ2030, CMD3210, NC, CTL3215, NC, CLK2030, NC, NC, + DQ2030, CTL3220, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CTL3220, + DQ2030, DQ2330, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, DQ2330, + DQ2030, CMD2710, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD2710,
DQ2030, CMD2710, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD3210, - DQ2030, CMD2710, CTL3215, NC, CLK2030, NC, DQ2030, CMD3210, - DQ2030, CMD2710, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD3210, - DQ2030, CMD2710, CTL3215, NC, CLK2030, NC, DQ2030, CMD2710, - DQ2030, CMD2710, CTL3215, NC, CLK2030, NC, NC, NC, + DQ2030, DQ2330, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, DQ2330, + DQ2030, DQ2330, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, DQ2330, + DQ2030, DQ2330, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, DQ2330, + DQ2030, CTL3220, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CTL3220,
NC, NC, NC, CTL3215, NC, CLK2030, DQ2030, CMD3210, - NC, NC, CTL3215, NC, CLK2030, NC, DQ2030, CMD3210, - NC, NC, NC, CTL3215, NC, CLK2030, DQ2030, CMD3210, - NC, NC, CTL3215, NC, CLK2030, CLK2030, DQ2030, CMD2710 + DQ2030, CMD2710, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD2710, + DQ2030, CMD2710, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD2710, + DQ2030, CTL3220, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CTL3220, + DQ2030, CMD3210, CTL3215, CTL3215, CLK2030, CLK2030, DQ2030, CMD3210 };
static const u8 single_channel_slew_group_lookup[] = { @@ -902,24 +903,25 @@ 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x33, 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x00, 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, + 0x44, 0x55, 0x00, 0x00, 0x44, 0x44, 0x44, 0x55, + 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x88, 0x00, 0x00, 0x44, 0x44, 0x44, 0x88, 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, - 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x33, - 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x00, - 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, - 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, - 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, - 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x33, - 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x00, - 0x44, 0x33, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, - 0x44, 0x33, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, - 0x44, 0x33, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, + 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x00, 0x00, 0x44, 0x44, 0x44, 0x33, - 0x44, 0x33, 0x00, 0x00, 0x44, 0x44, 0x44, 0x00, + 0x44, 0x55, 0x00, 0x00, 0x44, 0x44, 0x44, 0x55, + 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, + 0x44, 0x33, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, + 0x44, 0x88, 0x00, 0x00, 0x44, 0x44, 0x44, 0x88, + 0x44, 0x55, 0x00, 0x00, 0x44, 0x44, 0x44, 0x55, + 0x44, 0x88, 0x00, 0x00, 0x44, 0x44, 0x44, 0x88, + 0x44, 0x33, 0x00, 0x00, 0x44, 0x44, 0x44, 0x33, 0x44, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, - 0x44, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, - 0x44, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, - 0x44, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x33 + 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, + 0x44, 0x22, 0x00, 0x00, 0x44, 0x44, 0x44, 0x22, + 0x44, 0x33, 0x00, 0x00, 0x44, 0x44, 0x44, 0x33 + };
static const u8 single_channel_strength_multiplier[] = { @@ -953,21 +955,20 @@ static void sdram_rcomp_buffer_strength_and_slew(struct sys_info *sysinfo) { const u8 *strength_multiplier; - int idx, dual_channel; + int idx, idx_channel1, dual_channel;
/* Set Strength Multipliers */
+ idx = 5 * sysinfo->dimm[0] + sysinfo->dimm[1]; /* Dual Channel needs different tables. */ if (sdram_capabilities_dual_channel()) { printk(BIOS_DEBUG, "Programming Dual Channel RCOMP\n"); strength_multiplier = dual_channel_strength_multiplier; dual_channel = 1; - idx = 5 * sysinfo->dimm[0] + sysinfo->dimm[2]; } else { printk(BIOS_DEBUG, "Programming Single Channel RCOMP\n"); strength_multiplier = single_channel_strength_multiplier; dual_channel = 0; - idx = 5 * sysinfo->dimm[0] + sysinfo->dimm[1]; }
printk(BIOS_DEBUG, "Table Index: %d\n", idx); @@ -979,7 +980,12 @@ MCHBAR8(G5SC) = strength_multiplier[idx * 8 + 4]; MCHBAR8(G6SC) = strength_multiplier[idx * 8 + 5]; MCHBAR8(G7SC) = strength_multiplier[idx * 8 + 6]; - MCHBAR8(G8SC) = strength_multiplier[idx * 8 + 7]; + if (dual_channel) { + idx_channel1 = 5 * sysinfo->dimm[2] + sysinfo->dimm[3]; + MCHBAR8(G8SC) = strength_multiplier[idx_channel1 * 8 + 7]; + } else { + MCHBAR8(G8SC) = strength_multiplier[idx * 8 + 7]; + }
/* Channel 0 */ sdram_write_slew_rates(G1SRPUT, slew_group_lookup(dual_channel, idx * 8 + 0)); @@ -995,8 +1001,9 @@ sdram_write_slew_rates(G6SRPUT, slew_group_lookup(dual_channel, idx * 8 + 5));
/* Channel 1 */ - if (sysinfo->dual_channel) { + if (dual_channel) { sdram_write_slew_rates(G7SRPUT, slew_group_lookup(dual_channel, idx * 8 + 6)); + idx = 5 * sysinfo->dimm[2] + sysinfo->dimm[3]; sdram_write_slew_rates(G8SRPUT, slew_group_lookup(dual_channel, idx * 8 + 7)); } else { sdram_write_slew_rates(G7SRPUT, nc);