nb/sandybridge: Add a kconfig option to ignore XMP max DIMMs

XMP profiles can have a restriction on max supported DIMMs per channel,
but many configurations work with more DIMMs.

This is relevant on mainboards with 2 DIMM slots per channel (usually 4
in total). Populating both slots with DIMMs that support XMP profiles only
with 1 DIMM per channel turns off said XMP profiles.

TEST=On a system with two DIMM slots per channel populate both slots on
one channel and ensure that DIMMs run with XMP profiles enabled.

Change-Id: I1f22d981afcef0ee73785823b0a943cf3d3564e3
Signed-off-by: Vagiz Trakhanov <rakkin@autistici.org>
Reviewed-on: https://review.coreboot.org/21841
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
This commit is contained in:
Vagiz Trakhanov 2017-10-02 10:02:35 +00:00 committed by Nico Huber
parent 15cb5be5b0
commit 771be480a6
2 changed files with 13 additions and 1 deletions

View File

@ -54,6 +54,15 @@ config NATIVE_RAMINIT_IGNORE_MAX_MEM_FUSES
Disabled by default as it might causes system instability. Disabled by default as it might causes system instability.
Handle with care! Handle with care!
config NATIVE_RAMINIT_IGNORE_XMP_MAX_DIMMS
bool "Ignore XMP profile max DIMMs per channel"
default n
depends on USE_NATIVE_RAMINIT
help
Ignore the max DIMMs per channel restriciton defined in XMP profiles.
Disabled by default as it might cause system instability.
Handle with care!
config CBFS_SIZE config CBFS_SIZE
hex hex
default 0x100000 default 0x100000

View File

@ -234,7 +234,10 @@ static void dram_find_spds_ddr3(spd_raw_data *spd, ramctr_timing *ctrl)
printram("XMP profile supports %u DIMMs, but %u DIMMs are installed.\n", printram("XMP profile supports %u DIMMs, but %u DIMMs are installed.\n",
dimm->dimm[channel][slot].dimms_per_channel, dimm->dimm[channel][slot].dimms_per_channel,
dimms_on_channel); dimms_on_channel);
spd_decode_ddr3(&dimm->dimm[channel][slot], spd[spd_slot]); if (IS_ENABLED(CONFIG_NATIVE_RAMINIT_IGNORE_XMP_MAX_DIMMS))
printk(BIOS_WARNING, "XMP maximum DIMMs will be ignored.\n");
else
spd_decode_ddr3(&dimm->dimm[channel][slot], spd[spd_slot]);
} else if (dimm->dimm[channel][slot].voltage != 1500) { } else if (dimm->dimm[channel][slot].voltage != 1500) {
/* TODO: support other DDR3 voltage than 1500mV */ /* TODO: support other DDR3 voltage than 1500mV */
printram("XMP profile's requested %u mV is unsupported.\n", printram("XMP profile's requested %u mV is unsupported.\n",