nb/i945/raminit: Correct C0DRAMW & C1DRAMW for 4 DIMMs

Change-Id: Ib1f999447b37a1524d589552ea2eec640c2a2c7e
Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr>
Reviewed-on: https://review.coreboot.org/18387
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
Elyes HAOUAS 2018-06-30 10:39:24 +02:00 committed by Patrick Georgi
parent 34510c377e
commit a4fc7bef7f
1 changed files with 37 additions and 30 deletions

View File

@ -629,43 +629,50 @@ static void sdram_get_dram_configuration(struct sys_info *sysinfo)
static void sdram_program_dram_width(struct sys_info *sysinfo)
{
u16 c0dramw = 0, c1dramw = 0;
int idx;
int i, idx;
if (sysinfo->dual_channel)
idx = 2;
else
idx = 1;
switch (sysinfo->dimm[0]) {
case SYSINFO_DIMM_X16DS:
c0dramw = 0x0000; break;
case SYSINFO_DIMM_X8DS:
c0dramw = 0x0001; break;
case SYSINFO_DIMM_X16SS:
c0dramw = 0x0000; break;
case SYSINFO_DIMM_X8DDS:
c0dramw = 0x0005; break;
case SYSINFO_DIMM_NOT_POPULATED:
c0dramw = 0x0000; break;
for (i = 0; i < DIMM_SOCKETS; i++) { /* Channel 0 */
switch (sysinfo->dimm[i]) {
case SYSINFO_DIMM_X16DS:
c0dramw |= (0x0000) << 4*(i % 2);
break;
case SYSINFO_DIMM_X8DS:
c0dramw |= (0x0001) << 4*(i % 2);
break;
case SYSINFO_DIMM_X16SS:
c0dramw |= (0x0000) << 4*(i % 2);
break;
case SYSINFO_DIMM_X8DDS:
c0dramw |= (0x0005) << 4*(i % 2);
break;
case SYSINFO_DIMM_NOT_POPULATED:
c0dramw |= (0x0000) << 4*(i % 2);
break;
}
}
switch (sysinfo->dimm[idx]) {
case SYSINFO_DIMM_X16DS:
c1dramw = 0x0000; break;
case SYSINFO_DIMM_X8DS:
c1dramw = 0x0010; break;
case SYSINFO_DIMM_X16SS:
c1dramw = 0x0000; break;
case SYSINFO_DIMM_X8DDS:
c1dramw = 0x0050; break;
case SYSINFO_DIMM_NOT_POPULATED:
c1dramw = 0x0000; break;
}
if (!sdram_capabilities_dual_channel()) {
/* Single Channel */
c0dramw |= c1dramw;
c1dramw = 0;
for (i = DIMM_SOCKETS; i < idx * DIMM_SOCKETS; i++) { /* Channel 1 */
switch (sysinfo->dimm[i]) {
case SYSINFO_DIMM_X16DS:
c1dramw |= (0x0000) << 4*(i % 2);
break;
case SYSINFO_DIMM_X8DS:
c1dramw |= (0x0001) << 4*(i % 2);
break;
case SYSINFO_DIMM_X16SS:
c1dramw |= (0x0000) << 4*(i % 2);
break;
case SYSINFO_DIMM_X8DDS:
c1dramw |= (0x0005) << 4*(i % 2);
break;
case SYSINFO_DIMM_NOT_POPULATED:
c1dramw |= (0x0000) << 4*(i % 2);
break;
}
}
MCHBAR16(C0DRAMW) = c0dramw;