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 <dlaurie@chromium.org>
Reviewed-on: https://review.coreboot.org/19227
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Duncan Laurie 2017-04-10 01:11:21 -07:00
parent f170e71630
commit 08117c412c
3 changed files with 18 additions and 6 deletions

View File

@ -18,6 +18,7 @@
#include <stddef.h> #include <stddef.h>
#include <fsp/soc_binding.h> #include <fsp/soc_binding.h>
#include <soc/romstage.h> #include <soc/romstage.h>
#include <console/console.h>
#include "spd/spd.h" #include "spd/spd.h"
void mainboard_memory_init_params(FSPM_UPD *mupd) 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->MemorySpdPtr00 = mainboard_get_spd_data();
mem_cfg->MemorySpdPtr10 = mem_cfg->MemorySpdPtr00; mem_cfg->MemorySpdPtr10 = mem_cfg->MemorySpdPtr00;
mem_cfg->MemorySpdDataLen = SPD_LEN; 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;
}
} }

View File

@ -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_t spd_gpios[] = {
GPIO_MEM_CONFIG_0, GPIO_MEM_CONFIG_0,
GPIO_MEM_CONFIG_1, GPIO_MEM_CONFIG_1,
GPIO_MEM_CONFIG_2, GPIO_MEM_CONFIG_2,
GPIO_MEM_CONFIG_3, GPIO_MEM_CONFIG_3,
}; };
return gpio_base2_value(spd_gpios, ARRAY_SIZE(spd_gpios));
}
spd_index = 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 = mainboard_get_spd_index();
printk(BIOS_INFO, "SPD index %d\n", spd_index); printk(BIOS_INFO, "SPD index %d\n", spd_index);
/* Load SPD data from CBFS */ /* Load SPD data from CBFS */

View File

@ -30,6 +30,7 @@
#define SPD_PART_LEN 18 #define SPD_PART_LEN 18
#define SPD_MANU_OFF 148 #define SPD_MANU_OFF 148
int mainboard_get_spd_index(void);
uintptr_t mainboard_get_spd_data(void); uintptr_t mainboard_get_spd_data(void);
#endif #endif