Hi,
The following function in freebios2/src/northbridge/amd/amdk8/raminit.c
is obviously wrong.
static int update_dimm_x4(const struct mem_controller *ctrl, const
struct mem_param *param, int i)
{
uint32_t dcl;
int value;
int dimm;
value = spd_read_byte(ctrl->channel0[i], 13);
if (value < 0) {
return -1;
}
dimm = i;
dimm += DCL_x4DIMM_SHIFT;
dcl = pci_read_config32(ctrl->f2, DRAM_CONFIG_LOW);
dcl &= ~(1 << dimm);
if (value == 4) {
dcl |= (1 << dimm);
}
pci_write_config32(ctrl->f2, DRAM_CONFIG_LOW, dcl);
return 1;
}
Especially the part that checks the Primary SDRAM Width for a value
of 4. The SPD roms I am using have the value 8 in there and memory
does not initialize correctly.
Checking (value == 4 || value == 8) or (value >= 0x4) helps, but I
have no idea whether that is correct. It appears that something else
has to be done. I've also seen RAMs with a value of 0x10.
Comments? Otherwise I am going to check (value >= 0x4) in somewhen next
week.
Stefan