From 08117c412c90be8647714721b7fe3109726f7ae1 Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Mon, 10 Apr 2017 01:11:21 -0700 Subject: google/eve: Limit memory SKU 5 to 1600MHz Due to issues with stability limit the SKU with K4EBE304EB-EGCF memory to 1600MHz instead of 1866MHz. BUG=b:37172778 BRANCH=none TEST=pass stress testing on devices with this memory Change-Id: I02af7e9c35e2c5b0b85223d58025cbd29841d973 Signed-off-by: Duncan Laurie Reviewed-on: https://review.coreboot.org/19227 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin --- src/mainboard/google/eve/romstage.c | 7 +++++++ src/mainboard/google/eve/spd/spd.c | 16 ++++++++++------ src/mainboard/google/eve/spd/spd.h | 1 + 3 files changed, 18 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/mainboard/google/eve/romstage.c b/src/mainboard/google/eve/romstage.c index 2378e9052d..cd8fa083a9 100644 --- a/src/mainboard/google/eve/romstage.c +++ b/src/mainboard/google/eve/romstage.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "spd/spd.h" void mainboard_memory_init_params(FSPM_UPD *mupd) @@ -46,4 +47,10 @@ void mainboard_memory_init_params(FSPM_UPD *mupd) mem_cfg->MemorySpdPtr00 = mainboard_get_spd_data(); mem_cfg->MemorySpdPtr10 = mem_cfg->MemorySpdPtr00; mem_cfg->MemorySpdDataLen = SPD_LEN; + + /* Limit K4EBE304EB-EGCF memory to 1600MHz for stability */ + if (mainboard_get_spd_index() == 5) { + printk(BIOS_WARNING, "Limiting memory to 1600MHz\n"); + mem_cfg->DdrFreqLimit = 1600; + } } diff --git a/src/mainboard/google/eve/spd/spd.c b/src/mainboard/google/eve/spd/spd.c index bac510729e..2f365a7b5c 100644 --- a/src/mainboard/google/eve/spd/spd.c +++ b/src/mainboard/google/eve/spd/spd.c @@ -77,20 +77,24 @@ static void mainboard_print_spd_info(uint8_t spd[]) } } -uintptr_t mainboard_get_spd_data(void) +int mainboard_get_spd_index(void) { - char *spd_file; - size_t spd_file_len; - int spd_index; - gpio_t spd_gpios[] = { GPIO_MEM_CONFIG_0, GPIO_MEM_CONFIG_1, GPIO_MEM_CONFIG_2, GPIO_MEM_CONFIG_3, }; + return gpio_base2_value(spd_gpios, ARRAY_SIZE(spd_gpios)); +} + +uintptr_t mainboard_get_spd_data(void) +{ + char *spd_file; + size_t spd_file_len; + int spd_index; - spd_index = gpio_base2_value(spd_gpios, ARRAY_SIZE(spd_gpios)); + spd_index = mainboard_get_spd_index(); printk(BIOS_INFO, "SPD index %d\n", spd_index); /* Load SPD data from CBFS */ diff --git a/src/mainboard/google/eve/spd/spd.h b/src/mainboard/google/eve/spd/spd.h index 9c2b26bb12..6d8d0a615c 100644 --- a/src/mainboard/google/eve/spd/spd.h +++ b/src/mainboard/google/eve/spd/spd.h @@ -30,6 +30,7 @@ #define SPD_PART_LEN 18 #define SPD_MANU_OFF 148 +int mainboard_get_spd_index(void); uintptr_t mainboard_get_spd_data(void); #endif -- cgit v1.2.3