summaryrefslogtreecommitdiff
path: root/src/northbridge
diff options
context:
space:
mode:
authorVladimir Serbinenko <phcoder@gmail.com>2014-06-07 16:27:27 +0200
committerVladimir Serbinenko <phcoder@gmail.com>2014-07-19 16:00:50 +0200
commitb16f09238df063f3f829f34997aa8200af990acc (patch)
treeaefd73464d5d7e0bc8587eeb0c3c1bcb2cf742bb /src/northbridge
parent4af1245ea1b3504c28bfc27b351af3195141631f (diff)
nehalem: Move cbmem_recovery call to raminit.
Currently cbmem_recovery is done in raminit only on non-S3-resume path do it on both paths to reduce confusion. Change-Id: I16161ad449b9802a855fcf834aa721f4f65c0bb4 Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com> Reviewed-on: http://review.coreboot.org/5954 Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/northbridge')
-rw-r--r--src/northbridge/intel/nehalem/raminit.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/northbridge/intel/nehalem/raminit.c b/src/northbridge/intel/nehalem/raminit.c
index 6673b5a846..b1356c21b2 100644
--- a/src/northbridge/intel/nehalem/raminit.c
+++ b/src/northbridge/intel/nehalem/raminit.c
@@ -1715,7 +1715,6 @@ static void save_timings(struct raminfo *info)
printk (BIOS_SPEW, "[6e8] = %x\n", train.reg_6e8);
/* Save the MRC S3 restore data to cbmem */
- cbmem_recovery(0);
mrcdata = cbmem_add
(CBMEM_ID_MRCDATA, output_len + sizeof(struct mrc_data_container));
@@ -3869,6 +3868,7 @@ void raminit(const int s3resume, const u8 *spd_addrmap)
struct raminfo info;
u8 x2ca8;
u16 deven;
+ int cbmem_wasnot_inited;
x2ca8 = read_mchbar8(0x2ca8);
deven = pcie_read_config16(NORTHBRIDGE, D0F0_DEVEN);
@@ -4973,7 +4973,22 @@ void raminit(const int s3resume, const u8 *spd_addrmap)
#if REAL
udelay(1000);
dump_timings(&info);
+ cbmem_wasnot_inited = cbmem_recovery(s3resume);
+
if (!s3resume)
save_timings(&info);
+ if (s3resume && cbmem_wasnot_inited) {
+ u32 reg32;
+ printk(BIOS_ERR, "Failed S3 resume.\n");
+ ram_check(0x100000, 0x200000);
+
+ /* Clear SLP_TYPE. */
+ reg32 = inl(DEFAULT_PMBASE + 0x04);
+ outl(reg32 & ~(7 << 10), DEFAULT_PMBASE + 0x04);
+
+ /* Failed S3 resume, reset to come up cleanly */
+ outb(0xe, 0xcf9);
+ hlt();
+ }
#endif
}