From 771be480a67281022d92eed9f82367cf2d8efbdf Mon Sep 17 00:00:00 2001 From: Vagiz Trakhanov Date: Mon, 2 Oct 2017 10:02:35 +0000 Subject: [PATCH] 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 Reviewed-on: https://review.coreboot.org/21841 Tested-by: build bot (Jenkins) Reviewed-by: Nico Huber --- src/northbridge/intel/sandybridge/Kconfig | 9 +++++++++ src/northbridge/intel/sandybridge/raminit.c | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/northbridge/intel/sandybridge/Kconfig b/src/northbridge/intel/sandybridge/Kconfig index 1a47f0db7e..043e8dee79 100644 --- a/src/northbridge/intel/sandybridge/Kconfig +++ b/src/northbridge/intel/sandybridge/Kconfig @@ -54,6 +54,15 @@ config NATIVE_RAMINIT_IGNORE_MAX_MEM_FUSES Disabled by default as it might causes system instability. 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 hex default 0x100000 diff --git a/src/northbridge/intel/sandybridge/raminit.c b/src/northbridge/intel/sandybridge/raminit.c index bdba7489c0..12384b4cae 100644 --- a/src/northbridge/intel/sandybridge/raminit.c +++ b/src/northbridge/intel/sandybridge/raminit.c @@ -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", dimm->dimm[channel][slot].dimms_per_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) { /* TODO: support other DDR3 voltage than 1500mV */ printram("XMP profile's requested %u mV is unsupported.\n",