From f96f8281b82e57a76b869b4fd8515a5a13741674 Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Wed, 16 Nov 2016 18:06:50 +0100 Subject: [PATCH] UPSTREAM: nb/intel/sandybridge/raminit: Reset internal state on fallback attempts Some methods like discover_402x assume an clear state. Should fix fallback attempt raminit failures. BUG=None BRANCH=None TEST=None Signed-off-by: Patrick Rudolph Reviewed-on: https://review.coreboot.org/17471 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth Change-Id: I7a6fe044c17f5e0dbfa0e9b9d2aed0c3b6ae3972 Reviewed-on: https://chromium-review.googlesource.com/415086 Commit-Ready: Furquan Shaikh Tested-by: Furquan Shaikh Reviewed-by: Aaron Durbin --- src/northbridge/intel/sandybridge/raminit.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/northbridge/intel/sandybridge/raminit.c b/src/northbridge/intel/sandybridge/raminit.c index e8ad4169cc..7087035d9b 100644 --- a/src/northbridge/intel/sandybridge/raminit.c +++ b/src/northbridge/intel/sandybridge/raminit.c @@ -4225,8 +4225,6 @@ static void init_dram_ddr3(int mobile, int min_tck, int s3resume) halt(); } - memset(&ctrl, 0, sizeof(ctrl)); - early_pch_init_native(); early_thermal_init(); @@ -4275,6 +4273,8 @@ static void init_dram_ddr3(int mobile, int min_tck, int s3resume) } } if (!fast_boot) { + /* Reset internal state */ + memset(&ctrl, 0, sizeof(ctrl)); ctrl.mobile = mobile; ctrl.tCK = min_tck; @@ -4291,6 +4291,11 @@ static void init_dram_ddr3(int mobile, int min_tck, int s3resume) printk(BIOS_ERR, "RAM training failed, trying fallback.\n"); printram("Disable failing channel.\n"); + /* Reset internal state */ + memset(&ctrl, 0, sizeof(ctrl)); + ctrl.mobile = mobile; + ctrl.tCK = min_tck; + /* Reset DDR3 frequency */ dram_find_spds_ddr3(spds, &ctrl);