[coreboot-gerrit] New patch to review for coreboot: intel sandy/ivy: Skip SPD loading on S3 resume path

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Fri Nov 18 21:06:30 CET 2016


Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17490

-gerrit

commit f82ce58e2c874be31a322bb1682e8b14f20d1953
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Fri Nov 18 19:25:52 2016 +0200

    intel sandy/ivy: Skip SPD loading on S3 resume path
    
    For S3 resume path SPD is only used for DIMM replacement detection.
    As this detection already fails in the case of removal/insertion of
    same DIMM, we can rely on cbmem_recovery() failure alone to force
    system reset in case someone accidentally does DIMM replacements while
    system is suspend-to-ram stage.
    
    Skipping DIMM replacement detection allows skipping slow SPD loading,
    thus reducing S3 resume path time by 80ms for every installed DIMM.
    
    Change-Id: I4f2838c05f172d3cb351b027c9b8dd6543ab5944
    Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 src/northbridge/intel/sandybridge/raminit.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/src/northbridge/intel/sandybridge/raminit.c b/src/northbridge/intel/sandybridge/raminit.c
index 7580828..549942b 100644
--- a/src/northbridge/intel/sandybridge/raminit.c
+++ b/src/northbridge/intel/sandybridge/raminit.c
@@ -4218,22 +4218,21 @@ static void init_dram_ddr3(int mobile, int min_tck, int s3resume)
 		ctrl_cached = (ramctr_timing *)mrc_cache->mrc_data;
 	}
 
-	memset(spds, 0, sizeof(spds));
-	mainboard_get_spd(spds);
+
+	if (!s3resume) {
+		memset(spds, 0, sizeof(spds));
+		mainboard_get_spd(spds);
+	}
 
 	/* verify MRC cache for fast boot */
-	if (ctrl_cached) {
+	if (!s3resume && ctrl_cached) {
 		/* check SPD CRC16 to make sure the DIMMs haven't been replaced */
 		fast_boot = verify_crc16_spds_ddr3(spds, ctrl_cached);
 		if (!fast_boot)
 			printk(BIOS_DEBUG, "Stored timings CRC16 mismatch.\n");
-		if (!fast_boot && s3resume) {
-			/* Failed S3 resume, reset to come up cleanly */
-			outb(0x6, 0xcf9);
-			halt();
-		}
-	} else
-		fast_boot = 0;
+	} else {
+		fast_boot = s3resume;
+	}
 
 	if (fast_boot) {
 		printk(BIOS_DEBUG, "Trying stored timings.\n");



More information about the coreboot-gerrit mailing list